diff --git a/bench/app/lift/README b/bench/app/lift/README old mode 100644 new mode 100755 diff --git a/bench/app/lift/changeLog.txt b/bench/app/lift/changeLog.txt old mode 100644 new mode 100755 diff --git a/bench/app/lift/lift.c b/bench/app/lift/lift.c old mode 100644 new mode 100755 diff --git a/bench/app/lift/liftlibcontrol.c b/bench/app/lift/liftlibcontrol.c old mode 100644 new mode 100755 index 5e49127670c36fbedaaf3086c25c694eda1b1347..f64cf2ae915f48376661873790304f5e58e47224 --- a/bench/app/lift/liftlibcontrol.c +++ b/bench/app/lift/liftlibcontrol.c @@ -2,7 +2,7 @@ #include "liftlibcontrol.h" /* Global variables */ -int lift_levelPos[16]; +int lift_levelPos[ 16 ]; int lift_one_level; /** @@ -80,23 +80,23 @@ void lift_ctrl_init() lift_loadPending = 0; lift_loadSensor = 0; i = 0; - lift_levelPos[i++] = 0; - lift_levelPos[i++] = 58; - lift_levelPos[i++] = 115; - lift_levelPos[i++] = 173; - lift_levelPos[i++] = 230; - lift_levelPos[i++] = 288; - lift_levelPos[i++] = 346; - lift_levelPos[i++] = 403; - lift_levelPos[i++] = 461; - lift_levelPos[i++] = 518; - lift_levelPos[i++] = 576; - lift_levelPos[i++] = 634; - lift_levelPos[i++] = 691; - lift_levelPos[i++] = 749; - lift_levelPos[i++] = 806; - lift_levelPos[i++] = 864; - lift_one_level = lift_levelPos[1]; + lift_levelPos[ i++ ] = 0; + lift_levelPos[ i++ ] = 58; + lift_levelPos[ i++ ] = 115; + lift_levelPos[ i++ ] = 173; + lift_levelPos[ i++ ] = 230; + lift_levelPos[ i++ ] = 288; + lift_levelPos[ i++ ] = 346; + lift_levelPos[ i++ ] = 403; + lift_levelPos[ i++ ] = 461; + lift_levelPos[ i++ ] = 518; + lift_levelPos[ i++ ] = 576; + lift_levelPos[ i++ ] = 634; + lift_levelPos[ i++ ] = 691; + lift_levelPos[ i++ ] = 749; + lift_levelPos[ i++ ] = 806; + lift_levelPos[ i++ ] = 864; + lift_one_level = lift_levelPos[ 1 ]; } void lift_ctrl_loop() @@ -104,13 +104,13 @@ void lift_ctrl_loop() if ( lift_cmd == lift_CMD_NONE ) lift_check_cmd(); else { - lift_do_impulse( lift_ctrl_io_in[lift_SENS_IMPULS], - lift_ctrl_io_out[lift_MOTOR_ON], - lift_ctrl_io_in[lift_SENS_BOTTOM] ); + lift_do_impulse( lift_ctrl_io_in[ lift_SENS_IMPULS ], + lift_ctrl_io_out[ lift_MOTOR_ON ], + lift_ctrl_io_in[ lift_SENS_BOTTOM ] ); lift_do_cmd(); } lift_check_level(); - lift_ctrl_io_led[13] = ( lift_dbgCnt & 0x80 ) != 0; + lift_ctrl_io_led[ 13 ] = ( lift_dbgCnt & 0x80 ) != 0; ++lift_dbgCnt; } @@ -122,32 +122,32 @@ void lift_check_level() if ( lift_cntValid ) { _Pragma( "loopbound min 14 max 14" ) for ( lift_level = 1; lift_level < 14; ++lift_level ) { - if ( lift_cnt < lift_levelPos[lift_level] - middle ) + if ( lift_cnt < lift_levelPos[ lift_level ] - middle ) break; } } else lift_level = 0; _Pragma( "loopbound min 14 max 14" ) for ( i = 0; i < 14; ++i ) - lift_ctrl_io_led[i] = ( i == lift_level - 1 ); + lift_ctrl_io_led[ i ] = ( i == lift_level - 1 ); } void lift_check_cmd() { if ( lift_loadPending ) { - if ( lift_ctrl_io_in[lift_SENS_BOTTOM] ) + if ( lift_ctrl_io_in[ lift_SENS_BOTTOM ] ) lift_cmd = lift_CMD_TOP; } else - if ( lift_ctrl_io_in[lift_GO_UP] ) { - if ( !lift_ctrl_io_in[lift_SENS_TOP] && lift_level != 14 ) + if ( lift_ctrl_io_in[ lift_GO_UP ] ) { + if ( !lift_ctrl_io_in[ lift_SENS_TOP ] && lift_level != 14 ) lift_cmd = lift_CMD_UP; } else - if ( lift_ctrl_io_in[lift_GO_DOWN] ) { - if ( !lift_ctrl_io_in[lift_SENS_BOTTOM] && lift_level != 1 ) + if ( lift_ctrl_io_in[ lift_GO_DOWN ] ) { + if ( !lift_ctrl_io_in[ lift_SENS_BOTTOM ] && lift_level != 1 ) lift_cmd = lift_CMD_DOWN; } else - if ( lift_ctrl_io_in[lift_GO_LOAD] ) { + if ( lift_ctrl_io_in[ lift_GO_LOAD ] ) { if ( lift_loadLevel != 0 && lift_level < lift_loadLevel ) lift_cmd = lift_CMD_TOP; else @@ -155,12 +155,12 @@ void lift_check_cmd() lift_loadPending = 1; lift_loadSensor = 0; } else - if ( lift_ctrl_io_in[lift_GO_TOP] ) { - if ( !lift_ctrl_io_in[lift_SENS_TOP] ) + if ( lift_ctrl_io_in[ lift_GO_TOP ] ) { + if ( !lift_ctrl_io_in[ lift_SENS_TOP ] ) lift_cmd = lift_CMD_TOP; } else - if ( lift_ctrl_io_in[lift_GO_BOTTOM] ) { - if ( !lift_ctrl_io_in[lift_SENS_BOTTOM] ) + if ( lift_ctrl_io_in[ lift_GO_BOTTOM ] ) { + if ( !lift_ctrl_io_in[ lift_SENS_BOTTOM ] ) lift_cmd = lift_CMD_BOTTOM; } if ( lift_cmd != lift_CMD_NONE ) @@ -198,12 +198,12 @@ void lift_do_cmd() lift_wait_for_motor_start(); else { run = lift_check_run(); - if ( lift_ctrl_io_out[lift_MOTOR_ON] && !run ) { + if ( lift_ctrl_io_out[ lift_MOTOR_ON ] && !run ) { /* motor stopped: */ lift_cmd = 99; lift_timImp = 50; } - lift_ctrl_io_out[lift_MOTOR_ON] = run; + lift_ctrl_io_out[ lift_MOTOR_ON ] = run; } } @@ -213,7 +213,7 @@ void lift_wait_for_motor_start() int newLevel = 0; --lift_timMotor; lift_directionUp = ( lift_cmd == lift_CMD_UP || lift_cmd == lift_CMD_TOP ); - lift_ctrl_io_out[lift_MOTOR_UP] = lift_directionUp; + lift_ctrl_io_out[ lift_MOTOR_UP ] = lift_directionUp; if ( !lift_cntValid ) { lift_cnt = 0; /* use relative counter */ if ( lift_cmd == lift_CMD_UP ) @@ -230,7 +230,7 @@ void lift_wait_for_motor_start() newLevel = lift_level - 1; --newLevel; /* lift_level is one based */ if ( newLevel >= 0 && newLevel < 14 ) - lift_endCnt = lift_levelPos[newLevel]; + lift_endCnt = lift_levelPos[ newLevel ]; } } @@ -238,21 +238,21 @@ void lift_wait_for_motor_start() int lift_check_run() { if ( lift_cmd == lift_CMD_UP ) { - if ( lift_cnt < lift_endCnt - 1 && !lift_ctrl_io_in[lift_SENS_TOP] ) + if ( lift_cnt < lift_endCnt - 1 && !lift_ctrl_io_in[ lift_SENS_TOP ] ) return 1; } else if ( lift_cmd == lift_CMD_DOWN ) { - if ( lift_cnt > lift_endCnt + 1 && !lift_ctrl_io_in[lift_SENS_BOTTOM] ) + if ( lift_cnt > lift_endCnt + 1 && !lift_ctrl_io_in[ lift_SENS_BOTTOM ] ) return 1; } else if ( lift_cmd == lift_CMD_TOP ) { - if ( lift_loadPending && lift_ctrl_io_in[lift_SENS_LOAD] ) { + if ( lift_loadPending && lift_ctrl_io_in[ lift_SENS_LOAD ] ) { /* we are at lift_load position */ lift_loadLevel = lift_level; lift_loadPending = 0; return 0; } - if ( !lift_ctrl_io_in[lift_SENS_TOP] ) + if ( !lift_ctrl_io_in[ lift_SENS_TOP ] ) return 1; /* safe fallback if lift_load sensor does not work */ lift_loadPending = 0; @@ -260,7 +260,7 @@ int lift_check_run() if ( lift_cmd == lift_CMD_BOTTOM ) { if ( lift_loadPending ) { if ( lift_loadSensor ) { - if ( !lift_ctrl_io_in[lift_SENS_LOAD] ) { + if ( !lift_ctrl_io_in[ lift_SENS_LOAD ] ) { lift_loadSensor = 0; /* we are at lift_load position */ lift_loadPending = 0; @@ -268,9 +268,9 @@ int lift_check_run() return 0; } } - lift_loadSensor = lift_ctrl_io_in[lift_SENS_LOAD]; + lift_loadSensor = lift_ctrl_io_in[ lift_SENS_LOAD ]; } - if ( !lift_ctrl_io_in[lift_SENS_BOTTOM] ) + if ( !lift_ctrl_io_in[ lift_SENS_BOTTOM ] ) return 1; } return 0; diff --git a/bench/app/lift/liftlibcontrol.h b/bench/app/lift/liftlibcontrol.h old mode 100644 new mode 100755 index 88b746dbd61b2c8b2850d6560946c440136eb8c4..e1955ddc2e01e0f709c9951b6a042b6f0d01bb25 --- a/bench/app/lift/liftlibcontrol.h +++ b/bench/app/lift/liftlibcontrol.h @@ -30,7 +30,7 @@ enum lift_Command { }; /* Global variables */ -extern int lift_levelPos[16]; +extern int lift_levelPos[ 16 ]; extern int lift_one_level; extern int lift_cntValid; extern int lift_cnt; diff --git a/bench/app/lift/liftlibio.c b/bench/app/lift/liftlibio.c old mode 100644 new mode 100755 index f61df2d01f91c4db7e93fa803c109e99606fadf6..37d1bf35954cb6fb9736c375eba3e6212ec92133 --- a/bench/app/lift/liftlibio.c +++ b/bench/app/lift/liftlibio.c @@ -1,10 +1,10 @@ #include "liftlibio.h" /* Global variables */ -int lift_ctrl_io_in[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -int lift_ctrl_io_out[4] = {0, 0, 0, 0}; -int lift_ctrl_io_analog[4] = {0, 0, 0, 0}; -int lift_ctrl_io_led[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +int lift_ctrl_io_in[ 10 ] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +int lift_ctrl_io_out[ 4 ] = {0, 0, 0, 0}; +int lift_ctrl_io_analog[ 4 ] = {0, 0, 0, 0}; +int lift_ctrl_io_led[ 16 ] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int lift_ctrl_dly1; int lift_ctrl_dly2; @@ -29,13 +29,13 @@ void lift_ctrl_set_vals() _Pragma( "loopbound min 4 max 4" ) for ( i = 4 - 1; i >= 0; --i ) { val <<= 1; - val |= lift_ctrl_io_out[i] ? 1 : 0; + val |= lift_ctrl_io_out[ i ] ? 1 : 0; } lift_simio_out = val; - _Pragma( "loopbound min 16 max 16" ) + _Pragma( "loopbound min 14 max 14" ) for ( i = 14 - 1; i >= 0; --i ) { val <<= 1; - val |= lift_ctrl_io_led[i] ? 1 : 0; + val |= lift_ctrl_io_led[ i ] ? 1 : 0; } lift_simio_led = val; lift_checksum += val; @@ -54,12 +54,12 @@ void lift_ctrl_get_vals() delays input value change by one period */ _Pragma( "loopbound min 10 max 10" ) for ( i = 0; i < 10; ++i ) { - lift_ctrl_io_in[i] = ( ( in0 & 1 ) + ( in1 & 1 ) + ( in2 & 1 ) ) > 1; + lift_ctrl_io_in[ i ] = ( ( in0 & 1 ) + ( in1 & 1 ) + ( in2 & 1 ) ) > 1; in0 >>= 1; in1 >>= 1; in2 >>= 1; } - lift_ctrl_io_analog[0] = lift_simio_adc1; - lift_ctrl_io_analog[1] = lift_simio_adc2; - lift_ctrl_io_analog[2] = lift_simio_adc3; + lift_ctrl_io_analog[ 0 ] = lift_simio_adc1; + lift_ctrl_io_analog[ 1 ] = lift_simio_adc2; + lift_ctrl_io_analog[ 2 ] = lift_simio_adc3; } diff --git a/bench/app/lift/liftlibio.h b/bench/app/lift/liftlibio.h old mode 100644 new mode 100755 index 1a67cfb58341e5474139e6fba87e8f3bc92bc8f2..a83b8eb9220ea5e608a9625140422b7dc167a08a --- a/bench/app/lift/liftlibio.h +++ b/bench/app/lift/liftlibio.h @@ -2,10 +2,10 @@ #define LIFTLIBIO_H /* Global variables */ -extern int lift_ctrl_io_in[10]; -extern int lift_ctrl_io_out[4]; -extern int lift_ctrl_io_analog[4]; -extern int lift_ctrl_io_led[16]; +extern int lift_ctrl_io_in[ 10 ]; +extern int lift_ctrl_io_out[ 4 ]; +extern int lift_ctrl_io_analog[ 4 ]; +extern int lift_ctrl_io_led[ 16 ]; extern int lift_ctrl_dly1, lift_ctrl_dly2; /* Simulated hardware */ diff --git a/bench/app/powerwindow/powerwindow.c b/bench/app/powerwindow/powerwindow.c index 92530f1681e0e203a3c6cc4c538cce84eb2b0edf..f51a5d20b1ff19d6c139a8ef14694516669ee95f 100644 --- a/bench/app/powerwindow/powerwindow.c +++ b/bench/app/powerwindow/powerwindow.c @@ -1,612 +1,745 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow - - Author: CoSys-Lab, University of Antwerp - - Function: powerwindow implement the powerwindow that can be seen in cars nowadays. - The window can be controlled by either driver or passenger. When an object is - detected between the window frame and the glass during the raising of the glass, - the glass will lower down for some distance. This benchmark contains 4 tasks which includes the - driver side powerwindow, front passenger side powerwindow, back-left passenger side powerwindow, - back-right passenger side powerwindow. These 4 tasks can be easily adjusted to execute in - sequential order parallel on single or muti core. - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow.c - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - -*/ - -#include "powerwindow_HeaderFiles/powerwindow.h" -#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front.h" -#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL.h" -#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR.h" -#include "powerwindow_HeaderFiles/powerwindow_PW_Control_DRV.h" -#include "powerwindow_HeaderFiles/powerwindow_debounce.h" -#include "powerwindow_HeaderFiles/powerwindow_controlexclusion.h" /* Control Model's header file */ -#include "powerwindow_HeaderFiles/powerwindow_model_reference_types.h" -#include "powerwindow_HeaderFiles/powerwindow_powerwindow_control.h" /* PW passenger control Model's header file */ -#include "powerwindow_HeaderFiles/powerwindow_rtwtypes.h" -#include "powerwindow_HeaderFiles/powerwindow_model_reference_types.h" -/* - Forward declaration of functions -*/ - - -void powerwindow_Booleaninputarray_initialize(powerwindow_boolean_T*, powerwindow_boolean_T*); -void powerwindow_Uint8inputarray_initialize(powerwindow_uint8_T*, powerwindow_uint8_T*); -void powerwindow_init(); -void powerwindow_main(); -int powerwindow_return(); -int main(void); - - - - -//DRV -void powerwindow_init_DRV(int); -void powerwindow_input_initialize_DRV(void); -void powerwindow_initialize_DRV(void); -void powerwindow_return_DRV(void); -void powerwindow_DRV_main(void); - -// PSG_Front -void powerwindow_init_PSG_Front(int); -void powerwindow_input_initialize_PSG_Front(void); -void powerwindow_initialize_PSG_Front(void); -void powerwindow_return_PSG_Front(void); -void powerwindow_PSG_Front_main(void); - -// PSG_BackL -void powerwindow_init_PSG_BackL(int); -void powerwindow_input_initialize_PSG_BackL(void); -void powerwindow_initialize_PSG_BackL(void); -void powerwindow_return_PSG_BackL(void); -void powerwindow_PSG_BackL_main(void); - -// PSG_BackR -void powerwindow_init_PSG_BackR(int); -void powerwindow_input_initialize_PSG_BackR(void); -void powerwindow_initialize_PSG_BackR(void); -void powerwindow_return_PSG_BackR(void); -void powerwindow_PSG_BackR_main(void); - - - -/* - Declaration of global variables -*/ - -/* External inputs (root inport signals with auto storage) */ - -extern powerwindow_ExternalInputs_powerwindow_PW_C powerwindow_PW_Control_DRV_U; -extern powerwindow_ExternalOutputs_powerwindow_PW_ powerwindow_PW_Control_DRV_Y; -extern powerwindow_ExternalInputs_PW_Control_PSG_Front powerwindow_PW_Control_PSG_Front_U; -extern powerwindow_ExternalInputs_PW_Control_PSG_BackL powerwindow_PW_Control_PSG_BackL_U; -extern powerwindow_ExternalInputs_PW_Control_PSG_BackR powerwindow_PW_Control_PSG_BackR_U; - - - -powerwindow_boolean_T powerwindow_debounce_Driver_DRV_U_Up_Input_DRV[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_debounce_Driver_DRV_U_Down_Input_DRV[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_debounce_Driver_Front_U_Up_Input_Front[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_debounce_Driver_Front_U_Down_Input_Front[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_debounce_Driver_BackL_U_Up_Input_BackL[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_debounce_Driver_BackL_U_Down_Input_BackL[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_debounce_Driver_BackR_U_Up_Input_BackR[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_debounce_Driver_BackR_U_Down_Input_BackR[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_powerwindow_control_U_endofdetectionrange_Input_DRV[powerwindow_input_length]; -powerwindow_uint8_T powerwindow_powerwindow_control_U_currentsense_Input_DRV[powerwindow_input_length]; - - -extern powerwindow_boolean_T powerwindow_debounce_Driver_DRV_U_Up_Input_DRV_Array[powerwindow_input_length]; -extern powerwindow_boolean_T powerwindow_debounce_Driver_DRV_U_Down_Input_DRV_Array[powerwindow_input_length]; -extern powerwindow_boolean_T powerwindow_debounce_Driver_Front_U_Up_Input_Front_Array[powerwindow_input_length]; -extern powerwindow_boolean_T powerwindow_debounce_Driver_Front_U_Down_Input_Front_Array[powerwindow_input_length]; -extern powerwindow_boolean_T powerwindow_debounce_Driver_BackL_U_Up_Input_BackL_Array[powerwindow_input_length]; -extern powerwindow_boolean_T powerwindow_debounce_Driver_BackL_U_Down_Input_BackL_Array[powerwindow_input_length]; -extern powerwindow_boolean_T powerwindow_debounce_Driver_BackR_U_Up_Input_BackR_Array[powerwindow_input_length]; -extern powerwindow_boolean_T powerwindow_debounce_Driver_BackR_U_Down_Input_BackR_Array[powerwindow_input_length]; -extern powerwindow_boolean_T powerwindow_powerwindow_control_U_endofdetectionrange_DRV_Array[powerwindow_input_length]; -extern powerwindow_uint8_T powerwindow_powerwindow_control_U_currentsense_DRV_Array[powerwindow_input_length]; - -powerwindow_boolean_T powerwindow_controlexclusion_U_Up_DRV_Input_Front[powerwindow_input_length]; /* Here applied a push-down button, the signal is high when the button is not pressed. */ -powerwindow_boolean_T powerwindow_controlexclusion_U_Down_DRV_Input_Front[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_debounce_passenger_Front_U_Up_Input_Front[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_debounce_passenger_Front_U_Down_Input_Front[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_powerwindow_control_U_endofdetectionrange_Input_Front[powerwindow_input_length]; -powerwindow_uint8_T powerwindow_powerwindow_control_U_currentsense_Input_Front[powerwindow_input_length]; - -extern powerwindow_boolean_T powerwindow_debounce_passenger_Front_U_Up_Front_Array[powerwindow_input_length]; /* Here applied a push-down button, the signal is high when the button is not pressed. */ -extern powerwindow_boolean_T powerwindow_debounce_passenger_Front_U_Down_Front_Array[powerwindow_input_length]; -extern powerwindow_boolean_T powerwindow_powerwindow_control_U_endofdetectionrange_Front_Array[powerwindow_input_length]; -extern powerwindow_uint8_T powerwindow_powerwindow_control_U_currentsense_Front_Array[powerwindow_input_length]; - -powerwindow_boolean_T powerwindow_controlexclusion_U_Up_DRV_Input_BackL[powerwindow_input_length]; /* Here applied a push-down button, the signal is high when the button is not pressed. */ -powerwindow_boolean_T powerwindow_controlexclusion_U_Down_DRV_Input_BackL[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_debounce_passenger_BackL_U_Up_Input_BackL[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_debounce_passenger_BackL_U_Down_Input_BackL[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_powerwindow_control_U_endofdetectionrange_Input_BackL[powerwindow_input_length]; -powerwindow_uint8_T powerwindow_powerwindow_control_U_currentsense_Input_BackL[powerwindow_input_length]; - -extern powerwindow_boolean_T powerwindow_debounce_passenger_BackL_U_Up_BackL_Array[powerwindow_input_length]; /* Here applied a push-down button, the signal is high when the button is not pressed. */ -extern powerwindow_boolean_T powerwindow_debounce_passenger_BackL_U_Down_BackL_Array[powerwindow_input_length]; -extern powerwindow_boolean_T powerwindow_powerwindow_control_U_endofdetectionrange_BackL_Array[powerwindow_input_length]; -extern powerwindow_uint8_T powerwindow_powerwindow_control_U_currentsense_BackL_Array[powerwindow_input_length]; - -powerwindow_boolean_T powerwindow_controlexclusion_U_Up_DRV_Input_BackR[powerwindow_input_length]; /* Here applied a push-down button, the signal is high when the button is not pressed. */ -powerwindow_boolean_T powerwindow_controlexclusion_U_Down_DRV_Input_BackR[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_debounce_passenger_BackR_U_Up_Input_BackR[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_debounce_passenger_BackR_U_Down_Input_BackR[powerwindow_input_length]; -powerwindow_boolean_T powerwindow_powerwindow_control_U_endofdetectionrange_Input_BackR[powerwindow_input_length]; -powerwindow_uint8_T powerwindow_powerwindow_control_U_currentsense_Input_BackR[powerwindow_input_length]; - -extern powerwindow_boolean_T powerwindow_debounce_passenger_BackR_U_Up_BackR_Array[powerwindow_input_length]; /* Here applied a push-down button, the signal is high when the button is not pressed. */ -extern powerwindow_boolean_T powerwindow_debounce_passenger_BackR_U_Down_BackR_Array[powerwindow_input_length]; -extern powerwindow_boolean_T powerwindow_powerwindow_control_U_endofdetectionrange_BackR_Array[powerwindow_input_length]; -extern powerwindow_uint8_T powerwindow_powerwindow_control_U_currentsense_BackR_Array[powerwindow_input_length]; - -int powerwindow_main_inputcyclecounter; - -/* - Initialization- and return-value-related functions -*/ -void powerwindow_init_DRV(int i) -{ - powerwindow_PW_Control_DRV_U.In1 = powerwindow_powerwindow_control_U_endofdetectionrange_Input_DRV[i]; /* The when the window reaches the end of the range, the endofdetectionrange changes to 0. */ - powerwindow_PW_Control_DRV_U.In3 = powerwindow_powerwindow_control_U_currentsense_Input_DRV[i]; /* When the currentsense is higher than 92 (based on experiments), one object is stuck between the window and the frame. Pinch is set to True.*/ - - powerwindow_PW_Control_DRV_U.In2 = powerwindow_debounce_Driver_DRV_U_Up_Input_DRV[i]; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ - powerwindow_PW_Control_DRV_U.In4 = powerwindow_debounce_Driver_DRV_U_Down_Input_DRV[i]; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ - - powerwindow_PW_Control_DRV_U.In5 = powerwindow_debounce_Driver_Front_U_Up_Input_Front[i]; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ - powerwindow_PW_Control_DRV_U.In6 = powerwindow_debounce_Driver_Front_U_Down_Input_Front[i]; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ - - powerwindow_PW_Control_DRV_U.In9 = powerwindow_debounce_Driver_BackL_U_Up_Input_BackL[i]; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ - powerwindow_PW_Control_DRV_U.In10 = powerwindow_debounce_Driver_BackL_U_Down_Input_BackL[i]; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ - - powerwindow_PW_Control_DRV_U.In7 = powerwindow_debounce_Driver_BackR_U_Up_Input_BackR[i]; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ - powerwindow_PW_Control_DRV_U.In8 = powerwindow_debounce_Driver_BackR_U_Down_Input_BackR[i]; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ - -} - -void powerwindow_init_PSG_Front(int i) -{ - - - powerwindow_PW_Control_PSG_Front_U.Up_DRV = powerwindow_PW_Control_DRV_Y.Out6; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ - powerwindow_PW_Control_PSG_Front_U.Down_DRV = powerwindow_PW_Control_DRV_Y.Out7; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lower the window. */ - - powerwindow_PW_Control_PSG_Front_U.Up_PSG_Front = powerwindow_debounce_passenger_Front_U_Up_Input_Front[i]; - powerwindow_PW_Control_PSG_Front_U.Down_PSG_Front = powerwindow_debounce_passenger_Front_U_Down_Input_Front[i]; /* '<Root>/Down'. Here applied a push-down button, the signal is high when the button is not pressed. Change to 0 to lower the window. */ - - powerwindow_PW_Control_PSG_Front_U.endofdetectionrange = powerwindow_powerwindow_control_U_endofdetectionrange_Input_Front[i]; /* The when the window reaches the end of the range, the endofdetectionrange changes to 0. */ - - powerwindow_PW_Control_PSG_Front_U.currentsense = powerwindow_powerwindow_control_U_currentsense_Input_Front[i]; /* When the currentsense is higher than 92 (based on experiments), one object is stuck between the window and the frame. Pinch is set to True.*/ - -} - -void powerwindow_init_PSG_BackL(int i) -{ - - - powerwindow_PW_Control_PSG_BackL_U.Up_DRV = powerwindow_PW_Control_DRV_Y.Out10; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ - powerwindow_PW_Control_PSG_BackL_U.Down_DRV = powerwindow_PW_Control_DRV_Y.Out11; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lower the window. */ - - powerwindow_PW_Control_PSG_BackL_U.Up_PSG_BackL = powerwindow_debounce_passenger_BackL_U_Up_Input_BackL[i]; - powerwindow_PW_Control_PSG_BackL_U.Down_PSG_BackL = powerwindow_debounce_passenger_BackL_U_Down_Input_BackL[i]; /* '<Root>/Down'. Here applied a push-down button, the signal is high when the button is not pressed. Change to 0 to lower the window. */ - - powerwindow_PW_Control_PSG_BackL_U.endofdetectionrange = powerwindow_powerwindow_control_U_endofdetectionrange_Input_BackL[i]; /* The when the window reaches the end of the range, the endofdetectionrange changes to 0. */ - - powerwindow_PW_Control_PSG_BackL_U.currentsense = powerwindow_powerwindow_control_U_currentsense_Input_BackL[i]; /* When the currentsense is higher than 92 (based on experiments), one object is stuck between the window and the frame. Pinch is set to True.*/ - -} - -void powerwindow_init_PSG_BackR(int i) -{ - - - powerwindow_PW_Control_PSG_BackR_U.Up_DRV = powerwindow_PW_Control_DRV_Y.Out8; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ - powerwindow_PW_Control_PSG_BackR_U.Down_DRV = powerwindow_PW_Control_DRV_Y.Out9; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lower the window. */ - - powerwindow_PW_Control_PSG_BackR_U.Up_PSG_BackR = powerwindow_debounce_passenger_BackR_U_Up_Input_BackR[i]; - powerwindow_PW_Control_PSG_BackR_U.Down_PSG_BackR = powerwindow_debounce_passenger_BackR_U_Down_Input_BackR[i]; /* '<Root>/Down'. Here applied a push-down button, the signal is high when the button is not pressed. Change to 0 to lower the window. */ - - powerwindow_PW_Control_PSG_BackR_U.endofdetectionrange = powerwindow_powerwindow_control_U_endofdetectionrange_Input_BackR[i]; /* The when the window reaches the end of the range, the endofdetectionrange changes to 0. */ - - powerwindow_PW_Control_PSG_BackR_U.currentsense = powerwindow_powerwindow_control_U_currentsense_Input_BackR[i]; /* When the currentsense is higher than 92 (based on experiments), one object is stuck between the window and the frame. Pinch is set to True.*/ - -} - -void powerwindow_input_initialize_DRV(void) -{ - - powerwindow_Booleaninputarray_initialize(powerwindow_debounce_Driver_DRV_U_Up_Input_DRV,powerwindow_debounce_Driver_DRV_U_Up_Input_DRV_Array); - powerwindow_Booleaninputarray_initialize(powerwindow_debounce_Driver_DRV_U_Down_Input_DRV,powerwindow_debounce_Driver_DRV_U_Down_Input_DRV_Array); - powerwindow_Booleaninputarray_initialize(powerwindow_debounce_Driver_Front_U_Up_Input_Front,powerwindow_debounce_Driver_Front_U_Up_Input_Front_Array); - powerwindow_Booleaninputarray_initialize(powerwindow_debounce_Driver_Front_U_Down_Input_Front,powerwindow_debounce_Driver_Front_U_Down_Input_Front_Array); - powerwindow_Booleaninputarray_initialize(powerwindow_debounce_Driver_BackL_U_Up_Input_BackL,powerwindow_debounce_Driver_BackL_U_Up_Input_BackL_Array); - powerwindow_Booleaninputarray_initialize(powerwindow_debounce_Driver_BackL_U_Down_Input_BackL,powerwindow_debounce_Driver_BackL_U_Down_Input_BackL_Array); - powerwindow_Booleaninputarray_initialize(powerwindow_debounce_Driver_BackL_U_Down_Input_BackL,powerwindow_debounce_Driver_BackR_U_Up_Input_BackR_Array); - powerwindow_Booleaninputarray_initialize(powerwindow_debounce_Driver_BackR_U_Down_Input_BackR,powerwindow_debounce_Driver_BackR_U_Down_Input_BackR_Array); - powerwindow_Booleaninputarray_initialize(powerwindow_powerwindow_control_U_endofdetectionrange_Input_DRV,powerwindow_powerwindow_control_U_endofdetectionrange_DRV_Array); - powerwindow_Uint8inputarray_initialize(powerwindow_powerwindow_control_U_currentsense_DRV_Array,powerwindow_powerwindow_control_U_currentsense_DRV_Array); - -} - - - -void powerwindow_input_initialize_PSG_Front(void) -{ - - powerwindow_Booleaninputarray_initialize(powerwindow_debounce_passenger_Front_U_Up_Input_Front, powerwindow_debounce_passenger_Front_U_Up_Front_Array); - - powerwindow_Booleaninputarray_initialize(powerwindow_debounce_passenger_Front_U_Down_Input_Front,powerwindow_debounce_passenger_Front_U_Down_Front_Array); - - powerwindow_Booleaninputarray_initialize(powerwindow_powerwindow_control_U_endofdetectionrange_Input_Front, powerwindow_powerwindow_control_U_endofdetectionrange_Front_Array); - - powerwindow_Uint8inputarray_initialize(powerwindow_powerwindow_control_U_currentsense_Input_Front,powerwindow_powerwindow_control_U_currentsense_Front_Array); - -} - - -void powerwindow_input_initialize_PSG_BackL(void) -{ - - powerwindow_Booleaninputarray_initialize(powerwindow_debounce_passenger_BackL_U_Up_Input_BackL, powerwindow_debounce_passenger_BackL_U_Up_BackL_Array); - - powerwindow_Booleaninputarray_initialize(powerwindow_debounce_passenger_BackL_U_Down_Input_BackL,powerwindow_debounce_passenger_BackL_U_Down_BackL_Array); - - powerwindow_Booleaninputarray_initialize(powerwindow_powerwindow_control_U_endofdetectionrange_Input_BackL, powerwindow_powerwindow_control_U_endofdetectionrange_BackL_Array); - - powerwindow_Uint8inputarray_initialize(powerwindow_powerwindow_control_U_currentsense_Input_BackL,powerwindow_powerwindow_control_U_currentsense_BackL_Array); - -} - -void powerwindow_input_initialize_PSG_BackR(void) -{ - powerwindow_Booleaninputarray_initialize(powerwindow_debounce_passenger_BackR_U_Up_Input_BackR, powerwindow_debounce_passenger_BackR_U_Up_BackR_Array); - - powerwindow_Booleaninputarray_initialize(powerwindow_debounce_passenger_BackR_U_Down_Input_BackR,powerwindow_debounce_passenger_BackR_U_Down_BackR_Array); - - powerwindow_Booleaninputarray_initialize(powerwindow_powerwindow_control_U_endofdetectionrange_Input_BackR, powerwindow_powerwindow_control_U_endofdetectionrange_BackR_Array); - - powerwindow_Uint8inputarray_initialize(powerwindow_powerwindow_control_U_currentsense_Input_BackR,powerwindow_powerwindow_control_U_currentsense_BackR_Array); - -} - -void powerwindow_Booleaninputarray_initialize(powerwindow_boolean_T* arrayA, powerwindow_boolean_T* arrayB) -{ - - register int i; -// _Pragma( "loopbound min powerwindow_input_length max powerwindow_input_length" ) - for ( i = 0; i < powerwindow_input_length; i++ ) - arrayA[i] = arrayB[i]; -} - -void powerwindow_Uint8inputarray_initialize(powerwindow_uint8_T* arrayA, powerwindow_uint8_T* arrayB) -{ - - register int i; -// _Pragma( "loopbound min powerwindow_input_length max powerwindow_input_length" ) - for ( i = 0; i < powerwindow_input_length; i++ ) - arrayA[i] = arrayB[i]; -} - -void powerwindow_initialize_DRV(void) -{ - /* Initialize model */ - powerwindow_PW_Control_DRV_initialize(); - -} - -void powerwindow_initialize_PSG_Front(void) -{ - /* Initialize model */ - powerwindow_PW_Control_PSG_Front_initialize(); - -} - -void powerwindow_initialize_PSG_BackL(void) -{ - /* Initialize model */ - powerwindow_PW_Control_PSG_BackL_initialize(); - -} - -void powerwindow_initialize_PSG_BackR(void) -{ - /* Initialize model */ - powerwindow_PW_Control_PSG_BackR_initialize(); - -} - - -void powerwindow_return_DRV(void) -{ - /* Terminate model */ - powerwindow_PW_Control_DRV_terminate(); - -} - -void powerwindow_return_PSG_Front(void) -{ - /* Terminate model */ - powerwindow_PW_Control_PSG_Front_terminate(); - -} - -void powerwindow_return_PSG_BackL(void) -{ - /* Terminate model */ - powerwindow_PW_Control_PSG_BackL_terminate(); - -} - -void powerwindow_return_PSG_BackR(void) -{ - /* Terminate model */ - powerwindow_PW_Control_PSG_BackR_terminate(); - -} - -/* - Main functions -*/ - -/* - * Associating powerwindow_main with a real-time clock or interrupt service routine - * is what makes the generated code "real-time". The function powerwindow_main is - * always associated with the base rate of the model. Subrates are managed - * by the base rate from inside the generated code. Enabling/disabling - * interrupts and floating point context switches are target specific. This - * example code indicates where these should take place relative to executing - * the generated code step function. Overrun behavior should be tailored to - * your application needs. This example simply sets an error status in the - * real-time model and returns from powerwindow_main. - */ - - -void powerwindow_DRV_main(void) -{ - - static powerwindow_boolean_T OverrunFlag = 0; - - /* Disable interrupts here */ - - /* Check for overrun */ - if (OverrunFlag) { - powerwindow_PW_DRV_rtmSetErrorStatus(powerwindow_PW_Control_DRV_M, "Overrun"); ////////// - - return; - } - - - OverrunFlag = true; - - /* Save FPU context here (if necessary) */ - /* Re-enable timer or interrupt here */ - /* Set model inputs here */ - - - powerwindow_PW_Control_DRV_main(); - - /* Get model outputs here */ - - - /* Indicate task complete */ - OverrunFlag = false; - - /* Disable interrupts here */ - /* Restore FPU context here (if necessary) */ - /* Enable interrupts here */ - -} - -/* - * The example "main" function illustrates what is required by your - * application code to initialize, execute, and terminate the generated code. - * Attaching powerwindow_main to a real-time clock is target specific. This example - * illustates how you do this relative to initializing the model. - */ - -void powerwindow_PSG_Front_main(void) -{ - - static powerwindow_boolean_T OverrunFlag = 0; - - /* Disable interrupts here */ - - /* Check for overrun */ - if (OverrunFlag) { - powerwindow_PW_PSG_Front_rtmSetErrorStatus(powerwindow_PW_Control_PSG_Front_M, "Overrun"); - - return; - } - - - OverrunFlag = true; - - /* Save FPU context here (if necessary) */ - /* Re-enable timer or interrupt here */ - /* Set model inputs here */ - - - powerwindow_PW_Control_PSG_Front_main(); - - /* Get model outputs here */ - - - /* Indicate task complete */ - OverrunFlag = false; - - /* Disable interrupts here */ - /* Restore FPU context here (if necessary) */ - /* Enable interrupts here */ - -} - -void powerwindow_PSG_BackL_main(void) -{ - - static powerwindow_boolean_T OverrunFlag = 0; - - /* Disable interrupts here */ - - /* Check for overrun */ - if (OverrunFlag) { - powerwindow_PW_PSG_BackL_rtmSetErrorStatus(powerwindow_PW_Control_PSG_BackL_M, "Overrun"); - - return; - } - - - OverrunFlag = true; - - /* Save FPU context here (if necessary) */ - /* Re-enable timer or interrupt here */ - /* Set model inputs here */ - - - powerwindow_PW_Control_PSG_BackL_main(); - - /* Get model outputs here */ - - - /* Indicate task complete */ - OverrunFlag = false; - - /* Disable interrupts here */ - /* Restore FPU context here (if necessary) */ - /* Enable interrupts here */ - -} - -void powerwindow_PSG_BackR_main(void) -{ - - static powerwindow_boolean_T OverrunFlag = 0; - - /* Disable interrupts here */ - - /* Check for overrun */ - if (OverrunFlag) { - powerwindow_PW_PSG_BackR_rtmSetErrorStatus(powerwindow_PW_Control_PSG_BackR_M, "Overrun"); - - return; - } - - - OverrunFlag = true; - - /* Save FPU context here (if necessary) */ - /* Re-enable timer or interrupt here */ - /* Set model inputs here */ - - - powerwindow_PW_Control_PSG_BackR_main(); - - /* Get model outputs here */ - - - /* Indicate task complete */ - OverrunFlag = false; - - /* Disable interrupts here */ - /* Restore FPU context here (if necessary) */ - /* Enable interrupts here */ - -} - -void powerwindow_init(void) -{ - powerwindow_initialize_DRV(); - powerwindow_initialize_PSG_Front(); - powerwindow_initialize_PSG_BackL(); - powerwindow_initialize_PSG_BackR(); - powerwindow_main_inputcyclecounter=0; - -} - -void _Pragma( "entrypoint" ) powerwindow_main(void) -{ - /* Attach powerwindow_main to a timer or interrupt service routine with - * period 0.005 seconds (the model's base sample time) here. The - * call syntax for powerwindow_main is - * - * powerwindow_main(); - */ - //Task 1: Driver side window - - - powerwindow_input_initialize_DRV(); - powerwindow_input_initialize_PSG_Front(); - powerwindow_input_initialize_PSG_BackL(); - powerwindow_input_initialize_PSG_BackR(); - - while(powerwindow_main_inputcyclecounter<powerwindow_input_length) - { - - powerwindow_init_DRV(powerwindow_main_inputcyclecounter); - powerwindow_DRV_main(); - - - //Task 2: Front passenger side window - - - powerwindow_init_PSG_Front(powerwindow_main_inputcyclecounter); - powerwindow_PSG_Front_main(); - - - //Task 3: Back left passenger side window - - - powerwindow_init_PSG_BackL(powerwindow_main_inputcyclecounter); - powerwindow_PSG_BackL_main(); - - - //Task 4: Back right passenger side window - - - powerwindow_init_PSG_BackR(powerwindow_main_inputcyclecounter); - powerwindow_PSG_BackR_main(); - - - powerwindow_main_inputcyclecounter++; - } - - -} - -int powerwindow_return(void) -{ - powerwindow_return_DRV(); - powerwindow_return_PSG_Front(); - powerwindow_return_PSG_BackL(); - powerwindow_return_PSG_BackR(); - - return 0; -} - - -int main(void){ - powerwindow_init(); - powerwindow_main(); - return powerwindow_return(); -} - - -/* - * File trailer for generated code. - * - * [EOF] - */ - - - +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow + + Author: CoSys-Lab, University of Antwerp + + Function: powerwindow implement the powerwindow that can be seen in cars nowadays. + The window can be controlled by either driver or passenger. When an object is + detected between the window frame and the glass during the raising of the glass, + the glass will lower down for some distance. This benchmark contains 4 tasks which includes the + driver side powerwindow, front passenger side powerwindow, back-left passenger side powerwindow, + back-right passenger side powerwindow. These 4 tasks can be easily adjusted to execute in + sequential order parallel on single or muti core. + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow.c + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#include "powerwindow_HeaderFiles/powerwindow.h" +#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front.h" +#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL.h" +#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR.h" +#include "powerwindow_HeaderFiles/powerwindow_PW_Control_DRV.h" +#include "powerwindow_HeaderFiles/powerwindow_debounce.h" +#include "powerwindow_HeaderFiles/powerwindow_controlexclusion.h" /* Control Model's header file */ +#include "powerwindow_HeaderFiles/powerwindow_model_reference_types.h" +#include "powerwindow_HeaderFiles/powerwindow_powerwindow_control.h" /* PW passenger control Model's header file */ +#include "powerwindow_HeaderFiles/powerwindow_rtwtypes.h" +#include "powerwindow_HeaderFiles/powerwindow_model_reference_types.h" +/* + Forward declaration of functions +*/ + + +void powerwindow_Booleaninputarray_initialize( powerwindow_boolean_T *, + powerwindow_boolean_T * ); +void powerwindow_Uint8inputarray_initialize( powerwindow_uint8_T *, + powerwindow_uint8_T * ); +void powerwindow_init(); +void powerwindow_main(); +int powerwindow_return(); +int main( void ); + + + + +//DRV +void powerwindow_init_DRV( int ); +void powerwindow_input_initialize_DRV( void ); +void powerwindow_initialize_DRV( void ); +void powerwindow_return_DRV( void ); +void powerwindow_DRV_main( void ); + +// PSG_Front +void powerwindow_init_PSG_Front( int ); +void powerwindow_input_initialize_PSG_Front( void ); +void powerwindow_initialize_PSG_Front( void ); +void powerwindow_return_PSG_Front( void ); +void powerwindow_PSG_Front_main( void ); + +// PSG_BackL +void powerwindow_init_PSG_BackL( int ); +void powerwindow_input_initialize_PSG_BackL( void ); +void powerwindow_initialize_PSG_BackL( void ); +void powerwindow_return_PSG_BackL( void ); +void powerwindow_PSG_BackL_main( void ); + +// PSG_BackR +void powerwindow_init_PSG_BackR( int ); +void powerwindow_input_initialize_PSG_BackR( void ); +void powerwindow_initialize_PSG_BackR( void ); +void powerwindow_return_PSG_BackR( void ); +void powerwindow_PSG_BackR_main( void ); + + + +/* + Declaration of global variables +*/ + +/* External inputs (root inport signals with auto storage) */ + +extern powerwindow_ExternalInputs_powerwindow_PW_C powerwindow_PW_Control_DRV_U; +extern powerwindow_ExternalOutputs_powerwindow_PW_ powerwindow_PW_Control_DRV_Y; +extern powerwindow_ExternalInputs_PW_Control_PSG_Front +powerwindow_PW_Control_PSG_Front_U; +extern powerwindow_ExternalInputs_PW_Control_PSG_BackL +powerwindow_PW_Control_PSG_BackL_U; +extern powerwindow_ExternalInputs_PW_Control_PSG_BackR +powerwindow_PW_Control_PSG_BackR_U; + + + +powerwindow_boolean_T +powerwindow_debounce_Driver_DRV_U_Up_Input_DRV[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_debounce_Driver_DRV_U_Down_Input_DRV[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_debounce_Driver_Front_U_Up_Input_Front[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_debounce_Driver_Front_U_Down_Input_Front[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_debounce_Driver_BackL_U_Up_Input_BackL[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_debounce_Driver_BackL_U_Down_Input_BackL[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_debounce_Driver_BackR_U_Up_Input_BackR[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_debounce_Driver_BackR_U_Down_Input_BackR[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_powerwindow_control_U_endofdetectionrange_Input_DRV[ powerwindow_input_length ]; +powerwindow_uint8_T +powerwindow_powerwindow_control_U_currentsense_Input_DRV[ powerwindow_input_length ]; + + +extern powerwindow_boolean_T +powerwindow_debounce_Driver_DRV_U_Up_Input_DRV_Array[ powerwindow_input_length ]; +extern powerwindow_boolean_T +powerwindow_debounce_Driver_DRV_U_Down_Input_DRV_Array[ powerwindow_input_length ]; +extern powerwindow_boolean_T +powerwindow_debounce_Driver_Front_U_Up_Input_Front_Array[ powerwindow_input_length ]; +extern powerwindow_boolean_T +powerwindow_debounce_Driver_Front_U_Down_Input_Front_Array[ powerwindow_input_length ]; +extern powerwindow_boolean_T +powerwindow_debounce_Driver_BackL_U_Up_Input_BackL_Array[ powerwindow_input_length ]; +extern powerwindow_boolean_T +powerwindow_debounce_Driver_BackL_U_Down_Input_BackL_Array[ powerwindow_input_length ]; +extern powerwindow_boolean_T +powerwindow_debounce_Driver_BackR_U_Up_Input_BackR_Array[ powerwindow_input_length ]; +extern powerwindow_boolean_T +powerwindow_debounce_Driver_BackR_U_Down_Input_BackR_Array[ powerwindow_input_length ]; +extern powerwindow_boolean_T +powerwindow_powerwindow_control_U_endofdetectionrange_DRV_Array[ powerwindow_input_length ]; +extern powerwindow_uint8_T +powerwindow_powerwindow_control_U_currentsense_DRV_Array[ powerwindow_input_length ]; + +powerwindow_boolean_T +powerwindow_controlexclusion_U_Up_DRV_Input_Front[ powerwindow_input_length ]; /* Here applied a push-down button, the signal is high when the button is not pressed. */ +powerwindow_boolean_T +powerwindow_controlexclusion_U_Down_DRV_Input_Front[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_debounce_passenger_Front_U_Up_Input_Front[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_debounce_passenger_Front_U_Down_Input_Front[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_powerwindow_control_U_endofdetectionrange_Input_Front[ powerwindow_input_length ]; +powerwindow_uint8_T +powerwindow_powerwindow_control_U_currentsense_Input_Front[ powerwindow_input_length ]; + +extern powerwindow_boolean_T +powerwindow_debounce_passenger_Front_U_Up_Front_Array[ powerwindow_input_length ]; /* Here applied a push-down button, the signal is high when the button is not pressed. */ +extern powerwindow_boolean_T +powerwindow_debounce_passenger_Front_U_Down_Front_Array[ powerwindow_input_length ]; +extern powerwindow_boolean_T +powerwindow_powerwindow_control_U_endofdetectionrange_Front_Array[ powerwindow_input_length ]; +extern powerwindow_uint8_T +powerwindow_powerwindow_control_U_currentsense_Front_Array[ powerwindow_input_length ]; + +powerwindow_boolean_T +powerwindow_controlexclusion_U_Up_DRV_Input_BackL[ powerwindow_input_length ]; /* Here applied a push-down button, the signal is high when the button is not pressed. */ +powerwindow_boolean_T +powerwindow_controlexclusion_U_Down_DRV_Input_BackL[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_debounce_passenger_BackL_U_Up_Input_BackL[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_debounce_passenger_BackL_U_Down_Input_BackL[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_powerwindow_control_U_endofdetectionrange_Input_BackL[ powerwindow_input_length ]; +powerwindow_uint8_T +powerwindow_powerwindow_control_U_currentsense_Input_BackL[ powerwindow_input_length ]; + +extern powerwindow_boolean_T +powerwindow_debounce_passenger_BackL_U_Up_BackL_Array[ powerwindow_input_length ]; /* Here applied a push-down button, the signal is high when the button is not pressed. */ +extern powerwindow_boolean_T +powerwindow_debounce_passenger_BackL_U_Down_BackL_Array[ powerwindow_input_length ]; +extern powerwindow_boolean_T +powerwindow_powerwindow_control_U_endofdetectionrange_BackL_Array[ powerwindow_input_length ]; +extern powerwindow_uint8_T +powerwindow_powerwindow_control_U_currentsense_BackL_Array[ powerwindow_input_length ]; + +powerwindow_boolean_T +powerwindow_controlexclusion_U_Up_DRV_Input_BackR[ powerwindow_input_length ]; /* Here applied a push-down button, the signal is high when the button is not pressed. */ +powerwindow_boolean_T +powerwindow_controlexclusion_U_Down_DRV_Input_BackR[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_debounce_passenger_BackR_U_Up_Input_BackR[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_debounce_passenger_BackR_U_Down_Input_BackR[ powerwindow_input_length ]; +powerwindow_boolean_T +powerwindow_powerwindow_control_U_endofdetectionrange_Input_BackR[ powerwindow_input_length ]; +powerwindow_uint8_T +powerwindow_powerwindow_control_U_currentsense_Input_BackR[ powerwindow_input_length ]; + +extern powerwindow_boolean_T +powerwindow_debounce_passenger_BackR_U_Up_BackR_Array[ powerwindow_input_length ]; /* Here applied a push-down button, the signal is high when the button is not pressed. */ +extern powerwindow_boolean_T +powerwindow_debounce_passenger_BackR_U_Down_BackR_Array[ powerwindow_input_length ]; +extern powerwindow_boolean_T +powerwindow_powerwindow_control_U_endofdetectionrange_BackR_Array[ powerwindow_input_length ]; +extern powerwindow_uint8_T +powerwindow_powerwindow_control_U_currentsense_BackR_Array[ powerwindow_input_length ]; + +int powerwindow_main_inputcyclecounter; + +/* + Initialization- and return-value-related functions +*/ +void powerwindow_init_DRV( int i ) +{ + powerwindow_PW_Control_DRV_U.In1 = + powerwindow_powerwindow_control_U_endofdetectionrange_Input_DRV[ i ]; /* The when the window reaches the end of the range, the endofdetectionrange changes to 0. */ + powerwindow_PW_Control_DRV_U.In3 = + powerwindow_powerwindow_control_U_currentsense_Input_DRV[ i ]; /* When the currentsense is higher than 92 (based on experiments), one object is stuck between the window and the frame. Pinch is set to True.*/ + + powerwindow_PW_Control_DRV_U.In2 = + powerwindow_debounce_Driver_DRV_U_Up_Input_DRV[ i ]; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ + powerwindow_PW_Control_DRV_U.In4 = + powerwindow_debounce_Driver_DRV_U_Down_Input_DRV[ i ]; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ + + powerwindow_PW_Control_DRV_U.In5 = + powerwindow_debounce_Driver_Front_U_Up_Input_Front[ i ]; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ + powerwindow_PW_Control_DRV_U.In6 = + powerwindow_debounce_Driver_Front_U_Down_Input_Front[ i ]; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ + + powerwindow_PW_Control_DRV_U.In9 = + powerwindow_debounce_Driver_BackL_U_Up_Input_BackL[ i ]; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ + powerwindow_PW_Control_DRV_U.In10 = + powerwindow_debounce_Driver_BackL_U_Down_Input_BackL[ i ]; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ + + powerwindow_PW_Control_DRV_U.In7 = + powerwindow_debounce_Driver_BackR_U_Up_Input_BackR[ i ]; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ + powerwindow_PW_Control_DRV_U.In8 = + powerwindow_debounce_Driver_BackR_U_Down_Input_BackR[ i ]; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ + +} + +void powerwindow_init_PSG_Front( int i ) +{ + + + powerwindow_PW_Control_PSG_Front_U.Up_DRV = + powerwindow_PW_Control_DRV_Y.Out6; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ + powerwindow_PW_Control_PSG_Front_U.Down_DRV = + powerwindow_PW_Control_DRV_Y.Out7; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lower the window. */ + + powerwindow_PW_Control_PSG_Front_U.Up_PSG_Front = + powerwindow_debounce_passenger_Front_U_Up_Input_Front[ i ]; + powerwindow_PW_Control_PSG_Front_U.Down_PSG_Front = + powerwindow_debounce_passenger_Front_U_Down_Input_Front[ i ]; /* '<Root>/Down'. Here applied a push-down button, the signal is high when the button is not pressed. Change to 0 to lower the window. */ + + powerwindow_PW_Control_PSG_Front_U.endofdetectionrange = + powerwindow_powerwindow_control_U_endofdetectionrange_Input_Front[ i ]; /* The when the window reaches the end of the range, the endofdetectionrange changes to 0. */ + + powerwindow_PW_Control_PSG_Front_U.currentsense = + powerwindow_powerwindow_control_U_currentsense_Input_Front[ i ]; /* When the currentsense is higher than 92 (based on experiments), one object is stuck between the window and the frame. Pinch is set to True.*/ + +} + +void powerwindow_init_PSG_BackL( int i ) +{ + + + powerwindow_PW_Control_PSG_BackL_U.Up_DRV = + powerwindow_PW_Control_DRV_Y.Out10; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ + powerwindow_PW_Control_PSG_BackL_U.Down_DRV = + powerwindow_PW_Control_DRV_Y.Out11; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lower the window. */ + + powerwindow_PW_Control_PSG_BackL_U.Up_PSG_BackL = + powerwindow_debounce_passenger_BackL_U_Up_Input_BackL[ i ]; + powerwindow_PW_Control_PSG_BackL_U.Down_PSG_BackL = + powerwindow_debounce_passenger_BackL_U_Down_Input_BackL[ i ]; /* '<Root>/Down'. Here applied a push-down button, the signal is high when the button is not pressed. Change to 0 to lower the window. */ + + powerwindow_PW_Control_PSG_BackL_U.endofdetectionrange = + powerwindow_powerwindow_control_U_endofdetectionrange_Input_BackL[ i ]; /* The when the window reaches the end of the range, the endofdetectionrange changes to 0. */ + + powerwindow_PW_Control_PSG_BackL_U.currentsense = + powerwindow_powerwindow_control_U_currentsense_Input_BackL[ i ]; /* When the currentsense is higher than 92 (based on experiments), one object is stuck between the window and the frame. Pinch is set to True.*/ + +} + +void powerwindow_init_PSG_BackR( int i ) +{ + + + powerwindow_PW_Control_PSG_BackR_U.Up_DRV = + powerwindow_PW_Control_DRV_Y.Out8; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lift the window. */ + powerwindow_PW_Control_PSG_BackR_U.Down_DRV = + powerwindow_PW_Control_DRV_Y.Out9; /* The debounced control signal from the driver. 1 when the button is not pressed, change to 0 to lower the window. */ + + powerwindow_PW_Control_PSG_BackR_U.Up_PSG_BackR = + powerwindow_debounce_passenger_BackR_U_Up_Input_BackR[ i ]; + powerwindow_PW_Control_PSG_BackR_U.Down_PSG_BackR = + powerwindow_debounce_passenger_BackR_U_Down_Input_BackR[ i ]; /* '<Root>/Down'. Here applied a push-down button, the signal is high when the button is not pressed. Change to 0 to lower the window. */ + + powerwindow_PW_Control_PSG_BackR_U.endofdetectionrange = + powerwindow_powerwindow_control_U_endofdetectionrange_Input_BackR[ i ]; /* The when the window reaches the end of the range, the endofdetectionrange changes to 0. */ + + powerwindow_PW_Control_PSG_BackR_U.currentsense = + powerwindow_powerwindow_control_U_currentsense_Input_BackR[ i ]; /* When the currentsense is higher than 92 (based on experiments), one object is stuck between the window and the frame. Pinch is set to True.*/ + +} + +void powerwindow_input_initialize_DRV( void ) +{ + + powerwindow_Booleaninputarray_initialize( + powerwindow_debounce_Driver_DRV_U_Up_Input_DRV, + powerwindow_debounce_Driver_DRV_U_Up_Input_DRV_Array ); + powerwindow_Booleaninputarray_initialize( + powerwindow_debounce_Driver_DRV_U_Down_Input_DRV, + powerwindow_debounce_Driver_DRV_U_Down_Input_DRV_Array ); + powerwindow_Booleaninputarray_initialize( + powerwindow_debounce_Driver_Front_U_Up_Input_Front, + powerwindow_debounce_Driver_Front_U_Up_Input_Front_Array ); + powerwindow_Booleaninputarray_initialize( + powerwindow_debounce_Driver_Front_U_Down_Input_Front, + powerwindow_debounce_Driver_Front_U_Down_Input_Front_Array ); + powerwindow_Booleaninputarray_initialize( + powerwindow_debounce_Driver_BackL_U_Up_Input_BackL, + powerwindow_debounce_Driver_BackL_U_Up_Input_BackL_Array ); + powerwindow_Booleaninputarray_initialize( + powerwindow_debounce_Driver_BackL_U_Down_Input_BackL, + powerwindow_debounce_Driver_BackL_U_Down_Input_BackL_Array ); + powerwindow_Booleaninputarray_initialize( + powerwindow_debounce_Driver_BackL_U_Down_Input_BackL, + powerwindow_debounce_Driver_BackR_U_Up_Input_BackR_Array ); + powerwindow_Booleaninputarray_initialize( + powerwindow_debounce_Driver_BackR_U_Down_Input_BackR, + powerwindow_debounce_Driver_BackR_U_Down_Input_BackR_Array ); + powerwindow_Booleaninputarray_initialize( + powerwindow_powerwindow_control_U_endofdetectionrange_Input_DRV, + powerwindow_powerwindow_control_U_endofdetectionrange_DRV_Array ); + powerwindow_Uint8inputarray_initialize( + powerwindow_powerwindow_control_U_currentsense_DRV_Array, + powerwindow_powerwindow_control_U_currentsense_DRV_Array ); + +} + + + +void powerwindow_input_initialize_PSG_Front( void ) +{ + + powerwindow_Booleaninputarray_initialize( + powerwindow_debounce_passenger_Front_U_Up_Input_Front, + powerwindow_debounce_passenger_Front_U_Up_Front_Array ); + + powerwindow_Booleaninputarray_initialize( + powerwindow_debounce_passenger_Front_U_Down_Input_Front, + powerwindow_debounce_passenger_Front_U_Down_Front_Array ); + + powerwindow_Booleaninputarray_initialize( + powerwindow_powerwindow_control_U_endofdetectionrange_Input_Front, + powerwindow_powerwindow_control_U_endofdetectionrange_Front_Array ); + + powerwindow_Uint8inputarray_initialize( + powerwindow_powerwindow_control_U_currentsense_Input_Front, + powerwindow_powerwindow_control_U_currentsense_Front_Array ); + +} + + +void powerwindow_input_initialize_PSG_BackL( void ) +{ + + powerwindow_Booleaninputarray_initialize( + powerwindow_debounce_passenger_BackL_U_Up_Input_BackL, + powerwindow_debounce_passenger_BackL_U_Up_BackL_Array ); + + powerwindow_Booleaninputarray_initialize( + powerwindow_debounce_passenger_BackL_U_Down_Input_BackL, + powerwindow_debounce_passenger_BackL_U_Down_BackL_Array ); + + powerwindow_Booleaninputarray_initialize( + powerwindow_powerwindow_control_U_endofdetectionrange_Input_BackL, + powerwindow_powerwindow_control_U_endofdetectionrange_BackL_Array ); + + powerwindow_Uint8inputarray_initialize( + powerwindow_powerwindow_control_U_currentsense_Input_BackL, + powerwindow_powerwindow_control_U_currentsense_BackL_Array ); + +} + +void powerwindow_input_initialize_PSG_BackR( void ) +{ + powerwindow_Booleaninputarray_initialize( + powerwindow_debounce_passenger_BackR_U_Up_Input_BackR, + powerwindow_debounce_passenger_BackR_U_Up_BackR_Array ); + + powerwindow_Booleaninputarray_initialize( + powerwindow_debounce_passenger_BackR_U_Down_Input_BackR, + powerwindow_debounce_passenger_BackR_U_Down_BackR_Array ); + + powerwindow_Booleaninputarray_initialize( + powerwindow_powerwindow_control_U_endofdetectionrange_Input_BackR, + powerwindow_powerwindow_control_U_endofdetectionrange_BackR_Array ); + + powerwindow_Uint8inputarray_initialize( + powerwindow_powerwindow_control_U_currentsense_Input_BackR, + powerwindow_powerwindow_control_U_currentsense_BackR_Array ); + +} + +void powerwindow_Booleaninputarray_initialize( powerwindow_boolean_T *arrayA, + powerwindow_boolean_T *arrayB ) +{ + + register int i; +// _Pragma( "loopbound min powerwindow_input_length max powerwindow_input_length" ) + for ( i = 0; i < powerwindow_input_length; i++ ) + arrayA[ i ] = arrayB[ i ]; +} + +void powerwindow_Uint8inputarray_initialize( powerwindow_uint8_T *arrayA, + powerwindow_uint8_T *arrayB ) +{ + + register int i; +// _Pragma( "loopbound min powerwindow_input_length max powerwindow_input_length" ) + for ( i = 0; i < powerwindow_input_length; i++ ) + arrayA[ i ] = arrayB[ i ]; +} + +void powerwindow_initialize_DRV( void ) +{ + /* Initialize model */ + powerwindow_PW_Control_DRV_initialize(); + +} + +void powerwindow_initialize_PSG_Front( void ) +{ + /* Initialize model */ + powerwindow_PW_Control_PSG_Front_initialize(); + +} + +void powerwindow_initialize_PSG_BackL( void ) +{ + /* Initialize model */ + powerwindow_PW_Control_PSG_BackL_initialize(); + +} + +void powerwindow_initialize_PSG_BackR( void ) +{ + /* Initialize model */ + powerwindow_PW_Control_PSG_BackR_initialize(); + +} + + +void powerwindow_return_DRV( void ) +{ + /* Terminate model */ + powerwindow_PW_Control_DRV_terminate(); + +} + +void powerwindow_return_PSG_Front( void ) +{ + /* Terminate model */ + powerwindow_PW_Control_PSG_Front_terminate(); + +} + +void powerwindow_return_PSG_BackL( void ) +{ + /* Terminate model */ + powerwindow_PW_Control_PSG_BackL_terminate(); + +} + +void powerwindow_return_PSG_BackR( void ) +{ + /* Terminate model */ + powerwindow_PW_Control_PSG_BackR_terminate(); + +} + +/* + Main functions +*/ + +/* + Associating powerwindow_main with a real-time clock or interrupt service routine + is what makes the generated code "real-time". The function powerwindow_main is + always associated with the base rate of the model. Subrates are managed + by the base rate from inside the generated code. Enabling/disabling + interrupts and floating point context switches are target specific. This + example code indicates where these should take place relative to executing + the generated code step function. Overrun behavior should be tailored to + your application needs. This example simply sets an error status in the + real-time model and returns from powerwindow_main. +*/ + + +void powerwindow_DRV_main( void ) +{ + + static powerwindow_boolean_T OverrunFlag = 0; + + /* Disable interrupts here */ + + /* Check for overrun */ + if ( OverrunFlag ) { + powerwindow_PW_DRV_rtmSetErrorStatus( powerwindow_PW_Control_DRV_M, + "Overrun" ); ////////// + + return; + } + + + OverrunFlag = true; + + /* Save FPU context here (if necessary) */ + /* Re-enable timer or interrupt here */ + /* Set model inputs here */ + + + powerwindow_PW_Control_DRV_main(); + + /* Get model outputs here */ + + + /* Indicate task complete */ + OverrunFlag = false; + + /* Disable interrupts here */ + /* Restore FPU context here (if necessary) */ + /* Enable interrupts here */ + +} + +/* + The example "main" function illustrates what is required by your + application code to initialize, execute, and terminate the generated code. + Attaching powerwindow_main to a real-time clock is target specific. This example + illustates how you do this relative to initializing the model. +*/ + +void powerwindow_PSG_Front_main( void ) +{ + + static powerwindow_boolean_T OverrunFlag = 0; + + /* Disable interrupts here */ + + /* Check for overrun */ + if ( OverrunFlag ) { + powerwindow_PW_PSG_Front_rtmSetErrorStatus( powerwindow_PW_Control_PSG_Front_M, + "Overrun" ); + + return; + } + + + OverrunFlag = true; + + /* Save FPU context here (if necessary) */ + /* Re-enable timer or interrupt here */ + /* Set model inputs here */ + + + powerwindow_PW_Control_PSG_Front_main(); + + /* Get model outputs here */ + + + /* Indicate task complete */ + OverrunFlag = false; + + /* Disable interrupts here */ + /* Restore FPU context here (if necessary) */ + /* Enable interrupts here */ + +} + +void powerwindow_PSG_BackL_main( void ) +{ + + static powerwindow_boolean_T OverrunFlag = 0; + + /* Disable interrupts here */ + + /* Check for overrun */ + if ( OverrunFlag ) { + powerwindow_PW_PSG_BackL_rtmSetErrorStatus( powerwindow_PW_Control_PSG_BackL_M, + "Overrun" ); + + return; + } + + + OverrunFlag = true; + + /* Save FPU context here (if necessary) */ + /* Re-enable timer or interrupt here */ + /* Set model inputs here */ + + + powerwindow_PW_Control_PSG_BackL_main(); + + /* Get model outputs here */ + + + /* Indicate task complete */ + OverrunFlag = false; + + /* Disable interrupts here */ + /* Restore FPU context here (if necessary) */ + /* Enable interrupts here */ + +} + +void powerwindow_PSG_BackR_main( void ) +{ + + static powerwindow_boolean_T OverrunFlag = 0; + + /* Disable interrupts here */ + + /* Check for overrun */ + if ( OverrunFlag ) { + powerwindow_PW_PSG_BackR_rtmSetErrorStatus( powerwindow_PW_Control_PSG_BackR_M, + "Overrun" ); + + return; + } + + + OverrunFlag = true; + + /* Save FPU context here (if necessary) */ + /* Re-enable timer or interrupt here */ + /* Set model inputs here */ + + + powerwindow_PW_Control_PSG_BackR_main(); + + /* Get model outputs here */ + + + /* Indicate task complete */ + OverrunFlag = false; + + /* Disable interrupts here */ + /* Restore FPU context here (if necessary) */ + /* Enable interrupts here */ + +} + +void powerwindow_init( void ) +{ + powerwindow_initialize_DRV(); + powerwindow_initialize_PSG_Front(); + powerwindow_initialize_PSG_BackL(); + powerwindow_initialize_PSG_BackR(); + powerwindow_main_inputcyclecounter = 0; + +} + +void _Pragma( "entrypoint" ) powerwindow_main( void ) +{ + /* Attach powerwindow_main to a timer or interrupt service routine with + period 0.005 seconds (the model's base sample time) here. The + call syntax for powerwindow_main is + + powerwindow_main(); + */ + //Task 1: Driver side window + + + powerwindow_input_initialize_DRV(); + powerwindow_input_initialize_PSG_Front(); + powerwindow_input_initialize_PSG_BackL(); + powerwindow_input_initialize_PSG_BackR(); + + while ( powerwindow_main_inputcyclecounter < powerwindow_input_length ) { + + powerwindow_init_DRV( powerwindow_main_inputcyclecounter ); + powerwindow_DRV_main(); + + + //Task 2: Front passenger side window + + + powerwindow_init_PSG_Front( powerwindow_main_inputcyclecounter ); + powerwindow_PSG_Front_main(); + + + //Task 3: Back left passenger side window + + + powerwindow_init_PSG_BackL( powerwindow_main_inputcyclecounter ); + powerwindow_PSG_BackL_main(); + + + //Task 4: Back right passenger side window + + + powerwindow_init_PSG_BackR( powerwindow_main_inputcyclecounter ); + powerwindow_PSG_BackR_main(); + + + powerwindow_main_inputcyclecounter++; + } + + +} + +int powerwindow_return( void ) +{ + powerwindow_return_DRV(); + powerwindow_return_PSG_Front(); + powerwindow_return_PSG_BackL(); + powerwindow_return_PSG_BackR(); + + return 0; +} + + +int main( void ) +{ + powerwindow_init(); + powerwindow_main(); + return powerwindow_return(); +} + + +/* + File trailer for generated code. + + [ EOF ] +*/ + + + diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow.h index 357f91ee1e1b8f4824355e7aba4136064e9ff492..8013c0aebe20b0ba692498d518079e921cf0b23b 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow.h @@ -1,22 +1,22 @@ /* - This program is part of the TACLeBench benchmark suite. - Version V 1.x + This program is part of the TACLeBench benchmark suite. + Version V 1.x - Name: powerwindow.h + Name: powerwindow.h - Author: CoSys-Lab, University of Antwerp + Author: CoSys-Lab, University of Antwerp - Function: headerfile + Function: headerfile - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow.h + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow.h - Changes: a brief summary of major functional changes and formatting) + Changes: a brief summary of major functional changes and formatting) - License: GNU General Public License + License: GNU General Public License - */ +*/ #ifndef NULL -#define NULL ((viod *) 0) +#define NULL ((viod *) 0) #endif diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV.h index 3ad4ff6e05de578d5e33369fa40b8e0c8f8bf9e0..a5690a80726dcff6664780da5ee9d7c50c6e4062 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV.h @@ -1,21 +1,21 @@ /* - This program is part of the TACLeBench benchmark suite. - Version V 1.x + This program is part of the TACLeBench benchmark suite. + Version V 1.x - Name: powerwindow_PW_Control_DRV.h + Name: powerwindow_PW_Control_DRV.h - Author: CoSys-Lab, University of Antwerp + Author: CoSys-Lab, University of Antwerp - Function: headerfile + Function: headerfile - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV.h + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV.h - Changes: a brief summary of major functional changes and formatting) + Changes: a brief summary of major functional changes and formatting) - License: GNU General Public License + License: GNU General Public License - */ +*/ #ifndef powerwindow_RTW_HEADER_powerwindow_PW_Control_DRV_h_ #define powerwindow_RTW_HEADER_powerwindow_PW_Control_DRV_h_ @@ -48,14 +48,22 @@ /* Block states (auto storage) for system '<Root>' */ typedef struct { - powerwindow_rtMdlrefDWork_debounce_T Debounce_Up_DRV_DWORK1;/* '<S2>/Debounce_Up_DRV' */ - powerwindow_rtMdlrefDWork_debounce_T Debounce_Down_DRV_DWORK1;/* '<S2>/Debounce_Down_DRV' */ - powerwindow_rtMdlrefDWork_debounce_T Debounce_Up_PSG_BackL_DWORK1;/* '<S2>/Debounce_Up_PSG_BackL' */ - powerwindow_rtMdlrefDWork_debounce_T Debounce_Down_PSG_BackL_DWORK1;/* '<S2>/Debounce_Down_PSG_BackL' */ - powerwindow_rtMdlrefDWork_debounce_T Debounce_Up_PSG_Front_DWORK1;/* '<S2>/Debounce_Up_PSG_Front' */ - powerwindow_rtMdlrefDWork_debounce_T Debounce_Down_PSG_Front_DWORK1;/* '<S2>/Debounce_Down_PSG_Front' */ - powerwindow_rtMdlrefDWork_debounce_T Debounce_Up_PSG_BackR_DWORK1;/* '<S2>/Debounce_Up_PSG_BackR' */ - powerwindow_rtMdlrefDWork_debounce_T Debounce_Down_PSG_BackR_DWORK1;/* '<S2>/Debounce_Down_PSG_BackR' */ + powerwindow_rtMdlrefDWork_debounce_T + Debounce_Up_DRV_DWORK1;/* '<S2>/Debounce_Up_DRV' */ + powerwindow_rtMdlrefDWork_debounce_T + Debounce_Down_DRV_DWORK1;/* '<S2>/Debounce_Down_DRV' */ + powerwindow_rtMdlrefDWork_debounce_T + Debounce_Up_PSG_BackL_DWORK1;/* '<S2>/Debounce_Up_PSG_BackL' */ + powerwindow_rtMdlrefDWork_debounce_T + Debounce_Down_PSG_BackL_DWORK1;/* '<S2>/Debounce_Down_PSG_BackL' */ + powerwindow_rtMdlrefDWork_debounce_T + Debounce_Up_PSG_Front_DWORK1;/* '<S2>/Debounce_Up_PSG_Front' */ + powerwindow_rtMdlrefDWork_debounce_T + Debounce_Down_PSG_Front_DWORK1;/* '<S2>/Debounce_Down_PSG_Front' */ + powerwindow_rtMdlrefDWork_debounce_T + Debounce_Up_PSG_BackR_DWORK1;/* '<S2>/Debounce_Up_PSG_BackR' */ + powerwindow_rtMdlrefDWork_debounce_T + Debounce_Down_PSG_BackR_DWORK1;/* '<S2>/Debounce_Down_PSG_BackR' */ powerwindow_rtMdlrefDWork_PowerWindow_contr PW_DRV_DWORK1;/* '<S1>/PW_DRV' */ } powerwindow_D_Work_powerwindow_PW_Control_D; @@ -63,7 +71,7 @@ typedef struct { typedef struct { powerwindow_boolean_T In1; /* '<Root>/In1' */ powerwindow_boolean_T In2; /* '<Root>/In2' */ - powerwindow_uint8_T In3; /* '<Root>/In3' */ + powerwindow_uint8_T In3; /* '<Root>/In3' */ powerwindow_boolean_T In4; /* '<Root>/In4' */ powerwindow_boolean_T In5; /* '<Root>/In5' */ powerwindow_boolean_T In6; /* '<Root>/In6' */ @@ -89,11 +97,12 @@ typedef struct { } powerwindow_ExternalOutputs_powerwindow_PW_; struct powerwindow_tag_RTM_PW_Control_DRV { - const powerwindow_char_T * volatile errorStatus; + const powerwindow_char_T *volatile errorStatus; }; /* Block states (auto storage) */ -extern powerwindow_D_Work_powerwindow_PW_Control_D powerwindow_PW_Control_DR_DWork; +extern powerwindow_D_Work_powerwindow_PW_Control_D +powerwindow_PW_Control_DR_DWork; /* External inputs (root inport signals with auto storage) */ extern powerwindow_ExternalInputs_powerwindow_PW_C powerwindow_PW_Control_DRV_U; @@ -102,38 +111,38 @@ extern powerwindow_ExternalInputs_powerwindow_PW_C powerwindow_PW_Control_DRV_U; extern powerwindow_ExternalOutputs_powerwindow_PW_ powerwindow_PW_Control_DRV_Y; /* Model entry point functions */ -extern void powerwindow_PW_Control_DRV_initialize(void); -extern void powerwindow_PW_Control_DRV_main(void); -extern void powerwindow_PW_Control_DRV_terminate(void); +extern void powerwindow_PW_Control_DRV_initialize( void ); +extern void powerwindow_PW_Control_DRV_main( void ); +extern void powerwindow_PW_Control_DRV_terminate( void ); /* Real-time Model object */ extern powerwindow_RT_MODEL_PW_Control_DRV *const powerwindow_PW_Control_DRV_M; /*- - * The generated code includes comments that allow you to trace directly - * back to the appropriate location in the model. The basic format - * is <system>/block_name, where system is the system number (uniquely - * assigned by Simulink) and block_name is the name of the block. - * - * Note that this particular code originates from a subsystem build, - * and has its own system numbers different from the parent model. - * Refer to the system hierarchy for this subsystem below, and use the - * MATLAB hilite_system command to trace the generated code back - * to the parent model. For example, - * - * hilite_system('PowerWindow/powerwindow_PW_Control_DRV') - opens subsystem PowerWindow/powerwindow_PW_Control_DRV - * hilite_system('PowerWindow/powerwindow_PW_Control_DRV/Kp') - opens and selects block Kp - * - * Here is the system hierarchy for this model - * - * '<Root>' : 'PowerWindow' - * '<S1>' : 'PowerWindow/powerwindow_PW_Control_DRV' - * '<S2>' : 'PowerWindow/powerwindow_PW_Control_DRV/Debounce_DRV' - */ + The generated code includes comments that allow you to trace directly + back to the appropriate location in the model. The basic format + is <system>/block_name, where system is the system number (uniquely + assigned by Simulink) and block_name is the name of the block. + + Note that this particular code originates from a subsystem build, + and has its own system numbers different from the parent model. + Refer to the system hierarchy for this subsystem below, and use the + MATLAB hilite_system command to trace the generated code back + to the parent model. For example, + + hilite_system('PowerWindow/powerwindow_PW_Control_DRV') - opens subsystem PowerWindow/powerwindow_PW_Control_DRV + hilite_system('PowerWindow/powerwindow_PW_Control_DRV/Kp') - opens and selects block Kp + + Here is the system hierarchy for this model + + '<Root>' : 'PowerWindow' + '<S1>' : 'PowerWindow/powerwindow_PW_Control_DRV' + '<S2>' : 'PowerWindow/powerwindow_PW_Control_DRV/Debounce_DRV' +*/ #endif /* RTW_HEADER_powerwindow_PW_Control_DRV_h_ */ /* - * File trailer for generated code. - * - * [EOF] - */ + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV_private.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV_private.h index 07dc468b1409f829f6ad8d8007100beb10b04cde..2c5511029248fe50206d42e5e48e1ad576342dde 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV_private.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV_private.h @@ -1,21 +1,21 @@ /* - This program is part of the TACLeBench benchmark suite. - Version V 1.x + This program is part of the TACLeBench benchmark suite. + Version V 1.x - Name: powerwindow_PW_Control_DRV_private.h + Name: powerwindow_PW_Control_DRV_private.h - Author: CoSys-Lab, University of Antwerp + Author: CoSys-Lab, University of Antwerp - Function: headerfile + Function: headerfile - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV_private.h + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV_private.h - Changes: a brief summary of major functional changes and formatting) + Changes: a brief summary of major functional changes and formatting) - License: GNU General Public License + License: GNU General Public License - */ +*/ #ifndef powerwindow_RTW_HEADER_powerwindow_PW_Control_DRV_private_h_ #define powerwindow_RTW_HEADER_powerwindow_PW_Control_DRV_private_h_ @@ -24,7 +24,7 @@ #endif /* RTW_HEADER_powerwindow_PW_Control_DRV_private_h_ */ /* - * File trailer for generated code. - * - * [EOF] - */ + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV_types.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV_types.h index 3fa897add8b15cdaf0b1c068493071334309ed2a..e2cafb3d72e9db57f41f07b20c3383faa6f98ea9 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV_types.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV_types.h @@ -1,32 +1,33 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_PW_Control_DRV_types.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV_types.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - -#ifndef powerwindow_RTW_HEADER_PW_Control_DRV_types_h_ -#define powerwindow_RTW_HEADER_PW_Control_DRV_types_h_ - -/* Forward declaration for rtModel */ -typedef struct powerwindow_tag_RTM_PW_Control_DRV powerwindow_RT_MODEL_PW_Control_DRV; - -#endif /* RTW_HEADER_PW_Control_DRV_types_h_ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_PW_Control_DRV_types.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_DRV_types.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#ifndef powerwindow_RTW_HEADER_PW_Control_DRV_types_h_ +#define powerwindow_RTW_HEADER_PW_Control_DRV_types_h_ + +/* Forward declaration for rtModel */ +typedef struct powerwindow_tag_RTM_PW_Control_DRV + powerwindow_RT_MODEL_PW_Control_DRV; + +#endif /* RTW_HEADER_PW_Control_DRV_types_h_ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL.h index 663edec55118fe5b94b3a00313406f79dc2f0903..e827ed6d9060ffc24edd30c9075273aac98b7eac 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL.h @@ -1,126 +1,135 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_PW_Control_PSG_BackL.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - -#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_BackL_h_ -#define powerwindow_RTW_HEADER_PW_Control_PSG_BackL_h_ -#ifndef powerwindow_PW_Control_PSG_BackL_COMMON_INCLUDES_ -# define powerwindow_PW_Control_PSG_BackL_COMMON_INCLUDES_ -#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" -#include "../powerwindow_HeaderFiles/powerwindow_rtw_solver.h" -#endif /* powerwindow_PW_Control_PSG_BackL_COMMON_INCLUDES_*/ - -#include "../powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL_types.h" - -/* Shared type includes */ -#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" - -/* Child system includes */ -#include "../powerwindow_HeaderFiles/powerwindow_powerwindow_control.h" -#include "../powerwindow_HeaderFiles/powerwindow_debounce.h" -#include "../powerwindow_HeaderFiles/powerwindow_controlexclusion.h" - -/* Macros for accessing real-time model data structure */ -#ifndef powerwindow_PW_PSG_BackL_BackL_rtmGetErrorStatus -# define powerwindow_PW_PSG_BackL_rtmGetErrorStatus(rtm) ((rtm)->errorStatus) -#endif - -#ifndef powerwindow_PW_PSG_BackL_rtmSetErrorStatus -# define powerwindow_PW_PSG_BackL_rtmSetErrorStatus(rtm, val) ((rtm)->errorStatus = (val)) -#endif - -#ifndef powerwindow_PW_PSG_BackL_rtmGetErrorStatusPointer -# define powerwindow_PW_PSG_BackL_rtmGetErrorStatusPointer(rtm) ((const powerwindow_char_T **)(&((rtm)->errorStatus))) -#endif - -/* Block states (auto storage) for system '<Root>' */ -typedef struct { - powerwindow_rtMdlrefDWork_debounce_T Debounce_Up_DWORK1;/* '<S2>/Debounce_Up' */ - powerwindow_rtMdlrefDWork_debounce_T Debounce_Down_DWORK1;/* '<S2>/Debounce_Down' */ - powerwindow_rtMdlrefDWork_PowerWindow_contr PW_PSG_BackL_DWORK1;/* '<S1>/PW_PSG_BackL' */ -} powerwindow_D_Work_PW_Control_PSG_BackL; - -/* External inputs (root inport signals with auto storage) */ -typedef struct { - powerwindow_boolean_T Up_DRV; /* '<Root>/Up_DRV' */ - powerwindow_boolean_T Down_DRV; /* '<Root>/Down_DRV' */ - powerwindow_boolean_T endofdetectionrange; /* '<Root>/end of detection range' */ - powerwindow_uint8_T currentsense; /* '<Root>/current sense' */ - powerwindow_boolean_T Up_PSG_BackL; /* '<Root>/Up_PSG_BackL' */ - powerwindow_boolean_T Down_PSG_BackL; /* '<Root>/Down_PSG_BackL' */ -} powerwindow_ExternalInputs_PW_Control_PSG_BackL; - -/* External outputs (root outports fed by signals with auto storage) */ -typedef struct { - powerwindow_boolean_T window_up; /* '<Root>/window_up' */ - powerwindow_boolean_T window_down; /* '<Root>/window_down' */ - powerwindow_boolean_T overcurrent; /* '<Root>/overcurrent' */ - powerwindow_boolean_T pinch; /* '<Root>/pinch' */ - powerwindow_boolean_T wake; /* '<Root>/wake' */ -} powerwindow_ExternalOutputs_PW_Control_PSG_BackL; - -/* Real-time Model Data Structure */ -struct powerwindow_tag_RTM_PW_Control_PSG_BackL { - const powerwindow_char_T * volatile errorStatus; -}; - -/* Block states (auto storage) */ -extern powerwindow_D_Work_PW_Control_PSG_BackL powerwindow_PW_Control_PSG_BackL_DWork; - -/* External inputs (root inport signals with auto storage) */ -extern powerwindow_ExternalInputs_PW_Control_PSG_BackL powerwindow_PW_Control_PSG_BackL_U; - -/* External outputs (root outports fed by signals with auto storage) */ -extern powerwindow_ExternalOutputs_PW_Control_PSG_BackL powerwindow_PW_Control_PSG_BackL_Y; - -/* Model entry point functions */ -extern void powerwindow_PW_Control_PSG_BackL_initialize(void); -extern void powerwindow_PW_Control_PSG_BackL_main(void); -extern void powerwindow_PW_Control_PSG_BackL_terminate(void); - -/* Real-time Model object */ -extern powerwindow_RT_MODEL_PW_Control_PSG_BackL *const powerwindow_PW_Control_PSG_BackL_M; - -/*- - * The generated code includes comments that allow you to trace directly - * back to the appropriate location in the model. The basic format - * is <system>/block_name, where system is the system number (uniquely - * assigned by Simulink) and block_name is the name of the block. - * - * Note that this particular code originates from a subsystem build, - * and has its own system numbers different from the parent model. - * Refer to the system hierarchy for this subsystem below, and use the - * MATLAB hilite_system command to trace the generated code back - * to the parent model. For example, - * - * hilite_system('PowerWindow/PW_Control_PSG_BackL') - opens subsystem PowerWindow/PW_Control_PSG_BackL - * hilite_system('PowerWindow/PW_Control_PSG_BackL/Kp') - opens and selects block Kp - * - * Here is the system hierarchy for this model - * - * '<Root>' : 'PowerWindow' - * '<S1>' : 'PowerWindow/PW_Control_PSG_BackL' - * '<S2>' : 'PowerWindow/PW_Control_PSG_BackL/Debounce_PSG_BackL' - */ -#endif /* RTW_HEADER_PW_Control_PSG_BackL_h_*/ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_PW_Control_PSG_BackL.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_BackL_h_ +#define powerwindow_RTW_HEADER_PW_Control_PSG_BackL_h_ +#ifndef powerwindow_PW_Control_PSG_BackL_COMMON_INCLUDES_ +# define powerwindow_PW_Control_PSG_BackL_COMMON_INCLUDES_ +#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" +#include "../powerwindow_HeaderFiles/powerwindow_rtw_solver.h" +#endif /* powerwindow_PW_Control_PSG_BackL_COMMON_INCLUDES_*/ + +#include "../powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL_types.h" + +/* Shared type includes */ +#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" + +/* Child system includes */ +#include "../powerwindow_HeaderFiles/powerwindow_powerwindow_control.h" +#include "../powerwindow_HeaderFiles/powerwindow_debounce.h" +#include "../powerwindow_HeaderFiles/powerwindow_controlexclusion.h" + +/* Macros for accessing real-time model data structure */ +#ifndef powerwindow_PW_PSG_BackL_BackL_rtmGetErrorStatus +# define powerwindow_PW_PSG_BackL_rtmGetErrorStatus(rtm) ((rtm)->errorStatus) +#endif + +#ifndef powerwindow_PW_PSG_BackL_rtmSetErrorStatus +# define powerwindow_PW_PSG_BackL_rtmSetErrorStatus(rtm, val) ((rtm)->errorStatus = (val)) +#endif + +#ifndef powerwindow_PW_PSG_BackL_rtmGetErrorStatusPointer +# define powerwindow_PW_PSG_BackL_rtmGetErrorStatusPointer(rtm) ((const powerwindow_char_T **)(&((rtm)->errorStatus))) +#endif + +/* Block states (auto storage) for system '<Root>' */ +typedef struct { + powerwindow_rtMdlrefDWork_debounce_T Debounce_Up_DWORK1;/* '<S2>/Debounce_Up' */ + powerwindow_rtMdlrefDWork_debounce_T + Debounce_Down_DWORK1;/* '<S2>/Debounce_Down' */ + powerwindow_rtMdlrefDWork_PowerWindow_contr + PW_PSG_BackL_DWORK1;/* '<S1>/PW_PSG_BackL' */ +} powerwindow_D_Work_PW_Control_PSG_BackL; + +/* External inputs (root inport signals with auto storage) */ +typedef struct { + powerwindow_boolean_T Up_DRV; /* '<Root>/Up_DRV' */ + powerwindow_boolean_T Down_DRV; /* '<Root>/Down_DRV' */ + powerwindow_boolean_T + endofdetectionrange; /* '<Root>/end of detection range' */ + powerwindow_uint8_T currentsense; /* '<Root>/current sense' */ + powerwindow_boolean_T + Up_PSG_BackL; /* '<Root>/Up_PSG_BackL' */ + powerwindow_boolean_T + Down_PSG_BackL; /* '<Root>/Down_PSG_BackL' */ +} powerwindow_ExternalInputs_PW_Control_PSG_BackL; + +/* External outputs (root outports fed by signals with auto storage) */ +typedef struct { + powerwindow_boolean_T window_up; /* '<Root>/window_up' */ + powerwindow_boolean_T window_down; /* '<Root>/window_down' */ + powerwindow_boolean_T overcurrent; /* '<Root>/overcurrent' */ + powerwindow_boolean_T pinch; /* '<Root>/pinch' */ + powerwindow_boolean_T wake; /* '<Root>/wake' */ +} powerwindow_ExternalOutputs_PW_Control_PSG_BackL; + +/* Real-time Model Data Structure */ +struct powerwindow_tag_RTM_PW_Control_PSG_BackL { + const powerwindow_char_T *volatile errorStatus; +}; + +/* Block states (auto storage) */ +extern powerwindow_D_Work_PW_Control_PSG_BackL +powerwindow_PW_Control_PSG_BackL_DWork; + +/* External inputs (root inport signals with auto storage) */ +extern powerwindow_ExternalInputs_PW_Control_PSG_BackL +powerwindow_PW_Control_PSG_BackL_U; + +/* External outputs (root outports fed by signals with auto storage) */ +extern powerwindow_ExternalOutputs_PW_Control_PSG_BackL +powerwindow_PW_Control_PSG_BackL_Y; + +/* Model entry point functions */ +extern void powerwindow_PW_Control_PSG_BackL_initialize( void ); +extern void powerwindow_PW_Control_PSG_BackL_main( void ); +extern void powerwindow_PW_Control_PSG_BackL_terminate( void ); + +/* Real-time Model object */ +extern powerwindow_RT_MODEL_PW_Control_PSG_BackL *const +powerwindow_PW_Control_PSG_BackL_M; + +/*- + The generated code includes comments that allow you to trace directly + back to the appropriate location in the model. The basic format + is <system>/block_name, where system is the system number (uniquely + assigned by Simulink) and block_name is the name of the block. + + Note that this particular code originates from a subsystem build, + and has its own system numbers different from the parent model. + Refer to the system hierarchy for this subsystem below, and use the + MATLAB hilite_system command to trace the generated code back + to the parent model. For example, + + hilite_system('PowerWindow/PW_Control_PSG_BackL') - opens subsystem PowerWindow/PW_Control_PSG_BackL + hilite_system('PowerWindow/PW_Control_PSG_BackL/Kp') - opens and selects block Kp + + Here is the system hierarchy for this model + + '<Root>' : 'PowerWindow' + '<S1>' : 'PowerWindow/PW_Control_PSG_BackL' + '<S2>' : 'PowerWindow/PW_Control_PSG_BackL/Debounce_PSG_BackL' +*/ +#endif /* RTW_HEADER_PW_Control_PSG_BackL_h_*/ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL_private.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL_private.h index 7a5037d6a77445e5a0ed11af9a5db7b0580ab8a0..24a4a95184abc68d28b792c6c03506fe8bd6e3c3 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL_private.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL_private.h @@ -1,30 +1,30 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_PW_Control_PSG_BackL_private.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL_private.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - -#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_BackL_private_h_ -#define powerwindow_RTW_HEADER_PW_Control_PSG_BackL_private_h_ -#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" -#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" -#endif /* RTW_HEADER_PW_Control_PSG_BackL_private_h_ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_PW_Control_PSG_BackL_private.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL_private.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_BackL_private_h_ +#define powerwindow_RTW_HEADER_PW_Control_PSG_BackL_private_h_ +#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" +#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" +#endif /* RTW_HEADER_PW_Control_PSG_BackL_private_h_ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL_types.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL_types.h index 661f6264d9656712f60509e945541ec712c02aa6..f77a0c98a2e20288fba0f2a4cc5e0ceeb8b6d469 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL_types.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL_types.h @@ -1,32 +1,33 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_PW_Control_PSG_BackL_types.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL_types.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - -#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_BackL_types_h_ -#define powerwindow_RTW_HEADER_PW_Control_PSG_BackL_types_h_ - -/* Forward declaration for rtModel */ -typedef struct powerwindow_tag_RTM_PW_Control_PSG_BackL powerwindow_RT_MODEL_PW_Control_PSG_BackL; - -#endif /* RTW_HEADER_PW_Control_PSG_BackL_types_h_ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_PW_Control_PSG_BackL_types.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL_types.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_BackL_types_h_ +#define powerwindow_RTW_HEADER_PW_Control_PSG_BackL_types_h_ + +/* Forward declaration for rtModel */ +typedef struct powerwindow_tag_RTM_PW_Control_PSG_BackL + powerwindow_RT_MODEL_PW_Control_PSG_BackL; + +#endif /* RTW_HEADER_PW_Control_PSG_BackL_types_h_ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR.h index 383e2855c35d3b00ae7869240792a3c0ff26c371..c37115d67e82f66e282d95db022a84bc2fcb3a0f 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR.h @@ -1,126 +1,135 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_PW_Control_PSG_BackR.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - -#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_BackR_h_ -#define powerwindow_RTW_HEADER_PW_Control_PSG_BackR_h_ -#ifndef powerwindow_PW_Control_PSG_BackR_COMMON_INCLUDES_ -# define powerwindow_PW_Control_PSG_BackR_COMMON_INCLUDES_ -#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" -#include "../powerwindow_HeaderFiles/powerwindow_rtw_solver.h" -#endif /* powerwindow_PW_Control_PSG_BackR_COMMON_INCLUDES_*/ - -#include "../powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR_types.h" - -/* Shared type includes */ -#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" - -/* Child system includes */ -#include "../powerwindow_HeaderFiles/powerwindow_powerwindow_control.h" -#include "../powerwindow_HeaderFiles/powerwindow_debounce.h" -#include "../powerwindow_HeaderFiles/powerwindow_controlexclusion.h" - -/* Macros for accessing real-time model data structure */ -#ifndef powerwindow_PW_PSG_BackR_rtmGetErrorStatus -# define powerwindow_PW_PSG_BackR_rtmGetErrorStatus(rtm) ((rtm)->errorStatus) -#endif - -#ifndef powerwindow_PW_PSG_BackR_rtmSetErrorStatus -# define powerwindow_PW_PSG_BackR_rtmSetErrorStatus(rtm, val) ((rtm)->errorStatus = (val)) -#endif - -#ifndef powerwindow_PW_PSG_BackR_rtmGetErrorStatusPointer -# define powerwindow_PW_PSG_BackR_rtmGetErrorStatusPointer(rtm) ((const powerwindow_char_T **)(&((rtm)->errorStatus))) -#endif - -/* Block states (auto storage) for system '<Root>' */ -typedef struct { - powerwindow_rtMdlrefDWork_debounce_T Debounce_Up_DWORK1;/* '<S2>/Debounce_Up' */ - powerwindow_rtMdlrefDWork_debounce_T Debounce_Down_DWORK1;/* '<S2>/Debounce_Down' */ - powerwindow_rtMdlrefDWork_PowerWindow_contr PW_PSG_BackR_DWORK1;/* '<S1>/PW_PSG_BackR' */ -} powerwindow_D_Work_PW_Control_PSG_BackR; - -/* External inputs (root inport signals with auto storage) */ -typedef struct { - powerwindow_boolean_T Up_DRV; /* '<Root>/Up_DRV' */ - powerwindow_boolean_T Down_DRV; /* '<Root>/Down_DRV' */ - powerwindow_boolean_T endofdetectionrange; /* '<Root>/end of detection range' */ - powerwindow_uint8_T currentsense; /* '<Root>/current sense' */ - powerwindow_boolean_T Up_PSG_BackR; /* '<Root>/Up_PSG_BackR' */ - powerwindow_boolean_T Down_PSG_BackR; /* '<Root>/Down_PSG_BackR' */ -} powerwindow_ExternalInputs_PW_Control_PSG_BackR; - -/* External outputs (root outports fed by signals with auto storage) */ -typedef struct { - powerwindow_boolean_T window_up; /* '<Root>/window_up' */ - powerwindow_boolean_T window_down; /* '<Root>/window_down' */ - powerwindow_boolean_T overcurrent; /* '<Root>/overcurrent' */ - powerwindow_boolean_T pinch; /* '<Root>/pinch' */ - powerwindow_boolean_T wake; /* '<Root>/wake' */ -} powerwindow_ExternalOutputs_PW_Control_PSG_BackR; - -/* Real-time Model Data Structure */ -struct powerwindow_tag_RTM_PW_Control_PSG_BackR { - const powerwindow_char_T * volatile errorStatus; -}; - -/* Block states (auto storage) */ -extern powerwindow_D_Work_PW_Control_PSG_BackR powerwindow_PW_Control_PSG_BackR_DWork; - -/* External inputs (root inport signals with auto storage) */ -extern powerwindow_ExternalInputs_PW_Control_PSG_BackR powerwindow_PW_Control_PSG_BackR_U; - -/* External outputs (root outports fed by signals with auto storage) */ -extern powerwindow_ExternalOutputs_PW_Control_PSG_BackR powerwindow_PW_Control_PSG_BackR_Y; - -/* Model entry point functions */ -extern void powerwindow_PW_Control_PSG_BackR_initialize(void); -extern void powerwindow_PW_Control_PSG_BackR_main(void); -extern void powerwindow_PW_Control_PSG_BackR_terminate(void); - -/* Real-time Model object */ -extern powerwindow_RT_MODEL_PW_Control_PSG_BackR *const powerwindow_PW_Control_PSG_BackR_M; - -/*- - * The generated code includes comments that allow you to trace directly - * back to the appropriate location in the model. The basic format - * is <system>/block_name, where system is the system number (uniquely - * assigned by Simulink) and block_name is the name of the block. - * - * Note that this particular code originates from a subsystem build, - * and has its own system numbers different from the parent model. - * Refer to the system hierarchy for this subsystem below, and use the - * MATLAB hilite_system command to trace the generated code back - * to the parent model. For example, - * - * hilite_system('PowerWindow/PW_Control_PSG_BackR') - opens subsystem PowerWindow/PW_Control_PSG_BackR - * hilite_system('PowerWindow/PW_Control_PSG_BackR/Kp') - opens and selects block Kp - * - * Here is the system hierarchy for this model - * - * '<Root>' : 'PowerWindow' - * '<S1>' : 'PowerWindow/PW_Control_PSG_BackR' - * '<S2>' : 'PowerWindow/PW_Control_PSG_BackR/Debounce_PSG' - */ -#endif /* RTW_HEADER_PW_Control_PSG_h_*/ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_PW_Control_PSG_BackR.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_BackR_h_ +#define powerwindow_RTW_HEADER_PW_Control_PSG_BackR_h_ +#ifndef powerwindow_PW_Control_PSG_BackR_COMMON_INCLUDES_ +# define powerwindow_PW_Control_PSG_BackR_COMMON_INCLUDES_ +#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" +#include "../powerwindow_HeaderFiles/powerwindow_rtw_solver.h" +#endif /* powerwindow_PW_Control_PSG_BackR_COMMON_INCLUDES_*/ + +#include "../powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR_types.h" + +/* Shared type includes */ +#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" + +/* Child system includes */ +#include "../powerwindow_HeaderFiles/powerwindow_powerwindow_control.h" +#include "../powerwindow_HeaderFiles/powerwindow_debounce.h" +#include "../powerwindow_HeaderFiles/powerwindow_controlexclusion.h" + +/* Macros for accessing real-time model data structure */ +#ifndef powerwindow_PW_PSG_BackR_rtmGetErrorStatus +# define powerwindow_PW_PSG_BackR_rtmGetErrorStatus(rtm) ((rtm)->errorStatus) +#endif + +#ifndef powerwindow_PW_PSG_BackR_rtmSetErrorStatus +# define powerwindow_PW_PSG_BackR_rtmSetErrorStatus(rtm, val) ((rtm)->errorStatus = (val)) +#endif + +#ifndef powerwindow_PW_PSG_BackR_rtmGetErrorStatusPointer +# define powerwindow_PW_PSG_BackR_rtmGetErrorStatusPointer(rtm) ((const powerwindow_char_T **)(&((rtm)->errorStatus))) +#endif + +/* Block states (auto storage) for system '<Root>' */ +typedef struct { + powerwindow_rtMdlrefDWork_debounce_T Debounce_Up_DWORK1;/* '<S2>/Debounce_Up' */ + powerwindow_rtMdlrefDWork_debounce_T + Debounce_Down_DWORK1;/* '<S2>/Debounce_Down' */ + powerwindow_rtMdlrefDWork_PowerWindow_contr + PW_PSG_BackR_DWORK1;/* '<S1>/PW_PSG_BackR' */ +} powerwindow_D_Work_PW_Control_PSG_BackR; + +/* External inputs (root inport signals with auto storage) */ +typedef struct { + powerwindow_boolean_T Up_DRV; /* '<Root>/Up_DRV' */ + powerwindow_boolean_T Down_DRV; /* '<Root>/Down_DRV' */ + powerwindow_boolean_T + endofdetectionrange; /* '<Root>/end of detection range' */ + powerwindow_uint8_T currentsense; /* '<Root>/current sense' */ + powerwindow_boolean_T + Up_PSG_BackR; /* '<Root>/Up_PSG_BackR' */ + powerwindow_boolean_T + Down_PSG_BackR; /* '<Root>/Down_PSG_BackR' */ +} powerwindow_ExternalInputs_PW_Control_PSG_BackR; + +/* External outputs (root outports fed by signals with auto storage) */ +typedef struct { + powerwindow_boolean_T window_up; /* '<Root>/window_up' */ + powerwindow_boolean_T window_down; /* '<Root>/window_down' */ + powerwindow_boolean_T overcurrent; /* '<Root>/overcurrent' */ + powerwindow_boolean_T pinch; /* '<Root>/pinch' */ + powerwindow_boolean_T wake; /* '<Root>/wake' */ +} powerwindow_ExternalOutputs_PW_Control_PSG_BackR; + +/* Real-time Model Data Structure */ +struct powerwindow_tag_RTM_PW_Control_PSG_BackR { + const powerwindow_char_T *volatile errorStatus; +}; + +/* Block states (auto storage) */ +extern powerwindow_D_Work_PW_Control_PSG_BackR +powerwindow_PW_Control_PSG_BackR_DWork; + +/* External inputs (root inport signals with auto storage) */ +extern powerwindow_ExternalInputs_PW_Control_PSG_BackR +powerwindow_PW_Control_PSG_BackR_U; + +/* External outputs (root outports fed by signals with auto storage) */ +extern powerwindow_ExternalOutputs_PW_Control_PSG_BackR +powerwindow_PW_Control_PSG_BackR_Y; + +/* Model entry point functions */ +extern void powerwindow_PW_Control_PSG_BackR_initialize( void ); +extern void powerwindow_PW_Control_PSG_BackR_main( void ); +extern void powerwindow_PW_Control_PSG_BackR_terminate( void ); + +/* Real-time Model object */ +extern powerwindow_RT_MODEL_PW_Control_PSG_BackR *const +powerwindow_PW_Control_PSG_BackR_M; + +/*- + The generated code includes comments that allow you to trace directly + back to the appropriate location in the model. The basic format + is <system>/block_name, where system is the system number (uniquely + assigned by Simulink) and block_name is the name of the block. + + Note that this particular code originates from a subsystem build, + and has its own system numbers different from the parent model. + Refer to the system hierarchy for this subsystem below, and use the + MATLAB hilite_system command to trace the generated code back + to the parent model. For example, + + hilite_system('PowerWindow/PW_Control_PSG_BackR') - opens subsystem PowerWindow/PW_Control_PSG_BackR + hilite_system('PowerWindow/PW_Control_PSG_BackR/Kp') - opens and selects block Kp + + Here is the system hierarchy for this model + + '<Root>' : 'PowerWindow' + '<S1>' : 'PowerWindow/PW_Control_PSG_BackR' + '<S2>' : 'PowerWindow/PW_Control_PSG_BackR/Debounce_PSG' +*/ +#endif /* RTW_HEADER_PW_Control_PSG_h_*/ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR_private.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR_private.h index 3dc4a3f601205cd4a8dfa8c364051ba13e8947a2..40d0376540e91241176190243d0686d3ad7f12d3 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR_private.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR_private.h @@ -1,30 +1,30 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_PW_Control_PSG_BackR_private.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR_private.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - -#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_BackR_private_h_ -#define powerwindow_RTW_HEADER_PW_Control_PSG_BackR_private_h_ -#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" -#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" -#endif /* RTW_HEADER_PW_Control_PSG_BackR_private_h_ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_PW_Control_PSG_BackR_private.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR_private.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_BackR_private_h_ +#define powerwindow_RTW_HEADER_PW_Control_PSG_BackR_private_h_ +#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" +#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" +#endif /* RTW_HEADER_PW_Control_PSG_BackR_private_h_ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR_types.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR_types.h index fc22a6a4e5393a9a7699240648ee8cb3e55e817b..9c71f2891d2e84cdf2fa1294f5ac30907198169a 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR_types.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR_types.h @@ -1,31 +1,32 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_PW_Control_PSG_BackR_tyoes.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR_types.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ -#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_BackR_types_h_ -#define powerwindow_RTW_HEADER_PW_Control_PSG_BackR_types_h_ - -/* Forward declaration for rtModel */ -typedef struct powerwindow_tag_RTM_PW_Control_PSG_BackR powerwindow_RT_MODEL_PW_Control_PSG_BackR; - -#endif /* RTW_HEADER_PW_Control_PSG_BackR_types_h_ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_PW_Control_PSG_BackR_tyoes.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR_types.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ +#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_BackR_types_h_ +#define powerwindow_RTW_HEADER_PW_Control_PSG_BackR_types_h_ + +/* Forward declaration for rtModel */ +typedef struct powerwindow_tag_RTM_PW_Control_PSG_BackR + powerwindow_RT_MODEL_PW_Control_PSG_BackR; + +#endif /* RTW_HEADER_PW_Control_PSG_BackR_types_h_ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front.h index 9bcdfe8f86a9262b98bb1bae3271eb2403aac96e..bcff85e8a3f35ce2d49e67c647805096f202c44c 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front.h @@ -1,126 +1,135 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_PW_Control_PSG_Front.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - -#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_Front_h_ -#define powerwindow_RTW_HEADER_PW_Control_PSG_Front_h_ -#ifndef powerwindow_PW_Control_PSG_Front_COMMON_INCLUDES_ -# define powerwindow_PW_Control_PSG_Front_COMMON_INCLUDES_ -#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" -#include "../powerwindow_HeaderFiles/powerwindow_rtw_solver.h" -#endif /* powerwindow_PW_Control_PSG_Front_COMMON_INCLUDES_*/ - -#include "../powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front_types.h" - -/* Shared type includes */ -#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" - -/* Child system includes */ -#include "../powerwindow_HeaderFiles/powerwindow_powerwindow_control.h" -#include "../powerwindow_HeaderFiles/powerwindow_debounce.h" -#include "../powerwindow_HeaderFiles/powerwindow_controlexclusion.h" - -/* Macros for accessing real-time model data structure */ -#ifndef powerwindow_PW_PSG_Front_rtmGetErrorStatus -# define powerwindow_PW_PSG_Front_rtmGetErrorStatus(rtm) ((rtm)->errorStatus) -#endif - -#ifndef powerwindow_PW_PSG_Front_rtmSetErrorStatus -# define powerwindow_PW_PSG_Front_rtmSetErrorStatus(rtm, val) ((rtm)->errorStatus = (val)) -#endif - -#ifndef powerwindow_PW_PSG_Front_rtmGetErrorStatusPointer -# define powerwindow_PW_PSG_Front_rtmGetErrorStatusPointer(rtm) ((const powerwindow_char_T **)(&((rtm)->errorStatus))) -#endif - -/* Block states (auto storage) for system '<Root>' */ -typedef struct { - powerwindow_rtMdlrefDWork_debounce_T Debounce_Up_DWORK1;/* '<S2>/Debounce_Up' */ - powerwindow_rtMdlrefDWork_debounce_T Debounce_Down_DWORK1;/* '<S2>/Debounce_Down' */ - powerwindow_rtMdlrefDWork_PowerWindow_contr PW_PSG_Front_Front_DWORK1;/* '<S1>/PW_PSG_Front_Front' */ -} powerwindow_D_Work_PW_Control_PSG_Front; - -/* External inputs (root inport signals with auto storage) */ -typedef struct { - powerwindow_boolean_T Up_DRV; /* '<Root>/Up_DRV' */ - powerwindow_boolean_T Down_DRV; /* '<Root>/Down_DRV' */ - powerwindow_boolean_T endofdetectionrange; /* '<Root>/end of detection range' */ - powerwindow_uint8_T currentsense; /* '<Root>/current sense' */ - powerwindow_boolean_T Up_PSG_Front; /* '<Root>/Up_PSG_Front' */ - powerwindow_boolean_T Down_PSG_Front; /* '<Root>/Down_PSG_Front' */ -} powerwindow_ExternalInputs_PW_Control_PSG_Front; - -/* External outputs (root outports fed by signals with auto storage) */ -typedef struct { - powerwindow_boolean_T window_up; /* '<Root>/window_up' */ - powerwindow_boolean_T window_down; /* '<Root>/window_down' */ - powerwindow_boolean_T overcurrent; /* '<Root>/overcurrent' */ - powerwindow_boolean_T pinch; /* '<Root>/pinch' */ - powerwindow_boolean_T wake; /* '<Root>/wake' */ -} powerwindow_ExternalOutputs_PW_Control_PSG_Front; - -/* Real-time Model Data Structure */ -struct powerwindow_tag_RTM_PW_Control_PSG_Front { - const powerwindow_char_T * volatile errorStatus; -}; - -/* Block states (auto storage) */ -extern powerwindow_D_Work_PW_Control_PSG_Front powerwindow_PW_Control_PSG_Front_DWork; - -/* External inputs (root inport signals with auto storage) */ -extern powerwindow_ExternalInputs_PW_Control_PSG_Front powerwindow_PW_Control_PSG_Front_U; - -/* External outputs (root outports fed by signals with auto storage) */ -extern powerwindow_ExternalOutputs_PW_Control_PSG_Front powerwindow_PW_Control_PSG_Front_Y; - -/* Model entry point functions */ -extern void powerwindow_PW_Control_PSG_Front_initialize(void); -extern void powerwindow_PW_Control_PSG_Front_main(void); -extern void powerwindow_PW_Control_PSG_Front_terminate(void); - -/* Real-time Model object */ -extern powerwindow_RT_MODEL_PW_Control_PSG_Front *const powerwindow_PW_Control_PSG_Front_M; - -/*- - * The generated code includes comments that allow you to trace directly - * back to the appropriate location in the model. The basic format - * is <system>/block_name, where system is the system number (uniquely - * assigned by Simulink) and block_name is the name of the block. - * - * Note that this particular code originates from a subsystem build, - * and has its own system numbers different from the parent model. - * Refer to the system hierarchy for this subsystem below, and use the - * MATLAB hilite_system command to trace the generated code back - * to the parent model. For example, - * - * hilite_system('PowerWindow/PW_Control_PSG_Front') - opens subsystem PowerWindow/PW_Control_PSG_Front - * hilite_system('PowerWindow/PW_Control_PSG_Front/Kp') - opens and selects block Kp - * - * Here is the system hierarchy for this model - * - * '<Root>' : 'PowerWindow' - * '<S1>' : 'PowerWindow/PW_Control_PSG_Front' - * '<S2>' : 'PowerWindow/PW_Control_PSG_Front/Debounce_PSG_Front_Front' - */ -#endif /* RTW_HEADER_PW_Control_PSG_Front_h_*/ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_PW_Control_PSG_Front.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_Front_h_ +#define powerwindow_RTW_HEADER_PW_Control_PSG_Front_h_ +#ifndef powerwindow_PW_Control_PSG_Front_COMMON_INCLUDES_ +# define powerwindow_PW_Control_PSG_Front_COMMON_INCLUDES_ +#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" +#include "../powerwindow_HeaderFiles/powerwindow_rtw_solver.h" +#endif /* powerwindow_PW_Control_PSG_Front_COMMON_INCLUDES_*/ + +#include "../powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front_types.h" + +/* Shared type includes */ +#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" + +/* Child system includes */ +#include "../powerwindow_HeaderFiles/powerwindow_powerwindow_control.h" +#include "../powerwindow_HeaderFiles/powerwindow_debounce.h" +#include "../powerwindow_HeaderFiles/powerwindow_controlexclusion.h" + +/* Macros for accessing real-time model data structure */ +#ifndef powerwindow_PW_PSG_Front_rtmGetErrorStatus +# define powerwindow_PW_PSG_Front_rtmGetErrorStatus(rtm) ((rtm)->errorStatus) +#endif + +#ifndef powerwindow_PW_PSG_Front_rtmSetErrorStatus +# define powerwindow_PW_PSG_Front_rtmSetErrorStatus(rtm, val) ((rtm)->errorStatus = (val)) +#endif + +#ifndef powerwindow_PW_PSG_Front_rtmGetErrorStatusPointer +# define powerwindow_PW_PSG_Front_rtmGetErrorStatusPointer(rtm) ((const powerwindow_char_T **)(&((rtm)->errorStatus))) +#endif + +/* Block states (auto storage) for system '<Root>' */ +typedef struct { + powerwindow_rtMdlrefDWork_debounce_T Debounce_Up_DWORK1;/* '<S2>/Debounce_Up' */ + powerwindow_rtMdlrefDWork_debounce_T + Debounce_Down_DWORK1;/* '<S2>/Debounce_Down' */ + powerwindow_rtMdlrefDWork_PowerWindow_contr + PW_PSG_Front_Front_DWORK1;/* '<S1>/PW_PSG_Front_Front' */ +} powerwindow_D_Work_PW_Control_PSG_Front; + +/* External inputs (root inport signals with auto storage) */ +typedef struct { + powerwindow_boolean_T Up_DRV; /* '<Root>/Up_DRV' */ + powerwindow_boolean_T Down_DRV; /* '<Root>/Down_DRV' */ + powerwindow_boolean_T + endofdetectionrange; /* '<Root>/end of detection range' */ + powerwindow_uint8_T currentsense; /* '<Root>/current sense' */ + powerwindow_boolean_T + Up_PSG_Front; /* '<Root>/Up_PSG_Front' */ + powerwindow_boolean_T + Down_PSG_Front; /* '<Root>/Down_PSG_Front' */ +} powerwindow_ExternalInputs_PW_Control_PSG_Front; + +/* External outputs (root outports fed by signals with auto storage) */ +typedef struct { + powerwindow_boolean_T window_up; /* '<Root>/window_up' */ + powerwindow_boolean_T window_down; /* '<Root>/window_down' */ + powerwindow_boolean_T overcurrent; /* '<Root>/overcurrent' */ + powerwindow_boolean_T pinch; /* '<Root>/pinch' */ + powerwindow_boolean_T wake; /* '<Root>/wake' */ +} powerwindow_ExternalOutputs_PW_Control_PSG_Front; + +/* Real-time Model Data Structure */ +struct powerwindow_tag_RTM_PW_Control_PSG_Front { + const powerwindow_char_T *volatile errorStatus; +}; + +/* Block states (auto storage) */ +extern powerwindow_D_Work_PW_Control_PSG_Front +powerwindow_PW_Control_PSG_Front_DWork; + +/* External inputs (root inport signals with auto storage) */ +extern powerwindow_ExternalInputs_PW_Control_PSG_Front +powerwindow_PW_Control_PSG_Front_U; + +/* External outputs (root outports fed by signals with auto storage) */ +extern powerwindow_ExternalOutputs_PW_Control_PSG_Front +powerwindow_PW_Control_PSG_Front_Y; + +/* Model entry point functions */ +extern void powerwindow_PW_Control_PSG_Front_initialize( void ); +extern void powerwindow_PW_Control_PSG_Front_main( void ); +extern void powerwindow_PW_Control_PSG_Front_terminate( void ); + +/* Real-time Model object */ +extern powerwindow_RT_MODEL_PW_Control_PSG_Front *const +powerwindow_PW_Control_PSG_Front_M; + +/*- + The generated code includes comments that allow you to trace directly + back to the appropriate location in the model. The basic format + is <system>/block_name, where system is the system number (uniquely + assigned by Simulink) and block_name is the name of the block. + + Note that this particular code originates from a subsystem build, + and has its own system numbers different from the parent model. + Refer to the system hierarchy for this subsystem below, and use the + MATLAB hilite_system command to trace the generated code back + to the parent model. For example, + + hilite_system('PowerWindow/PW_Control_PSG_Front') - opens subsystem PowerWindow/PW_Control_PSG_Front + hilite_system('PowerWindow/PW_Control_PSG_Front/Kp') - opens and selects block Kp + + Here is the system hierarchy for this model + + '<Root>' : 'PowerWindow' + '<S1>' : 'PowerWindow/PW_Control_PSG_Front' + '<S2>' : 'PowerWindow/PW_Control_PSG_Front/Debounce_PSG_Front_Front' +*/ +#endif /* RTW_HEADER_PW_Control_PSG_Front_h_*/ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front_private.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front_private.h index 0a84437ee876028b0e78100d085dce8ee8e22f90..ea9caa9592b08bfdc3ffb80525745455c2eb26d6 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front_private.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front_private.h @@ -1,30 +1,30 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_PW_Control_PSG_Front_private.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - -#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_Front_private_h_ -#define powerwindow_RTW_HEADER_PW_Control_PSG_Front_private_h_ -#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" -#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" -#endif /* RTW_HEADER_PW_Control_PSG_Front_private_h_ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_PW_Control_PSG_Front_private.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_Front_private_h_ +#define powerwindow_RTW_HEADER_PW_Control_PSG_Front_private_h_ +#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" +#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" +#endif /* RTW_HEADER_PW_Control_PSG_Front_private_h_ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front_types.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front_types.h index 38eb15ae70b38361ee20d0ff2c2b7e32c29ddab4..adff704caea8e91577b4721a383eb2e40661b276 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front_types.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front_types.h @@ -1,33 +1,34 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_PW_Control_PSG_Front_types.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front_types.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - - -#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_Front_types_h_ -#define powerwindow_RTW_HEADER_PW_Control_PSG_Front_types_h_ - -/* Forward declaration for rtModel */ -typedef struct powerwindow_tag_RTM_PW_Control_PSG_Front powerwindow_RT_MODEL_PW_Control_PSG_Front; - -#endif /* RTW_HEADER_PW_Control_PSG_Front_types_h_ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_PW_Control_PSG_Front_types.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front_types.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + + +#ifndef powerwindow_RTW_HEADER_PW_Control_PSG_Front_types_h_ +#define powerwindow_RTW_HEADER_PW_Control_PSG_Front_types_h_ + +/* Forward declaration for rtModel */ +typedef struct powerwindow_tag_RTM_PW_Control_PSG_Front + powerwindow_RT_MODEL_PW_Control_PSG_Front; + +#endif /* RTW_HEADER_PW_Control_PSG_Front_types_h_ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_controlexclusion.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_controlexclusion.h index d59b8d9934ddcf4248682a2d997917bfa3279579..f3d528f3804d68b1d7b3423f514a6fbf41b794b2 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_controlexclusion.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_controlexclusion.h @@ -1,72 +1,74 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_controlexclusion.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_controlexclusion.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - -#ifndef powerwindow_RTW_HEADER_controlexclusion_h_ -#define powerwindow_RTW_HEADER_controlexclusion_h_ -#ifndef powerwindow_controlexclusion_COMMON_INCLUDES_ -#define powerwindow_controlexclusion_COMMON_INCLUDES_ -#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" - -#include "../powerwindow_HeaderFiles/powerwindow_rtw_solver.h" -#endif /* powerwindow_controlexclusion_COMMON_INCLUDES_ */ - -#include "../powerwindow_HeaderFiles/powerwindow_controlexclusion_types.h" - -/* Shared type includes */ -#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" - -/* user code (top of header file) */ - -/* Model reference registration function */ - -extern void powerwindow_controlexclusion_initialize(void); -extern void powerwindow_controlexclusion_terminate(void); -extern void powerwindow_controlexclusion_main(const powerwindow_boolean_T *rtu_Up_DRV, const powerwindow_boolean_T - *rtu_Down_DRV, const powerwindow_boolean_T *rtu_Up_PSG, const powerwindow_boolean_T *rtu_Down_PSG, - powerwindow_boolean_T *rty_Up, powerwindow_boolean_T *rty_Down); - -/*- - * The generated code includes comments that allow you to trace directly - * back to the appropriate location in the model. The basic format - * is <system>/block_name, where system is the system number (uniquely - * assigned by Simulink) and block_name is the name of the block. - * - * Use the MATLAB hilite_system command to trace the generated code back - * to the model. For example, - * - * hilite_system('<S3>') - opens system 3 - * hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3 - * - * Here is the system hierarchy for this model - * - * '<Root>' : 'ControlExclusion' - * '<S1>' : 'ControlExclusion/Control_Clock_TicToc' - * '<S2>' : 'ControlExclusion/Control_Clock_TicToc/ControlEx_PSG' - * '<S3>' : 'ControlExclusion/Control_Clock_TicToc/Tic' - * '<S4>' : 'powerwindow_controlexclusion_main/Control_Clock_TicToc/Toc' - * '<S5>' : 'ControlExclusion/Control_Clock_TicToc/Tic/Tic_T' - * '<S6>' : 'ControlExclusion/Control_Clock_TicToc/Toc/Toc_T' - */ -#endif /* RTW_HEADER_ControlExclusion_h_ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_controlexclusion.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_controlexclusion.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#ifndef powerwindow_RTW_HEADER_controlexclusion_h_ +#define powerwindow_RTW_HEADER_controlexclusion_h_ +#ifndef powerwindow_controlexclusion_COMMON_INCLUDES_ +#define powerwindow_controlexclusion_COMMON_INCLUDES_ +#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" + +#include "../powerwindow_HeaderFiles/powerwindow_rtw_solver.h" +#endif /* powerwindow_controlexclusion_COMMON_INCLUDES_ */ + +#include "../powerwindow_HeaderFiles/powerwindow_controlexclusion_types.h" + +/* Shared type includes */ +#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" + +/* user code (top of header file) */ + +/* Model reference registration function */ + +extern void powerwindow_controlexclusion_initialize( void ); +extern void powerwindow_controlexclusion_terminate( void ); +extern void powerwindow_controlexclusion_main( const powerwindow_boolean_T + *rtu_Up_DRV, const powerwindow_boolean_T + *rtu_Down_DRV, const powerwindow_boolean_T *rtu_Up_PSG, + const powerwindow_boolean_T *rtu_Down_PSG, + powerwindow_boolean_T *rty_Up, powerwindow_boolean_T *rty_Down ); + +/*- + The generated code includes comments that allow you to trace directly + back to the appropriate location in the model. The basic format + is <system>/block_name, where system is the system number (uniquely + assigned by Simulink) and block_name is the name of the block. + + Use the MATLAB hilite_system command to trace the generated code back + to the model. For example, + + hilite_system('<S3>') - opens system 3 + hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3 + + Here is the system hierarchy for this model + + '<Root>' : 'ControlExclusion' + '<S1>' : 'ControlExclusion/Control_Clock_TicToc' + '<S2>' : 'ControlExclusion/Control_Clock_TicToc/ControlEx_PSG' + '<S3>' : 'ControlExclusion/Control_Clock_TicToc/Tic' + '<S4>' : 'powerwindow_controlexclusion_main/Control_Clock_TicToc/Toc' + '<S5>' : 'ControlExclusion/Control_Clock_TicToc/Tic/Tic_T' + '<S6>' : 'ControlExclusion/Control_Clock_TicToc/Toc/Toc_T' +*/ +#endif /* RTW_HEADER_ControlExclusion_h_ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_controlexclusion_private.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_controlexclusion_private.h index 403fd68785a8006a57a05ffb932a7912007af99b..3d600bc7813e5138dfaa5592689c10c14802bccf 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_controlexclusion_private.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_controlexclusion_private.h @@ -1,30 +1,30 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_controlexclusion_private.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_controlexclusion_private.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - -#ifndef powerwindow_RTW_HEADER_controlexclusion_private_h_ -#define powerwindow_RTW_HEADER_controlexclusion_private_h_ -#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" -#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" -#endif /* RTW_HEADER_controlexclusion_private_h_ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_controlexclusion_private.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_controlexclusion_private.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#ifndef powerwindow_RTW_HEADER_controlexclusion_private_h_ +#define powerwindow_RTW_HEADER_controlexclusion_private_h_ +#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" +#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" +#endif /* RTW_HEADER_controlexclusion_private_h_ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_controlexclusion_types.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_controlexclusion_types.h index 3e389bff04efdfacabc24c6bc69aeef910bd384f..51b36a8e4bb88d5847c25343008dfcb56a366b79 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_controlexclusion_types.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_controlexclusion_types.h @@ -1,30 +1,30 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_controlexclusion_types.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_controlexclusion_types.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - -#ifndef powerwindow_RTW_HEADER_controlexclusion_types_h_ -#define powerwindow_RTW_HEADER_controlexclusion_types_h_ - -/* Forward declaration for rtModel */ -#endif /* powerwindow_RTW_HEADER_controlexclusion_types_h_ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_controlexclusion_types.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_controlexclusion_types.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#ifndef powerwindow_RTW_HEADER_controlexclusion_types_h_ +#define powerwindow_RTW_HEADER_controlexclusion_types_h_ + +/* Forward declaration for rtModel */ +#endif /* powerwindow_RTW_HEADER_controlexclusion_types_h_ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_debounce.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_debounce.h index d17f467843f456256bad61d7353052a946e8de03..58153f41676cd0dfefa0d312bb0b7c4a727cebb1 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_debounce.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_debounce.h @@ -1,96 +1,100 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_debounce.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_debounce.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - -#ifndef powerwindow_RTW_HEADER_debounce_h_ -#define powerwindow_RTW_HEADER_debounce_h_ -#ifndef powerwindow_debounce_COMMON_INCLUDES_ -#define powerwindow_debounce_COMMON_INCLUDES_ -#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" -#endif /* debounce_COMMON_INCLUDES_ */ - -#include "../powerwindow_HeaderFiles/powerwindow_debounce_types.h" - -/* Shared type includes */ -#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" - -/* Block signals for model 'powerwindow_debounce_main' */ -typedef struct { - powerwindow_boolean_T Q; /* '<Root>/Chart' */ -} powerwindow_rtB_debounce_T; - -/* Block states (auto storage) for model 'powerwindow_debounce_main' */ -typedef struct { - powerwindow_int32_T clockTickCounter; /* '<Root>/period of 10ms' */ - powerwindow_uint8_T is_active_c3_debounce; /* '<Root>/Chart' */ - powerwindow_uint8_T is_c3_debounce; /* '<Root>/Chart' */ - powerwindow_uint8_T is_debounce; /* '<Root>/Chart' */ - powerwindow_uint8_T temporalCounter_i1; /* '<Root>/Chart' */ -} powerwindow_rtDW_debounce_T; - -/* Zero-crossing (trigger) state for model 'powerwindow_debounce_main' */ -typedef struct { - ZCSigState Chart_Trig_ZCE; /* '<Root>/Chart' */ -} powerwindow_rtZCE_debounce_T; - -/* Real-time Model Data Structure */ -struct powerwindow_tag_RTM_debounce_T { - const powerwindow_char_T **errorStatus; -}; - -typedef struct { - powerwindow_rtB_debounce_T rtb; - powerwindow_rtDW_debounce_T rtdw; - powerwindow_RT_MODEL_debounce_T rtm; - powerwindow_rtZCE_debounce_T rtzce; -} powerwindow_rtMdlrefDWork_debounce_T; - -/* Model reference registration function */ -extern void powerwindow_debounce_initialize(const powerwindow_char_T **rt_errorStatus, - powerwindow_RT_MODEL_debounce_T *const debounce_M, powerwindow_rtB_debounce_T *localB, powerwindow_rtDW_debounce_T - *localDW, powerwindow_rtZCE_debounce_T *localZCE); -extern void powerwindow_debounce_Init(powerwindow_rtB_debounce_T *localB, powerwindow_rtDW_debounce_T *localDW); -extern void powerwindow_debounce_Start(powerwindow_rtDW_debounce_T *localDW); -extern void powerwindow_debounce_main(const powerwindow_boolean_T *rtu_Switch, powerwindow_boolean_T - *rty_debounced_Switch, powerwindow_rtB_debounce_T *localB, - powerwindow_rtDW_debounce_T *localDW, powerwindow_rtZCE_debounce_T *localZCE); - -/*- - * The generated code includes comments that allow you to trace directly - * back to the appropriate location in the model. The basic format - * is <system>/block_name, where system is the system number (uniquely - * assigned by Simulink) and block_name is the name of the block. - * - * Use the MATLAB hilite_system command to trace the generated code back - * to the model. For example, - * - * hilite_system('<S3>') - opens system 3 - * hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3 - * - * Here is the system hierarchy for this model - * - * '<Root>' : 'powerwindow_debounce_main' - * '<S1>' : 'powerwindow_debounce_main/Chart' - */ -#endif /* RTW_HEADER_debounce_h_ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_debounce.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_debounce.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#ifndef powerwindow_RTW_HEADER_debounce_h_ +#define powerwindow_RTW_HEADER_debounce_h_ +#ifndef powerwindow_debounce_COMMON_INCLUDES_ +#define powerwindow_debounce_COMMON_INCLUDES_ +#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" +#endif /* debounce_COMMON_INCLUDES_ */ + +#include "../powerwindow_HeaderFiles/powerwindow_debounce_types.h" + +/* Shared type includes */ +#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" + +/* Block signals for model 'powerwindow_debounce_main' */ +typedef struct { + powerwindow_boolean_T Q; /* '<Root>/Chart' */ +} powerwindow_rtB_debounce_T; + +/* Block states (auto storage) for model 'powerwindow_debounce_main' */ +typedef struct { + powerwindow_int32_T clockTickCounter; /* '<Root>/period of 10ms' */ + powerwindow_uint8_T is_active_c3_debounce; /* '<Root>/Chart' */ + powerwindow_uint8_T is_c3_debounce; /* '<Root>/Chart' */ + powerwindow_uint8_T is_debounce; /* '<Root>/Chart' */ + powerwindow_uint8_T temporalCounter_i1; /* '<Root>/Chart' */ +} powerwindow_rtDW_debounce_T; + +/* Zero-crossing (trigger) state for model 'powerwindow_debounce_main' */ +typedef struct { + ZCSigState Chart_Trig_ZCE; /* '<Root>/Chart' */ +} powerwindow_rtZCE_debounce_T; + +/* Real-time Model Data Structure */ +struct powerwindow_tag_RTM_debounce_T { + const powerwindow_char_T **errorStatus; +}; + +typedef struct { + powerwindow_rtB_debounce_T rtb; + powerwindow_rtDW_debounce_T rtdw; + powerwindow_RT_MODEL_debounce_T rtm; + powerwindow_rtZCE_debounce_T rtzce; +} powerwindow_rtMdlrefDWork_debounce_T; + +/* Model reference registration function */ +extern void powerwindow_debounce_initialize( const powerwindow_char_T + **rt_errorStatus, + powerwindow_RT_MODEL_debounce_T *const debounce_M, + powerwindow_rtB_debounce_T *localB, powerwindow_rtDW_debounce_T + *localDW, powerwindow_rtZCE_debounce_T *localZCE ); +extern void powerwindow_debounce_Init( powerwindow_rtB_debounce_T *localB, + powerwindow_rtDW_debounce_T *localDW ); +extern void powerwindow_debounce_Start( powerwindow_rtDW_debounce_T *localDW ); +extern void powerwindow_debounce_main( const powerwindow_boolean_T *rtu_Switch, + powerwindow_boolean_T + *rty_debounced_Switch, powerwindow_rtB_debounce_T *localB, + powerwindow_rtDW_debounce_T *localDW, powerwindow_rtZCE_debounce_T *localZCE ); + +/*- + The generated code includes comments that allow you to trace directly + back to the appropriate location in the model. The basic format + is <system>/block_name, where system is the system number (uniquely + assigned by Simulink) and block_name is the name of the block. + + Use the MATLAB hilite_system command to trace the generated code back + to the model. For example, + + hilite_system('<S3>') - opens system 3 + hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3 + + Here is the system hierarchy for this model + + '<Root>' : 'powerwindow_debounce_main' + '<S1>' : 'powerwindow_debounce_main/Chart' +*/ +#endif /* RTW_HEADER_debounce_h_ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_debounce_private.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_debounce_private.h index 069d44d9e5f6136e468ba7c8e9ff812537f8772a..1d0f48412ab9dd5301010396ca1a8da5d620c25d 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_debounce_private.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_debounce_private.h @@ -1,46 +1,46 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_debounce_private.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_debounce_private.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ -#ifndef powerwindow_RTW_HEADER_debounce_private_h_ -#define powerwindow_RTW_HEADER_debounce_private_h_ -#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" -#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" - -/* Macros for accessing real-time model data structure */ -#ifndef powerwindow_rtmGetErrorStatus -# define powerwindow_rtmGetErrorStatus(rtm) (*((rtm)->errorStatus)) -#endif - -#ifndef powerwindow_rtmSetErrorStatus -# define powerwindow_rtmSetErrorStatus(rtm, val) (*((rtm)->errorStatus) = (val)) -#endif - -#ifndef powerwindow_rtmGetErrorStatusPointer -# define powerwindow_rtmGetErrorStatusPointer(rtm) (rtm)->errorStatus -#endif - -#ifndef powerwindow_rtmSetErrorStatusPointer -# define powerwindow_rtmSetErrorStatusPointer(rtm, val) ((rtm)->errorStatus = (val)) -#endif -#endif /* RTW_HEADER_debounce_private_h_ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_debounce_private.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_debounce_private.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ +#ifndef powerwindow_RTW_HEADER_debounce_private_h_ +#define powerwindow_RTW_HEADER_debounce_private_h_ +#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" +#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" + +/* Macros for accessing real-time model data structure */ +#ifndef powerwindow_rtmGetErrorStatus +# define powerwindow_rtmGetErrorStatus(rtm) (*((rtm)->errorStatus)) +#endif + +#ifndef powerwindow_rtmSetErrorStatus +# define powerwindow_rtmSetErrorStatus(rtm, val) (*((rtm)->errorStatus) = (val)) +#endif + +#ifndef powerwindow_rtmGetErrorStatusPointer +# define powerwindow_rtmGetErrorStatusPointer(rtm) (rtm)->errorStatus +#endif + +#ifndef powerwindow_rtmSetErrorStatusPointer +# define powerwindow_rtmSetErrorStatusPointer(rtm, val) ((rtm)->errorStatus = (val)) +#endif +#endif /* RTW_HEADER_debounce_private_h_ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_debounce_types.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_debounce_types.h index e3d3549e22698b81feb4bdaecd7194564e6856a6..879e50b3945d69b5433f04f8ad35b69f60080941 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_debounce_types.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_debounce_types.h @@ -1,31 +1,31 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_debounce_types.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_debounce_types.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ -#ifndef powerwindow_RTW_HEADER_debounce_types_h_ -#define powerwindow_RTW_HEADER_debounce_types_h_ - -/* Forward declaration for rtModel */ -typedef struct powerwindow_tag_RTM_debounce_T powerwindow_RT_MODEL_debounce_T; - -#endif /* RTW_HEADER_debounce_types_h_ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_debounce_types.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_debounce_types.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ +#ifndef powerwindow_RTW_HEADER_debounce_types_h_ +#define powerwindow_RTW_HEADER_debounce_types_h_ + +/* Forward declaration for rtModel */ +typedef struct powerwindow_tag_RTM_debounce_T powerwindow_RT_MODEL_debounce_T; + +#endif /* RTW_HEADER_debounce_types_h_ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_model_reference_types.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_model_reference_types.h index c2dda9e1e7d57f9c41d39d87ae5112ee9656bf2a..bb56100e34c6ecd5e492552034625c77b38b7ffc 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_model_reference_types.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_model_reference_types.h @@ -1,51 +1,51 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_model_reference_types.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_model_reference_types.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - -#ifndef powerwindow___MODEL_REFERENCE_TYPES_H__ -#define powerwindow___MODEL_REFERENCE_TYPES_H__ -#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" -#ifndef powerwindow___MODEL_REFERENCE_TYPES__ -#define powerwindow___MODEL_REFERENCE_TYPES__ - -/*===========================================================================* - * Model reference type definitions * - *===========================================================================*/ -/* - * This structure is used by model reference to - * communicate timing information through the hierarchy. - */ -typedef struct powerwindow__rtTimingBridge_tag powerwindow_rtTimingBridge; -struct powerwindow__rtTimingBridge_tag { - powerwindow_uint32_T nTasks; - powerwindow_uint32_T** clockTick; - powerwindow_uint32_T** clockTickH; - powerwindow_uint32_T* taskCounter; - powerwindow_real_T** taskTime; - powerwindow_boolean_T** rateTransition; - powerwindow_boolean_T *firstInitCond; -}; - -#endif /* __MODEL_REFERENCE_TYPES__ */ -#endif /* __MODEL_REFERENCE_TYPES_H__ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_model_reference_types.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_model_reference_types.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#ifndef powerwindow___MODEL_REFERENCE_TYPES_H__ +#define powerwindow___MODEL_REFERENCE_TYPES_H__ +#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" +#ifndef powerwindow___MODEL_REFERENCE_TYPES__ +#define powerwindow___MODEL_REFERENCE_TYPES__ + +/*===========================================================================* + Model reference type definitions + ===========================================================================*/ +/* + This structure is used by model reference to + communicate timing information through the hierarchy. +*/ +typedef struct powerwindow__rtTimingBridge_tag powerwindow_rtTimingBridge; +struct powerwindow__rtTimingBridge_tag { + powerwindow_uint32_T nTasks; + powerwindow_uint32_T **clockTick; + powerwindow_uint32_T **clockTickH; + powerwindow_uint32_T *taskCounter; + powerwindow_real_T **taskTime; + powerwindow_boolean_T **rateTransition; + powerwindow_boolean_T *firstInitCond; +}; + +#endif /* __MODEL_REFERENCE_TYPES__ */ +#endif /* __MODEL_REFERENCE_TYPES_H__ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control.h index 1c0f950fcde084ac1d9e32444776e8d07a30c78e..3b402d10c238450c007f7f1ed32daf3e27c0ac50 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control.h @@ -1,135 +1,137 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_powerwindow_control.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - -#ifndef powerwindow_RTW_HEADER_PowerWindow_control_h_ -#define powerwindow_RTW_HEADER_PowerWindow_control_h_ -#ifndef powerwindow_powerWindow_control_COMMON_INCLUDES_ -# define powerwindow_powerWindow_control_COMMON_INCLUDES_ -#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" - -#include "../powerwindow_HeaderFiles/powerwindow_rtw_solver.h" -#endif /* PowerWindow_control_COMMON_INCLUDES_ */ - -#include "../powerwindow_HeaderFiles/powerwindow_powerwindow_control_types.h" -#include "../powerwindow_HeaderFiles/powerwindow_powerwindow_control_private.h" - -/* Shared type includes */ -#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" - -/* user code (top of header file) */ - -/* Block signals for model 'PowerWindow_control' */ -typedef struct { - powerwindow_uint8_T RateTransition1; /* '<S2>/Rate Transition1' */ - powerwindow_boolean_T LogicalOperator; /* '<S2>/Logical Operator' */ - powerwindow_boolean_T map[3]; /* '<S2>/map' */ -} powerwindow_rtB_PowerWindow_control; - -/* Block states (auto storage) for model 'PowerWindow_control' */ -typedef struct { - powerwindow_int32_T clockTickCounter; /* '<S2>/period of 50ms' */ - powerwindow_uint8_T is_active_c2_PowerWindow_contro;/* '<S2>/stateflow control model' */ - powerwindow_uint8_T is_c2_PowerWindow_control; /* '<S2>/stateflow control model' */ - powerwindow_uint8_T is_Up; /* '<S2>/stateflow control model' */ - powerwindow_uint8_T is_Down; /* '<S2>/stateflow control model' */ - powerwindow_uint8_T is_Logic; /* '<S2>/stateflow control model' */ - powerwindow_uint8_T is_active_Logic; /* '<S2>/stateflow control model' */ - powerwindow_uint8_T is_Sensing; /* '<S2>/stateflow control model' */ - powerwindow_uint8_T is_active_Sensing; /* '<S2>/stateflow control model' */ - powerwindow_uint8_T temporalCounter_i1; /* '<S2>/stateflow control model' */ - powerwindow_uint8_T temporalCounter_i2; /* '<S2>/stateflow control model' */ -} powerwindow_rtDW_PowerWindow_control; - -/* Zero-crossing (trigger) state for model 'PowerWindow_control' */ -typedef struct { - ZCSigState stateflowcontrolmodel_Trig_ZCE;/* '<S2>/stateflow control model' */ -} powerwindow_rtZCE_PowerWindow_control; - -/* Real-time Model Data Structure */ -struct powerwindow_tag_RTM_PowerWindow_control{ - const powerwindow_char_T **errorStatus; -}; - -typedef struct { - powerwindow_rtB_PowerWindow_control rtb; - powerwindow_rtDW_PowerWindow_control rtdw; - powerwindow_RT_MODEL_PowerWindow_control rtm; - powerwindow_rtZCE_PowerWindow_control rtzce; -} powerwindow_rtMdlrefDWork_PowerWindow_contr; - - - -/* Model reference registration function */ -extern void powerwindow_powerwindow_control_initialize( - const powerwindow_char_T **rt_errorStatus, - powerwindow_RT_MODEL_PowerWindow_control * const PowerWindow_control_M, - powerwindow_rtB_PowerWindow_control *localB, - powerwindow_rtDW_PowerWindow_control *localDW, - powerwindow_rtZCE_PowerWindow_control *localZCE); -extern void powerwindow_powerwindow_control_Init( - powerwindow_boolean_T *rty_window_up, - powerwindow_boolean_T *rty_window_down, - powerwindow_boolean_T *rty_overcurrent, - powerwindow_boolean_T *rty_pinch, powerwindow_boolean_T * rty_wake, - powerwindow_rtDW_PowerWindow_control *localDW); -extern void powerwindow_powerwindow_control_Start( - powerwindow_rtDW_PowerWindow_control *localDW); -extern void powerwindow_powerwindow_control_main( - const powerwindow_boolean_T *rtu_up, - const powerwindow_boolean_T *rtu_down, - const powerwindow_boolean_T *rtu_endofdetectionrange, - const powerwindow_uint8_T *rtu_currentsense, - powerwindow_boolean_T *rty_window_up, - powerwindow_boolean_T *rty_window_down, - powerwindow_boolean_T *rty_overcurrent, - powerwindow_boolean_T *rty_pinch, powerwindow_boolean_T *rty_wake, - powerwindow_rtB_PowerWindow_control *localB, - powerwindow_rtDW_PowerWindow_control *localDW, - powerwindow_rtZCE_PowerWindow_control *localZCE); - -/*- - * The generated code includes comments that allow you to trace directly - * back to the appropriate location in the model. The basic format - * is <system>/block_name, where system is the system number (uniquely - * assigned by Simulink) and block_name is the name of the block. - * - * Use the MATLAB hilite_system command to trace the generated code back - * to the model. For example, - * - * hilite_system('<S3>') - opens system 3 - * hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3 - * - * Here is the system hierarchy for this model - * - * '<Root>' : 'PowerWindow_control' - * '<S1>' : 'PowerWindow_control/PW_PSG' - * '<S2>' : 'PowerWindow_control/PW_PSG/PW_PSG' - * '<S3>' : 'PowerWindow_control/PW_PSG/Tic' - * '<S4>' : 'PowerWindow_control/PW_PSG/Toc' - * '<S5>' : 'PowerWindow_control/PW_PSG/PW_PSG/stateflow control model' - * '<S6>' : 'PowerWindow_control/PW_PSG/Tic/Tic_T' - * '<S7>' : 'PowerWindow_control/PW_PSG/Toc/Toc_T' - */ -#endif /* powerwindow_RTW_HEADER_PowerWindow_control_h_ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_powerwindow_control.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#ifndef powerwindow_RTW_HEADER_PowerWindow_control_h_ +#define powerwindow_RTW_HEADER_PowerWindow_control_h_ +#ifndef powerwindow_powerWindow_control_COMMON_INCLUDES_ +# define powerwindow_powerWindow_control_COMMON_INCLUDES_ +#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" + +#include "../powerwindow_HeaderFiles/powerwindow_rtw_solver.h" +#endif /* PowerWindow_control_COMMON_INCLUDES_ */ + +#include "../powerwindow_HeaderFiles/powerwindow_powerwindow_control_types.h" +#include "../powerwindow_HeaderFiles/powerwindow_powerwindow_control_private.h" + +/* Shared type includes */ +#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" + +/* user code (top of header file) */ + +/* Block signals for model 'PowerWindow_control' */ +typedef struct { + powerwindow_uint8_T RateTransition1; /* '<S2>/Rate Transition1' */ + powerwindow_boolean_T LogicalOperator; /* '<S2>/Logical Operator' */ + powerwindow_boolean_T map[ 3 ]; /* '<S2>/map' */ +} powerwindow_rtB_PowerWindow_control; + +/* Block states (auto storage) for model 'PowerWindow_control' */ +typedef struct { + powerwindow_int32_T clockTickCounter; /* '<S2>/period of 50ms' */ + powerwindow_uint8_T + is_active_c2_PowerWindow_contro;/* '<S2>/stateflow control model' */ + powerwindow_uint8_T + is_c2_PowerWindow_control; /* '<S2>/stateflow control model' */ + powerwindow_uint8_T is_Up; /* '<S2>/stateflow control model' */ + powerwindow_uint8_T is_Down; /* '<S2>/stateflow control model' */ + powerwindow_uint8_T is_Logic; /* '<S2>/stateflow control model' */ + powerwindow_uint8_T is_active_Logic; /* '<S2>/stateflow control model' */ + powerwindow_uint8_T is_Sensing; /* '<S2>/stateflow control model' */ + powerwindow_uint8_T is_active_Sensing; /* '<S2>/stateflow control model' */ + powerwindow_uint8_T temporalCounter_i1; /* '<S2>/stateflow control model' */ + powerwindow_uint8_T temporalCounter_i2; /* '<S2>/stateflow control model' */ +} powerwindow_rtDW_PowerWindow_control; + +/* Zero-crossing (trigger) state for model 'PowerWindow_control' */ +typedef struct { + ZCSigState stateflowcontrolmodel_Trig_ZCE;/* '<S2>/stateflow control model' */ +} powerwindow_rtZCE_PowerWindow_control; + +/* Real-time Model Data Structure */ +struct powerwindow_tag_RTM_PowerWindow_control { + const powerwindow_char_T **errorStatus; +}; + +typedef struct { + powerwindow_rtB_PowerWindow_control rtb; + powerwindow_rtDW_PowerWindow_control rtdw; + powerwindow_RT_MODEL_PowerWindow_control rtm; + powerwindow_rtZCE_PowerWindow_control rtzce; +} powerwindow_rtMdlrefDWork_PowerWindow_contr; + + + +/* Model reference registration function */ +extern void powerwindow_powerwindow_control_initialize( + const powerwindow_char_T **rt_errorStatus, + powerwindow_RT_MODEL_PowerWindow_control *const PowerWindow_control_M, + powerwindow_rtB_PowerWindow_control *localB, + powerwindow_rtDW_PowerWindow_control *localDW, + powerwindow_rtZCE_PowerWindow_control *localZCE ); +extern void powerwindow_powerwindow_control_Init( + powerwindow_boolean_T *rty_window_up, + powerwindow_boolean_T *rty_window_down, + powerwindow_boolean_T *rty_overcurrent, + powerwindow_boolean_T *rty_pinch, powerwindow_boolean_T *rty_wake, + powerwindow_rtDW_PowerWindow_control *localDW ); +extern void powerwindow_powerwindow_control_Start( + powerwindow_rtDW_PowerWindow_control *localDW ); +extern void powerwindow_powerwindow_control_main( + const powerwindow_boolean_T *rtu_up, + const powerwindow_boolean_T *rtu_down, + const powerwindow_boolean_T *rtu_endofdetectionrange, + const powerwindow_uint8_T *rtu_currentsense, + powerwindow_boolean_T *rty_window_up, + powerwindow_boolean_T *rty_window_down, + powerwindow_boolean_T *rty_overcurrent, + powerwindow_boolean_T *rty_pinch, powerwindow_boolean_T *rty_wake, + powerwindow_rtB_PowerWindow_control *localB, + powerwindow_rtDW_PowerWindow_control *localDW, + powerwindow_rtZCE_PowerWindow_control *localZCE ); + +/*- + The generated code includes comments that allow you to trace directly + back to the appropriate location in the model. The basic format + is <system>/block_name, where system is the system number (uniquely + assigned by Simulink) and block_name is the name of the block. + + Use the MATLAB hilite_system command to trace the generated code back + to the model. For example, + + hilite_system('<S3>') - opens system 3 + hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3 + + Here is the system hierarchy for this model + + '<Root>' : 'PowerWindow_control' + '<S1>' : 'PowerWindow_control/PW_PSG' + '<S2>' : 'PowerWindow_control/PW_PSG/PW_PSG' + '<S3>' : 'PowerWindow_control/PW_PSG/Tic' + '<S4>' : 'PowerWindow_control/PW_PSG/Toc' + '<S5>' : 'PowerWindow_control/PW_PSG/PW_PSG/stateflow control model' + '<S6>' : 'PowerWindow_control/PW_PSG/Tic/Tic_T' + '<S7>' : 'PowerWindow_control/PW_PSG/Toc/Toc_T' +*/ +#endif /* powerwindow_RTW_HEADER_PowerWindow_control_h_ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control_private.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control_private.h index 47334915e9889c033d8bc37e4b2a63f847b006fa..33c85901f8f0c424caf8b7090f3444bafabb633b 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control_private.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control_private.h @@ -1,52 +1,52 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_powerwindow_control_private.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control_private.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ -#ifndef powerwindow_RTW_HEADER_PowerWindow_control_private_h_ -#define powerwindow_RTW_HEADER_PowerWindow_control_private_h_ -#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" -#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" - -/* Macros for accessing real-time model data structure */ -#ifndef powerwindow_powerwindow_control_rtmGetErrorStatus -# define powerwindow_powerwindow_control_rtmGetErrorStatus(rtm) (*((rtm)->errorStatus)) -#endif - -#ifndef powerwindow_powerwindow_control_rtmSetErrorStatus -# define powerwindow_powerwindow_control_rtmSetErrorStatus(rtm, val) (*((rtm)->errorStatus) = (val)) -#endif - -#ifndef powerwindow_powerwindow_control_rtmGetErrorStatusPointer -# define powerwindow_powerwindow_control_rtmGetErrorStatusPointer(rtm) (rtm)->errorStatus -#endif - -#ifndef powerwindow_powerwindow_control_rtmSetErrorStatusPointer -# define powerwindow_powerwindow_control_rtmSetErrorStatusPointer(rtm, val) ((rtm)->errorStatus = (val)) -#endif - -extern const powerwindow_boolean_T powerwindow_rtCP_pooled_6bUUQf1tASYw[12]; - -#define rtCP_map_table powerwindow_rtCP_pooled_6bUUQf1tASYw /* Computed Parameter: map_table - * Referenced by: '<S2>/map' - */ -#endif /* RTW_HEADER_PowerWindow_control_private_h_ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_powerwindow_control_private.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control_private.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ +#ifndef powerwindow_RTW_HEADER_PowerWindow_control_private_h_ +#define powerwindow_RTW_HEADER_PowerWindow_control_private_h_ +#include "../powerwindow_HeaderFiles/powerwindow_rtwtypes.h" +#include "../powerwindow_HeaderFiles/powerwindow_model_reference_types.h" + +/* Macros for accessing real-time model data structure */ +#ifndef powerwindow_powerwindow_control_rtmGetErrorStatus +# define powerwindow_powerwindow_control_rtmGetErrorStatus(rtm) (*((rtm)->errorStatus)) +#endif + +#ifndef powerwindow_powerwindow_control_rtmSetErrorStatus +# define powerwindow_powerwindow_control_rtmSetErrorStatus(rtm, val) (*((rtm)->errorStatus) = (val)) +#endif + +#ifndef powerwindow_powerwindow_control_rtmGetErrorStatusPointer +# define powerwindow_powerwindow_control_rtmGetErrorStatusPointer(rtm) (rtm)->errorStatus +#endif + +#ifndef powerwindow_powerwindow_control_rtmSetErrorStatusPointer +# define powerwindow_powerwindow_control_rtmSetErrorStatusPointer(rtm, val) ((rtm)->errorStatus = (val)) +#endif + +extern const powerwindow_boolean_T powerwindow_rtCP_pooled_6bUUQf1tASYw[ 12 ]; + +#define rtCP_map_table powerwindow_rtCP_pooled_6bUUQf1tASYw /* Computed Parameter: map_table + Referenced by: '<S2>/map' +*/ +#endif /* RTW_HEADER_PowerWindow_control_private_h_ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control_types.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control_types.h index 0f96b56889667f509f69099331e4a5331ae9e72a..c8b2affbefa347e31783246352b8164fd7ab35e6 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control_types.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control_types.h @@ -1,33 +1,34 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_powerwindow_control_types.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control_types.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - - -#ifndef powerwindow_RTW_HEADER_powerwindow_control_types_h_ -#define powerwindow_RTW_HEADER_powerwindow_control_types_h_ - -/* Forward declaration for rtModel */ -typedef struct powerwindow_tag_RTM_PowerWindow_control powerwindow_RT_MODEL_PowerWindow_control; - -#endif /* RTW_HEADER_powerwindow_control_types_h_ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_powerwindow_control_types.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_powerwindow_control_types.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + + +#ifndef powerwindow_RTW_HEADER_powerwindow_control_types_h_ +#define powerwindow_RTW_HEADER_powerwindow_control_types_h_ + +/* Forward declaration for rtModel */ +typedef struct powerwindow_tag_RTM_PowerWindow_control + powerwindow_RT_MODEL_PowerWindow_control; + +#endif /* RTW_HEADER_powerwindow_control_types_h_ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_rtw_continuous.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_rtw_continuous.h index 5cab83fdc5600312e449b09521827f6b6bb67d5f..efaf79b53adcfd8554bedd7eaeb3d81cd4eba065 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_rtw_continuous.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_rtw_continuous.h @@ -1,21 +1,21 @@ /* - This program is part of the TACLeBench benchmark suite. - Version V 1.x + This program is part of the TACLeBench benchmark suite. + Version V 1.x - Name: powerwindow_rtw_continuous.h + Name: powerwindow_rtw_continuous.h - Author: CoSys-Lab, University of Antwerp + Author: CoSys-Lab, University of Antwerp - Function: headerfile + Function: headerfile - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_rtw_continuous.h + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_rtw_continuous.h - Changes: a brief summary of major functional changes and formatting) + Changes: a brief summary of major functional changes and formatting) - License: GNU General Public License + License: GNU General Public License - */ +*/ #ifndef powerwindow___RTW_CONTINUOUS_H__ #define powerwindow___RTW_CONTINUOUS_H__ @@ -24,61 +24,63 @@ /* For models registering MassMatrix */ typedef enum { - SS_MATRIX_NONE, - SS_MATRIX_CONSTANT, - SS_MATRIX_TIMEDEP, - SS_MATRIX_STATEDEP + SS_MATRIX_NONE, + SS_MATRIX_CONSTANT, + SS_MATRIX_TIMEDEP, + SS_MATRIX_STATEDEP } powerwindow_ssMatrixType; typedef enum { - SOLVER_MODE_AUTO, /* only occurs in + SOLVER_MODE_AUTO, /* only occurs in mdlInitializeSizes/mdlInitializeSampleTimes */ - SOLVER_MODE_SINGLETASKING, - SOLVER_MODE_MULTITASKING + SOLVER_MODE_SINGLETASKING, + SOLVER_MODE_MULTITASKING } powerwindow_SolverMode; typedef enum { - MINOR_TIME_STEP, - MAJOR_TIME_STEP + MINOR_TIME_STEP, + MAJOR_TIME_STEP } powerwindow_SimTimeStep; /* ============================================================================= - * Model methods object - * ============================================================================= - */ -typedef void (*powerwindow_rtMdlInitializeSizesFcn)(void *rtModel); -typedef void (*powerwindow_rtMdlInitializeSampleTimesFcn)(void *rtModel); -typedef void (*powerwindow_rtMdlStartFcn)(void *rtModel); -typedef void (*powerwindow_rtMdlOutputsFcn)(void *rtModel, powerwindow_int_T tid); -typedef void (*powerwindow_rtMdlUpdateFcn)(void *rtModel, powerwindow_int_T tid); -typedef void (*powerwindow_rtMdlDerivativesFcn)(void *rtModel); -typedef void (*powerwindow_rtMdlProjectionFcn)(void *rtModel); -typedef void (*powerwindow_rtMdlMassMatrixFcn)(void *rtModel); -typedef void (*powerwindow_rtMdlForcingFunctionFcn)(void *rtModel); -typedef void (*powerwindow_rtMdlTerminateFcn)(void *rtModel); + Model methods object + ============================================================================= +*/ +typedef void ( *powerwindow_rtMdlInitializeSizesFcn )( void *rtModel ); +typedef void ( *powerwindow_rtMdlInitializeSampleTimesFcn )( void *rtModel ); +typedef void ( *powerwindow_rtMdlStartFcn )( void *rtModel ); +typedef void ( *powerwindow_rtMdlOutputsFcn )( void *rtModel, + powerwindow_int_T tid ); +typedef void ( *powerwindow_rtMdlUpdateFcn )( void *rtModel, + powerwindow_int_T tid ); +typedef void ( *powerwindow_rtMdlDerivativesFcn )( void *rtModel ); +typedef void ( *powerwindow_rtMdlProjectionFcn )( void *rtModel ); +typedef void ( *powerwindow_rtMdlMassMatrixFcn )( void *rtModel ); +typedef void ( *powerwindow_rtMdlForcingFunctionFcn )( void *rtModel ); +typedef void ( *powerwindow_rtMdlTerminateFcn )( void *rtModel ); #ifdef RT_MALLOC -typedef real_T (*rtMdlDiscreteEventsFcn)(void *pModel, - powerwindow_int_T rtmNumSampTimes, - void *rtmTimingData, - powerwindow_int_T *rtmSampleHitPtr, - powerwindow_int_T *rtmPerTaskSampleHits); +typedef real_T ( *rtMdlDiscreteEventsFcn )( void *pModel, + powerwindow_int_T rtmNumSampTimes, + void *rtmTimingData, + powerwindow_int_T *rtmSampleHitPtr, + powerwindow_int_T *rtmPerTaskSampleHits ); #endif typedef struct powerwindow__RTWRTModelMethodsInfo_tag { - void *rtModelPtr; - powerwindow_rtMdlInitializeSizesFcn rtmInitSizesFcn; - powerwindow_rtMdlInitializeSampleTimesFcn rtmInitSampTimesFcn; - powerwindow_rtMdlStartFcn rtmStartFcn; - powerwindow_rtMdlOutputsFcn rtmOutputsFcn; - powerwindow_rtMdlUpdateFcn rtmUpdateFcn; - powerwindow_rtMdlDerivativesFcn rtmDervisFcn; - powerwindow_rtMdlProjectionFcn rtmProjectionFcn; - powerwindow_rtMdlMassMatrixFcn rtmMassMatrixFcn; - powerwindow_rtMdlForcingFunctionFcn rtmForcingFunctionFcn; - powerwindow_rtMdlTerminateFcn rtmTerminateFcn; -#ifdef RT_MALLOC - rtMdlDiscreteEventsFcn rtmDiscreteEventsFcn; -#endif + void *rtModelPtr; + powerwindow_rtMdlInitializeSizesFcn rtmInitSizesFcn; + powerwindow_rtMdlInitializeSampleTimesFcn rtmInitSampTimesFcn; + powerwindow_rtMdlStartFcn rtmStartFcn; + powerwindow_rtMdlOutputsFcn rtmOutputsFcn; + powerwindow_rtMdlUpdateFcn rtmUpdateFcn; + powerwindow_rtMdlDerivativesFcn rtmDervisFcn; + powerwindow_rtMdlProjectionFcn rtmProjectionFcn; + powerwindow_rtMdlMassMatrixFcn rtmMassMatrixFcn; + powerwindow_rtMdlForcingFunctionFcn rtmForcingFunctionFcn; + powerwindow_rtMdlTerminateFcn rtmTerminateFcn; + #ifdef RT_MALLOC + rtMdlDiscreteEventsFcn rtmDiscreteEventsFcn; + #endif } powerwindow_RTWRTModelMethodsInfo; #define rtmiSetRTModelPtr(M,rtmp) ((M).rtModelPtr = (rtmp)) diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_rtw_solver.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_rtw_solver.h index 2e0895ea75c9180556d6f5d1e327cd00ba88f53f..8114fbe465bf53b405f193d16ec4fa80f3e4e29a 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_rtw_solver.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_rtw_solver.h @@ -1,121 +1,121 @@ /* - This program is part of the TACLeBench benchmark suite. - Version V 1.x + This program is part of the TACLeBench benchmark suite. + Version V 1.x - Name: powerwindow_rtw_solver.h + Name: powerwindow_rtw_solver.h - Author: CoSys-Lab, University of Antwerp + Author: CoSys-Lab, University of Antwerp - Function: headerfile + Function: headerfile - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_rtw_solver.h + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_rtw_solver.h - Changes: a brief summary of major functional changes and formatting) + Changes: a brief summary of major functional changes and formatting) - License: GNU General Public License + License: GNU General Public License - */ +*/ #ifndef powerwindow___RTW_SOLVER_H__ #define powerwindow___RTW_SOLVER_H__ /* ============================================================================= - * Solver object - * ============================================================================= - */ + Solver object + ============================================================================= +*/ #ifndef NO_FLOATS /* ERT integer-only */ /* - * Enum for solver tolerance - */ + Enum for solver tolerance +*/ typedef enum { - SL_SOLVER_TOLERANCE_AUTO = 0, /* Set Automatically by Solver */ - SL_SOLVER_TOLERANCE_LOCAL = 1, /* Set Locally, e.g., by Blocks */ - SL_SOLVER_TOLERANCE_GLOBAL = 2, /* Set Globally, e.g., by Block Diagram */ - SL_SOLVER_TOLERANCE_UNDEFINED = 255 /* Signal uninitialized */ + SL_SOLVER_TOLERANCE_AUTO = 0, /* Set Automatically by Solver */ + SL_SOLVER_TOLERANCE_LOCAL = 1, /* Set Locally, e.g., by Blocks */ + SL_SOLVER_TOLERANCE_GLOBAL = 2, /* Set Globally, e.g., by Block Diagram */ + SL_SOLVER_TOLERANCE_UNDEFINED = 255 /* Signal uninitialized */ } powerwindow_SL_SolverToleranceControlFlag_T; /* - * Enum for jacobian method control - */ + Enum for jacobian method control +*/ typedef enum { - SL_JM_BD_AUTO = 0, - SL_JM_BD_SPARSE_PERTURBATION, - SL_JM_BD_FULL_PERTURBATION, - SL_JM_BD_SPARSE_ANALYTICAL, - SL_JM_BD_FULL_ANALYTICAL + SL_JM_BD_AUTO = 0, + SL_JM_BD_SPARSE_PERTURBATION, + SL_JM_BD_FULL_PERTURBATION, + SL_JM_BD_SPARSE_ANALYTICAL, + SL_JM_BD_FULL_ANALYTICAL } powerwindow_slJmBdControl; typedef struct _ssSolverInfo_tag { - void *rtModelPtr; + void *rtModelPtr; - const char *solverName; - powerwindow_boolean_T isVariableStepSolver; - powerwindow_boolean_T solverNeedsReset; + const char *solverName; + powerwindow_boolean_T isVariableStepSolver; + powerwindow_boolean_T solverNeedsReset; - powerwindow_time_T solverStopTime; - powerwindow_time_T *stepSizePtr; - powerwindow_time_T minStepSize; - powerwindow_time_T maxStepSize; - powerwindow_time_T fixedStepSize; + powerwindow_time_T solverStopTime; + powerwindow_time_T *stepSizePtr; + powerwindow_time_T minStepSize; + powerwindow_time_T maxStepSize; + powerwindow_time_T fixedStepSize; - powerwindow_int_T solverShapePreserveControl; - powerwindow_int_T solverMaxConsecutiveMinStep; - powerwindow_int_T maxNumMinSteps; - powerwindow_int_T solverMaxOrder; - powerwindow_real_T solverConsecutiveZCsStepRelTol; - powerwindow_int_T solverMaxConsecutiveZCs; + powerwindow_int_T solverShapePreserveControl; + powerwindow_int_T solverMaxConsecutiveMinStep; + powerwindow_int_T maxNumMinSteps; + powerwindow_int_T solverMaxOrder; + powerwindow_real_T solverConsecutiveZCsStepRelTol; + powerwindow_int_T solverMaxConsecutiveZCs; - powerwindow_int_T solverExtrapolationOrder; - powerwindow_int_T solverNumberNewtonIterations; + powerwindow_int_T solverExtrapolationOrder; + powerwindow_int_T solverNumberNewtonIterations; - powerwindow_int_T solverRefineFactor; - powerwindow_real_T solverRelTol; - powerwindow_real_T unused_real_T_1; + powerwindow_int_T solverRefineFactor; + powerwindow_real_T solverRelTol; + powerwindow_real_T unused_real_T_1; - powerwindow_real_T **dXPtr; - powerwindow_time_T **tPtr; + powerwindow_real_T **dXPtr; + powerwindow_time_T **tPtr; - powerwindow_int_T *numContStatesPtr; - powerwindow_real_T **contStatesPtr; + powerwindow_int_T *numContStatesPtr; + powerwindow_real_T **contStatesPtr; - powerwindow_real_T* zcSignalVector; - powerwindow_uint8_T* zcEventsVector; - powerwindow_uint8_T* zcSignalAttrib; - powerwindow_int_T zcSignalVectorLength; - powerwindow_uint8_T* reserved; + powerwindow_real_T *zcSignalVector; + powerwindow_uint8_T *zcEventsVector; + powerwindow_uint8_T *zcSignalAttrib; + powerwindow_int_T zcSignalVectorLength; + powerwindow_uint8_T *reserved; - powerwindow_boolean_T foundContZcEvents; - powerwindow_boolean_T isAtLeftPostOfContZcEvent; - powerwindow_boolean_T isAtRightPostOfContZcEvent; - powerwindow_boolean_T adaptiveZcDetection; + powerwindow_boolean_T foundContZcEvents; + powerwindow_boolean_T isAtLeftPostOfContZcEvent; + powerwindow_boolean_T isAtRightPostOfContZcEvent; + powerwindow_boolean_T adaptiveZcDetection; - powerwindow_int_T numZcSignals; + powerwindow_int_T numZcSignals; - powerwindow_boolean_T stateProjection; - powerwindow_boolean_T robustResetMethod; /* user's preference */ - powerwindow_boolean_T updateJacobianAtReset; /* S-Fcn request (sticky) */ - powerwindow_boolean_T consistencyChecking; + powerwindow_boolean_T stateProjection; + powerwindow_boolean_T robustResetMethod; /* user's preference */ + powerwindow_boolean_T updateJacobianAtReset; /* S-Fcn request (sticky) */ + powerwindow_boolean_T consistencyChecking; - powerwindow_int_T massMatrixNzMax; - powerwindow_int_T* massMatrixIr; - powerwindow_int_T* massMatrixJc; - powerwindow_real_T* massMatrixPr; + powerwindow_int_T massMatrixNzMax; + powerwindow_int_T *massMatrixIr; + powerwindow_int_T *massMatrixJc; + powerwindow_real_T *massMatrixPr; - const powerwindow_char_T **errStatusPtr; + const powerwindow_char_T **errStatusPtr; - powerwindow_real_T zcThreshold; - powerwindow_int_T zeroCrossAlgorithm; - powerwindow_int_T consecutiveZCsError; + powerwindow_real_T zcThreshold; + powerwindow_int_T zeroCrossAlgorithm; + powerwindow_int_T consecutiveZCsError; - powerwindow_boolean_T isComputingJacobian; - powerwindow_slJmBdControl solverJacobianMethodControl; - powerwindow_int_T ignoredZcDiagnostic; - powerwindow_int_T maskedZcDiagnostic; - powerwindow_boolean_T isOutputMethodComputed; + powerwindow_boolean_T isComputingJacobian; + powerwindow_slJmBdControl solverJacobianMethodControl; + powerwindow_int_T ignoredZcDiagnostic; + powerwindow_int_T maskedZcDiagnostic; + powerwindow_boolean_T isOutputMethodComputed; } ssSolverInfo; /* Support old name RTWSolverInfo */ @@ -216,8 +216,8 @@ typedef ssSolverInfo RTWSolverInfo; #define rtsiGetdX(S) *((S)->dXPtr) #define rtsiSetTPtr(S,tp) ((S)->tPtr = (tp)) -#define rtsiSetT(S,t) ((*((S)->tPtr))[0] = (t)) -#define rtsiGetT(S) (*((S)->tPtr))[0] +#define rtsiSetT(S,t) ((*((S)->tPtr))[ 0 ] = (t)) +#define rtsiGetT(S) (*((S)->tPtr))[ 0 ] #define rtsiSetContStatesPtr(S,cp) ((S)->contStatesPtr = (cp)) #define rtsiGetContStates(S) *((S)->contStatesPtr) diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_rtwtypes.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_rtwtypes.h index c6dfca07bc6379e4532edc8253271f98bc84fd30..e01ba3a39a3a4e66b16a4c488e91bcec956c8b1b 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_rtwtypes.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_rtwtypes.h @@ -1,194 +1,194 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_rtwtypes.h - - Author: CoSys-Lab, University of Antwerp - - Function: headerfile - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_rtwtypes.h - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ -#ifndef powerwindow__RTWTYPES_H__ -#define powerwindow__RTWTYPES_H__ - -/* Logical type definitions */ -#if (!defined(__cplusplus)) -# ifndef false -# define false (0U) -# endif - -# ifndef true -# define true (1U) -# endif -#endif - -#define powerwindow__TMWTYPES__ - -/*=======================================================================* - * Target hardware information - * - * Number of bits: char: 8 short: 16 int: 16 - * long: 32 - * native word size: 8 - * Byte ordering: LittleEndian - * Signed integer division rounds to: Zero - * Shift right on a signed integer as arithmetic shift: on - *=======================================================================*/ - -/*=======================================================================* - * Fixed width word size data types: * - * powerwindow_int8_T, powerwindow_int16_T, powerwindow_int32_T - signed 8, 16, or 32 bit integers * - * powerwindow_uint8_T, powerwindow_uint16_T, powerwindow_uint32_T - unsigned 8, 16, or 32 bit integers * - * powerwindow_real32_T, powerwindow_real64_T - 32 and 64 bit floating point numbers * - *=======================================================================*/ -typedef signed char powerwindow_int8_T; -typedef unsigned char powerwindow_uint8_T; -typedef int powerwindow_int16_T; -typedef unsigned int powerwindow_uint16_T; -typedef long powerwindow_int32_T; -typedef unsigned long powerwindow_uint32_T; -typedef float powerwindow_real32_T; -typedef double powerwindow_real64_T; - -/*===========================================================================* - * Generic type definitions: powerwindow_real_T, powerwindow_time_T, powerwindow_boolean_T, powerwindow_int_T, powerwindow_uint_T, * - * powerwindow_ulong_T, powerwindow_char_T and powerwindow_byte_T. * - *===========================================================================*/ -typedef double powerwindow_real_T; -typedef double powerwindow_time_T; -typedef unsigned char powerwindow_boolean_T; -typedef int powerwindow_int_T; -typedef unsigned int powerwindow_uint_T; -typedef unsigned long powerwindow_ulong_T; -typedef char powerwindow_char_T; -typedef unsigned char powerwindow_uchar_T; -typedef powerwindow_char_T powerwindow_byte_T; - -/*===========================================================================* - * Complex number type definitions * - *===========================================================================*/ -#define powerwindow_CREAL_T - -typedef struct { - powerwindow_real32_T re; - powerwindow_real32_T im; -} powerwindow_creal32_T; - -typedef struct { - powerwindow_real64_T re; - powerwindow_real64_T im; -} powerwindow_creal64_T; - -typedef struct { - powerwindow_real_T re; - powerwindow_real_T im; -} powerwindow_creal_T; - -#define powerwindow_CINT8_T - -typedef struct { - powerwindow_int8_T re; - powerwindow_int8_T im; -} powerwindow_cint8_T; - -#define powerwindow_CUINT8_T - -typedef struct { - powerwindow_uint8_T re; - powerwindow_uint8_T im; -} powerwindow_cuint8_T; - -#define powerwindow_CINT16_T - -typedef struct { - powerwindow_int16_T re; - powerwindow_int16_T im; -} powerwindow_cint16_T; - -#define powerwindow_CUINT16_T - -typedef struct { - powerwindow_uint16_T re; - powerwindow_uint16_T im; -} powerwindow_cuint16_T; - -#define powerwindow_CINT32_T - -typedef struct { - powerwindow_int32_T re; - powerwindow_int32_T im; -} powerwindow_cint32_T; - -#define powerwindow_CUINT32_T - -typedef struct { - powerwindow_uint32_T re; - powerwindow_uint32_T im; -} powerwindow_cuint32_T; - -/*=======================================================================* - * Min and Max: * - * powerwindow_int8_T, powerwindow_int16_T, powerwindow_int32_T - signed 8, 16, or 32 bit integers * - * powerwindow_uint8_T, powerwindow_uint16_T, powerwindow_uint32_T - unsigned 8, 16, or 32 bit integers * - *=======================================================================*/ -#define powerwindow_MAX_int8_T ((powerwindow_int8_T)(127)) -#define powerwindow_MIN_int8_T ((powerwindow_int8_T)(-128)) -#define powerwindow_MAX_uint8_T ((powerwindow_uint8_T)(255U)) -#define powerwindow_MIN_uint8_T ((powerwindow_uint8_T)(0U)) -#define powerwindow_MAX_int16_T ((powerwindow_int16_T)(32767)) -#define powerwindow_MIN_int16_T ((powerwindow_int16_T)(-32768)) -#define powerwindow_MAX_uint16_T ((powerwindow_uint16_T)(65535U)) -#define powerwindow_MIN_uint16_T ((powerwindow_uint16_T)(0U)) -#define powerwindow_MAX_int32_T ((powerwindow_int32_T)(2147483647)) -#define powerwindow_MIN_int32_T ((powerwindow_int32_T)(-2147483647-1)) -#define powerwindow_MAX_uint32_T ((powerwindow_uint32_T)(0xFFFFFFFFU)) -#define powerwindow_MIN_uint32_T ((powerwindow_uint32_T)(0U)) - -/* Block D-Work pointer type */ -typedef void * powerwindow_pointer_T; - -#define powerwindow_input_length 977 - -/* Simulink specific types */ -#ifndef powerwindow___ZERO_CROSSING_TYPES__ -#define powerwindow___ZERO_CROSSING_TYPES__ - -/* Trigger directions: falling, either, and rising */ -typedef enum { - FALLING_ZERO_CROSSING = -1, - ANY_ZERO_CROSSING = 0, - RISING_ZERO_CROSSING = 1 -} powerwindow_ZCDirection; - -/* Previous state of a trigger signal */ -typedef powerwindow_uint8_T ZCSigState; - -/* Initial value of a trigger zero crossing signal */ -#define powerwindow_UNINITIALIZED_ZCSIG 0x03U -#define powerwindow_NEG_ZCSIG 0x02U -#define powerwindow_POS_ZCSIG 0x01U -#define powerwindow_ZERO_ZCSIG 0x00U - -/* Current state of a trigger signal */ -typedef enum { - FALLING_ZCEVENT = -1, - NO_ZCEVENT = 0, - RISING_ZCEVENT = 1 -} powerwindow_ZCEventType; - -#endif /* powerwindow___ZERO_CROSSING_TYPES__ */ -#endif /* powerwindow__RTWTYPES_H__ */ - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_rtwtypes.h + + Author: CoSys-Lab, University of Antwerp + + Function: headerfile + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_rtwtypes.h + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ +#ifndef powerwindow__RTWTYPES_H__ +#define powerwindow__RTWTYPES_H__ + +/* Logical type definitions */ +#if (!defined(__cplusplus)) +# ifndef false +# define false (0U) +# endif + +# ifndef true +# define true (1U) +# endif +#endif + +#define powerwindow__TMWTYPES__ + +/*=======================================================================* + Target hardware information + + Number of bits: char: 8 short: 16 int: 16 + long: 32 + native word size: 8 + Byte ordering: LittleEndian + Signed integer division rounds to: Zero + Shift right on a signed integer as arithmetic shift: on + =======================================================================*/ + +/*=======================================================================* + Fixed width word size data types: + powerwindow_int8_T, powerwindow_int16_T, powerwindow_int32_T - signed 8, 16, or 32 bit integers + powerwindow_uint8_T, powerwindow_uint16_T, powerwindow_uint32_T - unsigned 8, 16, or 32 bit integers + powerwindow_real32_T, powerwindow_real64_T - 32 and 64 bit floating point numbers + =======================================================================*/ +typedef signed char powerwindow_int8_T; +typedef unsigned char powerwindow_uint8_T; +typedef int powerwindow_int16_T; +typedef unsigned int powerwindow_uint16_T; +typedef long powerwindow_int32_T; +typedef unsigned long powerwindow_uint32_T; +typedef float powerwindow_real32_T; +typedef double powerwindow_real64_T; + +/*===========================================================================* + Generic type definitions: powerwindow_real_T, powerwindow_time_T, powerwindow_boolean_T, powerwindow_int_T, powerwindow_uint_T, + powerwindow_ulong_T, powerwindow_char_T and powerwindow_byte_T. + ===========================================================================*/ +typedef double powerwindow_real_T; +typedef double powerwindow_time_T; +typedef unsigned char powerwindow_boolean_T; +typedef int powerwindow_int_T; +typedef unsigned int powerwindow_uint_T; +typedef unsigned long powerwindow_ulong_T; +typedef char powerwindow_char_T; +typedef unsigned char powerwindow_uchar_T; +typedef powerwindow_char_T powerwindow_byte_T; + +/*===========================================================================* + Complex number type definitions + ===========================================================================*/ +#define powerwindow_CREAL_T + +typedef struct { + powerwindow_real32_T re; + powerwindow_real32_T im; +} powerwindow_creal32_T; + +typedef struct { + powerwindow_real64_T re; + powerwindow_real64_T im; +} powerwindow_creal64_T; + +typedef struct { + powerwindow_real_T re; + powerwindow_real_T im; +} powerwindow_creal_T; + +#define powerwindow_CINT8_T + +typedef struct { + powerwindow_int8_T re; + powerwindow_int8_T im; +} powerwindow_cint8_T; + +#define powerwindow_CUINT8_T + +typedef struct { + powerwindow_uint8_T re; + powerwindow_uint8_T im; +} powerwindow_cuint8_T; + +#define powerwindow_CINT16_T + +typedef struct { + powerwindow_int16_T re; + powerwindow_int16_T im; +} powerwindow_cint16_T; + +#define powerwindow_CUINT16_T + +typedef struct { + powerwindow_uint16_T re; + powerwindow_uint16_T im; +} powerwindow_cuint16_T; + +#define powerwindow_CINT32_T + +typedef struct { + powerwindow_int32_T re; + powerwindow_int32_T im; +} powerwindow_cint32_T; + +#define powerwindow_CUINT32_T + +typedef struct { + powerwindow_uint32_T re; + powerwindow_uint32_T im; +} powerwindow_cuint32_T; + +/*=======================================================================* + Min and Max: + powerwindow_int8_T, powerwindow_int16_T, powerwindow_int32_T - signed 8, 16, or 32 bit integers + powerwindow_uint8_T, powerwindow_uint16_T, powerwindow_uint32_T - unsigned 8, 16, or 32 bit integers + =======================================================================*/ +#define powerwindow_MAX_int8_T ((powerwindow_int8_T)(127)) +#define powerwindow_MIN_int8_T ((powerwindow_int8_T)(-128)) +#define powerwindow_MAX_uint8_T ((powerwindow_uint8_T)(255U)) +#define powerwindow_MIN_uint8_T ((powerwindow_uint8_T)(0U)) +#define powerwindow_MAX_int16_T ((powerwindow_int16_T)(32767)) +#define powerwindow_MIN_int16_T ((powerwindow_int16_T)(-32768)) +#define powerwindow_MAX_uint16_T ((powerwindow_uint16_T)(65535U)) +#define powerwindow_MIN_uint16_T ((powerwindow_uint16_T)(0U)) +#define powerwindow_MAX_int32_T ((powerwindow_int32_T)(2147483647)) +#define powerwindow_MIN_int32_T ((powerwindow_int32_T)(-2147483647-1)) +#define powerwindow_MAX_uint32_T ((powerwindow_uint32_T)(0xFFFFFFFFU)) +#define powerwindow_MIN_uint32_T ((powerwindow_uint32_T)(0U)) + +/* Block D-Work pointer type */ +typedef void *powerwindow_pointer_T; + +#define powerwindow_input_length 977 + +/* Simulink specific types */ +#ifndef powerwindow___ZERO_CROSSING_TYPES__ +#define powerwindow___ZERO_CROSSING_TYPES__ + +/* Trigger directions: falling, either, and rising */ +typedef enum { + FALLING_ZERO_CROSSING = -1, + ANY_ZERO_CROSSING = 0, + RISING_ZERO_CROSSING = 1 +} powerwindow_ZCDirection; + +/* Previous state of a trigger signal */ +typedef powerwindow_uint8_T ZCSigState; + +/* Initial value of a trigger zero crossing signal */ +#define powerwindow_UNINITIALIZED_ZCSIG 0x03U +#define powerwindow_NEG_ZCSIG 0x02U +#define powerwindow_POS_ZCSIG 0x01U +#define powerwindow_ZERO_ZCSIG 0x00U + +/* Current state of a trigger signal */ +typedef enum { + FALLING_ZCEVENT = -1, + NO_ZCEVENT = 0, + RISING_ZCEVENT = 1 +} powerwindow_ZCEventType; + +#endif /* powerwindow___ZERO_CROSSING_TYPES__ */ +#endif /* powerwindow__RTWTYPES_H__ */ + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_tmwtypes.h b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_tmwtypes.h index 7b1b7f34215936804e095e329a62f4828d50e970..062186a8bafc1ed8986c14d75e5747f45115deec 100644 --- a/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_tmwtypes.h +++ b/bench/app/powerwindow/powerwindow_HeaderFiles/powerwindow_tmwtypes.h @@ -1,21 +1,21 @@ /* - This program is part of the TACLeBench benchmark suite. - Version V 1.x + This program is part of the TACLeBench benchmark suite. + Version V 1.x - Name: powerwindow_tmwtypes.h + Name: powerwindow_tmwtypes.h - Author: CoSys-Lab, University of Antwerp + Author: CoSys-Lab, University of Antwerp - Function: headerfile + Function: headerfile - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_tmwtypes.h + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_HeaderFiles/powerwindow_tmwtypes.h - Changes: a brief summary of major functional changes and formatting) + Changes: a brief summary of major functional changes and formatting) - License: GNU General Public License + License: GNU General Public License - */ +*/ #if defined(_MSC_VER) # pragma once @@ -30,15 +30,15 @@ #ifndef powerwindow__TMWTYPES__ #define powerwindow__TMWTYPES__ /* - * File : tmwtypes.h - * Abstract: - * Data types for use with MATLAB/SIMULINK and the Real-Time Workshop. - * - * When compiling stand-alone model code, data types can be overridden - * via compiler switches. - * - * Define NO_FLOATS to eliminate reference to powerwindow_real_T, etc. - */ + File : tmwtypes.h + Abstract: + Data types for use with MATLAB/SIMULINK and the Real-Time Workshop. + + When compiling stand-alone model code, data types can be overridden + via compiler switches. + + Define NO_FLOATS to eliminate reference to powerwindow_real_T, etc. +*/ #define LOGICAL_IS_A_TYPE @@ -51,8 +51,8 @@ /* - * The following data types cannot be overridden when building MEX files. - */ + The following data types cannot be overridden when building MEX files. +*/ #ifdef MATLAB_MEX_FILE # undef CHARACTER_T # undef INTEGER_T @@ -62,17 +62,17 @@ #endif /* - * The powerwindow_uchar_T, powerwindow_ushort_T and powerwindow_ulong_T types are needed for compilers which do - * not allow defines to be specified, at the command line, with spaces in them. - */ + The powerwindow_uchar_T, powerwindow_ushort_T and powerwindow_ulong_T types are needed for compilers which do + not allow defines to be specified, at the command line, with spaces in them. +*/ typedef unsigned char powerwindow_uchar_T; typedef unsigned short powerwindow_ushort_T; typedef unsigned long powerwindow_ulong_T; #if (defined(_MSC_VER) && _MSC_VER >= 1500) \ - || defined(__x86_64__) || defined(__LP64__) \ - || defined(__LCC64__) +|| defined(__x86_64__) || defined(__LP64__) \ +|| defined(__LCC64__) typedef unsigned long long powerwindow_ulonglong_T; #endif @@ -80,36 +80,36 @@ typedef unsigned long long powerwindow_ulonglong_T; /*=======================================================================* - * Fixed width word size data types: * - * powerwindow_int8_T, powerwindow_int16_T, powerwindow_int32_T - signed 8, 16, or 32 bit integers * - * powerwindow_uint8_T, powerwindow_uint16_T, powerwindow_uint32_T - unsigned 8, 16, or 32 bit integers * - * powerwindow_real32_T, powerwindow_real64_T - 32 and 64 bit floating point numbers * - *=======================================================================*/ + Fixed width word size data types: + powerwindow_int8_T, powerwindow_int16_T, powerwindow_int32_T - signed 8, 16, or 32 bit integers + powerwindow_uint8_T, powerwindow_uint16_T, powerwindow_uint32_T - unsigned 8, 16, or 32 bit integers + powerwindow_real32_T, powerwindow_real64_T - 32 and 64 bit floating point numbers + =======================================================================*/ /* When used with Real Time Workshop generated code, this - * header file can be used with a variety of compilers. - * - * The compiler could be for an 8 bit embedded processor that - * only had 8 bits per integer and 16 bits per long. - * In that example, a 32 bit integer size is not even available. - * This header file should be robust to that. - * - * For the case of an 8 bit processor, the preprocessor - * may be limited to 16 bit math like its target. That limitation - * would mean that 32 bit comparisons can't be done accurately. - * To increase robustness to this, comparisons are done against - * smaller values first. An inaccurate 32 bit comparison isn't - * attempted if the 16 bit comparison has already succeeded. - * - * Limitations on preprocessor math can also be stricter than - * for the target. There are known cases where a compiler - * targeting processors with 64 bit longs can't do accurate - * preprocessor comparisons on more than 32 bits. - */ + header file can be used with a variety of compilers. + + The compiler could be for an 8 bit embedded processor that + only had 8 bits per integer and 16 bits per long. + In that example, a 32 bit integer size is not even available. + This header file should be robust to that. + + For the case of an 8 bit processor, the preprocessor + may be limited to 16 bit math like its target. That limitation + would mean that 32 bit comparisons can't be done accurately. + To increase robustness to this, comparisons are done against + smaller values first. An inaccurate 32 bit comparison isn't + attempted if the 16 bit comparison has already succeeded. + + Limitations on preprocessor math can also be stricter than + for the target. There are known cases where a compiler + targeting processors with 64 bit longs can't do accurate + preprocessor comparisons on more than 32 bits. +*/ /* Determine the number of bits for int, long, short, and char. - * If one fails to be determined, set the number of bits to -1 - */ + If one fails to be determined, set the number of bits to -1 +*/ #ifndef TMW_BITS_PER_INT # if INT_MAX == 0x7FL @@ -168,22 +168,22 @@ typedef unsigned long long powerwindow_ulonglong_T; #endif /* It is common for one or more of the integer types - * to be the same size. For example, on many embedded - * processors, both shorts and ints are 16 bits. On - * processors used for workstations, it is quite common - * for both int and long to be 32 bits. - * When there is more than one choice for typdef'ing - * a portable type like powerwindow_int16_T or powerwindow_uint32_T, in - * concept, it should not matter which choice is made. - * However, some style guides and some code checking - * tools do identify and complain about seemingly - * irrelevant differences. For example, a code - * checking tool may complain about an implicit - * conversion from int to short even though both - * are 16 bits. To reduce these types of - * complaints, it is best to make int the - * preferred choice when more than one is available. - */ + to be the same size. For example, on many embedded + processors, both shorts and ints are 16 bits. On + processors used for workstations, it is quite common + for both int and long to be 32 bits. + When there is more than one choice for typdef'ing + a portable type like powerwindow_int16_T or powerwindow_uint32_T, in + concept, it should not matter which choice is made. + However, some style guides and some code checking + tools do identify and complain about seemingly + irrelevant differences. For example, a code + checking tool may complain about an implicit + conversion from int to short even though both + are 16 bits. To reduce these types of + complaints, it is best to make int the + preferred choice when more than one is available. +*/ #ifndef INT8_T # if TMW_BITS_PER_INT == 8 @@ -282,12 +282,12 @@ typedef UINT32_T powerwindow_uint32_T; #endif /* The following is used to emulate smaller integer types when only - * larger types are available. For example, compilers for TI C3x/C4x DSPs - * define char and short to be 32 bits, so 8 and 16 bits are not directly - * available. This target is commonly used with RTW rapid prototyping. - * Other DSPs define char to be 16 bits, so 8 bits is not directly - * available. - */ + larger types are available. For example, compilers for TI C3x/C4x DSPs + define char and short to be 32 bits, so 8 and 16 bits are not directly + available. This target is commonly used with RTW rapid prototyping. + Other DSPs define char to be 16 bits, so 8 bits is not directly + available. +*/ #ifndef INT8_T # ifdef INT16_T # define INT8_T INT16_T @@ -359,10 +359,10 @@ typedef REAL64_T powerwindow_real64_T; #endif /* NO_FLOATS*/ /*=======================================================================* - * Fixed width word size data types: * - * powerwindow_int64_T - signed 64 bit integers * - * powerwindow_uint64_T - unsigned 64 bit integers * - *=======================================================================*/ + Fixed width word size data types: + powerwindow_int64_T - signed 64 bit integers + powerwindow_uint64_T - unsigned 64 bit integers + =======================================================================*/ @@ -380,11 +380,11 @@ typedef REAL64_T powerwindow_real64_T; # define INT_TYPE_64_IS_LONG # endif # elif defined(_MSC_VER) || (defined(__BORLANDC__) && __BORLANDC__ >= 0x530) \ - || (defined(__WATCOMC__) && __WATCOMC__ >= 1100) +|| (defined(__WATCOMC__) && __WATCOMC__ >= 1100) # define INT64_T __int64 # define FMT64 "I64" # elif defined(__GNUC__) || defined(TMW_ENABLE_INT64) \ - || defined(__LCC64__) +|| defined(__LCC64__) # define INT64_T long long # define FMT64 "ll" # endif @@ -394,7 +394,7 @@ typedef REAL64_T powerwindow_real64_T; #if defined(INT64_T) # if defined(__GNUC__) && \ - ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >=9))) +((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >=9))) __extension__ # endif typedef INT64_T powerwindow_int64_T; @@ -416,33 +416,33 @@ typedef INT64_T powerwindow_int64_T; # define INT_TYPE_64_IS_LONG # endif # elif defined(_MSC_VER) || (defined(__BORLANDC__) && __BORLANDC__ >= 0x530) \ - || (defined(__WATCOMC__) && __WATCOMC__ >= 1100) +|| (defined(__WATCOMC__) && __WATCOMC__ >= 1100) # define UINT64_T unsigned __int64 # define FMT64 "I64" # elif defined(__GNUC__) || defined(TMW_ENABLE_INT64) \ - || defined(__LCC64__) +|| defined(__LCC64__) # define UINT64_T unsigned long long # define FMT64 "ll" # endif #endif #if defined(_WIN64) || (defined(__APPLE__) && defined(__LP64__)) \ - || defined(__x86_64__) \ - || defined(__LP64__) +|| defined(__x86_64__) \ +|| defined(__LP64__) # define INT_TYPE_64_IS_SUPPORTED #endif #if defined(UINT64_T) # if defined(__GNUC__) && \ - ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >=9))) +((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >=9))) __extension__ # endif typedef UINT64_T powerwindow_uint64_T; #endif /*===========================================================================* - * Format string modifiers for using powerwindow_size_t variables in printf statements. * - *===========================================================================*/ + Format string modifiers for using powerwindow_size_t variables in printf statements. + ===========================================================================*/ #ifndef FMT_SIZE_T # if defined( __GNUC__ ) || defined(_STDC_C99) @@ -471,15 +471,15 @@ typedef UINT64_T powerwindow_uint64_T; #endif /*===========================================================================* - * General or logical data types where the word size is not guaranteed. * - * powerwindow_real_T - possible settings include powerwindow_real32_T or powerwindow_real64_T * - * powerwindow_time_T - possible settings include powerwindow_real64_T or powerwindow_uint32_T * - * powerwindow_boolean_T * - * powerwindow_char_T * - * powerwindow_int_T * - * powerwindow_uint_T * - * powerwindow_byte_T * - *===========================================================================*/ + General or logical data types where the word size is not guaranteed. + powerwindow_real_T - possible settings include powerwindow_real32_T or powerwindow_real64_T + powerwindow_time_T - possible settings include powerwindow_real64_T or powerwindow_uint32_T + powerwindow_boolean_T + powerwindow_char_T + powerwindow_int_T + powerwindow_uint_T + powerwindow_byte_T + ===========================================================================*/ #ifndef NO_FLOATS @@ -542,14 +542,14 @@ typedef BYTE_T powerwindow_byte_T; /*===========================================================================* - * Define Complex Structures * - *===========================================================================*/ + Define Complex Structures + ===========================================================================*/ #ifndef NO_FLOATS #ifndef CREAL32_T # ifdef REAL32_T typedef struct { - powerwindow_real32_T re, im; + powerwindow_real32_T re, im; } powerwindow_creal32_T; # define CREAL32_T creal32_T # endif @@ -558,7 +558,7 @@ typedef struct { #ifndef CREAL64_T # ifdef REAL64_T typedef struct { - powerwindow_real64_T re, im; + powerwindow_real64_T re, im; } powerwindow_creal64_T; # define CREAL64_T powerwindow_creal64_T # endif @@ -567,7 +567,7 @@ typedef struct { #ifndef CREAL_T # ifdef REAL_T typedef struct { - powerwindow_real_T re, im; + powerwindow_real_T re, im; } powerwindow_creal_T; # define CREAL_T powerwindow_creal_T # endif @@ -578,7 +578,7 @@ typedef struct { #ifndef CINT8_T # ifdef INT8_T typedef struct { - powerwindow_int8_T re, im; + powerwindow_int8_T re, im; } powerwindow_cint8_T; # define CINT8_T powerwindow_cint8_T # endif @@ -587,7 +587,7 @@ typedef struct { #ifndef CUINT8_T # ifdef UINT8_T typedef struct { - powerwindow_uint8_T re, im; + powerwindow_uint8_T re, im; } powerwindow_cuint8_T; # define CUINT8_T powerwindow_cuint8_T # endif @@ -596,7 +596,7 @@ typedef struct { #ifndef CINT16_T # ifdef INT16_T typedef struct { - powerwindow_int16_T re, im; + powerwindow_int16_T re, im; } powerwindow_cint16_T; # define CINT16_T powerwindow_cint16_T # endif @@ -605,7 +605,7 @@ typedef struct { #ifndef CUINT16_T # ifdef UINT16_T typedef struct { - powerwindow_uint16_T re, im; + powerwindow_uint16_T re, im; } powerwindow_cuint16_T; # define CUINT16_T powerwindow_cuint16_T # endif @@ -614,7 +614,7 @@ typedef struct { #ifndef CINT32_T # ifdef INT32_T typedef struct { - powerwindow_int32_T re, im; + powerwindow_int32_T re, im; } powerwindow_cint32_T; # define CINT32_T powerwindow_cint32_T # endif @@ -623,7 +623,7 @@ typedef struct { #ifndef CUINT32_T # ifdef UINT32_T typedef struct { - powerwindow_uint32_T re, im; + powerwindow_uint32_T re, im; } powerwindow_cuint32_T; # define CUINT32_T powerwindow_cuint32_T # endif @@ -632,7 +632,7 @@ typedef struct { #ifndef CINT64_T # ifdef INT64_T typedef struct { - powerwindow_int64_T re, im; + powerwindow_int64_T re, im; } powerwindow_cint64_T; # define CINT64_T powerwindow_cint64_T # endif @@ -641,17 +641,17 @@ typedef struct { #ifndef CUINT64_T # ifdef UINT64_T typedef struct { - powerwindow_uint64_T re, im; + powerwindow_uint64_T re, im; } powerwindow_cuint64_T; # define CUINT64_T powerwindow_cuint64_T # endif #endif /*=======================================================================* - * Min and Max: * - * powerwindow_int8_T, powerwindow_int16_T, powerwindow_int32_T - signed 8, 16, or 32 bit integers * - * powerwindow_uint8_T, powerwindow_uint16_T, powerwindow_uint32_T - unsigned 8, 16, or 32 bit integers * - *=======================================================================*/ + Min and Max: + powerwindow_int8_T, powerwindow_int16_T, powerwindow_int32_T - signed 8, 16, or 32 bit integers + powerwindow_uint8_T, powerwindow_uint16_T, powerwindow_uint32_T - unsigned 8, 16, or 32 bit integers + =======================================================================*/ #define powerwindow_MAX_int8_T ((powerwindow_int8_T)(127)) /* 127 */ #define powerwindow_MIN_int8_T ((powerwindow_int8_T)(-128)) /* -128 */ @@ -669,8 +669,8 @@ typedef struct { #define powerwindow_MIN_uint32_T ((powerwindow_uint32_T)(0)) #if defined(_MSC_VER) || (defined(__BORLANDC__) && __BORLANDC__ >= 0x530) \ - || (defined(__WATCOMC__) && __WATCOMC__ >= 1100) \ - || defined(__LCC64__) +|| (defined(__WATCOMC__) && __WATCOMC__ >= 1100) \ +|| defined(__LCC64__) # ifdef INT64_T # define powerwindow_MAX_int64_T ((powerwindow_int64_T)(9223372036854775807LL)) # define powerwindow_MIN_int64_T ((powerwindow_int64_T)(-9223372036854775807LL-1LL)) @@ -702,33 +702,34 @@ typedef struct { #ifdef _MSC_VER /* Conversion from unsigned __int64 to double is not implemented in windows - * and results in a compile error, thus the value must first be cast to - * signed __int64, and then to double. - * - * If the 64 bit int value is greater than 2^63-1, which is the signed int64 max, - * the macro below provides a workaround for casting a uint64 value to a double - * in windows. - */ + and results in a compile error, thus the value must first be cast to + signed __int64, and then to double. + + If the 64 bit int value is greater than 2^63-1, which is the signed int64 max, + the macro below provides a workaround for casting a uint64 value to a double + in windows. +*/ # define uint64_to_double(u) ( ((u) > _I64_MAX) ? \ (double)(__int64)((u) - _I64_MAX - 1) + (double)_I64_MAX + 1: \ (double)(__int64)(u) ) /* The following inline function should only be used in the macro double_to_uint64, - * as it only handles the specfic range of double between 2^63 and 2^64-1 */ + as it only handles the specfic range of double between 2^63 and 2^64-1 */ __forceinline -powerwindow_uint64_T double_to_uint64_helper(double d) { - union double_to_uint64_union_type { - double dd; - powerwindow_uint64_T i64; - } di; - di.dd = d; - return (((di.i64 & 0x000fffffffffffff) | 0x0010000000000000) << 11); +powerwindow_uint64_T double_to_uint64_helper( double d ) +{ + union double_to_uint64_union_type { + double dd; + powerwindow_uint64_T i64; + } di; + di.dd = d; + return ( ( ( di.i64 & 0x000fffffffffffff ) | 0x0010000000000000 ) << 11 ); } /* The largest double value that can be cast to uint64 in windows is the - * signed int64 max, which is 2^63-1. The macro below provides - * a workaround for casting large double values to uint64 in windows. - */ + signed int64 max, which is 2^63-1. The macro below provides + a workaround for casting large double values to uint64 in windows. +*/ /* The magic number 18446744073709551616.0 is 2^64 */ /* The magic number 9223372036854775808.0 is 2^63 */ # define double_to_uint64(d) ( ((d) >= 18446744073709551616.0) ? \ @@ -767,17 +768,17 @@ typedef powerwindow_boolean_T bool; #endif /* !__cplusplus */ /* - * This software assumes that the code is being compiled on a target using a - * 2's complement representation for signed integer values. - */ + This software assumes that the code is being compiled on a target using a + 2's complement representation for signed integer values. +*/ #if ((SCHAR_MIN + 1) != -SCHAR_MAX) #error "This code must be compiled using a 2's complement representation for signed integer values" #endif /* - * Maximum length of a MATLAB identifier (function/variable/model) - * including the null-termination character. - */ + Maximum length of a MATLAB identifier (function/variable/model) + including the null-termination character. +*/ #define TMW_NAME_LENGTH_MAX 64 @@ -786,9 +787,12 @@ typedef int powerwindow_mwSize; typedef int powerwindow_mwIndex; typedef int powerwindow_mwSignedIndex; #else -typedef size_t powerwindow_mwSize; /* unsigned pointer-width integer */ -typedef size_t powerwindow_mwIndex; /* unsigned pointer-width integer */ -typedef ptrdiff_t powerwindow_mwSignedIndex; /* a signed pointer-width integer */ +typedef size_t +powerwindow_mwSize; /* unsigned pointer-width integer */ +typedef size_t +powerwindow_mwIndex; /* unsigned pointer-width integer */ +typedef ptrdiff_t +powerwindow_mwSignedIndex; /* a signed pointer-width integer */ #endif #if (defined(_LP64) || defined(_WIN64)) && !defined(MX_COMPAT_32) diff --git a/bench/app/powerwindow/powerwindow_PW_Control_DRV.c b/bench/app/powerwindow/powerwindow_PW_Control_DRV.c index 373985283ce279277f0bef841fa18452eab423e8..85d9d363a41fbbcc6c04cbbbe1ede6a678246b81 100644 --- a/bench/app/powerwindow/powerwindow_PW_Control_DRV.c +++ b/bench/app/powerwindow/powerwindow_PW_Control_DRV.c @@ -1,19 +1,19 @@ /* - This program is part of the TACLeBench benchmark suite. - Version V 1.x + This program is part of the TACLeBench benchmark suite. + Version V 1.x - Name: powerwindow_PW_Control_DRV.c + Name: powerwindow_PW_Control_DRV.c - Author: CoSys-Lab, University of Antwerp + Author: CoSys-Lab, University of Antwerp - Function: PW_Control_DRV realizes the functionality of driver side powerwindow. It connects the 3 smaller modules together. + Function: PW_Control_DRV realizes the functionality of driver side powerwindow. It connects the 3 smaller modules together. - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow//powerwindow_powerwindow_control.c + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow//powerwindow_powerwindow_control.c - Changes: a brief summary of major functional changes and formatting) + Changes: a brief summary of major functional changes and formatting) - License: GNU General Public License + License: GNU General Public License */ @@ -25,12 +25,12 @@ /* - Forward declaration of functions + Forward declaration of functions */ -void powerwindow_PW_Control_DRV_initialize(void); -void powerwindow_PW_Control_DRV_terminate(void); -void powerwindow_PW_Control_DRV_main(void); +void powerwindow_PW_Control_DRV_initialize( void ); +void powerwindow_PW_Control_DRV_terminate( void ); +void powerwindow_PW_Control_DRV_main( void ); /* Block states (auto storage) */ @@ -44,248 +44,270 @@ powerwindow_ExternalOutputs_powerwindow_PW_ powerwindow_PW_Control_DRV_Y; /* Real-time model */ powerwindow_RT_MODEL_PW_Control_DRV powerwindow_PW_Control_DRV_M_; -powerwindow_RT_MODEL_PW_Control_DRV *const powerwindow_PW_Control_DRV_M = &powerwindow_PW_Control_DRV_M_; +powerwindow_RT_MODEL_PW_Control_DRV *const powerwindow_PW_Control_DRV_M = + &powerwindow_PW_Control_DRV_M_; /* Model step function */ -void powerwindow_PW_Control_DRV_main(void) +void powerwindow_PW_Control_DRV_main( void ) { /* local block i/o variables */ powerwindow_boolean_T rtb_Debounce_Up_DRV; powerwindow_boolean_T rtb_Debounce_Down_DRV; /* ModelReference: '<S2>/Debounce_Up_DRV' */ - powerwindow_debounce_main(&powerwindow_PW_Control_DRV_U.In2, &rtb_Debounce_Up_DRV, - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtzce)); + powerwindow_debounce_main( &powerwindow_PW_Control_DRV_U.In2, + &rtb_Debounce_Up_DRV, + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtzce ) ); /* ModelReference: '<S2>/Debounce_Down_DRV' */ - powerwindow_debounce_main(&powerwindow_PW_Control_DRV_U.In4, &rtb_Debounce_Down_DRV, - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtzce)); + powerwindow_debounce_main( &powerwindow_PW_Control_DRV_U.In4, + &rtb_Debounce_Down_DRV, + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtzce ) ); /* ModelReference: '<S2>/Debounce_Up_PSG_BackL' */ - powerwindow_debounce_main(&powerwindow_PW_Control_DRV_U.In9, - &powerwindow_PW_Control_DRV_Y.Out10, - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtzce)); + powerwindow_debounce_main( &powerwindow_PW_Control_DRV_U.In9, + &powerwindow_PW_Control_DRV_Y.Out10, + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtzce ) ); /* ModelReference: '<S2>/Debounce_Down_PSG_BackL' */ - powerwindow_debounce_main(&powerwindow_PW_Control_DRV_U.In10, - &powerwindow_PW_Control_DRV_Y.Out11, - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtzce)); + powerwindow_debounce_main( &powerwindow_PW_Control_DRV_U.In10, + &powerwindow_PW_Control_DRV_Y.Out11, + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtzce ) ); /* ModelReference: '<S2>/Debounce_Up_PSG_Front' */ - powerwindow_debounce_main(&powerwindow_PW_Control_DRV_U.In5, &powerwindow_PW_Control_DRV_Y.Out6, - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtzce)); + powerwindow_debounce_main( &powerwindow_PW_Control_DRV_U.In5, + &powerwindow_PW_Control_DRV_Y.Out6, + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtzce ) ); /* ModelReference: '<S2>/Debounce_Down_PSG_Front' */ - powerwindow_debounce_main(&powerwindow_PW_Control_DRV_U.In6, &powerwindow_PW_Control_DRV_Y.Out7, - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtzce)); + powerwindow_debounce_main( &powerwindow_PW_Control_DRV_U.In6, + &powerwindow_PW_Control_DRV_Y.Out7, + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtzce ) ); /* ModelReference: '<S2>/Debounce_Up_PSG_BackR' */ - powerwindow_debounce_main(&powerwindow_PW_Control_DRV_U.In7, &powerwindow_PW_Control_DRV_Y.Out8, - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtzce)); + powerwindow_debounce_main( &powerwindow_PW_Control_DRV_U.In7, + &powerwindow_PW_Control_DRV_Y.Out8, + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtzce ) ); /* ModelReference: '<S2>/Debounce_Down_PSG_BackR' */ - powerwindow_debounce_main(&powerwindow_PW_Control_DRV_U.In8, &powerwindow_PW_Control_DRV_Y.Out9, - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtzce)); + powerwindow_debounce_main( &powerwindow_PW_Control_DRV_U.In8, + &powerwindow_PW_Control_DRV_Y.Out9, + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtzce ) ); /* ModelReference: '<S1>/PW_DRV' */ - powerwindow_powerwindow_control_main(&rtb_Debounce_Up_DRV, &rtb_Debounce_Down_DRV, - &powerwindow_PW_Control_DRV_U.In1, - &powerwindow_PW_Control_DRV_U.In3, - &powerwindow_PW_Control_DRV_Y.Out1, - &powerwindow_PW_Control_DRV_Y.Out2, - &powerwindow_PW_Control_DRV_Y.Out3, - &powerwindow_PW_Control_DRV_Y.Out4, - &powerwindow_PW_Control_DRV_Y.Out5, - &(powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtzce)); + powerwindow_powerwindow_control_main( &rtb_Debounce_Up_DRV, + &rtb_Debounce_Down_DRV, + &powerwindow_PW_Control_DRV_U.In1, + &powerwindow_PW_Control_DRV_U.In3, + &powerwindow_PW_Control_DRV_Y.Out1, + &powerwindow_PW_Control_DRV_Y.Out2, + &powerwindow_PW_Control_DRV_Y.Out3, + &powerwindow_PW_Control_DRV_Y.Out4, + &powerwindow_PW_Control_DRV_Y.Out5, + &( powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtzce ) ); } /* Model initialize function */ -void powerwindow_PW_Control_DRV_initialize(void) +void powerwindow_PW_Control_DRV_initialize( void ) { /* Registration code */ /* states (dwork) */ - (void) memset((void *)&powerwindow_PW_Control_DR_DWork, 0, - sizeof(powerwindow_D_Work_powerwindow_PW_Control_D)); + ( void ) memset( ( void * )&powerwindow_PW_Control_DR_DWork, 0, + sizeof( powerwindow_D_Work_powerwindow_PW_Control_D ) ); /* external inputs */ - (void) memset((void *)&powerwindow_PW_Control_DRV_U, 0, - sizeof(powerwindow_ExternalInputs_powerwindow_PW_C)); + ( void ) memset( ( void * )&powerwindow_PW_Control_DRV_U, 0, + sizeof( powerwindow_ExternalInputs_powerwindow_PW_C ) ); /* external outputs */ - (void) memset((void *)&powerwindow_PW_Control_DRV_Y, 0, - sizeof(powerwindow_ExternalOutputs_powerwindow_PW_)); + ( void ) memset( ( void * )&powerwindow_PW_Control_DRV_Y, 0, + sizeof( powerwindow_ExternalOutputs_powerwindow_PW_ ) ); /* Model Initialize fcn for ModelReference Block: '<S2>/Debounce_Down_DRV' */ - powerwindow_debounce_initialize(powerwindow_PW_DRV_rtmGetErrorStatusPointer(powerwindow_PW_Control_DRV_M), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtm), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtzce)); + powerwindow_debounce_initialize( powerwindow_PW_DRV_rtmGetErrorStatusPointer( + powerwindow_PW_Control_DRV_M ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtm ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtzce ) ); /* Model Initialize fcn for ModelReference Block: '<S2>/Debounce_Down_PSG_BackL' */ - powerwindow_debounce_initialize(powerwindow_PW_DRV_rtmGetErrorStatusPointer(powerwindow_PW_Control_DRV_M), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtm), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtzce)); + powerwindow_debounce_initialize( powerwindow_PW_DRV_rtmGetErrorStatusPointer( + powerwindow_PW_Control_DRV_M ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtm ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtzce ) ); /* Model Initialize fcn for ModelReference Block: '<S2>/Debounce_Down_PSG_BackR' */ - powerwindow_debounce_initialize(powerwindow_PW_DRV_rtmGetErrorStatusPointer(powerwindow_PW_Control_DRV_M), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtm), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtzce)); + powerwindow_debounce_initialize( powerwindow_PW_DRV_rtmGetErrorStatusPointer( + powerwindow_PW_Control_DRV_M ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtm ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtzce ) ); /* Model Initialize fcn for ModelReference Block: '<S2>/Debounce_Down_PSG_Front' */ - powerwindow_debounce_initialize(powerwindow_PW_DRV_rtmGetErrorStatusPointer(powerwindow_PW_Control_DRV_M), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtm), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtzce)); + powerwindow_debounce_initialize( powerwindow_PW_DRV_rtmGetErrorStatusPointer( + powerwindow_PW_Control_DRV_M ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtm ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtzce ) ); /* Model Initialize fcn for ModelReference Block: '<S2>/Debounce_Up_DRV' */ - powerwindow_debounce_initialize(powerwindow_PW_DRV_rtmGetErrorStatusPointer(powerwindow_PW_Control_DRV_M), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtm), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtzce)); + powerwindow_debounce_initialize( powerwindow_PW_DRV_rtmGetErrorStatusPointer( + powerwindow_PW_Control_DRV_M ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtm ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtzce ) ); /* Model Initialize fcn for ModelReference Block: '<S2>/Debounce_Up_PSG_BackL' */ - powerwindow_debounce_initialize(powerwindow_PW_DRV_rtmGetErrorStatusPointer(powerwindow_PW_Control_DRV_M), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtm), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtzce)); + powerwindow_debounce_initialize( powerwindow_PW_DRV_rtmGetErrorStatusPointer( + powerwindow_PW_Control_DRV_M ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtm ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtzce ) ); /* Model Initialize fcn for ModelReference Block: '<S2>/Debounce_Up_PSG_BackR' */ - powerwindow_debounce_initialize(powerwindow_PW_DRV_rtmGetErrorStatusPointer(powerwindow_PW_Control_DRV_M), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtm), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtzce)); + powerwindow_debounce_initialize( powerwindow_PW_DRV_rtmGetErrorStatusPointer( + powerwindow_PW_Control_DRV_M ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtm ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtzce ) ); /* Model Initialize fcn for ModelReference Block: '<S2>/Debounce_Up_PSG_Front' */ - powerwindow_debounce_initialize(powerwindow_PW_DRV_rtmGetErrorStatusPointer(powerwindow_PW_Control_DRV_M), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtm), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtzce)); + powerwindow_debounce_initialize( powerwindow_PW_DRV_rtmGetErrorStatusPointer( + powerwindow_PW_Control_DRV_M ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtm ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtzce ) ); /* Model Initialize fcn for ModelReference Block: '<S1>/PW_DRV' */ - powerwindow_powerwindow_control_initialize(powerwindow_PW_DRV_rtmGetErrorStatusPointer(powerwindow_PW_Control_DRV_M), - &(powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtm), - &(powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtdw), - &(powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtzce)); + powerwindow_powerwindow_control_initialize( + powerwindow_PW_DRV_rtmGetErrorStatusPointer( powerwindow_PW_Control_DRV_M ), + &( powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtm ), + &( powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtdw ), + &( powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtzce ) ); /* Start for ModelReference: '<S2>/Debounce_Up_DRV' */ - powerwindow_debounce_Start(&(powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtdw)); + powerwindow_debounce_Start( & + ( powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtdw ) ); /* Start for ModelReference: '<S2>/Debounce_Down_DRV' */ - powerwindow_debounce_Start(&(powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtdw)); + powerwindow_debounce_Start( & + ( powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtdw ) ); /* Start for ModelReference: '<S2>/Debounce_Up_PSG_BackL' */ powerwindow_debounce_Start - (&(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtdw)); + ( &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtdw ) ); /* Start for ModelReference: '<S2>/Debounce_Down_PSG_BackL' */ powerwindow_debounce_Start - (&(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtdw)); + ( &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtdw ) ); /* Start for ModelReference: '<S2>/Debounce_Up_PSG_Front' */ powerwindow_debounce_Start - (&(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtdw)); + ( &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtdw ) ); /* Start for ModelReference: '<S2>/Debounce_Down_PSG_Front' */ powerwindow_debounce_Start - (&(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtdw)); + ( &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtdw ) ); /* Start for ModelReference: '<S2>/Debounce_Up_PSG_BackR' */ powerwindow_debounce_Start - (&(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtdw)); + ( &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtdw ) ); /* Start for ModelReference: '<S2>/Debounce_Down_PSG_BackR' */ powerwindow_debounce_Start - (&(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtdw)); + ( &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtdw ) ); /* Start for ModelReference: '<S1>/PW_DRV' */ - powerwindow_powerwindow_control_Start(&(powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtdw)); + powerwindow_powerwindow_control_Start( & + ( powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtdw ) ); /* SystemInitialize for ModelReference: '<S2>/Debounce_Up_DRV' */ - powerwindow_debounce_Init(&(powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtdw)); + powerwindow_debounce_Init( & + ( powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_DRV_DWORK1.rtdw ) ); /* SystemInitialize for ModelReference: '<S2>/Debounce_Down_DRV' */ - powerwindow_debounce_Init(&(powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtdw)); + powerwindow_debounce_Init( & + ( powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_DRV_DWORK1.rtdw ) ); /* SystemInitialize for ModelReference: '<S2>/Debounce_Up_PSG_BackL' */ powerwindow_debounce_Init - (&(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtdw)); + ( &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackL_DWORK1.rtdw ) ); /* SystemInitialize for ModelReference: '<S2>/Debounce_Down_PSG_BackL' */ powerwindow_debounce_Init - (&(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtdw)); + ( &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackL_DWORK1.rtdw ) ); /* SystemInitialize for ModelReference: '<S2>/Debounce_Up_PSG_Front' */ powerwindow_debounce_Init - (&(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtdw)); + ( &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_Front_DWORK1.rtdw ) ); /* SystemInitialize for ModelReference: '<S2>/Debounce_Down_PSG_Front' */ powerwindow_debounce_Init - (&(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtdw)); + ( &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_Front_DWORK1.rtdw ) ); /* SystemInitialize for ModelReference: '<S2>/Debounce_Up_PSG_BackR' */ powerwindow_debounce_Init - (&(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtdw)); + ( &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Up_PSG_BackR_DWORK1.rtdw ) ); /* SystemInitialize for ModelReference: '<S2>/Debounce_Down_PSG_BackR' */ powerwindow_debounce_Init - (&(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtb), - &(powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtdw)); + ( &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtb ), + &( powerwindow_PW_Control_DR_DWork.Debounce_Down_PSG_BackR_DWORK1.rtdw ) ); /* SystemInitialize for ModelReference: '<S1>/PW_DRV' */ - powerwindow_powerwindow_control_Init(&powerwindow_PW_Control_DRV_Y.Out1, - &powerwindow_PW_Control_DRV_Y.Out2, &powerwindow_PW_Control_DRV_Y.Out3, - &powerwindow_PW_Control_DRV_Y.Out4, &powerwindow_PW_Control_DRV_Y.Out5, - &(powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtdw)); + powerwindow_powerwindow_control_Init( &powerwindow_PW_Control_DRV_Y.Out1, + &powerwindow_PW_Control_DRV_Y.Out2, &powerwindow_PW_Control_DRV_Y.Out3, + &powerwindow_PW_Control_DRV_Y.Out4, &powerwindow_PW_Control_DRV_Y.Out5, + &( powerwindow_PW_Control_DR_DWork.PW_DRV_DWORK1.rtdw ) ); } /* Model terminate function */ -void powerwindow_PW_Control_DRV_terminate(void) +void powerwindow_PW_Control_DRV_terminate( void ) { /* (no terminate code required) */ } /* - * File trailer for generated code. - * - * [EOF] - */ + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_PW_Control_PSG_BackL.c b/bench/app/powerwindow/powerwindow_PW_Control_PSG_BackL.c index e2f9be2f2c3f77f1cd6e3b447f61bf9fbfba3363..e159775397efe70403285514ef1ebb7d14e400f4 100644 --- a/bench/app/powerwindow/powerwindow_PW_Control_PSG_BackL.c +++ b/bench/app/powerwindow/powerwindow_PW_Control_PSG_BackL.c @@ -1,163 +1,188 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_PW_Control_PSG_BackL.c - - Author: CoSys-Lab, University of Antwerp - - Function: PW_Control_DRV realizes the functionality of back-left passenger side powerwindow. It connects the 3 smaller modules together. - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow//powerwindow_powerwindow_control.c - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - -*/ - - -#include "wcclib.h" -#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL.h" -#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL_private.h" - -/* - Forward declaration of functions -*/ - -void powerwindow_PW_Control_PSG_BackL_initialize(void); -void powerwindow_PW_Control_PSG_BackL_terminate(void); -void powerwindow_PW_Control_PSG_BackL_main(void); - - -/* Block states (auto storage) */ -powerwindow_D_Work_PW_Control_PSG_BackL powerwindow_PW_Control_PSG_BackL_DWork; - -/* External inputs (root inport signals with auto storage) */ -powerwindow_ExternalInputs_PW_Control_PSG_BackL powerwindow_PW_Control_PSG_BackL_U; - -/* External outputs (root outports fed by signals with auto storage) */ -powerwindow_ExternalOutputs_PW_Control_PSG_BackL powerwindow_PW_Control_PSG_BackL_Y; - -/* Real-time model */ -powerwindow_RT_MODEL_PW_Control_PSG_BackL powerwindow_PW_Control_PSG_BackL_M_; -powerwindow_RT_MODEL_PW_Control_PSG_BackL *const powerwindow_PW_Control_PSG_BackL_M = &powerwindow_PW_Control_PSG_BackL_M_; - -/* Model step function */ -void powerwindow_PW_Control_PSG_BackL_main(void) -{ - /* local block i/o variables */ - powerwindow_boolean_T rtb_debounce_Up; - powerwindow_boolean_T rtb_debounce_Down; - powerwindow_boolean_T powerwindow_rtb_ControlEx_PSG_BackL_o1; - powerwindow_boolean_T powerwindow_rtb_ControlEx_PSG_BackL_o2; - - /* ModelReference: '<S2>/debounce_Up' */ - powerwindow_debounce_main(&powerwindow_PW_Control_PSG_BackL_U.Up_PSG_BackL, &rtb_debounce_Up, - &(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtzce)); - - /* ModelReference: '<S2>/debounce_Down' */ - powerwindow_debounce_main(&powerwindow_PW_Control_PSG_BackL_U.Down_PSG_BackL, &rtb_debounce_Down, - &(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtzce)); - - /* ModelReference: '<S1>/ControlEx_PSG_BackL' */ - powerwindow_controlexclusion_main(&powerwindow_PW_Control_PSG_BackL_U.Up_DRV, &powerwindow_PW_Control_PSG_BackL_U.Down_DRV, - &rtb_debounce_Up, &rtb_debounce_Down, - &powerwindow_rtb_ControlEx_PSG_BackL_o1, &powerwindow_rtb_ControlEx_PSG_BackL_o2); - - /* ModelReference: '<S1>/PW_PSG_BackL' */ - powerwindow_powerwindow_control_main(&powerwindow_rtb_ControlEx_PSG_BackL_o1, &powerwindow_rtb_ControlEx_PSG_BackL_o2, - &powerwindow_PW_Control_PSG_BackL_U.endofdetectionrange, - &powerwindow_PW_Control_PSG_BackL_U.currentsense, - &powerwindow_PW_Control_PSG_BackL_Y.window_up, &powerwindow_PW_Control_PSG_BackL_Y.window_down, - &powerwindow_PW_Control_PSG_BackL_Y.overcurrent, &powerwindow_PW_Control_PSG_BackL_Y.pinch, - &powerwindow_PW_Control_PSG_BackL_Y.wake, - &(powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtzce)); -} - -/* Model initialize function */ -void powerwindow_PW_Control_PSG_BackL_initialize(void) -{ - /* Registration code */ - - /* initialize error status */ - powerwindow_PW_PSG_BackL_rtmSetErrorStatus(powerwindow_PW_Control_PSG_BackL_M, (NULL)); - - /* states (dwork) */ - (void) memset((void *)&powerwindow_PW_Control_PSG_BackL_DWork, 0, - sizeof(powerwindow_D_Work_PW_Control_PSG_BackL)); - - /* external inputs */ - (void) memset((void *)&powerwindow_PW_Control_PSG_BackL_U, 0, - sizeof(powerwindow_ExternalInputs_PW_Control_PSG_BackL)); - - /* external outputs */ - (void) memset((void *)&powerwindow_PW_Control_PSG_BackL_Y, 0, - sizeof(powerwindow_ExternalOutputs_PW_Control_PSG_BackL)); - - /* Model Initialize fcn for ModelReference Block: '<S1>/ControlEx_PSG_BackL' */ - powerwindow_controlexclusion_initialize(); - - /* Model Initialize fcn for ModelReference Block: '<S2>/debounce_Down' */ - powerwindow_debounce_initialize(powerwindow_PW_PSG_BackL_rtmGetErrorStatusPointer(powerwindow_PW_Control_PSG_BackL_M), - &(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtm), - &(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtzce)); - - /* Model Initialize fcn for ModelReference Block: '<S2>/debounce_Up' */ - powerwindow_debounce_initialize(powerwindow_PW_PSG_BackL_rtmGetErrorStatusPointer(powerwindow_PW_Control_PSG_BackL_M), - &(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtm), - &(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtzce)); - - /* Model Initialize fcn for ModelReference Block: '<S1>/PW_PSG_BackL' */ - powerwindow_powerwindow_control_initialize(powerwindow_PW_PSG_BackL_rtmGetErrorStatusPointer(powerwindow_PW_Control_PSG_BackL_M), - &(powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtm), - &(powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtzce)); - - /* Start for ModelReference: '<S2>/debounce_Up' */ - powerwindow_debounce_Start(&(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtdw)); - - /* Start for ModelReference: '<S2>/debounce_Down' */ - powerwindow_debounce_Start(&(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtdw)); - - /* Start for ModelReference: '<S1>/PW_PSG_BackL' */ - powerwindow_powerwindow_control_Start(&(powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtdw)); - - /* InitializeConditions for ModelReference: '<S2>/debounce_Up' */ - powerwindow_debounce_Init(&(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtdw)); - - /* InitializeConditions for ModelReference: '<S2>/debounce_Down' */ - powerwindow_debounce_Init(&(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtdw)); - - /* InitializeConditions for ModelReference: '<S1>/PW_PSG_BackL' */ - powerwindow_powerwindow_control_Init(&powerwindow_PW_Control_PSG_BackL_Y.window_up, - &powerwindow_PW_Control_PSG_BackL_Y.window_down, &powerwindow_PW_Control_PSG_BackL_Y.overcurrent, - &powerwindow_PW_Control_PSG_BackL_Y.pinch, &powerwindow_PW_Control_PSG_BackL_Y.wake, - &(powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtdw)); -} - -/* Model terminate function */ -void powerwindow_PW_Control_PSG_BackL_terminate(void) -{ - /* (no terminate code required) */ -} - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_PW_Control_PSG_BackL.c + + Author: CoSys-Lab, University of Antwerp + + Function: PW_Control_DRV realizes the functionality of back-left passenger side powerwindow. It connects the 3 smaller modules together. + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow//powerwindow_powerwindow_control.c + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + + +#include "wcclib.h" +#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL.h" +#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackL_private.h" + +/* + Forward declaration of functions +*/ + +void powerwindow_PW_Control_PSG_BackL_initialize( void ); +void powerwindow_PW_Control_PSG_BackL_terminate( void ); +void powerwindow_PW_Control_PSG_BackL_main( void ); + + +/* Block states (auto storage) */ +powerwindow_D_Work_PW_Control_PSG_BackL powerwindow_PW_Control_PSG_BackL_DWork; + +/* External inputs (root inport signals with auto storage) */ +powerwindow_ExternalInputs_PW_Control_PSG_BackL +powerwindow_PW_Control_PSG_BackL_U; + +/* External outputs (root outports fed by signals with auto storage) */ +powerwindow_ExternalOutputs_PW_Control_PSG_BackL +powerwindow_PW_Control_PSG_BackL_Y; + +/* Real-time model */ +powerwindow_RT_MODEL_PW_Control_PSG_BackL powerwindow_PW_Control_PSG_BackL_M_; +powerwindow_RT_MODEL_PW_Control_PSG_BackL *const +powerwindow_PW_Control_PSG_BackL_M = &powerwindow_PW_Control_PSG_BackL_M_; + +/* Model step function */ +void powerwindow_PW_Control_PSG_BackL_main( void ) +{ + /* local block i/o variables */ + powerwindow_boolean_T rtb_debounce_Up; + powerwindow_boolean_T rtb_debounce_Down; + powerwindow_boolean_T powerwindow_rtb_ControlEx_PSG_BackL_o1; + powerwindow_boolean_T powerwindow_rtb_ControlEx_PSG_BackL_o2; + + /* ModelReference: '<S2>/debounce_Up' */ + powerwindow_debounce_main( &powerwindow_PW_Control_PSG_BackL_U.Up_PSG_BackL, + &rtb_debounce_Up, + &( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtzce ) ); + + /* ModelReference: '<S2>/debounce_Down' */ + powerwindow_debounce_main( &powerwindow_PW_Control_PSG_BackL_U.Down_PSG_BackL, + &rtb_debounce_Down, + &( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtzce ) ); + + /* ModelReference: '<S1>/ControlEx_PSG_BackL' */ + powerwindow_controlexclusion_main( &powerwindow_PW_Control_PSG_BackL_U.Up_DRV, + &powerwindow_PW_Control_PSG_BackL_U.Down_DRV, + &rtb_debounce_Up, &rtb_debounce_Down, + &powerwindow_rtb_ControlEx_PSG_BackL_o1, + &powerwindow_rtb_ControlEx_PSG_BackL_o2 ); + + /* ModelReference: '<S1>/PW_PSG_BackL' */ + powerwindow_powerwindow_control_main( &powerwindow_rtb_ControlEx_PSG_BackL_o1, + &powerwindow_rtb_ControlEx_PSG_BackL_o2, + &powerwindow_PW_Control_PSG_BackL_U.endofdetectionrange, + &powerwindow_PW_Control_PSG_BackL_U.currentsense, + &powerwindow_PW_Control_PSG_BackL_Y.window_up, + &powerwindow_PW_Control_PSG_BackL_Y.window_down, + &powerwindow_PW_Control_PSG_BackL_Y.overcurrent, + &powerwindow_PW_Control_PSG_BackL_Y.pinch, + &powerwindow_PW_Control_PSG_BackL_Y.wake, + &( powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtzce ) ); +} + +/* Model initialize function */ +void powerwindow_PW_Control_PSG_BackL_initialize( void ) +{ + /* Registration code */ + + /* initialize error status */ + powerwindow_PW_PSG_BackL_rtmSetErrorStatus( powerwindow_PW_Control_PSG_BackL_M, + ( NULL ) ); + + /* states (dwork) */ + ( void ) memset( ( void * )&powerwindow_PW_Control_PSG_BackL_DWork, 0, + sizeof( powerwindow_D_Work_PW_Control_PSG_BackL ) ); + + /* external inputs */ + ( void ) memset( ( void * )&powerwindow_PW_Control_PSG_BackL_U, 0, + sizeof( powerwindow_ExternalInputs_PW_Control_PSG_BackL ) ); + + /* external outputs */ + ( void ) memset( ( void * )&powerwindow_PW_Control_PSG_BackL_Y, 0, + sizeof( powerwindow_ExternalOutputs_PW_Control_PSG_BackL ) ); + + /* Model Initialize fcn for ModelReference Block: '<S1>/ControlEx_PSG_BackL' */ + powerwindow_controlexclusion_initialize(); + + /* Model Initialize fcn for ModelReference Block: '<S2>/debounce_Down' */ + powerwindow_debounce_initialize( + powerwindow_PW_PSG_BackL_rtmGetErrorStatusPointer( + powerwindow_PW_Control_PSG_BackL_M ), + &( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtm ), + &( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtzce ) ); + + /* Model Initialize fcn for ModelReference Block: '<S2>/debounce_Up' */ + powerwindow_debounce_initialize( + powerwindow_PW_PSG_BackL_rtmGetErrorStatusPointer( + powerwindow_PW_Control_PSG_BackL_M ), + &( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtm ), + &( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtzce ) ); + + /* Model Initialize fcn for ModelReference Block: '<S1>/PW_PSG_BackL' */ + powerwindow_powerwindow_control_initialize( + powerwindow_PW_PSG_BackL_rtmGetErrorStatusPointer( + powerwindow_PW_Control_PSG_BackL_M ), + &( powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtm ), + &( powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtzce ) ); + + /* Start for ModelReference: '<S2>/debounce_Up' */ + powerwindow_debounce_Start( & + ( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtdw ) ); + + /* Start for ModelReference: '<S2>/debounce_Down' */ + powerwindow_debounce_Start( & + ( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtdw ) ); + + /* Start for ModelReference: '<S1>/PW_PSG_BackL' */ + powerwindow_powerwindow_control_Start( & + ( powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtdw ) ); + + /* InitializeConditions for ModelReference: '<S2>/debounce_Up' */ + powerwindow_debounce_Init( & + ( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Up_DWORK1.rtdw ) ); + + /* InitializeConditions for ModelReference: '<S2>/debounce_Down' */ + powerwindow_debounce_Init( & + ( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_BackL_DWork.Debounce_Down_DWORK1.rtdw ) ); + + /* InitializeConditions for ModelReference: '<S1>/PW_PSG_BackL' */ + powerwindow_powerwindow_control_Init( + &powerwindow_PW_Control_PSG_BackL_Y.window_up, + &powerwindow_PW_Control_PSG_BackL_Y.window_down, + &powerwindow_PW_Control_PSG_BackL_Y.overcurrent, + &powerwindow_PW_Control_PSG_BackL_Y.pinch, + &powerwindow_PW_Control_PSG_BackL_Y.wake, + &( powerwindow_PW_Control_PSG_BackL_DWork.PW_PSG_BackL_DWORK1.rtdw ) ); +} + +/* Model terminate function */ +void powerwindow_PW_Control_PSG_BackL_terminate( void ) +{ + /* (no terminate code required) */ +} + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_PW_Control_PSG_BackR.c b/bench/app/powerwindow/powerwindow_PW_Control_PSG_BackR.c index 64adede617e12f17e2f3e3c4c3f2e2d39fe06060..26e1fc6372bde128902b7e61d198f286935eadd0 100644 --- a/bench/app/powerwindow/powerwindow_PW_Control_PSG_BackR.c +++ b/bench/app/powerwindow/powerwindow_PW_Control_PSG_BackR.c @@ -1,163 +1,188 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_PW_Control_PSG_BackR.c - - Author: CoSys-Lab, University of Antwerp - - Function: PW_Control_DRV realizes the functionality of back-right passenger side powerwindow. It connects the 3 smaller modules together. - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow//powerwindow_PW_Control_PSG_BackR.c - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - -*/ - - -#include "wcclib.h" -#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR.h" -#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR_private.h" - -/* - Forward declaration of functions -*/ - -void powerwindow_PW_Control_PSG_BackR_initialize(void); -void powerwindow_PW_Control_PSG_BackR_terminate(void); -void powerwindow_PW_Control_PSG_BackR_main(void); - - -/* Block states (auto storage) */ -powerwindow_D_Work_PW_Control_PSG_BackR powerwindow_PW_Control_PSG_BackR_DWork; - -/* External inputs (root inport signals with auto storage) */ -powerwindow_ExternalInputs_PW_Control_PSG_BackR powerwindow_PW_Control_PSG_BackR_U; - -/* External outputs (root outports fed by signals with auto storage) */ -powerwindow_ExternalOutputs_PW_Control_PSG_BackR powerwindow_PW_Control_PSG_BackR_Y; - -/* Real-time model */ -powerwindow_RT_MODEL_PW_Control_PSG_BackR powerwindow_PW_Control_PSG_BackR_M_; -powerwindow_RT_MODEL_PW_Control_PSG_BackR *const powerwindow_PW_Control_PSG_BackR_M = &powerwindow_PW_Control_PSG_BackR_M_; - -/* Model step function */ -void powerwindow_PW_Control_PSG_BackR_main(void) -{ - /* local block i/o variables */ - powerwindow_boolean_T rtb_debounce_Up; - powerwindow_boolean_T rtb_debounce_Down; - powerwindow_boolean_T powerwindow_rtb_ControlEx_PSG_BackR_o1; - powerwindow_boolean_T powerwindow_rtb_ControlEx_PSG_BackR_o2; - - /* ModelReference: '<S2>/debounce_Up' */ - powerwindow_debounce_main(&powerwindow_PW_Control_PSG_BackR_U.Up_PSG_BackR, &rtb_debounce_Up, - &(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtzce)); - - /* ModelReference: '<S2>/debounce_Down' */ - powerwindow_debounce_main(&powerwindow_PW_Control_PSG_BackR_U.Down_PSG_BackR, &rtb_debounce_Down, - &(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtzce)); - - /* ModelReference: '<S1>/ControlEx_PSG_BackR' */ - powerwindow_controlexclusion_main(&powerwindow_PW_Control_PSG_BackR_U.Up_DRV, &powerwindow_PW_Control_PSG_BackR_U.Down_DRV, - &rtb_debounce_Up, &rtb_debounce_Down, - &powerwindow_rtb_ControlEx_PSG_BackR_o1, &powerwindow_rtb_ControlEx_PSG_BackR_o2); - - /* ModelReference: '<S1>/PW_PSG_BackR' */ - powerwindow_powerwindow_control_main(&powerwindow_rtb_ControlEx_PSG_BackR_o1, &powerwindow_rtb_ControlEx_PSG_BackR_o2, - &powerwindow_PW_Control_PSG_BackR_U.endofdetectionrange, - &powerwindow_PW_Control_PSG_BackR_U.currentsense, - &powerwindow_PW_Control_PSG_BackR_Y.window_up, &powerwindow_PW_Control_PSG_BackR_Y.window_down, - &powerwindow_PW_Control_PSG_BackR_Y.overcurrent, &powerwindow_PW_Control_PSG_BackR_Y.pinch, - &powerwindow_PW_Control_PSG_BackR_Y.wake, - &(powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtzce)); -} - -/* Model initialize function */ -void powerwindow_PW_Control_PSG_BackR_initialize(void) -{ - /* Registration code */ - - /* initialize error status */ - powerwindow_PW_PSG_BackR_rtmSetErrorStatus(powerwindow_PW_Control_PSG_BackR_M, (NULL)); - - /* states (dwork) */ - (void) memset((void *)&powerwindow_PW_Control_PSG_BackR_DWork, 0, - sizeof(powerwindow_D_Work_PW_Control_PSG_BackR)); - - /* external inputs */ - (void) memset((void *)&powerwindow_PW_Control_PSG_BackR_U, 0, - sizeof(powerwindow_ExternalInputs_PW_Control_PSG_BackR)); - - /* external outputs */ - (void) memset((void *)&powerwindow_PW_Control_PSG_BackR_Y, 0, - sizeof(powerwindow_ExternalOutputs_PW_Control_PSG_BackR)); - - /* Model Initialize fcn for ModelReference Block: '<S1>/ControlEx_PSG_BackR' */ - powerwindow_controlexclusion_initialize(); - - /* Model Initialize fcn for ModelReference Block: '<S2>/debounce_Down' */ - powerwindow_debounce_initialize(powerwindow_PW_PSG_BackR_rtmGetErrorStatusPointer(powerwindow_PW_Control_PSG_BackR_M), - &(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtm), - &(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtzce)); - - /* Model Initialize fcn for ModelReference Block: '<S2>/debounce_Up' */ - powerwindow_debounce_initialize(powerwindow_PW_PSG_BackR_rtmGetErrorStatusPointer(powerwindow_PW_Control_PSG_BackR_M), - &(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtm), - &(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtzce)); - - /* Model Initialize fcn for ModelReference Block: '<S1>/PW_PSG_BackR' */ - powerwindow_powerwindow_control_initialize(powerwindow_PW_PSG_BackR_rtmGetErrorStatusPointer(powerwindow_PW_Control_PSG_BackR_M), - &(powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtm), - &(powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtzce)); - - /* Start for ModelReference: '<S2>/debounce_Up' */ - powerwindow_debounce_Start(&(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtdw)); - - /* Start for ModelReference: '<S2>/debounce_Down' */ - powerwindow_debounce_Start(&(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtdw)); - - /* Start for ModelReference: '<S1>/PW_PSG_BackR' */ - powerwindow_powerwindow_control_Start(&(powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtdw)); - - /* InitializeConditions for ModelReference: '<S2>/debounce_Up' */ - powerwindow_debounce_Init(&(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtdw)); - - /* InitializeConditions for ModelReference: '<S2>/debounce_Down' */ - powerwindow_debounce_Init(&(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtdw)); - - /* InitializeConditions for ModelReference: '<S1>/PW_PSG_BackR' */ - powerwindow_powerwindow_control_Init(&powerwindow_PW_Control_PSG_BackR_Y.window_up, - &powerwindow_PW_Control_PSG_BackR_Y.window_down, &powerwindow_PW_Control_PSG_BackR_Y.overcurrent, - &powerwindow_PW_Control_PSG_BackR_Y.pinch, &powerwindow_PW_Control_PSG_BackR_Y.wake, - &(powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtdw)); -} - -/* Model terminate function */ -void powerwindow_PW_Control_PSG_BackR_terminate(void) -{ - /* (no terminate code required) */ -} - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_PW_Control_PSG_BackR.c + + Author: CoSys-Lab, University of Antwerp + + Function: PW_Control_DRV realizes the functionality of back-right passenger side powerwindow. It connects the 3 smaller modules together. + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow//powerwindow_PW_Control_PSG_BackR.c + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + + +#include "wcclib.h" +#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR.h" +#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_BackR_private.h" + +/* + Forward declaration of functions +*/ + +void powerwindow_PW_Control_PSG_BackR_initialize( void ); +void powerwindow_PW_Control_PSG_BackR_terminate( void ); +void powerwindow_PW_Control_PSG_BackR_main( void ); + + +/* Block states (auto storage) */ +powerwindow_D_Work_PW_Control_PSG_BackR powerwindow_PW_Control_PSG_BackR_DWork; + +/* External inputs (root inport signals with auto storage) */ +powerwindow_ExternalInputs_PW_Control_PSG_BackR +powerwindow_PW_Control_PSG_BackR_U; + +/* External outputs (root outports fed by signals with auto storage) */ +powerwindow_ExternalOutputs_PW_Control_PSG_BackR +powerwindow_PW_Control_PSG_BackR_Y; + +/* Real-time model */ +powerwindow_RT_MODEL_PW_Control_PSG_BackR powerwindow_PW_Control_PSG_BackR_M_; +powerwindow_RT_MODEL_PW_Control_PSG_BackR *const +powerwindow_PW_Control_PSG_BackR_M = &powerwindow_PW_Control_PSG_BackR_M_; + +/* Model step function */ +void powerwindow_PW_Control_PSG_BackR_main( void ) +{ + /* local block i/o variables */ + powerwindow_boolean_T rtb_debounce_Up; + powerwindow_boolean_T rtb_debounce_Down; + powerwindow_boolean_T powerwindow_rtb_ControlEx_PSG_BackR_o1; + powerwindow_boolean_T powerwindow_rtb_ControlEx_PSG_BackR_o2; + + /* ModelReference: '<S2>/debounce_Up' */ + powerwindow_debounce_main( &powerwindow_PW_Control_PSG_BackR_U.Up_PSG_BackR, + &rtb_debounce_Up, + &( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtzce ) ); + + /* ModelReference: '<S2>/debounce_Down' */ + powerwindow_debounce_main( &powerwindow_PW_Control_PSG_BackR_U.Down_PSG_BackR, + &rtb_debounce_Down, + &( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtzce ) ); + + /* ModelReference: '<S1>/ControlEx_PSG_BackR' */ + powerwindow_controlexclusion_main( &powerwindow_PW_Control_PSG_BackR_U.Up_DRV, + &powerwindow_PW_Control_PSG_BackR_U.Down_DRV, + &rtb_debounce_Up, &rtb_debounce_Down, + &powerwindow_rtb_ControlEx_PSG_BackR_o1, + &powerwindow_rtb_ControlEx_PSG_BackR_o2 ); + + /* ModelReference: '<S1>/PW_PSG_BackR' */ + powerwindow_powerwindow_control_main( &powerwindow_rtb_ControlEx_PSG_BackR_o1, + &powerwindow_rtb_ControlEx_PSG_BackR_o2, + &powerwindow_PW_Control_PSG_BackR_U.endofdetectionrange, + &powerwindow_PW_Control_PSG_BackR_U.currentsense, + &powerwindow_PW_Control_PSG_BackR_Y.window_up, + &powerwindow_PW_Control_PSG_BackR_Y.window_down, + &powerwindow_PW_Control_PSG_BackR_Y.overcurrent, + &powerwindow_PW_Control_PSG_BackR_Y.pinch, + &powerwindow_PW_Control_PSG_BackR_Y.wake, + &( powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtzce ) ); +} + +/* Model initialize function */ +void powerwindow_PW_Control_PSG_BackR_initialize( void ) +{ + /* Registration code */ + + /* initialize error status */ + powerwindow_PW_PSG_BackR_rtmSetErrorStatus( powerwindow_PW_Control_PSG_BackR_M, + ( NULL ) ); + + /* states (dwork) */ + ( void ) memset( ( void * )&powerwindow_PW_Control_PSG_BackR_DWork, 0, + sizeof( powerwindow_D_Work_PW_Control_PSG_BackR ) ); + + /* external inputs */ + ( void ) memset( ( void * )&powerwindow_PW_Control_PSG_BackR_U, 0, + sizeof( powerwindow_ExternalInputs_PW_Control_PSG_BackR ) ); + + /* external outputs */ + ( void ) memset( ( void * )&powerwindow_PW_Control_PSG_BackR_Y, 0, + sizeof( powerwindow_ExternalOutputs_PW_Control_PSG_BackR ) ); + + /* Model Initialize fcn for ModelReference Block: '<S1>/ControlEx_PSG_BackR' */ + powerwindow_controlexclusion_initialize(); + + /* Model Initialize fcn for ModelReference Block: '<S2>/debounce_Down' */ + powerwindow_debounce_initialize( + powerwindow_PW_PSG_BackR_rtmGetErrorStatusPointer( + powerwindow_PW_Control_PSG_BackR_M ), + &( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtm ), + &( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtzce ) ); + + /* Model Initialize fcn for ModelReference Block: '<S2>/debounce_Up' */ + powerwindow_debounce_initialize( + powerwindow_PW_PSG_BackR_rtmGetErrorStatusPointer( + powerwindow_PW_Control_PSG_BackR_M ), + &( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtm ), + &( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtzce ) ); + + /* Model Initialize fcn for ModelReference Block: '<S1>/PW_PSG_BackR' */ + powerwindow_powerwindow_control_initialize( + powerwindow_PW_PSG_BackR_rtmGetErrorStatusPointer( + powerwindow_PW_Control_PSG_BackR_M ), + &( powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtm ), + &( powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtzce ) ); + + /* Start for ModelReference: '<S2>/debounce_Up' */ + powerwindow_debounce_Start( & + ( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtdw ) ); + + /* Start for ModelReference: '<S2>/debounce_Down' */ + powerwindow_debounce_Start( & + ( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtdw ) ); + + /* Start for ModelReference: '<S1>/PW_PSG_BackR' */ + powerwindow_powerwindow_control_Start( & + ( powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtdw ) ); + + /* InitializeConditions for ModelReference: '<S2>/debounce_Up' */ + powerwindow_debounce_Init( & + ( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Up_DWORK1.rtdw ) ); + + /* InitializeConditions for ModelReference: '<S2>/debounce_Down' */ + powerwindow_debounce_Init( & + ( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_BackR_DWork.Debounce_Down_DWORK1.rtdw ) ); + + /* InitializeConditions for ModelReference: '<S1>/PW_PSG_BackR' */ + powerwindow_powerwindow_control_Init( + &powerwindow_PW_Control_PSG_BackR_Y.window_up, + &powerwindow_PW_Control_PSG_BackR_Y.window_down, + &powerwindow_PW_Control_PSG_BackR_Y.overcurrent, + &powerwindow_PW_Control_PSG_BackR_Y.pinch, + &powerwindow_PW_Control_PSG_BackR_Y.wake, + &( powerwindow_PW_Control_PSG_BackR_DWork.PW_PSG_BackR_DWORK1.rtdw ) ); +} + +/* Model terminate function */ +void powerwindow_PW_Control_PSG_BackR_terminate( void ) +{ + /* (no terminate code required) */ +} + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_PW_Control_PSG_Front.c b/bench/app/powerwindow/powerwindow_PW_Control_PSG_Front.c index 517c01407782b48e0a31e9d7f0ab70c3edf5da40..ff3597448078cc93a30728968727d4db41c6460f 100644 --- a/bench/app/powerwindow/powerwindow_PW_Control_PSG_Front.c +++ b/bench/app/powerwindow/powerwindow_PW_Control_PSG_Front.c @@ -1,163 +1,189 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_PW_Control_PSG_Front.c - - Author: CoSys-Lab, University of Antwerp - - Function: PW_Control_DRV realizes the functionality of front passenger side powerwindow. It connects the 3 smaller modules together. - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow//powerwindow_powerwindow_control.c - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - -*/ - - -#include "wcclib.h" -#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front.h" -#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front_private.h" - -/* - Forward declaration of functions -*/ - -void powerwindow_PW_Control_PSG_Front_initialize(void); -void powerwindow_PW_Control_PSG_Front_terminate(void); -void powerwindow_PW_Control_PSG_Front_main(void); - - -/* Block states (auto storage) */ -powerwindow_D_Work_PW_Control_PSG_Front powerwindow_PW_Control_PSG_Front_DWork; - -/* External inputs (root inport signals with auto storage) */ -powerwindow_ExternalInputs_PW_Control_PSG_Front powerwindow_PW_Control_PSG_Front_U; - -/* External outputs (root outports fed by signals with auto storage) */ -powerwindow_ExternalOutputs_PW_Control_PSG_Front powerwindow_PW_Control_PSG_Front_Y; - -/* Real-time model */ -powerwindow_RT_MODEL_PW_Control_PSG_Front powerwindow_PW_Control_PSG_Front_M_; -powerwindow_RT_MODEL_PW_Control_PSG_Front *const powerwindow_PW_Control_PSG_Front_M = &powerwindow_PW_Control_PSG_Front_M_; - -/* Model step function */ -void powerwindow_PW_Control_PSG_Front_main(void) -{ - /* local block i/o variables */ - powerwindow_boolean_T rtb_debounce_Up; - powerwindow_boolean_T rtb_debounce_Down; - powerwindow_boolean_T powerwindow_rtb_ControlEx_PSG_Front_Front_o1; - powerwindow_boolean_T powerwindow_rtb_ControlEx_PSG_Front_Front_o2; - - /* ModelReference: '<S2>/debounce_Up' */ - powerwindow_debounce_main(&powerwindow_PW_Control_PSG_Front_U.Up_PSG_Front, &rtb_debounce_Up, - &(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtzce)); - - /* ModelReference: '<S2>/debounce_Down' */ - powerwindow_debounce_main(&powerwindow_PW_Control_PSG_Front_U.Down_PSG_Front, &rtb_debounce_Down, - &(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtzce)); - - /* ModelReference: '<S1>/ControlEx_PSG_Front_Front' */ - powerwindow_controlexclusion_main(&powerwindow_PW_Control_PSG_Front_U.Up_DRV, &powerwindow_PW_Control_PSG_Front_U.Down_DRV, - &rtb_debounce_Up, &rtb_debounce_Down, - &powerwindow_rtb_ControlEx_PSG_Front_Front_o1, &powerwindow_rtb_ControlEx_PSG_Front_Front_o2); - - /* ModelReference: '<S1>/PW_PSG_Front_Front' */ - powerwindow_powerwindow_control_main(&powerwindow_rtb_ControlEx_PSG_Front_Front_o1, &powerwindow_rtb_ControlEx_PSG_Front_Front_o2, - &powerwindow_PW_Control_PSG_Front_U.endofdetectionrange, - &powerwindow_PW_Control_PSG_Front_U.currentsense, - &powerwindow_PW_Control_PSG_Front_Y.window_up, &powerwindow_PW_Control_PSG_Front_Y.window_down, - &powerwindow_PW_Control_PSG_Front_Y.overcurrent, &powerwindow_PW_Control_PSG_Front_Y.pinch, - &powerwindow_PW_Control_PSG_Front_Y.wake, - &(powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtzce)); -} - -/* Model initialize function */ -void powerwindow_PW_Control_PSG_Front_initialize(void) -{ - /* Registration code */ - - /* initialize error status */ - powerwindow_PW_PSG_Front_rtmSetErrorStatus(powerwindow_PW_Control_PSG_Front_M, (NULL)); - - /* states (dwork) */ - (void) memset((void *)&powerwindow_PW_Control_PSG_Front_DWork, 0, - sizeof(powerwindow_D_Work_PW_Control_PSG_Front)); - - /* external inputs */ - (void) memset((void *)&powerwindow_PW_Control_PSG_Front_U, 0, - sizeof(powerwindow_ExternalInputs_PW_Control_PSG_Front)); - - /* external outputs */ - (void) memset((void *)&powerwindow_PW_Control_PSG_Front_Y, 0, - sizeof(powerwindow_ExternalOutputs_PW_Control_PSG_Front)); - - /* Model Initialize fcn for ModelReference Block: '<S1>/ControlEx_PSG_Front_Front' */ - powerwindow_controlexclusion_initialize(); - - /* Model Initialize fcn for ModelReference Block: '<S2>/debounce_Down' */ - powerwindow_debounce_initialize(powerwindow_PW_PSG_Front_rtmGetErrorStatusPointer(powerwindow_PW_Control_PSG_Front_M), - &(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtm), - &(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtzce)); - - /* Model Initialize fcn for ModelReference Block: '<S2>/debounce_Up' */ - powerwindow_debounce_initialize(powerwindow_PW_PSG_Front_rtmGetErrorStatusPointer(powerwindow_PW_Control_PSG_Front_M), - &(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtm), - &(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtzce)); - - /* Model Initialize fcn for ModelReference Block: '<S1>/PW_PSG_Front_Front' */ - powerwindow_powerwindow_control_initialize(powerwindow_PW_PSG_Front_rtmGetErrorStatusPointer(powerwindow_PW_Control_PSG_Front_M), - &(powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtm), - &(powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtdw), - &(powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtzce)); - - /* Start for ModelReference: '<S2>/debounce_Up' */ - powerwindow_debounce_Start(&(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtdw)); - - /* Start for ModelReference: '<S2>/debounce_Down' */ - powerwindow_debounce_Start(&(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtdw)); - - /* Start for ModelReference: '<S1>/PW_PSG_Front_Front' */ - powerwindow_powerwindow_control_Start(&(powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtdw)); - - /* InitializeConditions for ModelReference: '<S2>/debounce_Up' */ - powerwindow_debounce_Init(&(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtdw)); - - /* InitializeConditions for ModelReference: '<S2>/debounce_Down' */ - powerwindow_debounce_Init(&(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtb), - &(powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtdw)); - - /* InitializeConditions for ModelReference: '<S1>/PW_PSG_Front_Front' */ - powerwindow_powerwindow_control_Init(&powerwindow_PW_Control_PSG_Front_Y.window_up, - &powerwindow_PW_Control_PSG_Front_Y.window_down, &powerwindow_PW_Control_PSG_Front_Y.overcurrent, - &powerwindow_PW_Control_PSG_Front_Y.pinch, &powerwindow_PW_Control_PSG_Front_Y.wake, - &(powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtdw)); -} - -/* Model terminate function */ -void powerwindow_PW_Control_PSG_Front_terminate(void) -{ - /* (no terminate code required) */ -} - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_PW_Control_PSG_Front.c + + Author: CoSys-Lab, University of Antwerp + + Function: PW_Control_DRV realizes the functionality of front passenger side powerwindow. It connects the 3 smaller modules together. + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow//powerwindow_powerwindow_control.c + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + + +#include "wcclib.h" +#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front.h" +#include "powerwindow_HeaderFiles/powerwindow_PW_Control_PSG_Front_private.h" + +/* + Forward declaration of functions +*/ + +void powerwindow_PW_Control_PSG_Front_initialize( void ); +void powerwindow_PW_Control_PSG_Front_terminate( void ); +void powerwindow_PW_Control_PSG_Front_main( void ); + + +/* Block states (auto storage) */ +powerwindow_D_Work_PW_Control_PSG_Front powerwindow_PW_Control_PSG_Front_DWork; + +/* External inputs (root inport signals with auto storage) */ +powerwindow_ExternalInputs_PW_Control_PSG_Front +powerwindow_PW_Control_PSG_Front_U; + +/* External outputs (root outports fed by signals with auto storage) */ +powerwindow_ExternalOutputs_PW_Control_PSG_Front +powerwindow_PW_Control_PSG_Front_Y; + +/* Real-time model */ +powerwindow_RT_MODEL_PW_Control_PSG_Front powerwindow_PW_Control_PSG_Front_M_; +powerwindow_RT_MODEL_PW_Control_PSG_Front *const +powerwindow_PW_Control_PSG_Front_M = &powerwindow_PW_Control_PSG_Front_M_; + +/* Model step function */ +void powerwindow_PW_Control_PSG_Front_main( void ) +{ + /* local block i/o variables */ + powerwindow_boolean_T rtb_debounce_Up; + powerwindow_boolean_T rtb_debounce_Down; + powerwindow_boolean_T powerwindow_rtb_ControlEx_PSG_Front_Front_o1; + powerwindow_boolean_T powerwindow_rtb_ControlEx_PSG_Front_Front_o2; + + /* ModelReference: '<S2>/debounce_Up' */ + powerwindow_debounce_main( &powerwindow_PW_Control_PSG_Front_U.Up_PSG_Front, + &rtb_debounce_Up, + &( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtzce ) ); + + /* ModelReference: '<S2>/debounce_Down' */ + powerwindow_debounce_main( &powerwindow_PW_Control_PSG_Front_U.Down_PSG_Front, + &rtb_debounce_Down, + &( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtzce ) ); + + /* ModelReference: '<S1>/ControlEx_PSG_Front_Front' */ + powerwindow_controlexclusion_main( &powerwindow_PW_Control_PSG_Front_U.Up_DRV, + &powerwindow_PW_Control_PSG_Front_U.Down_DRV, + &rtb_debounce_Up, &rtb_debounce_Down, + &powerwindow_rtb_ControlEx_PSG_Front_Front_o1, + &powerwindow_rtb_ControlEx_PSG_Front_Front_o2 ); + + /* ModelReference: '<S1>/PW_PSG_Front_Front' */ + powerwindow_powerwindow_control_main( + &powerwindow_rtb_ControlEx_PSG_Front_Front_o1, + &powerwindow_rtb_ControlEx_PSG_Front_Front_o2, + &powerwindow_PW_Control_PSG_Front_U.endofdetectionrange, + &powerwindow_PW_Control_PSG_Front_U.currentsense, + &powerwindow_PW_Control_PSG_Front_Y.window_up, + &powerwindow_PW_Control_PSG_Front_Y.window_down, + &powerwindow_PW_Control_PSG_Front_Y.overcurrent, + &powerwindow_PW_Control_PSG_Front_Y.pinch, + &powerwindow_PW_Control_PSG_Front_Y.wake, + &( powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtzce ) ); +} + +/* Model initialize function */ +void powerwindow_PW_Control_PSG_Front_initialize( void ) +{ + /* Registration code */ + + /* initialize error status */ + powerwindow_PW_PSG_Front_rtmSetErrorStatus( powerwindow_PW_Control_PSG_Front_M, + ( NULL ) ); + + /* states (dwork) */ + ( void ) memset( ( void * )&powerwindow_PW_Control_PSG_Front_DWork, 0, + sizeof( powerwindow_D_Work_PW_Control_PSG_Front ) ); + + /* external inputs */ + ( void ) memset( ( void * )&powerwindow_PW_Control_PSG_Front_U, 0, + sizeof( powerwindow_ExternalInputs_PW_Control_PSG_Front ) ); + + /* external outputs */ + ( void ) memset( ( void * )&powerwindow_PW_Control_PSG_Front_Y, 0, + sizeof( powerwindow_ExternalOutputs_PW_Control_PSG_Front ) ); + + /* Model Initialize fcn for ModelReference Block: '<S1>/ControlEx_PSG_Front_Front' */ + powerwindow_controlexclusion_initialize(); + + /* Model Initialize fcn for ModelReference Block: '<S2>/debounce_Down' */ + powerwindow_debounce_initialize( + powerwindow_PW_PSG_Front_rtmGetErrorStatusPointer( + powerwindow_PW_Control_PSG_Front_M ), + &( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtm ), + &( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtzce ) ); + + /* Model Initialize fcn for ModelReference Block: '<S2>/debounce_Up' */ + powerwindow_debounce_initialize( + powerwindow_PW_PSG_Front_rtmGetErrorStatusPointer( + powerwindow_PW_Control_PSG_Front_M ), + &( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtm ), + &( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtzce ) ); + + /* Model Initialize fcn for ModelReference Block: '<S1>/PW_PSG_Front_Front' */ + powerwindow_powerwindow_control_initialize( + powerwindow_PW_PSG_Front_rtmGetErrorStatusPointer( + powerwindow_PW_Control_PSG_Front_M ), + &( powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtm ), + &( powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtdw ), + &( powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtzce ) ); + + /* Start for ModelReference: '<S2>/debounce_Up' */ + powerwindow_debounce_Start( & + ( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtdw ) ); + + /* Start for ModelReference: '<S2>/debounce_Down' */ + powerwindow_debounce_Start( & + ( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtdw ) ); + + /* Start for ModelReference: '<S1>/PW_PSG_Front_Front' */ + powerwindow_powerwindow_control_Start( & + ( powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtdw ) ); + + /* InitializeConditions for ModelReference: '<S2>/debounce_Up' */ + powerwindow_debounce_Init( & + ( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Up_DWORK1.rtdw ) ); + + /* InitializeConditions for ModelReference: '<S2>/debounce_Down' */ + powerwindow_debounce_Init( & + ( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtb ), + &( powerwindow_PW_Control_PSG_Front_DWork.Debounce_Down_DWORK1.rtdw ) ); + + /* InitializeConditions for ModelReference: '<S1>/PW_PSG_Front_Front' */ + powerwindow_powerwindow_control_Init( + &powerwindow_PW_Control_PSG_Front_Y.window_up, + &powerwindow_PW_Control_PSG_Front_Y.window_down, + &powerwindow_PW_Control_PSG_Front_Y.overcurrent, + &powerwindow_PW_Control_PSG_Front_Y.pinch, + &powerwindow_PW_Control_PSG_Front_Y.wake, + &( powerwindow_PW_Control_PSG_Front_DWork.PW_PSG_Front_Front_DWORK1.rtdw ) ); +} + +/* Model terminate function */ +void powerwindow_PW_Control_PSG_Front_terminate( void ) +{ + /* (no terminate code required) */ +} + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_const_params.c b/bench/app/powerwindow/powerwindow_const_params.c index 74777528c9c141252066c82ee6908f75058726c6..f103808d2dd336d09f94b78a568535eea0ea2285 100644 --- a/bench/app/powerwindow/powerwindow_const_params.c +++ b/bench/app/powerwindow/powerwindow_const_params.c @@ -1,24 +1,25 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_const_params.c - - Author: CoSys-Lab, University of Antwerp - - Function: the lookup table for stateflow chart in powerwindow_powerwindow_control - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_const_params.c - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - -*/ - -#include "powerwindow_HeaderFiles/powerwindow_rtwtypes.h" - -extern const powerwindow_boolean_T powerwindow_rtCP_pooled_6bUUQf1tASYw[12]; -const powerwindow_boolean_T powerwindow_rtCP_pooled_6bUUQf1tASYw[12] = { 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, - 0 } ; +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_const_params.c + + Author: CoSys-Lab, University of Antwerp + + Function: the lookup table for stateflow chart in powerwindow_powerwindow_control + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_const_params.c + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#include "powerwindow_HeaderFiles/powerwindow_rtwtypes.h" + +extern const powerwindow_boolean_T powerwindow_rtCP_pooled_6bUUQf1tASYw[ 12 ]; +const powerwindow_boolean_T powerwindow_rtCP_pooled_6bUUQf1tASYw[ 12 ] = { 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0 + } ; diff --git a/bench/app/powerwindow/powerwindow_controlexclusion.c b/bench/app/powerwindow/powerwindow_controlexclusion.c index e199f0e46881d27d124eedfae07d5c8033e9456f..69c4f8243eef9984c8db3f71dddc40f6c04ff28d 100644 --- a/bench/app/powerwindow/powerwindow_controlexclusion.c +++ b/bench/app/powerwindow/powerwindow_controlexclusion.c @@ -1,85 +1,89 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_controlexclusion - - Author: CoSys-Lab, University of Antwerp - - Function: powerwindow_controlexclusion is one functionality of the power window benchmark. - It takes the input signal from the driver and the passenger to determine the final control signal. - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_controlexclusion.c - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - -*/ - - - -#include "powerwindow_HeaderFiles/powerwindow_controlexclusion.h" -#include "powerwindow_HeaderFiles/powerwindow_controlexclusion_private.h" - -/* - Forward declaration of functions -*/ - -void powerwindow_controlexclusion_initialize(void); -void powerwindow_controlexclusion_terminate(void); -void powerwindow_controlexclusion_main(const powerwindow_boolean_T *rtu_Up_DRV, const powerwindow_boolean_T *rtu_Down_DRV, - const powerwindow_boolean_T *rtu_Up_PSG, const powerwindow_boolean_T *rtu_Down_PSG, - powerwindow_boolean_T *rty_Up, powerwindow_boolean_T *rty_Down); - -/* Model initialize function */ -void powerwindow_controlexclusion_initialize(void) -{ - /* (no initialization code required) */ -} - -/* Model terminate function */ -void powerwindow_controlexclusion_terminate(void) -{ - /* (no terminate code required) */ -} - - -/* - Algorithm core functions - */ - -/* Output and update for referenced model: 'ControlExclusion' */ -void powerwindow_controlexclusion_main(const powerwindow_boolean_T *rtu_Up_DRV, const powerwindow_boolean_T *rtu_Down_DRV, - const powerwindow_boolean_T *rtu_Up_PSG, const powerwindow_boolean_T *rtu_Down_PSG, - powerwindow_boolean_T *rty_Up, powerwindow_boolean_T *rty_Down) -{ - /* Logic: '<S2>/Logical Operator11' incorporates: - * Logic: '<S2>/Logical Operator2' - * Logic: '<S2>/Logical Operator3' - * Logic: '<S2>/Logical Operator5' - * Logic: '<S2>/Logical Operator6' - * Logic: '<S2>/Logical Operator7' - */ - *rty_Up = !(((!*rtu_Up_DRV) && (*rtu_Down_DRV)) || ((*rtu_Down_DRV) && - (!*rtu_Up_PSG) && (*rtu_Down_PSG))); - - /* Logic: '<S2>/Logical Operator12' incorporates: - * Logic: '<S2>/Logical Operator1' - * Logic: '<S2>/Logical Operator10' - * Logic: '<S2>/Logical Operator4' - * Logic: '<S2>/Logical Operator8' - * Logic: '<S2>/Logical Operator9' - */ - *rty_Down = !(((*rtu_Up_DRV) && (!*rtu_Down_DRV)) || ((*rtu_Up_DRV) && - (*rtu_Up_PSG) && (!*rtu_Down_PSG))); -} - - - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_controlexclusion + + Author: CoSys-Lab, University of Antwerp + + Function: powerwindow_controlexclusion is one functionality of the power window benchmark. + It takes the input signal from the driver and the passenger to determine the final control signal. + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_controlexclusion.c + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + + + +#include "powerwindow_HeaderFiles/powerwindow_controlexclusion.h" +#include "powerwindow_HeaderFiles/powerwindow_controlexclusion_private.h" + +/* + Forward declaration of functions +*/ + +void powerwindow_controlexclusion_initialize( void ); +void powerwindow_controlexclusion_terminate( void ); +void powerwindow_controlexclusion_main( const powerwindow_boolean_T *rtu_Up_DRV, + const powerwindow_boolean_T *rtu_Down_DRV, + const powerwindow_boolean_T *rtu_Up_PSG, + const powerwindow_boolean_T *rtu_Down_PSG, + powerwindow_boolean_T *rty_Up, powerwindow_boolean_T *rty_Down ); + +/* Model initialize function */ +void powerwindow_controlexclusion_initialize( void ) +{ + /* (no initialization code required) */ +} + +/* Model terminate function */ +void powerwindow_controlexclusion_terminate( void ) +{ + /* (no terminate code required) */ +} + + +/* + Algorithm core functions +*/ + +/* Output and update for referenced model: 'ControlExclusion' */ +void powerwindow_controlexclusion_main( const powerwindow_boolean_T *rtu_Up_DRV, + const powerwindow_boolean_T *rtu_Down_DRV, + const powerwindow_boolean_T *rtu_Up_PSG, + const powerwindow_boolean_T *rtu_Down_PSG, + powerwindow_boolean_T *rty_Up, powerwindow_boolean_T *rty_Down ) +{ + /* Logic: '<S2>/Logical Operator11' incorporates: + Logic: '<S2>/Logical Operator2' + Logic: '<S2>/Logical Operator3' + Logic: '<S2>/Logical Operator5' + Logic: '<S2>/Logical Operator6' + Logic: '<S2>/Logical Operator7' + */ + *rty_Up = !( ( ( !*rtu_Up_DRV ) && ( *rtu_Down_DRV ) ) || ( ( *rtu_Down_DRV ) && + ( !*rtu_Up_PSG ) && ( *rtu_Down_PSG ) ) ); + + /* Logic: '<S2>/Logical Operator12' incorporates: + Logic: '<S2>/Logical Operator1' + Logic: '<S2>/Logical Operator10' + Logic: '<S2>/Logical Operator4' + Logic: '<S2>/Logical Operator8' + Logic: '<S2>/Logical Operator9' + */ + *rty_Down = !( ( ( *rtu_Up_DRV ) && ( !*rtu_Down_DRV ) ) || ( ( *rtu_Up_DRV ) && + ( *rtu_Up_PSG ) && ( !*rtu_Down_PSG ) ) ); +} + + + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_debounce.c b/bench/app/powerwindow/powerwindow_debounce.c index df0b91d2cb363806878ed0f40ff11ce76e07a0d0..484a04e746bb37121f86d8906c2d60e4a85f5aeb 100644 --- a/bench/app/powerwindow/powerwindow_debounce.c +++ b/bench/app/powerwindow/powerwindow_debounce.c @@ -1,210 +1,220 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_debounce.c - - Author: CoSys-Lab, University of Antwerp - - Function: powerwindow_debounce_main is used to powerwindow_debounce_main the push-down button of the power window. - In order to input a manual switch signal into a digital circuit, - debouncing is necessary so that a single press does not appear like multiple presses. - Without debouncing, pressing the button once may cause unpredictable results. - powerwindow_debounce_main.c defines all the functions that will be used in debounce_PSG_Front which is a part of the Power window. - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_debounce.c - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - - */ - - -#include "wcclib.h" -#include "powerwindow_HeaderFiles/powerwindow_debounce.h" -#include "powerwindow_HeaderFiles/powerwindow_debounce_private.h" - -/* Named constants for Chart: '<Root>/Chart' */ -#define debounce_IN_debounce ((powerwindow_uint8_T)1U) -#define debounce_IN_NO_ACTIVE_CHILD ((powerwindow_uint8_T)0U) -#define debounce_IN_Off ((powerwindow_uint8_T)2U) -#define debounce_IN_Off_h ((powerwindow_uint8_T)1U) -#define debounce_IN_On ((powerwindow_uint8_T)3U) -#define debounce_IN_On_b ((powerwindow_uint8_T)2U) - -/* - Forward declaration of functions -*/ - -void powerwindow_debounce_Init(powerwindow_rtB_debounce_T *, powerwindow_rtDW_debounce_T *); -void powerwindow_debounce_Start(powerwindow_rtDW_debounce_T *); -void powerwindow_debounce_initialize(const powerwindow_char_T **, powerwindow_RT_MODEL_debounce_T * const, - powerwindow_rtB_debounce_T *, powerwindow_rtDW_debounce_T *, powerwindow_rtZCE_debounce_T *); -void powerwindow_debounce_main(const powerwindow_boolean_T *, powerwindow_boolean_T *, powerwindow_rtB_debounce_T *, - powerwindow_rtDW_debounce_T *, powerwindow_rtZCE_debounce_T *); - -/* - Initialization- and return-value-related functions - */ - -/* Initial conditions for referenced model: 'powerwindow_debounce_main' */ -void powerwindow_debounce_Init(powerwindow_rtB_debounce_T *localB, powerwindow_rtDW_debounce_T *localDW) -{ - /* InitializeConditions for Chart: '<Root>/Chart' */ - localDW->is_debounce = debounce_IN_NO_ACTIVE_CHILD; - localDW->temporalCounter_i1 = 0U; - localDW->is_active_c3_debounce = 0U; - localDW->is_c3_debounce = debounce_IN_NO_ACTIVE_CHILD; - localB->Q = false; -} - -/* Start for referenced model: 'powerwindow_debounce_main' */ -void powerwindow_debounce_Start(powerwindow_rtDW_debounce_T *localDW) -{ - /* Start for DiscretePulseGenerator: '<Root>/period of 10ms' */ - localDW->clockTickCounter = 0L; -} - -/* Model initialize function */ -void powerwindow_debounce_initialize(const powerwindow_char_T **rt_errorStatus, powerwindow_RT_MODEL_debounce_T * - const debounce_M, powerwindow_rtB_debounce_T *localB, powerwindow_rtDW_debounce_T *localDW, - powerwindow_rtZCE_debounce_T *localZCE) -{ - /* Registration code */ - - /* initialize error status */ - powerwindow_rtmSetErrorStatusPointer(debounce_M, rt_errorStatus); - - /* block I/O */ - (void) memset(((void *) localB), 0, - sizeof(powerwindow_rtB_debounce_T)); - - /* states (dwork) */ - (void) memset((void *)localDW, 0, - sizeof(powerwindow_rtDW_debounce_T)); - localZCE->Chart_Trig_ZCE = powerwindow_POS_ZCSIG; -} - -/* - Algorithm core functions - */ - -/* Output and update for referenced model: 'powerwindow_debounce_main' */ -void powerwindow_debounce_main(const powerwindow_boolean_T *rtu_Switch, powerwindow_boolean_T *rty_debounced_Switch, - powerwindow_rtB_debounce_T *localB, powerwindow_rtDW_debounce_T *localDW, powerwindow_rtZCE_debounce_T - *localZCE) -{ - powerwindow_int16_T rtb_periodof10ms; - - /* DiscretePulseGenerator: '<Root>/period of 10ms' */ - rtb_periodof10ms = (localDW->clockTickCounter < 1L) && - (localDW->clockTickCounter >= 0L) ? 1 : 0; - if (localDW->clockTickCounter >= 1L) { - localDW->clockTickCounter = 0L; - } else { - localDW->clockTickCounter++; - } - - /* End of DiscretePulseGenerator: '<Root>/period of 10ms' */ - - /* Chart: '<Root>/Chart' incorporates: - * TriggerPort: '<S1>/ticks' - */ - /* DataTypeConversion: '<Root>/Data Type Conversion' */ - if ((rtb_periodof10ms != 0) && (localZCE->Chart_Trig_ZCE != powerwindow_POS_ZCSIG)) { - /* Gateway: Chart */ - if (localDW->temporalCounter_i1 < 7U) { - localDW->temporalCounter_i1++; - } - - /* Event: '<S1>:13' */ - /* During: Chart */ - if (localDW->is_active_c3_debounce == 0U) { - /* Entry: Chart */ - localDW->is_active_c3_debounce = 1U; - - /* Entry Internal: Chart */ - /* Transition: '<S1>:9' */ - localDW->is_c3_debounce = debounce_IN_Off; - - /* Entry 'Off': '<S1>:1' */ - localB->Q = true; - } else { - switch (localDW->is_c3_debounce) { - case debounce_IN_debounce: - /* During 'powerwindow_debounce_main': '<S1>:6' */ - if (localDW->is_debounce == debounce_IN_Off_h) { - /* During 'Off': '<S1>:8' */ - if ((powerwindow_int16_T)*rtu_Switch < 1) { - /* Transition: '<S1>:12' */ - localDW->is_debounce = debounce_IN_On_b; - localDW->temporalCounter_i1 = 0U; - } else { - if (localDW->temporalCounter_i1 >= 3) { - /* Transition: '<S1>:16' */ - localDW->is_debounce = debounce_IN_NO_ACTIVE_CHILD; - localDW->is_c3_debounce = debounce_IN_Off; - - /* Entry 'Off': '<S1>:1' */ - localB->Q = true; - } - } - } else { - /* During 'On': '<S1>:7' */ - if ((powerwindow_int16_T)*rtu_Switch > 0) { - /* Transition: '<S1>:11' */ - localDW->is_debounce = debounce_IN_Off_h; - localDW->temporalCounter_i1 = 0U; - } else { - if (localDW->temporalCounter_i1 >= 3) { - /* Transition: '<S1>:14' */ - localDW->is_debounce = debounce_IN_NO_ACTIVE_CHILD; - localDW->is_c3_debounce = debounce_IN_On; - - /* Entry 'On': '<S1>:5' */ - localB->Q = false; - } - } - } - break; - - case debounce_IN_Off: - /* During 'Off': '<S1>:1' */ - if ((powerwindow_int16_T)*rtu_Switch < 1) { - /* Transition: '<S1>:10' */ - localDW->is_c3_debounce = debounce_IN_debounce; - localDW->is_debounce = debounce_IN_On_b; - localDW->temporalCounter_i1 = 0U; - } - break; - - default: - /* During 'On': '<S1>:5' */ - if ((powerwindow_int16_T)*rtu_Switch > 0) { - /* Transition: '<S1>:15' */ - localDW->is_c3_debounce = debounce_IN_debounce; - localDW->is_debounce = debounce_IN_Off_h; - localDW->temporalCounter_i1 = 0U; - } - break; - } - } - } - - localZCE->Chart_Trig_ZCE = (powerwindow_uint8_T)(rtb_periodof10ms != 0 ? (powerwindow_int16_T) - powerwindow_POS_ZCSIG : (powerwindow_int16_T)powerwindow_ZERO_ZCSIG); - - /* End of DataTypeConversion: '<Root>/Data Type Conversion' */ - - /* DataTypeConversion: '<Root>/Data Type Conversion2' */ - *rty_debounced_Switch = localB->Q; -} - - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_debounce.c + + Author: CoSys-Lab, University of Antwerp + + Function: powerwindow_debounce_main is used to powerwindow_debounce_main the push-down button of the power window. + In order to input a manual switch signal into a digital circuit, + debouncing is necessary so that a single press does not appear like multiple presses. + Without debouncing, pressing the button once may cause unpredictable results. + powerwindow_debounce_main.c defines all the functions that will be used in debounce_PSG_Front which is a part of the Power window. + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow/powerwindow_debounce.c + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + + +#include "wcclib.h" +#include "powerwindow_HeaderFiles/powerwindow_debounce.h" +#include "powerwindow_HeaderFiles/powerwindow_debounce_private.h" + +/* Named constants for Chart: '<Root>/Chart' */ +#define debounce_IN_debounce ((powerwindow_uint8_T)1U) +#define debounce_IN_NO_ACTIVE_CHILD ((powerwindow_uint8_T)0U) +#define debounce_IN_Off ((powerwindow_uint8_T)2U) +#define debounce_IN_Off_h ((powerwindow_uint8_T)1U) +#define debounce_IN_On ((powerwindow_uint8_T)3U) +#define debounce_IN_On_b ((powerwindow_uint8_T)2U) + +/* + Forward declaration of functions +*/ + +void powerwindow_debounce_Init( powerwindow_rtB_debounce_T *, + powerwindow_rtDW_debounce_T * ); +void powerwindow_debounce_Start( powerwindow_rtDW_debounce_T * ); +void powerwindow_debounce_initialize( const powerwindow_char_T **, + powerwindow_RT_MODEL_debounce_T *const, + powerwindow_rtB_debounce_T *, powerwindow_rtDW_debounce_T *, + powerwindow_rtZCE_debounce_T * ); +void powerwindow_debounce_main( const powerwindow_boolean_T *, + powerwindow_boolean_T *, powerwindow_rtB_debounce_T *, + powerwindow_rtDW_debounce_T *, powerwindow_rtZCE_debounce_T * ); + +/* + Initialization- and return-value-related functions +*/ + +/* Initial conditions for referenced model: 'powerwindow_debounce_main' */ +void powerwindow_debounce_Init( powerwindow_rtB_debounce_T *localB, + powerwindow_rtDW_debounce_T *localDW ) +{ + /* InitializeConditions for Chart: '<Root>/Chart' */ + localDW->is_debounce = debounce_IN_NO_ACTIVE_CHILD; + localDW->temporalCounter_i1 = 0U; + localDW->is_active_c3_debounce = 0U; + localDW->is_c3_debounce = debounce_IN_NO_ACTIVE_CHILD; + localB->Q = false; +} + +/* Start for referenced model: 'powerwindow_debounce_main' */ +void powerwindow_debounce_Start( powerwindow_rtDW_debounce_T *localDW ) +{ + /* Start for DiscretePulseGenerator: '<Root>/period of 10ms' */ + localDW->clockTickCounter = 0L; +} + +/* Model initialize function */ +void powerwindow_debounce_initialize( const powerwindow_char_T **rt_errorStatus, + powerwindow_RT_MODEL_debounce_T * + const debounce_M, powerwindow_rtB_debounce_T *localB, + powerwindow_rtDW_debounce_T *localDW, + powerwindow_rtZCE_debounce_T *localZCE ) +{ + /* Registration code */ + + /* initialize error status */ + powerwindow_rtmSetErrorStatusPointer( debounce_M, rt_errorStatus ); + + /* block I/O */ + ( void ) memset( ( ( void * ) localB ), 0, + sizeof( powerwindow_rtB_debounce_T ) ); + + /* states (dwork) */ + ( void ) memset( ( void * )localDW, 0, + sizeof( powerwindow_rtDW_debounce_T ) ); + localZCE->Chart_Trig_ZCE = powerwindow_POS_ZCSIG; +} + +/* + Algorithm core functions +*/ + +/* Output and update for referenced model: 'powerwindow_debounce_main' */ +void powerwindow_debounce_main( const powerwindow_boolean_T *rtu_Switch, + powerwindow_boolean_T *rty_debounced_Switch, + powerwindow_rtB_debounce_T *localB, powerwindow_rtDW_debounce_T *localDW, + powerwindow_rtZCE_debounce_T + *localZCE ) +{ + powerwindow_int16_T rtb_periodof10ms; + + /* DiscretePulseGenerator: '<Root>/period of 10ms' */ + rtb_periodof10ms = ( localDW->clockTickCounter < 1L ) && + ( localDW->clockTickCounter >= 0L ) ? 1 : 0; + if ( localDW->clockTickCounter >= 1L ) + localDW->clockTickCounter = 0L; + + else + localDW->clockTickCounter++; + + /* End of DiscretePulseGenerator: '<Root>/period of 10ms' */ + + /* Chart: '<Root>/Chart' incorporates: + TriggerPort: '<S1>/ticks' + */ + /* DataTypeConversion: '<Root>/Data Type Conversion' */ + if ( ( rtb_periodof10ms != 0 ) && + ( localZCE->Chart_Trig_ZCE != powerwindow_POS_ZCSIG ) ) { + /* Gateway: Chart */ + if ( localDW->temporalCounter_i1 < 7U ) + localDW->temporalCounter_i1++; + + /* Event: '<S1>:13' */ + /* During: Chart */ + if ( localDW->is_active_c3_debounce == 0U ) { + /* Entry: Chart */ + localDW->is_active_c3_debounce = 1U; + + /* Entry Internal: Chart */ + /* Transition: '<S1>:9' */ + localDW->is_c3_debounce = debounce_IN_Off; + + /* Entry 'Off': '<S1>:1' */ + localB->Q = true; + } else { + switch ( localDW->is_c3_debounce ) { + case debounce_IN_debounce: + /* During 'powerwindow_debounce_main': '<S1>:6' */ + if ( localDW->is_debounce == debounce_IN_Off_h ) { + /* During 'Off': '<S1>:8' */ + if ( ( powerwindow_int16_T )*rtu_Switch < 1 ) { + /* Transition: '<S1>:12' */ + localDW->is_debounce = debounce_IN_On_b; + localDW->temporalCounter_i1 = 0U; + } else { + if ( localDW->temporalCounter_i1 >= 3 ) { + /* Transition: '<S1>:16' */ + localDW->is_debounce = debounce_IN_NO_ACTIVE_CHILD; + localDW->is_c3_debounce = debounce_IN_Off; + + /* Entry 'Off': '<S1>:1' */ + localB->Q = true; + } + } + } else { + /* During 'On': '<S1>:7' */ + if ( ( powerwindow_int16_T )*rtu_Switch > 0 ) { + /* Transition: '<S1>:11' */ + localDW->is_debounce = debounce_IN_Off_h; + localDW->temporalCounter_i1 = 0U; + } else { + if ( localDW->temporalCounter_i1 >= 3 ) { + /* Transition: '<S1>:14' */ + localDW->is_debounce = debounce_IN_NO_ACTIVE_CHILD; + localDW->is_c3_debounce = debounce_IN_On; + + /* Entry 'On': '<S1>:5' */ + localB->Q = false; + } + } + } + break; + + case debounce_IN_Off: + /* During 'Off': '<S1>:1' */ + if ( ( powerwindow_int16_T )*rtu_Switch < 1 ) { + /* Transition: '<S1>:10' */ + localDW->is_c3_debounce = debounce_IN_debounce; + localDW->is_debounce = debounce_IN_On_b; + localDW->temporalCounter_i1 = 0U; + } + break; + + default: + /* During 'On': '<S1>:5' */ + if ( ( powerwindow_int16_T )*rtu_Switch > 0 ) { + /* Transition: '<S1>:15' */ + localDW->is_c3_debounce = debounce_IN_debounce; + localDW->is_debounce = debounce_IN_Off_h; + localDW->temporalCounter_i1 = 0U; + } + break; + } + } + } + + localZCE->Chart_Trig_ZCE = ( powerwindow_uint8_T )( rtb_periodof10ms != 0 ? + ( powerwindow_int16_T ) + powerwindow_POS_ZCSIG : ( powerwindow_int16_T )powerwindow_ZERO_ZCSIG ); + + /* End of DataTypeConversion: '<Root>/Data Type Conversion' */ + + /* DataTypeConversion: '<Root>/Data Type Conversion2' */ + *rty_debounced_Switch = localB->Q; +} + + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/powerwindow_inputs.c b/bench/app/powerwindow/powerwindow_inputs.c index fa408c19c60d76a080ff782ad49795f8e632cbfe..222ea147b3cd8317586930581d54c269bc3ed637 100644 --- a/bench/app/powerwindow/powerwindow_inputs.c +++ b/bench/app/powerwindow/powerwindow_inputs.c @@ -1,46 +1,90 @@ - #include "powerwindow_HeaderFiles/powerwindow_rtwtypes.h" +#include "powerwindow_HeaderFiles/powerwindow_rtwtypes.h" - powerwindow_boolean_T powerwindow_debounce_Driver_DRV_U_Up_Input_DRV_Array[powerwindow_input_length] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1}; +powerwindow_boolean_T +powerwindow_debounce_Driver_DRV_U_Up_Input_DRV_Array[powerwindow_input_length] + = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1}; - powerwindow_boolean_T powerwindow_debounce_Driver_DRV_U_Down_Input_DRV_Array[powerwindow_input_length] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1}; +powerwindow_boolean_T +powerwindow_debounce_Driver_DRV_U_Down_Input_DRV_Array[powerwindow_input_length] + = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1}; - powerwindow_boolean_T powerwindow_debounce_Driver_Front_U_Up_Input_Front_Array[powerwindow_input_length] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +powerwindow_boolean_T +powerwindow_debounce_Driver_Front_U_Up_Input_Front_Array[powerwindow_input_length] + = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - powerwindow_boolean_T powerwindow_debounce_Driver_Front_U_Down_Input_Front_Array[powerwindow_input_length] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}; +powerwindow_boolean_T +powerwindow_debounce_Driver_Front_U_Down_Input_Front_Array[powerwindow_input_length] + = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}; - powerwindow_boolean_T powerwindow_debounce_Driver_BackL_U_Up_Input_BackL_Array[powerwindow_input_length] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +powerwindow_boolean_T +powerwindow_debounce_Driver_BackL_U_Up_Input_BackL_Array[powerwindow_input_length] + = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - powerwindow_boolean_T powerwindow_debounce_Driver_BackL_U_Down_Input_BackL_Array[powerwindow_input_length] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 }; +powerwindow_boolean_T +powerwindow_debounce_Driver_BackL_U_Down_Input_BackL_Array[powerwindow_input_length] + = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 }; - powerwindow_boolean_T powerwindow_debounce_Driver_BackR_U_Up_Input_BackR_Array[powerwindow_input_length] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +powerwindow_boolean_T +powerwindow_debounce_Driver_BackR_U_Up_Input_BackR_Array[powerwindow_input_length] + = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - powerwindow_boolean_T powerwindow_debounce_Driver_BackR_U_Down_Input_BackR_Array[powerwindow_input_length] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 }; +powerwindow_boolean_T +powerwindow_debounce_Driver_BackR_U_Down_Input_BackR_Array[powerwindow_input_length] + = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 }; - powerwindow_boolean_T powerwindow_powerwindow_control_U_endofdetectionrange_DRV_Array[powerwindow_input_length] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }; +powerwindow_boolean_T +powerwindow_powerwindow_control_U_endofdetectionrange_DRV_Array[powerwindow_input_length] + = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }; - powerwindow_uint8_T powerwindow_powerwindow_control_U_currentsense_DRV_Array[powerwindow_input_length] = {92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 20, 73, 20, 73, 92, 94, 29, 72, 88, 72, 22, 93, 89, 89, 72, 93, 70, 30, 17, 72, 92, 121, 69, 24, 8, 93, 84, 94, 14, 72, 68, 84, 92, 84, 8, 92, 85, 29, 85, 72, 92, 92, 29, 93, 29, 92, 92, 72, 92, 92, 92, 92, 92, 124, 124, 92, 92, 93, 105, 72, 69, 21, 30, 88, 120, 93, 116, 16, 94, 0, 84, 116, 94, 65, 64, 94, 86, 73, 74, 72, 21, 85, 116, 92, 0, 92, 116, 88, 80, 8, 92, 84, 117, 4, 8, 29, 76, 1, 85, 72, 92, 84, 124, 84, 64, 93, 29, 93, 81, 188, 124, 124, 124, 93, 0, 29, 28, 24, 69, 8, 92, 92, 92, 116, 116, 120, 116, 93, 94, 93, 94, 124, 122, 124, 100, 116, 116, 116, 116, 116, 124, 116, 93, 93, 93, 10, 101, 94, 102, 98, 97, 1, 97, 97, 97, 117, 94, 93, 94, 93, 94, 2, 2, 93, 8, 93, 92, 88, 80, 81, 80, 100, 80, 112, 112, 117, 96, 96, 80, 93, 92, 124, 89, 84, 112, 112, 117, 118, 16, 124, 94, 94, 94, 124, 93, 8, 94, 14, 72, 104, 28, 68, 0, 72, 188, 93, 120, 93, 88, 10, 28, 20, 20, 88, 120, 88, 176, 93, 120, 88, 93, 120, 29, 120, 93, 92, 93, 93, 117, 120, 120, 93, 120, 89, 114, 197, 189, 93, 121, 112, 124, 93, 93, 197, 197, 94, 189, 197, 5, 133, 157, 197, 112, 65, 121, 25, 186, 93, 120, 122, 94, 149, 200, 149, 149, 157, 150, 145, 156, 149, 148, 146, 150, 148, 150, 130, 150, 150, 150, 150, 146, 150, 150, 149, 149, 134, 149, 130, 129, 148, 149, 148, 150, 128, 197, 132, 148, 140, 132, 8, 20, 84, 88, 76, 64, 20, 20, 68, 68, 28, 28, 28, 29, 28, 28, 8, 28, 20, 28, 28, 28, 28, 28, 13, 13, 22, 13, 70, 12, 76, 24, 24, 24, 72, 24, 28, 13, 13, 24, 24, 24, 14, 14, 13, 14, 14, 78, 13, 14, 14, 14, 13, 13, 30, 5, 8, 4, 20, 20, 4, 4, 4, 68, 28, 4, 8, 4, 12, 4, 4, 4, 68, 68, 92, 4, 68, 4, 4, 4, 28, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 76, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 12, 12, 12, 12, 12, 12, 14, 12, 72, 14, 13, 12, 14, 14, 13, 14, 72, 13, 13, 72, 93, 13, 88, 94, 72, 94, 93, 94, 94, 94, 72, 94, 93, 94, 93, 88, 88, 72, 88, 92, 12, 88, 4, 84, 84, 84, 84, 84, 84, 84, 84, 84, 68, 4, 68, 24, 24, 24, 12, 24, 88, 28, 88, 12, 72, 12, 12, 88, 12, 12, 12, 12, 12, 12, 12, 72, 12, 12, 8, 20, 20, 133, 133, 157, 157, 93, 137, 157, 93, 148, 0, 148, 144, 152, 156, 140, 137, 128, 158, 144, 129, 144, 128, 130, 129, 132, 156, 156, 72, 120, 93, 93, 93, 86, 137, 178, 113, 93, 92, 85, 5, 188, 188, 6, 188, 17, 21, 197, 22, 194, 196, 188, 10, 100, 192, 138, 154, 137, 92, 137, 200, 200, 200, 6, 133, 128, 136, 200, 0, 192, 188, 153, 140, 72, 200, 200, 92, 200, 124, 196, 124, 116, 116, 116, 124, 124, 121, 124, 124, 200, 124, 92, 185, 5, 117, 124, 120, 82, 88, 112, 188, 193, 198, 72, 20, 4, 120, 97, 97, 121, 112, 93, 121, 113, 80, 80, 93, 88, 89, 93, 88, 92, 88, 104, 89, 89, 89, 92, 88, 121, 121, 122, 88, 94, 84, 84, 124, 116, 94, 104, 124, 94, 108, 94, 88, 88, 84, 116, 80, 94, 88, 88, 92, 25, 88, 120, 104, 108, 1, 94, 96, 96, 98, 82, 104, 20, 92, 98, 14, 94, 6, 101, 109, 22, 120, 105, 93, 120, 81, 120, 2, 1, 94, 18, 18, 120, 94, 66, 2, 104, 68, 94, 73, 82, 101, 121, 93, 113, 22, 93, 120, 94, 93, 5, 13, 122, 89, 90, 5, 101, 93, 106, 94, 73, 21, 72, 89, 121, 73, 92, 93, 84, 117, 0, 21, 85, 52, 4, 6, 198, 0, 185, 192, 29, 194, 189, 36, 36, 93, 185, 52, 0, 4, 13, 188, 9, 28, 89, 86, 185, 113, 186, 186, 14, 185, 188, 186, 188, 88, 189, 188, 116, 124, 68, 188, 188, 188, 198, 84, 52, 188, 197, 185, 20, 190, 5, 6, 190, 28, 128, 189, 189, 189, 93, 189, 14, 94, 189, 68, 190, 190, 190, 157, 84, 141, 197, 189, 197, 93, 189, 37, 190, 190, 22, 190, 190, 190, 190, 86, 190, 190, 190, 189, 94, 190, 190, 190, 190, 86, 198, 190, 189, 200, 94, 94, 6, 190, 5, 86, 2, 190, 190, 33, 0, 28, 68, 16, 80, 144, 144, 49, 52, 116, 76, 84, 49, 196, 197, 93, 17, 73, 137, 185, 93, 185, 188, 188, 185, 13, 185, 186, 186, 186, 14, 188, 186, 186, 188, 6, 186, 188, 188, 188, 84, 188, 188, 188, 188, 84, 188, 188, 188, 188, 69, 188, 189, 188, 188, 84, 188, 189, 189, 189, 24, 189, 189, 189, 189, 86, 52, 189, 93, 149, 84, 189, 93, 141, 189, 84, 189, 189, 190, 190, 86, 190, 198, 142, 190, 86, 190, 142, 190, 190, 76, 118, 142, 94, 94, 86, 198, 134, 198, 198, 85, 6, 6, 46, 38, 85, 190, 190, 186, 190, 64, 69, 69, 77, 86, 88, 28, 93, 84, 116, 0, 0 }; +powerwindow_uint8_T +powerwindow_powerwindow_control_U_currentsense_DRV_Array[powerwindow_input_length] + = {92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 20, 73, 20, 73, 92, 94, 29, 72, 88, 72, 22, 93, 89, 89, 72, 93, 70, 30, 17, 72, 92, 121, 69, 24, 8, 93, 84, 94, 14, 72, 68, 84, 92, 84, 8, 92, 85, 29, 85, 72, 92, 92, 29, 93, 29, 92, 92, 72, 92, 92, 92, 92, 92, 124, 124, 92, 92, 93, 105, 72, 69, 21, 30, 88, 120, 93, 116, 16, 94, 0, 84, 116, 94, 65, 64, 94, 86, 73, 74, 72, 21, 85, 116, 92, 0, 92, 116, 88, 80, 8, 92, 84, 117, 4, 8, 29, 76, 1, 85, 72, 92, 84, 124, 84, 64, 93, 29, 93, 81, 188, 124, 124, 124, 93, 0, 29, 28, 24, 69, 8, 92, 92, 92, 116, 116, 120, 116, 93, 94, 93, 94, 124, 122, 124, 100, 116, 116, 116, 116, 116, 124, 116, 93, 93, 93, 10, 101, 94, 102, 98, 97, 1, 97, 97, 97, 117, 94, 93, 94, 93, 94, 2, 2, 93, 8, 93, 92, 88, 80, 81, 80, 100, 80, 112, 112, 117, 96, 96, 80, 93, 92, 124, 89, 84, 112, 112, 117, 118, 16, 124, 94, 94, 94, 124, 93, 8, 94, 14, 72, 104, 28, 68, 0, 72, 188, 93, 120, 93, 88, 10, 28, 20, 20, 88, 120, 88, 176, 93, 120, 88, 93, 120, 29, 120, 93, 92, 93, 93, 117, 120, 120, 93, 120, 89, 114, 197, 189, 93, 121, 112, 124, 93, 93, 197, 197, 94, 189, 197, 5, 133, 157, 197, 112, 65, 121, 25, 186, 93, 120, 122, 94, 149, 200, 149, 149, 157, 150, 145, 156, 149, 148, 146, 150, 148, 150, 130, 150, 150, 150, 150, 146, 150, 150, 149, 149, 134, 149, 130, 129, 148, 149, 148, 150, 128, 197, 132, 148, 140, 132, 8, 20, 84, 88, 76, 64, 20, 20, 68, 68, 28, 28, 28, 29, 28, 28, 8, 28, 20, 28, 28, 28, 28, 28, 13, 13, 22, 13, 70, 12, 76, 24, 24, 24, 72, 24, 28, 13, 13, 24, 24, 24, 14, 14, 13, 14, 14, 78, 13, 14, 14, 14, 13, 13, 30, 5, 8, 4, 20, 20, 4, 4, 4, 68, 28, 4, 8, 4, 12, 4, 4, 4, 68, 68, 92, 4, 68, 4, 4, 4, 28, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 76, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 12, 12, 12, 12, 12, 12, 14, 12, 72, 14, 13, 12, 14, 14, 13, 14, 72, 13, 13, 72, 93, 13, 88, 94, 72, 94, 93, 94, 94, 94, 72, 94, 93, 94, 93, 88, 88, 72, 88, 92, 12, 88, 4, 84, 84, 84, 84, 84, 84, 84, 84, 84, 68, 4, 68, 24, 24, 24, 12, 24, 88, 28, 88, 12, 72, 12, 12, 88, 12, 12, 12, 12, 12, 12, 12, 72, 12, 12, 8, 20, 20, 133, 133, 157, 157, 93, 137, 157, 93, 148, 0, 148, 144, 152, 156, 140, 137, 128, 158, 144, 129, 144, 128, 130, 129, 132, 156, 156, 72, 120, 93, 93, 93, 86, 137, 178, 113, 93, 92, 85, 5, 188, 188, 6, 188, 17, 21, 197, 22, 194, 196, 188, 10, 100, 192, 138, 154, 137, 92, 137, 200, 200, 200, 6, 133, 128, 136, 200, 0, 192, 188, 153, 140, 72, 200, 200, 92, 200, 124, 196, 124, 116, 116, 116, 124, 124, 121, 124, 124, 200, 124, 92, 185, 5, 117, 124, 120, 82, 88, 112, 188, 193, 198, 72, 20, 4, 120, 97, 97, 121, 112, 93, 121, 113, 80, 80, 93, 88, 89, 93, 88, 92, 88, 104, 89, 89, 89, 92, 88, 121, 121, 122, 88, 94, 84, 84, 124, 116, 94, 104, 124, 94, 108, 94, 88, 88, 84, 116, 80, 94, 88, 88, 92, 25, 88, 120, 104, 108, 1, 94, 96, 96, 98, 82, 104, 20, 92, 98, 14, 94, 6, 101, 109, 22, 120, 105, 93, 120, 81, 120, 2, 1, 94, 18, 18, 120, 94, 66, 2, 104, 68, 94, 73, 82, 101, 121, 93, 113, 22, 93, 120, 94, 93, 5, 13, 122, 89, 90, 5, 101, 93, 106, 94, 73, 21, 72, 89, 121, 73, 92, 93, 84, 117, 0, 21, 85, 52, 4, 6, 198, 0, 185, 192, 29, 194, 189, 36, 36, 93, 185, 52, 0, 4, 13, 188, 9, 28, 89, 86, 185, 113, 186, 186, 14, 185, 188, 186, 188, 88, 189, 188, 116, 124, 68, 188, 188, 188, 198, 84, 52, 188, 197, 185, 20, 190, 5, 6, 190, 28, 128, 189, 189, 189, 93, 189, 14, 94, 189, 68, 190, 190, 190, 157, 84, 141, 197, 189, 197, 93, 189, 37, 190, 190, 22, 190, 190, 190, 190, 86, 190, 190, 190, 189, 94, 190, 190, 190, 190, 86, 198, 190, 189, 200, 94, 94, 6, 190, 5, 86, 2, 190, 190, 33, 0, 28, 68, 16, 80, 144, 144, 49, 52, 116, 76, 84, 49, 196, 197, 93, 17, 73, 137, 185, 93, 185, 188, 188, 185, 13, 185, 186, 186, 186, 14, 188, 186, 186, 188, 6, 186, 188, 188, 188, 84, 188, 188, 188, 188, 84, 188, 188, 188, 188, 69, 188, 189, 188, 188, 84, 188, 189, 189, 189, 24, 189, 189, 189, 189, 86, 52, 189, 93, 149, 84, 189, 93, 141, 189, 84, 189, 189, 190, 190, 86, 190, 198, 142, 190, 86, 190, 142, 190, 190, 76, 118, 142, 94, 94, 86, 198, 134, 198, 198, 85, 6, 6, 46, 38, 85, 190, 190, 186, 190, 64, 69, 69, 77, 86, 88, 28, 93, 84, 116, 0, 0 }; - powerwindow_boolean_T powerwindow_debounce_passenger_Front_U_Up_Front_Array[powerwindow_input_length] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1 }; +powerwindow_boolean_T +powerwindow_debounce_passenger_Front_U_Up_Front_Array[powerwindow_input_length] + = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1 }; - powerwindow_boolean_T powerwindow_debounce_passenger_Front_U_Down_Front_Array[powerwindow_input_length] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1 }; +powerwindow_boolean_T +powerwindow_debounce_passenger_Front_U_Down_Front_Array[powerwindow_input_length] + = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1 }; - powerwindow_boolean_T powerwindow_powerwindow_control_U_endofdetectionrange_Front_Array[powerwindow_input_length] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }; +powerwindow_boolean_T +powerwindow_powerwindow_control_U_endofdetectionrange_Front_Array[powerwindow_input_length] + = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }; - powerwindow_uint8_T powerwindow_powerwindow_control_U_currentsense_Front_Array[powerwindow_input_length] = {92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 20, 73, 20, 73, 92, 94, 29, 72, 88, 72, 22, 93, 89, 89, 72, 93, 70, 30, 17, 72, 92, 121, 69, 24, 8, 93, 84, 94, 14, 72, 68, 84, 92, 84, 8, 92, 85, 29, 85, 72, 92, 92, 29, 93, 29, 92, 92, 72, 92, 92, 92, 92, 92, 124, 124, 92, 92, 93, 105, 72, 69, 21, 30, 88, 120, 93, 116, 16, 94, 0, 84, 116, 94, 65, 64, 94, 86, 73, 74, 72, 21, 85, 116, 92, 0, 92, 116, 88, 80, 8, 92, 84, 117, 4, 8, 29, 76, 1, 85, 72, 92, 84, 124, 84, 64, 93, 29, 93, 81, 188, 124, 124, 124, 93, 0, 29, 28, 24, 69, 8, 92, 92, 92, 116, 116, 120, 116, 93, 94, 93, 94, 124, 122, 124, 100, 116, 116, 116, 116, 116, 124, 116, 93, 93, 93, 10, 101, 94, 102, 98, 97, 1, 97, 97, 97, 117, 94, 93, 94, 93, 94, 2, 2, 93, 8, 93, 92, 88, 80, 81, 80, 100, 80, 112, 112, 117, 96, 96, 80, 93, 92, 124, 89, 84, 112, 112, 117, 118, 16, 124, 94, 94, 94, 124, 93, 8, 94, 14, 72, 104, 28, 68, 0, 72, 188, 93, 120, 93, 88, 10, 28, 20, 20, 88, 120, 88, 176, 93, 120, 88, 93, 120, 29, 120, 93, 92, 93, 93, 117, 120, 120, 93, 120, 89, 114, 197, 189, 93, 121, 112, 124, 93, 93, 197, 197, 94, 189, 197, 5, 133, 157, 197, 112, 65, 121, 25, 186, 93, 120, 122, 94, 149, 200, 149, 149, 157, 150, 145, 156, 149, 148, 146, 150, 148, 150, 130, 150, 150, 150, 150, 146, 150, 150, 149, 149, 134, 149, 130, 129, 148, 149, 148, 150, 128, 197, 132, 148, 140, 132, 8, 20, 84, 88, 76, 64, 20, 20, 68, 68, 28, 28, 28, 29, 28, 28, 8, 28, 20, 28, 28, 28, 28, 28, 13, 13, 22, 13, 70, 12, 76, 24, 24, 24, 72, 24, 28, 13, 13, 24, 24, 24, 14, 14, 13, 14, 14, 78, 13, 14, 14, 14, 13, 13, 30, 5, 8, 4, 20, 20, 4, 4, 4, 68, 28, 4, 8, 4, 12, 4, 4, 4, 68, 68, 92, 4, 68, 4, 4, 4, 28, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 76, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 12, 12, 12, 12, 12, 12, 14, 12, 72, 14, 13, 12, 14, 14, 13, 14, 72, 13, 13, 72, 93, 13, 88, 94, 72, 94, 93, 94, 94, 94, 72, 94, 93, 94, 93, 88, 88, 72, 88, 92, 12, 88, 4, 84, 84, 84, 84, 84, 84, 84, 84, 84, 68, 4, 68, 24, 24, 24, 12, 24, 88, 28, 88, 12, 72, 12, 12, 88, 12, 12, 12, 12, 12, 12, 12, 72, 12, 12, 8, 20, 20, 133, 133, 157, 157, 93, 137, 157, 93, 148, 0, 148, 144, 152, 156, 140, 137, 128, 158, 144, 129, 144, 128, 130, 129, 132, 156, 156, 72, 120, 93, 93, 93, 86, 137, 178, 113, 93, 92, 85, 5, 188, 188, 6, 188, 17, 21, 197, 22, 194, 196, 188, 10, 100, 192, 138, 154, 137, 92, 137, 200, 200, 200, 6, 133, 128, 136, 200, 0, 192, 188, 153, 140, 72, 200, 200, 92, 200, 124, 196, 124, 116, 116, 116, 124, 124, 121, 124, 124, 200, 124, 92, 185, 5, 117, 124, 120, 82, 88, 112, 188, 193, 198, 72, 20, 4, 120, 97, 97, 121, 112, 93, 121, 113, 80, 80, 93, 88, 89, 93, 88, 92, 88, 104, 89, 89, 89, 92, 88, 121, 121, 122, 88, 94, 84, 84, 124, 116, 94, 104, 124, 94, 108, 94, 88, 88, 84, 116, 80, 94, 88, 88, 92, 25, 88, 120, 104, 108, 1, 94, 96, 96, 98, 82, 104, 20, 92, 98, 14, 94, 6, 101, 109, 22, 120, 105, 93, 120, 81, 120, 2, 1, 94, 18, 18, 120, 94, 66, 2, 104, 68, 94, 73, 82, 101, 121, 93, 113, 22, 93, 120, 94, 93, 5, 13, 122, 89, 90, 5, 101, 93, 106, 94, 73, 21, 72, 89, 121, 73, 92, 93, 84, 117, 0, 21, 85, 52, 4, 6, 198, 0, 185, 192, 29, 194, 189, 36, 36, 93, 185, 52, 0, 4, 13, 188, 9, 28, 89, 86, 185, 113, 186, 186, 14, 185, 188, 186, 188, 88, 189, 188, 116, 124, 68, 188, 188, 188, 198, 84, 52, 188, 197, 185, 20, 190, 5, 6, 190, 28, 128, 189, 189, 189, 93, 189, 14, 94, 189, 68, 190, 190, 190, 157, 84, 141, 197, 189, 197, 93, 189, 37, 190, 190, 22, 190, 190, 190, 190, 86, 190, 190, 190, 189, 94, 190, 190, 190, 190, 86, 198, 190, 189, 200, 94, 94, 6, 190, 5, 86, 2, 190, 190, 33, 0, 28, 68, 16, 80, 144, 144, 49, 52, 116, 76, 84, 49, 196, 197, 93, 17, 73, 137, 185, 93, 185, 188, 188, 185, 13, 185, 186, 186, 186, 14, 188, 186, 186, 188, 6, 186, 188, 188, 188, 84, 188, 188, 188, 188, 84, 188, 188, 188, 188, 69, 188, 189, 188, 188, 84, 188, 189, 189, 189, 24, 189, 189, 189, 189, 86, 52, 189, 93, 149, 84, 189, 93, 141, 189, 84, 189, 189, 190, 190, 86, 190, 198, 142, 190, 86, 190, 142, 190, 190, 76, 118, 142, 94, 94, 86, 198, 134, 198, 198, 85, 6, 6, 46, 38, 85, 190, 190, 186, 190, 64, 69, 69, 77, 86, 88, 28, 93, 84, 116, 0, 0 }; +powerwindow_uint8_T +powerwindow_powerwindow_control_U_currentsense_Front_Array[powerwindow_input_length] + = {92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 20, 73, 20, 73, 92, 94, 29, 72, 88, 72, 22, 93, 89, 89, 72, 93, 70, 30, 17, 72, 92, 121, 69, 24, 8, 93, 84, 94, 14, 72, 68, 84, 92, 84, 8, 92, 85, 29, 85, 72, 92, 92, 29, 93, 29, 92, 92, 72, 92, 92, 92, 92, 92, 124, 124, 92, 92, 93, 105, 72, 69, 21, 30, 88, 120, 93, 116, 16, 94, 0, 84, 116, 94, 65, 64, 94, 86, 73, 74, 72, 21, 85, 116, 92, 0, 92, 116, 88, 80, 8, 92, 84, 117, 4, 8, 29, 76, 1, 85, 72, 92, 84, 124, 84, 64, 93, 29, 93, 81, 188, 124, 124, 124, 93, 0, 29, 28, 24, 69, 8, 92, 92, 92, 116, 116, 120, 116, 93, 94, 93, 94, 124, 122, 124, 100, 116, 116, 116, 116, 116, 124, 116, 93, 93, 93, 10, 101, 94, 102, 98, 97, 1, 97, 97, 97, 117, 94, 93, 94, 93, 94, 2, 2, 93, 8, 93, 92, 88, 80, 81, 80, 100, 80, 112, 112, 117, 96, 96, 80, 93, 92, 124, 89, 84, 112, 112, 117, 118, 16, 124, 94, 94, 94, 124, 93, 8, 94, 14, 72, 104, 28, 68, 0, 72, 188, 93, 120, 93, 88, 10, 28, 20, 20, 88, 120, 88, 176, 93, 120, 88, 93, 120, 29, 120, 93, 92, 93, 93, 117, 120, 120, 93, 120, 89, 114, 197, 189, 93, 121, 112, 124, 93, 93, 197, 197, 94, 189, 197, 5, 133, 157, 197, 112, 65, 121, 25, 186, 93, 120, 122, 94, 149, 200, 149, 149, 157, 150, 145, 156, 149, 148, 146, 150, 148, 150, 130, 150, 150, 150, 150, 146, 150, 150, 149, 149, 134, 149, 130, 129, 148, 149, 148, 150, 128, 197, 132, 148, 140, 132, 8, 20, 84, 88, 76, 64, 20, 20, 68, 68, 28, 28, 28, 29, 28, 28, 8, 28, 20, 28, 28, 28, 28, 28, 13, 13, 22, 13, 70, 12, 76, 24, 24, 24, 72, 24, 28, 13, 13, 24, 24, 24, 14, 14, 13, 14, 14, 78, 13, 14, 14, 14, 13, 13, 30, 5, 8, 4, 20, 20, 4, 4, 4, 68, 28, 4, 8, 4, 12, 4, 4, 4, 68, 68, 92, 4, 68, 4, 4, 4, 28, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 76, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 12, 12, 12, 12, 12, 12, 14, 12, 72, 14, 13, 12, 14, 14, 13, 14, 72, 13, 13, 72, 93, 13, 88, 94, 72, 94, 93, 94, 94, 94, 72, 94, 93, 94, 93, 88, 88, 72, 88, 92, 12, 88, 4, 84, 84, 84, 84, 84, 84, 84, 84, 84, 68, 4, 68, 24, 24, 24, 12, 24, 88, 28, 88, 12, 72, 12, 12, 88, 12, 12, 12, 12, 12, 12, 12, 72, 12, 12, 8, 20, 20, 133, 133, 157, 157, 93, 137, 157, 93, 148, 0, 148, 144, 152, 156, 140, 137, 128, 158, 144, 129, 144, 128, 130, 129, 132, 156, 156, 72, 120, 93, 93, 93, 86, 137, 178, 113, 93, 92, 85, 5, 188, 188, 6, 188, 17, 21, 197, 22, 194, 196, 188, 10, 100, 192, 138, 154, 137, 92, 137, 200, 200, 200, 6, 133, 128, 136, 200, 0, 192, 188, 153, 140, 72, 200, 200, 92, 200, 124, 196, 124, 116, 116, 116, 124, 124, 121, 124, 124, 200, 124, 92, 185, 5, 117, 124, 120, 82, 88, 112, 188, 193, 198, 72, 20, 4, 120, 97, 97, 121, 112, 93, 121, 113, 80, 80, 93, 88, 89, 93, 88, 92, 88, 104, 89, 89, 89, 92, 88, 121, 121, 122, 88, 94, 84, 84, 124, 116, 94, 104, 124, 94, 108, 94, 88, 88, 84, 116, 80, 94, 88, 88, 92, 25, 88, 120, 104, 108, 1, 94, 96, 96, 98, 82, 104, 20, 92, 98, 14, 94, 6, 101, 109, 22, 120, 105, 93, 120, 81, 120, 2, 1, 94, 18, 18, 120, 94, 66, 2, 104, 68, 94, 73, 82, 101, 121, 93, 113, 22, 93, 120, 94, 93, 5, 13, 122, 89, 90, 5, 101, 93, 106, 94, 73, 21, 72, 89, 121, 73, 92, 93, 84, 117, 0, 21, 85, 52, 4, 6, 198, 0, 185, 192, 29, 194, 189, 36, 36, 93, 185, 52, 0, 4, 13, 188, 9, 28, 89, 86, 185, 113, 186, 186, 14, 185, 188, 186, 188, 88, 189, 188, 116, 124, 68, 188, 188, 188, 198, 84, 52, 188, 197, 185, 20, 190, 5, 6, 190, 28, 128, 189, 189, 189, 93, 189, 14, 94, 189, 68, 190, 190, 190, 157, 84, 141, 197, 189, 197, 93, 189, 37, 190, 190, 22, 190, 190, 190, 190, 86, 190, 190, 190, 189, 94, 190, 190, 190, 190, 86, 198, 190, 189, 200, 94, 94, 6, 190, 5, 86, 2, 190, 190, 33, 0, 28, 68, 16, 80, 144, 144, 49, 52, 116, 76, 84, 49, 196, 197, 93, 17, 73, 137, 185, 93, 185, 188, 188, 185, 13, 185, 186, 186, 186, 14, 188, 186, 186, 188, 6, 186, 188, 188, 188, 84, 188, 188, 188, 188, 84, 188, 188, 188, 188, 69, 188, 189, 188, 188, 84, 188, 189, 189, 189, 24, 189, 189, 189, 189, 86, 52, 189, 93, 149, 84, 189, 93, 141, 189, 84, 189, 189, 190, 190, 86, 190, 198, 142, 190, 86, 190, 142, 190, 190, 76, 118, 142, 94, 94, 86, 198, 134, 198, 198, 85, 6, 6, 46, 38, 85, 190, 190, 186, 190, 64, 69, 69, 77, 86, 88, 28, 93, 84, 116, 0, 0 }; - powerwindow_boolean_T powerwindow_debounce_passenger_BackL_U_Up_BackL_Array[powerwindow_input_length] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1 }; +powerwindow_boolean_T +powerwindow_debounce_passenger_BackL_U_Up_BackL_Array[powerwindow_input_length] + = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1 }; - powerwindow_boolean_T powerwindow_debounce_passenger_BackL_U_Down_BackL_Array[powerwindow_input_length] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1 }; +powerwindow_boolean_T +powerwindow_debounce_passenger_BackL_U_Down_BackL_Array[powerwindow_input_length] + = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1 }; - powerwindow_boolean_T powerwindow_powerwindow_control_U_endofdetectionrange_BackL_Array[powerwindow_input_length] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }; +powerwindow_boolean_T +powerwindow_powerwindow_control_U_endofdetectionrange_BackL_Array[powerwindow_input_length] + = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }; - powerwindow_uint8_T powerwindow_powerwindow_control_U_currentsense_BackL_Array[powerwindow_input_length] = {92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 20, 73, 20, 73, 92, 94, 29, 72, 88, 72, 22, 93, 89, 89, 72, 93, 70, 30, 17, 72, 92, 121, 69, 24, 8, 93, 84, 94, 14, 72, 68, 84, 92, 84, 8, 92, 85, 29, 85, 72, 92, 92, 29, 93, 29, 92, 92, 72, 92, 92, 92, 92, 92, 124, 124, 92, 92, 93, 105, 72, 69, 21, 30, 88, 120, 93, 116, 16, 94, 0, 84, 116, 94, 65, 64, 94, 86, 73, 74, 72, 21, 85, 116, 92, 0, 92, 116, 88, 80, 8, 92, 84, 117, 4, 8, 29, 76, 1, 85, 72, 92, 84, 124, 84, 64, 93, 29, 93, 81, 188, 124, 124, 124, 93, 0, 29, 28, 24, 69, 8, 92, 92, 92, 116, 116, 120, 116, 93, 94, 93, 94, 124, 122, 124, 100, 116, 116, 116, 116, 116, 124, 116, 93, 93, 93, 10, 101, 94, 102, 98, 97, 1, 97, 97, 97, 117, 94, 93, 94, 93, 94, 2, 2, 93, 8, 93, 92, 88, 80, 81, 80, 100, 80, 112, 112, 117, 96, 96, 80, 93, 92, 124, 89, 84, 112, 112, 117, 118, 16, 124, 94, 94, 94, 124, 93, 8, 94, 14, 72, 104, 28, 68, 0, 72, 188, 93, 120, 93, 88, 10, 28, 20, 20, 88, 120, 88, 176, 93, 120, 88, 93, 120, 29, 120, 93, 92, 93, 93, 117, 120, 120, 93, 120, 89, 114, 197, 189, 93, 121, 112, 124, 93, 93, 197, 197, 94, 189, 197, 5, 133, 157, 197, 112, 65, 121, 25, 186, 93, 120, 122, 94, 149, 200, 149, 149, 157, 150, 145, 156, 149, 148, 146, 150, 148, 150, 130, 150, 150, 150, 150, 146, 150, 150, 149, 149, 134, 149, 130, 129, 148, 149, 148, 150, 128, 197, 132, 148, 140, 132, 8, 20, 84, 88, 76, 64, 20, 20, 68, 68, 28, 28, 28, 29, 28, 28, 8, 28, 20, 28, 28, 28, 28, 28, 13, 13, 22, 13, 70, 12, 76, 24, 24, 24, 72, 24, 28, 13, 13, 24, 24, 24, 14, 14, 13, 14, 14, 78, 13, 14, 14, 14, 13, 13, 30, 5, 8, 4, 20, 20, 4, 4, 4, 68, 28, 4, 8, 4, 12, 4, 4, 4, 68, 68, 92, 4, 68, 4, 4, 4, 28, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 76, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 12, 12, 12, 12, 12, 12, 14, 12, 72, 14, 13, 12, 14, 14, 13, 14, 72, 13, 13, 72, 93, 13, 88, 94, 72, 94, 93, 94, 94, 94, 72, 94, 93, 94, 93, 88, 88, 72, 88, 92, 12, 88, 4, 84, 84, 84, 84, 84, 84, 84, 84, 84, 68, 4, 68, 24, 24, 24, 12, 24, 88, 28, 88, 12, 72, 12, 12, 88, 12, 12, 12, 12, 12, 12, 12, 72, 12, 12, 8, 20, 20, 133, 133, 157, 157, 93, 137, 157, 93, 148, 0, 148, 144, 152, 156, 140, 137, 128, 158, 144, 129, 144, 128, 130, 129, 132, 156, 156, 72, 120, 93, 93, 93, 86, 137, 178, 113, 93, 92, 85, 5, 188, 188, 6, 188, 17, 21, 197, 22, 194, 196, 188, 10, 100, 192, 138, 154, 137, 92, 137, 200, 200, 200, 6, 133, 128, 136, 200, 0, 192, 188, 153, 140, 72, 200, 200, 92, 200, 124, 196, 124, 116, 116, 116, 124, 124, 121, 124, 124, 200, 124, 92, 185, 5, 117, 124, 120, 82, 88, 112, 188, 193, 198, 72, 20, 4, 120, 97, 97, 121, 112, 93, 121, 113, 80, 80, 93, 88, 89, 93, 88, 92, 88, 104, 89, 89, 89, 92, 88, 121, 121, 122, 88, 94, 84, 84, 124, 116, 94, 104, 124, 94, 108, 94, 88, 88, 84, 116, 80, 94, 88, 88, 92, 25, 88, 120, 104, 108, 1, 94, 96, 96, 98, 82, 104, 20, 92, 98, 14, 94, 6, 101, 109, 22, 120, 105, 93, 120, 81, 120, 2, 1, 94, 18, 18, 120, 94, 66, 2, 104, 68, 94, 73, 82, 101, 121, 93, 113, 22, 93, 120, 94, 93, 5, 13, 122, 89, 90, 5, 101, 93, 106, 94, 73, 21, 72, 89, 121, 73, 92, 93, 84, 117, 0, 21, 85, 52, 4, 6, 198, 0, 185, 192, 29, 194, 189, 36, 36, 93, 185, 52, 0, 4, 13, 188, 9, 28, 89, 86, 185, 113, 186, 186, 14, 185, 188, 186, 188, 88, 189, 188, 116, 124, 68, 188, 188, 188, 198, 84, 52, 188, 197, 185, 20, 190, 5, 6, 190, 28, 128, 189, 189, 189, 93, 189, 14, 94, 189, 68, 190, 190, 190, 157, 84, 141, 197, 189, 197, 93, 189, 37, 190, 190, 22, 190, 190, 190, 190, 86, 190, 190, 190, 189, 94, 190, 190, 190, 190, 86, 198, 190, 189, 200, 94, 94, 6, 190, 5, 86, 2, 190, 190, 33, 0, 28, 68, 16, 80, 144, 144, 49, 52, 116, 76, 84, 49, 196, 197, 93, 17, 73, 137, 185, 93, 185, 188, 188, 185, 13, 185, 186, 186, 186, 14, 188, 186, 186, 188, 6, 186, 188, 188, 188, 84, 188, 188, 188, 188, 84, 188, 188, 188, 188, 69, 188, 189, 188, 188, 84, 188, 189, 189, 189, 24, 189, 189, 189, 189, 86, 52, 189, 93, 149, 84, 189, 93, 141, 189, 84, 189, 189, 190, 190, 86, 190, 198, 142, 190, 86, 190, 142, 190, 190, 76, 118, 142, 94, 94, 86, 198, 134, 198, 198, 85, 6, 6, 46, 38, 85, 190, 190, 186, 190, 64, 69, 69, 77, 86, 88, 28, 93, 84, 116, 0, 0 }; +powerwindow_uint8_T +powerwindow_powerwindow_control_U_currentsense_BackL_Array[powerwindow_input_length] + = {92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 20, 73, 20, 73, 92, 94, 29, 72, 88, 72, 22, 93, 89, 89, 72, 93, 70, 30, 17, 72, 92, 121, 69, 24, 8, 93, 84, 94, 14, 72, 68, 84, 92, 84, 8, 92, 85, 29, 85, 72, 92, 92, 29, 93, 29, 92, 92, 72, 92, 92, 92, 92, 92, 124, 124, 92, 92, 93, 105, 72, 69, 21, 30, 88, 120, 93, 116, 16, 94, 0, 84, 116, 94, 65, 64, 94, 86, 73, 74, 72, 21, 85, 116, 92, 0, 92, 116, 88, 80, 8, 92, 84, 117, 4, 8, 29, 76, 1, 85, 72, 92, 84, 124, 84, 64, 93, 29, 93, 81, 188, 124, 124, 124, 93, 0, 29, 28, 24, 69, 8, 92, 92, 92, 116, 116, 120, 116, 93, 94, 93, 94, 124, 122, 124, 100, 116, 116, 116, 116, 116, 124, 116, 93, 93, 93, 10, 101, 94, 102, 98, 97, 1, 97, 97, 97, 117, 94, 93, 94, 93, 94, 2, 2, 93, 8, 93, 92, 88, 80, 81, 80, 100, 80, 112, 112, 117, 96, 96, 80, 93, 92, 124, 89, 84, 112, 112, 117, 118, 16, 124, 94, 94, 94, 124, 93, 8, 94, 14, 72, 104, 28, 68, 0, 72, 188, 93, 120, 93, 88, 10, 28, 20, 20, 88, 120, 88, 176, 93, 120, 88, 93, 120, 29, 120, 93, 92, 93, 93, 117, 120, 120, 93, 120, 89, 114, 197, 189, 93, 121, 112, 124, 93, 93, 197, 197, 94, 189, 197, 5, 133, 157, 197, 112, 65, 121, 25, 186, 93, 120, 122, 94, 149, 200, 149, 149, 157, 150, 145, 156, 149, 148, 146, 150, 148, 150, 130, 150, 150, 150, 150, 146, 150, 150, 149, 149, 134, 149, 130, 129, 148, 149, 148, 150, 128, 197, 132, 148, 140, 132, 8, 20, 84, 88, 76, 64, 20, 20, 68, 68, 28, 28, 28, 29, 28, 28, 8, 28, 20, 28, 28, 28, 28, 28, 13, 13, 22, 13, 70, 12, 76, 24, 24, 24, 72, 24, 28, 13, 13, 24, 24, 24, 14, 14, 13, 14, 14, 78, 13, 14, 14, 14, 13, 13, 30, 5, 8, 4, 20, 20, 4, 4, 4, 68, 28, 4, 8, 4, 12, 4, 4, 4, 68, 68, 92, 4, 68, 4, 4, 4, 28, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 76, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 12, 12, 12, 12, 12, 12, 14, 12, 72, 14, 13, 12, 14, 14, 13, 14, 72, 13, 13, 72, 93, 13, 88, 94, 72, 94, 93, 94, 94, 94, 72, 94, 93, 94, 93, 88, 88, 72, 88, 92, 12, 88, 4, 84, 84, 84, 84, 84, 84, 84, 84, 84, 68, 4, 68, 24, 24, 24, 12, 24, 88, 28, 88, 12, 72, 12, 12, 88, 12, 12, 12, 12, 12, 12, 12, 72, 12, 12, 8, 20, 20, 133, 133, 157, 157, 93, 137, 157, 93, 148, 0, 148, 144, 152, 156, 140, 137, 128, 158, 144, 129, 144, 128, 130, 129, 132, 156, 156, 72, 120, 93, 93, 93, 86, 137, 178, 113, 93, 92, 85, 5, 188, 188, 6, 188, 17, 21, 197, 22, 194, 196, 188, 10, 100, 192, 138, 154, 137, 92, 137, 200, 200, 200, 6, 133, 128, 136, 200, 0, 192, 188, 153, 140, 72, 200, 200, 92, 200, 124, 196, 124, 116, 116, 116, 124, 124, 121, 124, 124, 200, 124, 92, 185, 5, 117, 124, 120, 82, 88, 112, 188, 193, 198, 72, 20, 4, 120, 97, 97, 121, 112, 93, 121, 113, 80, 80, 93, 88, 89, 93, 88, 92, 88, 104, 89, 89, 89, 92, 88, 121, 121, 122, 88, 94, 84, 84, 124, 116, 94, 104, 124, 94, 108, 94, 88, 88, 84, 116, 80, 94, 88, 88, 92, 25, 88, 120, 104, 108, 1, 94, 96, 96, 98, 82, 104, 20, 92, 98, 14, 94, 6, 101, 109, 22, 120, 105, 93, 120, 81, 120, 2, 1, 94, 18, 18, 120, 94, 66, 2, 104, 68, 94, 73, 82, 101, 121, 93, 113, 22, 93, 120, 94, 93, 5, 13, 122, 89, 90, 5, 101, 93, 106, 94, 73, 21, 72, 89, 121, 73, 92, 93, 84, 117, 0, 21, 85, 52, 4, 6, 198, 0, 185, 192, 29, 194, 189, 36, 36, 93, 185, 52, 0, 4, 13, 188, 9, 28, 89, 86, 185, 113, 186, 186, 14, 185, 188, 186, 188, 88, 189, 188, 116, 124, 68, 188, 188, 188, 198, 84, 52, 188, 197, 185, 20, 190, 5, 6, 190, 28, 128, 189, 189, 189, 93, 189, 14, 94, 189, 68, 190, 190, 190, 157, 84, 141, 197, 189, 197, 93, 189, 37, 190, 190, 22, 190, 190, 190, 190, 86, 190, 190, 190, 189, 94, 190, 190, 190, 190, 86, 198, 190, 189, 200, 94, 94, 6, 190, 5, 86, 2, 190, 190, 33, 0, 28, 68, 16, 80, 144, 144, 49, 52, 116, 76, 84, 49, 196, 197, 93, 17, 73, 137, 185, 93, 185, 188, 188, 185, 13, 185, 186, 186, 186, 14, 188, 186, 186, 188, 6, 186, 188, 188, 188, 84, 188, 188, 188, 188, 84, 188, 188, 188, 188, 69, 188, 189, 188, 188, 84, 188, 189, 189, 189, 24, 189, 189, 189, 189, 86, 52, 189, 93, 149, 84, 189, 93, 141, 189, 84, 189, 189, 190, 190, 86, 190, 198, 142, 190, 86, 190, 142, 190, 190, 76, 118, 142, 94, 94, 86, 198, 134, 198, 198, 85, 6, 6, 46, 38, 85, 190, 190, 186, 190, 64, 69, 69, 77, 86, 88, 28, 93, 84, 116, 0, 0 }; - powerwindow_boolean_T powerwindow_debounce_passenger_BackR_U_Up_BackR_Array[powerwindow_input_length] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1 }; +powerwindow_boolean_T +powerwindow_debounce_passenger_BackR_U_Up_BackR_Array[powerwindow_input_length] + = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1 }; - powerwindow_boolean_T powerwindow_debounce_passenger_BackR_U_Down_BackR_Array[powerwindow_input_length] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1 }; +powerwindow_boolean_T +powerwindow_debounce_passenger_BackR_U_Down_BackR_Array[powerwindow_input_length] + = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1 }; - powerwindow_boolean_T powerwindow_powerwindow_control_U_endofdetectionrange_BackR_Array[powerwindow_input_length] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }; +powerwindow_boolean_T +powerwindow_powerwindow_control_U_endofdetectionrange_BackR_Array[powerwindow_input_length] + = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }; - powerwindow_uint8_T powerwindow_powerwindow_control_U_currentsense_BackR_Array[powerwindow_input_length] = {92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 20, 73, 20, 73, 92, 94, 29, 72, 88, 72, 22, 93, 89, 89, 72, 93, 70, 30, 17, 72, 92, 121, 69, 24, 8, 93, 84, 94, 14, 72, 68, 84, 92, 84, 8, 92, 85, 29, 85, 72, 92, 92, 29, 93, 29, 92, 92, 72, 92, 92, 92, 92, 92, 124, 124, 92, 92, 93, 105, 72, 69, 21, 30, 88, 120, 93, 116, 16, 94, 0, 84, 116, 94, 65, 64, 94, 86, 73, 74, 72, 21, 85, 116, 92, 0, 92, 116, 88, 80, 8, 92, 84, 117, 4, 8, 29, 76, 1, 85, 72, 92, 84, 124, 84, 64, 93, 29, 93, 81, 188, 124, 124, 124, 93, 0, 29, 28, 24, 69, 8, 92, 92, 92, 116, 116, 120, 116, 93, 94, 93, 94, 124, 122, 124, 100, 116, 116, 116, 116, 116, 124, 116, 93, 93, 93, 10, 101, 94, 102, 98, 97, 1, 97, 97, 97, 117, 94, 93, 94, 93, 94, 2, 2, 93, 8, 93, 92, 88, 80, 81, 80, 100, 80, 112, 112, 117, 96, 96, 80, 93, 92, 124, 89, 84, 112, 112, 117, 118, 16, 124, 94, 94, 94, 124, 93, 8, 94, 14, 72, 104, 28, 68, 0, 72, 188, 93, 120, 93, 88, 10, 28, 20, 20, 88, 120, 88, 176, 93, 120, 88, 93, 120, 29, 120, 93, 92, 93, 93, 117, 120, 120, 93, 120, 89, 114, 197, 189, 93, 121, 112, 124, 93, 93, 197, 197, 94, 189, 197, 5, 133, 157, 197, 112, 65, 121, 25, 186, 93, 120, 122, 94, 149, 200, 149, 149, 157, 150, 145, 156, 149, 148, 146, 150, 148, 150, 130, 150, 150, 150, 150, 146, 150, 150, 149, 149, 134, 149, 130, 129, 148, 149, 148, 150, 128, 197, 132, 148, 140, 132, 8, 20, 84, 88, 76, 64, 20, 20, 68, 68, 28, 28, 28, 29, 28, 28, 8, 28, 20, 28, 28, 28, 28, 28, 13, 13, 22, 13, 70, 12, 76, 24, 24, 24, 72, 24, 28, 13, 13, 24, 24, 24, 14, 14, 13, 14, 14, 78, 13, 14, 14, 14, 13, 13, 30, 5, 8, 4, 20, 20, 4, 4, 4, 68, 28, 4, 8, 4, 12, 4, 4, 4, 68, 68, 92, 4, 68, 4, 4, 4, 28, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 76, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 12, 12, 12, 12, 12, 12, 14, 12, 72, 14, 13, 12, 14, 14, 13, 14, 72, 13, 13, 72, 93, 13, 88, 94, 72, 94, 93, 94, 94, 94, 72, 94, 93, 94, 93, 88, 88, 72, 88, 92, 12, 88, 4, 84, 84, 84, 84, 84, 84, 84, 84, 84, 68, 4, 68, 24, 24, 24, 12, 24, 88, 28, 88, 12, 72, 12, 12, 88, 12, 12, 12, 12, 12, 12, 12, 72, 12, 12, 8, 20, 20, 133, 133, 157, 157, 93, 137, 157, 93, 148, 0, 148, 144, 152, 156, 140, 137, 128, 158, 144, 129, 144, 128, 130, 129, 132, 156, 156, 72, 120, 93, 93, 93, 86, 137, 178, 113, 93, 92, 85, 5, 188, 188, 6, 188, 17, 21, 197, 22, 194, 196, 188, 10, 100, 192, 138, 154, 137, 92, 137, 200, 200, 200, 6, 133, 128, 136, 200, 0, 192, 188, 153, 140, 72, 200, 200, 92, 200, 124, 196, 124, 116, 116, 116, 124, 124, 121, 124, 124, 200, 124, 92, 185, 5, 117, 124, 120, 82, 88, 112, 188, 193, 198, 72, 20, 4, 120, 97, 97, 121, 112, 93, 121, 113, 80, 80, 93, 88, 89, 93, 88, 92, 88, 104, 89, 89, 89, 92, 88, 121, 121, 122, 88, 94, 84, 84, 124, 116, 94, 104, 124, 94, 108, 94, 88, 88, 84, 116, 80, 94, 88, 88, 92, 25, 88, 120, 104, 108, 1, 94, 96, 96, 98, 82, 104, 20, 92, 98, 14, 94, 6, 101, 109, 22, 120, 105, 93, 120, 81, 120, 2, 1, 94, 18, 18, 120, 94, 66, 2, 104, 68, 94, 73, 82, 101, 121, 93, 113, 22, 93, 120, 94, 93, 5, 13, 122, 89, 90, 5, 101, 93, 106, 94, 73, 21, 72, 89, 121, 73, 92, 93, 84, 117, 0, 21, 85, 52, 4, 6, 198, 0, 185, 192, 29, 194, 189, 36, 36, 93, 185, 52, 0, 4, 13, 188, 9, 28, 89, 86, 185, 113, 186, 186, 14, 185, 188, 186, 188, 88, 189, 188, 116, 124, 68, 188, 188, 188, 198, 84, 52, 188, 197, 185, 20, 190, 5, 6, 190, 28, 128, 189, 189, 189, 93, 189, 14, 94, 189, 68, 190, 190, 190, 157, 84, 141, 197, 189, 197, 93, 189, 37, 190, 190, 22, 190, 190, 190, 190, 86, 190, 190, 190, 189, 94, 190, 190, 190, 190, 86, 198, 190, 189, 200, 94, 94, 6, 190, 5, 86, 2, 190, 190, 33, 0, 28, 68, 16, 80, 144, 144, 49, 52, 116, 76, 84, 49, 196, 197, 93, 17, 73, 137, 185, 93, 185, 188, 188, 185, 13, 185, 186, 186, 186, 14, 188, 186, 186, 188, 6, 186, 188, 188, 188, 84, 188, 188, 188, 188, 84, 188, 188, 188, 188, 69, 188, 189, 188, 188, 84, 188, 189, 189, 189, 24, 189, 189, 189, 189, 86, 52, 189, 93, 149, 84, 189, 93, 141, 189, 84, 189, 189, 190, 190, 86, 190, 198, 142, 190, 86, 190, 142, 190, 190, 76, 118, 142, 94, 94, 86, 198, 134, 198, 198, 85, 6, 6, 46, 38, 85, 190, 190, 186, 190, 64, 69, 69, 77, 86, 88, 28, 93, 84, 116, 0, 0 }; +powerwindow_uint8_T +powerwindow_powerwindow_control_U_currentsense_BackR_Array[powerwindow_input_length] + = {92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 20, 73, 20, 73, 92, 94, 29, 72, 88, 72, 22, 93, 89, 89, 72, 93, 70, 30, 17, 72, 92, 121, 69, 24, 8, 93, 84, 94, 14, 72, 68, 84, 92, 84, 8, 92, 85, 29, 85, 72, 92, 92, 29, 93, 29, 92, 92, 72, 92, 92, 92, 92, 92, 124, 124, 92, 92, 93, 105, 72, 69, 21, 30, 88, 120, 93, 116, 16, 94, 0, 84, 116, 94, 65, 64, 94, 86, 73, 74, 72, 21, 85, 116, 92, 0, 92, 116, 88, 80, 8, 92, 84, 117, 4, 8, 29, 76, 1, 85, 72, 92, 84, 124, 84, 64, 93, 29, 93, 81, 188, 124, 124, 124, 93, 0, 29, 28, 24, 69, 8, 92, 92, 92, 116, 116, 120, 116, 93, 94, 93, 94, 124, 122, 124, 100, 116, 116, 116, 116, 116, 124, 116, 93, 93, 93, 10, 101, 94, 102, 98, 97, 1, 97, 97, 97, 117, 94, 93, 94, 93, 94, 2, 2, 93, 8, 93, 92, 88, 80, 81, 80, 100, 80, 112, 112, 117, 96, 96, 80, 93, 92, 124, 89, 84, 112, 112, 117, 118, 16, 124, 94, 94, 94, 124, 93, 8, 94, 14, 72, 104, 28, 68, 0, 72, 188, 93, 120, 93, 88, 10, 28, 20, 20, 88, 120, 88, 176, 93, 120, 88, 93, 120, 29, 120, 93, 92, 93, 93, 117, 120, 120, 93, 120, 89, 114, 197, 189, 93, 121, 112, 124, 93, 93, 197, 197, 94, 189, 197, 5, 133, 157, 197, 112, 65, 121, 25, 186, 93, 120, 122, 94, 149, 200, 149, 149, 157, 150, 145, 156, 149, 148, 146, 150, 148, 150, 130, 150, 150, 150, 150, 146, 150, 150, 149, 149, 134, 149, 130, 129, 148, 149, 148, 150, 128, 197, 132, 148, 140, 132, 8, 20, 84, 88, 76, 64, 20, 20, 68, 68, 28, 28, 28, 29, 28, 28, 8, 28, 20, 28, 28, 28, 28, 28, 13, 13, 22, 13, 70, 12, 76, 24, 24, 24, 72, 24, 28, 13, 13, 24, 24, 24, 14, 14, 13, 14, 14, 78, 13, 14, 14, 14, 13, 13, 30, 5, 8, 4, 20, 20, 4, 4, 4, 68, 28, 4, 8, 4, 12, 4, 4, 4, 68, 68, 92, 4, 68, 4, 4, 4, 28, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 76, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 8, 12, 12, 12, 12, 12, 12, 12, 14, 12, 72, 14, 13, 12, 14, 14, 13, 14, 72, 13, 13, 72, 93, 13, 88, 94, 72, 94, 93, 94, 94, 94, 72, 94, 93, 94, 93, 88, 88, 72, 88, 92, 12, 88, 4, 84, 84, 84, 84, 84, 84, 84, 84, 84, 68, 4, 68, 24, 24, 24, 12, 24, 88, 28, 88, 12, 72, 12, 12, 88, 12, 12, 12, 12, 12, 12, 12, 72, 12, 12, 8, 20, 20, 133, 133, 157, 157, 93, 137, 157, 93, 148, 0, 148, 144, 152, 156, 140, 137, 128, 158, 144, 129, 144, 128, 130, 129, 132, 156, 156, 72, 120, 93, 93, 93, 86, 137, 178, 113, 93, 92, 85, 5, 188, 188, 6, 188, 17, 21, 197, 22, 194, 196, 188, 10, 100, 192, 138, 154, 137, 92, 137, 200, 200, 200, 6, 133, 128, 136, 200, 0, 192, 188, 153, 140, 72, 200, 200, 92, 200, 124, 196, 124, 116, 116, 116, 124, 124, 121, 124, 124, 200, 124, 92, 185, 5, 117, 124, 120, 82, 88, 112, 188, 193, 198, 72, 20, 4, 120, 97, 97, 121, 112, 93, 121, 113, 80, 80, 93, 88, 89, 93, 88, 92, 88, 104, 89, 89, 89, 92, 88, 121, 121, 122, 88, 94, 84, 84, 124, 116, 94, 104, 124, 94, 108, 94, 88, 88, 84, 116, 80, 94, 88, 88, 92, 25, 88, 120, 104, 108, 1, 94, 96, 96, 98, 82, 104, 20, 92, 98, 14, 94, 6, 101, 109, 22, 120, 105, 93, 120, 81, 120, 2, 1, 94, 18, 18, 120, 94, 66, 2, 104, 68, 94, 73, 82, 101, 121, 93, 113, 22, 93, 120, 94, 93, 5, 13, 122, 89, 90, 5, 101, 93, 106, 94, 73, 21, 72, 89, 121, 73, 92, 93, 84, 117, 0, 21, 85, 52, 4, 6, 198, 0, 185, 192, 29, 194, 189, 36, 36, 93, 185, 52, 0, 4, 13, 188, 9, 28, 89, 86, 185, 113, 186, 186, 14, 185, 188, 186, 188, 88, 189, 188, 116, 124, 68, 188, 188, 188, 198, 84, 52, 188, 197, 185, 20, 190, 5, 6, 190, 28, 128, 189, 189, 189, 93, 189, 14, 94, 189, 68, 190, 190, 190, 157, 84, 141, 197, 189, 197, 93, 189, 37, 190, 190, 22, 190, 190, 190, 190, 86, 190, 190, 190, 189, 94, 190, 190, 190, 190, 86, 198, 190, 189, 200, 94, 94, 6, 190, 5, 86, 2, 190, 190, 33, 0, 28, 68, 16, 80, 144, 144, 49, 52, 116, 76, 84, 49, 196, 197, 93, 17, 73, 137, 185, 93, 185, 188, 188, 185, 13, 185, 186, 186, 186, 14, 188, 186, 186, 188, 6, 186, 188, 188, 188, 84, 188, 188, 188, 188, 84, 188, 188, 188, 188, 69, 188, 189, 188, 188, 84, 188, 189, 189, 189, 24, 189, 189, 189, 189, 86, 52, 189, 93, 149, 84, 189, 93, 141, 189, 84, 189, 189, 190, 190, 86, 190, 198, 142, 190, 86, 190, 142, 190, 190, 76, 118, 142, 94, 94, 86, 198, 134, 198, 198, 85, 6, 6, 46, 38, 85, 190, 190, 186, 190, 64, 69, 69, 77, 86, 88, 28, 93, 84, 116, 0, 0 }; diff --git a/bench/app/powerwindow/powerwindow_powerwindow_control.c b/bench/app/powerwindow/powerwindow_powerwindow_control.c index 8bce1869bb2c80db84140da69474416663b92d4c..b7cbd3d72eae344755d7d56265cbb684ab0030cc 100644 --- a/bench/app/powerwindow/powerwindow_powerwindow_control.c +++ b/bench/app/powerwindow/powerwindow_powerwindow_control.c @@ -1,523 +1,554 @@ -/* - - This program is part of the TACLeBench benchmark suite. - Version V 1.x - - Name: powerwindow_powerwindow_control.c - - Author: CoSys-Lab, University of Antwerp - - Function: powerwindow_control is the main functionality of the power window benchmark. - It contains 3 states: System, EndReached and Pinch, which are used to controll the - position of the glass, if the window is fully closed and sensing pinch force to realize - the powerwindow function. - - Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow//powerwindow_powerwindow_control.c - - Changes: a brief summary of major functional changes and formatting) - - License: GNU General Public License - -*/ - -#include "wcclib.h" -#include "powerwindow_HeaderFiles/powerwindow_powerwindow_control.h" -#include "powerwindow_HeaderFiles/powerwindow_powerwindow_control_private.h" - -/* Named constants for Chart: '<S2>/stateflow control model' */ -#define powerwindow_powerwindow__IN_NO_ACTIVE_CHILD ((powerwindow_uint8_T)0U) -#define powerwindow_powerwindow_contr_IN_EndReached ((powerwindow_uint8_T)1U) -#define powerwindow_powerwindow_contr_IN_SensePinch ((powerwindow_uint8_T)2U) -#define powerwindow_powerwindow_control_IN_AutoDown ((powerwindow_uint8_T)1U) -#define powerwindow_powerwindow_control_IN_AutoUp ((powerwindow_uint8_T)1U) -#define powerwindow_powerwindow_control_IN_Down ((powerwindow_uint8_T)2U) -#define powerwindow_powerwindow_control_IN_Down_d ((powerwindow_uint8_T)1U) -#define powerwindow_powerwindow_control_IN_InitDown ((powerwindow_uint8_T)3U) -#define powerwindow_powerwindow_control_IN_InitUp ((powerwindow_uint8_T)2U) -#define powerwindow_powerwindow_control_IN_Neutral ((powerwindow_uint8_T)2U) -#define powerwindow_powerwindow_control_IN_Pinch ((powerwindow_uint8_T)2U) -#define powerwindow_powerwindow_control_IN_SenseEnd ((powerwindow_uint8_T)1U) -#define powerwindow_powerwindow_control_IN_Start ((powerwindow_uint8_T)3U) -#define powerwindow_powerwindow_control_IN_System ((powerwindow_uint8_T)3U) -#define powerwindow_powerwindow_control_IN_Up ((powerwindow_uint8_T)3U) - -/* Forward declaration for local functions */ -void powerwindow_powerwindow_control_Start(powerwindow_rtDW_PowerWindow_control *localDW); - -void powerwindow_powerwindow_control_Init(powerwindow_boolean_T *rty_window_up, powerwindow_boolean_T - *rty_window_down, powerwindow_boolean_T *rty_overcurrent, powerwindow_boolean_T *rty_pinch, powerwindow_boolean_T * - rty_wake, powerwindow_rtDW_PowerWindow_control *localDW); - -void powerwindow_powerwindow_control_Start(powerwindow_rtDW_PowerWindow_control *localDW); - -void powerwindow_powerwindow_control_initialize(const powerwindow_char_T **rt_errorStatus, - powerwindow_RT_MODEL_PowerWindow_control *const PowerWindow_control_M, - powerwindow_rtB_PowerWindow_control *localB, powerwindow_rtDW_PowerWindow_control *localDW, - powerwindow_rtZCE_PowerWindow_control *localZCE); - -void powerwindow_powerwindow_control_main(const powerwindow_boolean_T *rtu_up, const powerwindow_boolean_T *rtu_down, - const powerwindow_boolean_T *rtu_endofdetectionrange, const powerwindow_uint8_T *rtu_currentsense, - powerwindow_boolean_T *rty_window_up, powerwindow_boolean_T *rty_window_down, powerwindow_boolean_T - *rty_overcurrent, powerwindow_boolean_T *rty_pinch, powerwindow_boolean_T *rty_wake, - powerwindow_rtB_PowerWindow_control *localB, powerwindow_rtDW_PowerWindow_control *localDW, - powerwindow_rtZCE_PowerWindow_control *localZCE); - -void powerwindow_powerwindow_con_broadcast_ticks(powerwindow_boolean_T *rty_window_up, powerwindow_boolean_T * - rty_window_down, powerwindow_boolean_T *rty_overcurrent, powerwindow_boolean_T *rty_pinch, powerwindow_boolean_T - *rty_wake, powerwindow_rtB_PowerWindow_control *localB, powerwindow_rtDW_PowerWindow_control *localDW); - -/* Function for Chart: '<S2>/stateflow control model' */ -void powerwindow_powerwindow_con_broadcast_ticks(powerwindow_boolean_T *rty_window_up, powerwindow_boolean_T * - rty_window_down, powerwindow_boolean_T *rty_overcurrent, powerwindow_boolean_T *rty_pinch, powerwindow_boolean_T - *rty_wake, powerwindow_rtB_PowerWindow_control *localB, powerwindow_rtDW_PowerWindow_control *localDW) -{ - /* Event: '<S3>:30' */ - /* During: PW_PSG/PWExternalClock/stateflow control model */ - if (localDW->is_active_c2_PowerWindow_contro == 0U) { - /* Entry: PW_PSG/PWExternalClock/stateflow control model */ - localDW->is_active_c2_PowerWindow_contro = 1U; - - /* Entry Internal: PW_PSG/PWExternalClock/stateflow control model */ - /* Transition: '<S3>:102' */ - localDW->is_c2_PowerWindow_control = powerwindow_powerwindow_control_IN_System; - - /* Entry Internal 'System': '<S3>:94' */ - localDW->is_active_Logic = 1U; - - /* Entry Internal 'Logic': '<S3>:95' */ - /* Transition: '<S3>:82' */ - localDW->is_Logic = powerwindow_powerwindow_control_IN_Neutral; - - /* Chart: '<S2>/stateflow control model' incorporates: - * TriggerPort: '<S3>/ticks' - */ - /* Entry 'Neutral': '<S3>:16' */ - *rty_window_up = false; - *rty_window_down = false; - *rty_wake = false; - localDW->is_active_Sensing = 1U; - - /* Entry Internal 'Sensing': '<S3>:96' */ - /* Transition: '<S3>:153' */ - localDW->is_Sensing = powerwindow_powerwindow_control_IN_Start; - localDW->temporalCounter_i2 = 0U; - - /* Chart: '<S2>/stateflow control model' incorporates: - * TriggerPort: '<S3>/ticks' - */ - /* Entry 'Start': '<S3>:170' */ - *rty_overcurrent = false; - *rty_pinch = false; - } else { - switch (localDW->is_c2_PowerWindow_control) { - case powerwindow_powerwindow_contr_IN_EndReached: - /* During 'EndReached': '<S3>:97' */ - if (localDW->temporalCounter_i1 >= 10) { - /* Transition: '<S3>:101' */ - localDW->is_c2_PowerWindow_control = powerwindow_powerwindow_control_IN_System; - - /* Entry Internal 'System': '<S3>:94' */ - localDW->is_active_Logic = 1U; - - /* Entry Internal 'Logic': '<S3>:95' */ - /* Transition: '<S3>:82' */ - localDW->is_Logic = powerwindow_powerwindow_control_IN_Neutral; - - /* Chart: '<S2>/stateflow control model' incorporates: - * TriggerPort: '<S3>/ticks' - */ - /* Entry 'Neutral': '<S3>:16' */ - *rty_window_up = false; - *rty_window_down = false; - *rty_wake = false; - localDW->is_active_Sensing = 1U; - - /* Entry Internal 'Sensing': '<S3>:96' */ - /* Transition: '<S3>:153' */ - localDW->is_Sensing = powerwindow_powerwindow_control_IN_Start; - localDW->temporalCounter_i2 = 0U; - - /* Chart: '<S2>/stateflow control model' incorporates: - * TriggerPort: '<S3>/ticks' - */ - /* Entry 'Start': '<S3>:170' */ - *rty_overcurrent = false; - *rty_pinch = false; - } - break; - - case powerwindow_powerwindow_control_IN_Pinch: - /* During 'Pinch': '<S3>:152' */ - if (localDW->temporalCounter_i1 >= 40) { - /* Transition: '<S3>:157' */ - localDW->is_c2_PowerWindow_control = powerwindow_powerwindow_control_IN_System; - - /* Entry Internal 'System': '<S3>:94' */ - localDW->is_active_Logic = 1U; - - /* Entry Internal 'Logic': '<S3>:95' */ - /* Transition: '<S3>:82' */ - localDW->is_Logic = powerwindow_powerwindow_control_IN_Neutral; - - /* Chart: '<S2>/stateflow control model' incorporates: - * TriggerPort: '<S3>/ticks' - */ - /* Entry 'Neutral': '<S3>:16' */ - *rty_window_up = false; - *rty_window_down = false; - *rty_wake = false; - localDW->is_active_Sensing = 1U; - - /* Entry Internal 'Sensing': '<S3>:96' */ - /* Transition: '<S3>:153' */ - localDW->is_Sensing = powerwindow_powerwindow_control_IN_Start; - localDW->temporalCounter_i2 = 0U; - - /* Chart: '<S2>/stateflow control model' incorporates: - * TriggerPort: '<S3>/ticks' - */ - /* Entry 'Start': '<S3>:170' */ - *rty_overcurrent = false; - *rty_pinch = false; - } - break; - - default: - /* Chart: '<S2>/stateflow control model' incorporates: - * TriggerPort: '<S3>/ticks' - */ - /* During 'System': '<S3>:94' */ - if (*rty_pinch == 1) { - /* Transition: '<S3>:155' */ - /* Exit Internal 'System': '<S3>:94' */ - /* Exit Internal 'Sensing': '<S3>:96' */ - localDW->is_Sensing = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - localDW->is_active_Sensing = 0U; - - /* Exit Internal 'Logic': '<S3>:95' */ - /* Exit Internal 'Down': '<S3>:18' */ - localDW->is_Down = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - localDW->is_Logic = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - - /* Exit Internal 'Up': '<S3>:17' */ - localDW->is_Up = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - localDW->is_active_Logic = 0U; - localDW->is_c2_PowerWindow_control = powerwindow_powerwindow_control_IN_Pinch; - localDW->temporalCounter_i1 = 0U; - - /* Entry 'Pinch': '<S3>:152' */ - *rty_window_up = false; - *rty_window_down = true; - } else if (*rty_overcurrent == 1) { - /* Transition: '<S3>:100' */ - /* Exit Internal 'System': '<S3>:94' */ - /* Exit Internal 'Sensing': '<S3>:96' */ - localDW->is_Sensing = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - localDW->is_active_Sensing = 0U; - - /* Exit Internal 'Logic': '<S3>:95' */ - /* Exit Internal 'Down': '<S3>:18' */ - localDW->is_Down = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - localDW->is_Logic = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - - /* Exit Internal 'Up': '<S3>:17' */ - localDW->is_Up = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - localDW->is_active_Logic = 0U; - localDW->is_c2_PowerWindow_control = powerwindow_powerwindow_contr_IN_EndReached; - localDW->temporalCounter_i1 = 0U; - - /* Entry 'EndReached': '<S3>:97' */ - *rty_window_up = false; - *rty_window_down = false; - } else { - /* During 'Logic': '<S3>:95' */ - switch (localDW->is_Logic) { - case powerwindow_powerwindow_control_IN_Down_d: - /* During 'Down': '<S3>:18' */ - if (localB->map[1]) { - /* Transition: '<S3>:169' */ - /* Exit Internal 'Down': '<S3>:18' */ - localDW->is_Down = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - localDW->is_Logic = powerwindow_powerwindow_control_IN_Up; - - /* Entry 'Up': '<S3>:17' */ - *rty_window_up = true; - *rty_window_down = false; - *rty_wake = true; - localDW->is_Up = powerwindow_powerwindow_control_IN_Up; - } else { - switch (localDW->is_Down) { - case powerwindow_powerwindow_control_IN_AutoDown: - /* During 'AutoDown': '<S3>:111' */ - break; - - case powerwindow_powerwindow_control_IN_Down: - /* During 'Down': '<S3>:110' */ - if (localB->map[0]) { - /* Transition: '<S3>:26' */ - localDW->is_Down = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - localDW->is_Logic = powerwindow_powerwindow_control_IN_Neutral; - - /* Entry 'Neutral': '<S3>:16' */ - *rty_window_up = false; - *rty_window_down = false; - *rty_wake = false; - } - break; - - default: - /* During 'InitDown': '<S3>:109' */ - if (localDW->temporalCounter_i1 >= 20) { - /* Transition: '<S3>:119' */ - if (localB->map[0]) { - /* Transition: '<S3>:120' */ - localDW->is_Down = powerwindow_powerwindow_control_IN_AutoDown; - } else { - if (localB->map[2]) { - /* Transition: '<S3>:121' */ - localDW->is_Down = powerwindow_powerwindow_control_IN_Down; - } - } - } - break; - } - } - break; - - case powerwindow_powerwindow_control_IN_Neutral: - /* During 'Neutral': '<S3>:16' */ - if (localB->map[1]) { - /* Transition: '<S3>:24' */ - localDW->is_Logic = powerwindow_powerwindow_control_IN_Up; - - /* Entry 'Up': '<S3>:17' */ - *rty_window_up = true; - *rty_window_down = false; - *rty_wake = true; - localDW->is_Up = powerwindow_powerwindow_control_IN_InitUp; - localDW->temporalCounter_i1 = 0U; - } else { - if (localB->map[2]) { - /* Transition: '<S3>:25' */ - localDW->is_Logic = powerwindow_powerwindow_control_IN_Down_d; - - /* Entry 'Down': '<S3>:18' */ - *rty_window_up = false; - *rty_window_down = true; - *rty_wake = true; - localDW->is_Down = powerwindow_powerwindow_control_IN_InitDown; - localDW->temporalCounter_i1 = 0U; - } - } - break; - - default: - /* During 'Up': '<S3>:17' */ - if (localB->map[2]) { - /* Transition: '<S3>:166' */ - /* Exit Internal 'Up': '<S3>:17' */ - localDW->is_Up = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - localDW->is_Logic = powerwindow_powerwindow_control_IN_Down_d; - - /* Entry 'Down': '<S3>:18' */ - *rty_window_up = false; - *rty_window_down = true; - *rty_wake = true; - localDW->is_Down = powerwindow_powerwindow_control_IN_Down; - } else { - switch (localDW->is_Up) { - case powerwindow_powerwindow_control_IN_AutoUp: - /* During 'AutoUp': '<S3>:108' */ - break; - - case powerwindow_powerwindow_control_IN_InitUp: - /* During 'InitUp': '<S3>:106' */ - if (localDW->temporalCounter_i1 >= 20) { - /* Transition: '<S3>:115' */ - if (localB->map[0]) { - /* Transition: '<S3>:118' */ - localDW->is_Up = powerwindow_powerwindow_control_IN_AutoUp; - } else { - if (localB->map[1]) { - /* Transition: '<S3>:117' */ - localDW->is_Up = powerwindow_powerwindow_control_IN_Up; - } - } - } - break; - - default: - /* During 'Up': '<S3>:107' */ - if (localB->map[0]) { - /* Transition: '<S3>:23' */ - localDW->is_Up = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - localDW->is_Logic = powerwindow_powerwindow_control_IN_Neutral; - - /* Entry 'Neutral': '<S3>:16' */ - *rty_window_up = false; - *rty_window_down = false; - *rty_wake = false; - } - break; - } - } - break; - } - - /* During 'Sensing': '<S3>:96' */ - switch (localDW->is_Sensing) { - case powerwindow_powerwindow_control_IN_SenseEnd: - /* During 'SenseEnd': '<S3>:147' */ - if ((localB->LogicalOperator == 0) && (*rty_window_up == 1)) { - /* Transition: '<S3>:173' */ - localDW->is_Sensing = powerwindow_powerwindow_control_IN_Start; - localDW->temporalCounter_i2 = 0U; - - /* Entry 'Start': '<S3>:170' */ - *rty_overcurrent = false; - *rty_pinch = false; - } else { - *rty_overcurrent = (localB->RateTransition1 > 184); - } - break; - - case powerwindow_powerwindow_contr_IN_SensePinch: - /* During 'SensePinch': '<S3>:148' */ - if ((localB->LogicalOperator == 1) || (*rty_window_down == 1)) { - /* Transition: '<S3>:150' */ - localDW->is_Sensing = powerwindow_powerwindow_control_IN_SenseEnd; - } else { - *rty_pinch = (localB->RateTransition1 > 92); - } - break; - - default: - /* During 'Start': '<S3>:170' */ - if (localDW->temporalCounter_i2 >= 6) { - /* Transition: '<S3>:171' */ - localDW->is_Sensing = powerwindow_powerwindow_contr_IN_SensePinch; - } - break; - } - } - break; - } - } -} - -/* Initial conditions for referenced model: 'powerwindow_powerwindow_control' */ -void powerwindow_powerwindow_control_Init(powerwindow_boolean_T *rty_window_up, powerwindow_boolean_T - *rty_window_down, powerwindow_boolean_T *rty_overcurrent, powerwindow_boolean_T *rty_pinch, powerwindow_boolean_T * - rty_wake, powerwindow_rtDW_PowerWindow_control *localDW) -{ - /* InitializeConditions for Chart: '<S2>/stateflow control model' */ - localDW->is_active_Logic = 0U; - localDW->is_Logic = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - localDW->is_Down = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - localDW->is_Up = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - localDW->temporalCounter_i1 = 0U; - localDW->is_active_Sensing = 0U; - localDW->is_Sensing = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - localDW->temporalCounter_i2 = 0U; - localDW->is_active_c2_PowerWindow_contro = 0U; - localDW->is_c2_PowerWindow_control = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; - *rty_window_up = false; - *rty_window_down = false; - *rty_overcurrent = false; - *rty_pinch = false; - *rty_wake = false; -} - -/* Start for referenced model: 'powerwindow_powerwindow_control' */ -void powerwindow_powerwindow_control_Start(powerwindow_rtDW_PowerWindow_control *localDW) -{ - /* Start for DiscretePulseGenerator: '<S2>/period of 50ms' */ - localDW->clockTickCounter = 0L; -} - -/* Output and update for referenced model: 'powerwindow_powerwindow_control' */ -void powerwindow_powerwindow_control_main(const powerwindow_boolean_T *rtu_up, const powerwindow_boolean_T *rtu_down, - const powerwindow_boolean_T *rtu_endofdetectionrange, const powerwindow_uint8_T *rtu_currentsense, - powerwindow_boolean_T *rty_window_up, powerwindow_boolean_T *rty_window_down, powerwindow_boolean_T - *rty_overcurrent, powerwindow_boolean_T *rty_pinch, powerwindow_boolean_T *rty_wake, - powerwindow_rtB_PowerWindow_control *localB, powerwindow_rtDW_PowerWindow_control *localDW, - powerwindow_rtZCE_PowerWindow_control *localZCE) -{ - powerwindow_int16_T rowIdx; - powerwindow_int16_T rtb_periodof50ms; - - /* DiscretePulseGenerator: '<S2>/period of 50ms' */ - rtb_periodof50ms = (localDW->clockTickCounter < 5L) && - (localDW->clockTickCounter >= 0L) ? 1 : 0; - if (localDW->clockTickCounter >= 9L) { - localDW->clockTickCounter = 0L; - } else { - localDW->clockTickCounter++; - } - - /* End of DiscretePulseGenerator: '<S2>/period of 50ms' */ - - /* Logic: '<S2>/Logical Operator' */ - localB->LogicalOperator = !*rtu_endofdetectionrange; - - /* RateTransition: '<S2>/Rate Transition1' */ - localB->RateTransition1 = *rtu_currentsense; - - /* CombinatorialLogic: '<S2>/map' */ - rowIdx = (powerwindow_int16_T)(((powerwindow_uint16_T)*rtu_up << 1) + *rtu_down); - localB->map[0U] = rtCP_map_table[(powerwindow_uint16_T)rowIdx]; - localB->map[1U] = rtCP_map_table[rowIdx + 4U]; - localB->map[2U] = rtCP_map_table[rowIdx + 8U]; - - /* Chart: '<S2>/stateflow control model' incorporates: - * TriggerPort: '<S3>/ticks' - */ - /* DataTypeConversion: '<S2>/Data Type Conversion' */ - if (((rtb_periodof50ms != 0) != (localZCE->stateflowcontrolmodel_Trig_ZCE == - powerwindow_POS_ZCSIG)) && (localZCE->stateflowcontrolmodel_Trig_ZCE != - powerwindow_UNINITIALIZED_ZCSIG)) { - /* Gateway: PW_PSG/PWExternalClock/stateflow control model */ - if (localDW->temporalCounter_i1 < 63U) { - localDW->temporalCounter_i1++; - } - - if (localDW->temporalCounter_i2 < 7U) { - localDW->temporalCounter_i2++; - } - - powerwindow_powerwindow_con_broadcast_ticks(rty_window_up, rty_window_down, - rty_overcurrent, rty_pinch, rty_wake, localB, localDW); - } - - localZCE->stateflowcontrolmodel_Trig_ZCE = (powerwindow_uint8_T)(rtb_periodof50ms != 0 ? - (powerwindow_int16_T)powerwindow_POS_ZCSIG : (powerwindow_int16_T)powerwindow_ZERO_ZCSIG); - - /* End of DataTypeConversion: '<S2>/Data Type Conversion' */ -} - -/* Model initialize function */ -void powerwindow_powerwindow_control_initialize(const powerwindow_char_T **rt_errorStatus, - powerwindow_RT_MODEL_PowerWindow_control *const PowerWindow_control_M, - powerwindow_rtB_PowerWindow_control *localB, powerwindow_rtDW_PowerWindow_control *localDW, - powerwindow_rtZCE_PowerWindow_control *localZCE) -{ - /* Registration code */ - - /* initialize error status */ - powerwindow_powerwindow_control_rtmSetErrorStatusPointer(PowerWindow_control_M, rt_errorStatus); - - /* block I/O */ - (void) memset(((void *) localB), 0, - sizeof(powerwindow_rtB_PowerWindow_control)); - - /* states (dwork) */ - (void) memset((void *)localDW, 0, - sizeof(powerwindow_rtDW_PowerWindow_control)); - localZCE->stateflowcontrolmodel_Trig_ZCE = powerwindow_UNINITIALIZED_ZCSIG; -} - -/* - * File trailer for generated code. - * - * [EOF] - */ +/* + + This program is part of the TACLeBench benchmark suite. + Version V 1.x + + Name: powerwindow_powerwindow_control.c + + Author: CoSys-Lab, University of Antwerp + + Function: powerwindow_control is the main functionality of the power window benchmark. + It contains 3 states: System, EndReached and Pinch, which are used to controll the + position of the glass, if the window is fully closed and sensing pinch force to realize + the powerwindow function. + + Source: https://github.com/tacle/tacle-bench/blob/master/bench/app/PowerWindow//powerwindow_powerwindow_control.c + + Changes: a brief summary of major functional changes and formatting) + + License: GNU General Public License + +*/ + +#include "wcclib.h" +#include "powerwindow_HeaderFiles/powerwindow_powerwindow_control.h" +#include "powerwindow_HeaderFiles/powerwindow_powerwindow_control_private.h" + +/* Named constants for Chart: '<S2>/stateflow control model' */ +#define powerwindow_powerwindow__IN_NO_ACTIVE_CHILD ((powerwindow_uint8_T)0U) +#define powerwindow_powerwindow_contr_IN_EndReached ((powerwindow_uint8_T)1U) +#define powerwindow_powerwindow_contr_IN_SensePinch ((powerwindow_uint8_T)2U) +#define powerwindow_powerwindow_control_IN_AutoDown ((powerwindow_uint8_T)1U) +#define powerwindow_powerwindow_control_IN_AutoUp ((powerwindow_uint8_T)1U) +#define powerwindow_powerwindow_control_IN_Down ((powerwindow_uint8_T)2U) +#define powerwindow_powerwindow_control_IN_Down_d ((powerwindow_uint8_T)1U) +#define powerwindow_powerwindow_control_IN_InitDown ((powerwindow_uint8_T)3U) +#define powerwindow_powerwindow_control_IN_InitUp ((powerwindow_uint8_T)2U) +#define powerwindow_powerwindow_control_IN_Neutral ((powerwindow_uint8_T)2U) +#define powerwindow_powerwindow_control_IN_Pinch ((powerwindow_uint8_T)2U) +#define powerwindow_powerwindow_control_IN_SenseEnd ((powerwindow_uint8_T)1U) +#define powerwindow_powerwindow_control_IN_Start ((powerwindow_uint8_T)3U) +#define powerwindow_powerwindow_control_IN_System ((powerwindow_uint8_T)3U) +#define powerwindow_powerwindow_control_IN_Up ((powerwindow_uint8_T)3U) + +/* Forward declaration for local functions */ +void powerwindow_powerwindow_control_Start( powerwindow_rtDW_PowerWindow_control + *localDW ); + +void powerwindow_powerwindow_control_Init( powerwindow_boolean_T *rty_window_up, + powerwindow_boolean_T + *rty_window_down, powerwindow_boolean_T *rty_overcurrent, + powerwindow_boolean_T *rty_pinch, powerwindow_boolean_T * + rty_wake, powerwindow_rtDW_PowerWindow_control *localDW ); + +void powerwindow_powerwindow_control_Start( powerwindow_rtDW_PowerWindow_control + *localDW ); + +void powerwindow_powerwindow_control_initialize( const powerwindow_char_T + **rt_errorStatus, + powerwindow_RT_MODEL_PowerWindow_control *const PowerWindow_control_M, + powerwindow_rtB_PowerWindow_control *localB, + powerwindow_rtDW_PowerWindow_control *localDW, + powerwindow_rtZCE_PowerWindow_control *localZCE ); + +void powerwindow_powerwindow_control_main( const powerwindow_boolean_T *rtu_up, + const powerwindow_boolean_T *rtu_down, + const powerwindow_boolean_T *rtu_endofdetectionrange, + const powerwindow_uint8_T *rtu_currentsense, + powerwindow_boolean_T *rty_window_up, powerwindow_boolean_T *rty_window_down, + powerwindow_boolean_T + *rty_overcurrent, powerwindow_boolean_T *rty_pinch, + powerwindow_boolean_T *rty_wake, + powerwindow_rtB_PowerWindow_control *localB, + powerwindow_rtDW_PowerWindow_control *localDW, + powerwindow_rtZCE_PowerWindow_control *localZCE ); + +void powerwindow_powerwindow_con_broadcast_ticks( powerwindow_boolean_T + *rty_window_up, powerwindow_boolean_T * + rty_window_down, powerwindow_boolean_T *rty_overcurrent, + powerwindow_boolean_T *rty_pinch, powerwindow_boolean_T + *rty_wake, powerwindow_rtB_PowerWindow_control *localB, + powerwindow_rtDW_PowerWindow_control *localDW ); + +/* Function for Chart: '<S2>/stateflow control model' */ +void powerwindow_powerwindow_con_broadcast_ticks( powerwindow_boolean_T + *rty_window_up, powerwindow_boolean_T * + rty_window_down, powerwindow_boolean_T *rty_overcurrent, + powerwindow_boolean_T *rty_pinch, powerwindow_boolean_T + *rty_wake, powerwindow_rtB_PowerWindow_control *localB, + powerwindow_rtDW_PowerWindow_control *localDW ) +{ + /* Event: '<S3>:30' */ + /* During: PW_PSG/PWExternalClock/stateflow control model */ + if ( localDW->is_active_c2_PowerWindow_contro == 0U ) { + /* Entry: PW_PSG/PWExternalClock/stateflow control model */ + localDW->is_active_c2_PowerWindow_contro = 1U; + + /* Entry Internal: PW_PSG/PWExternalClock/stateflow control model */ + /* Transition: '<S3>:102' */ + localDW->is_c2_PowerWindow_control = powerwindow_powerwindow_control_IN_System; + + /* Entry Internal 'System': '<S3>:94' */ + localDW->is_active_Logic = 1U; + + /* Entry Internal 'Logic': '<S3>:95' */ + /* Transition: '<S3>:82' */ + localDW->is_Logic = powerwindow_powerwindow_control_IN_Neutral; + + /* Chart: '<S2>/stateflow control model' incorporates: + TriggerPort: '<S3>/ticks' + */ + /* Entry 'Neutral': '<S3>:16' */ + *rty_window_up = false; + *rty_window_down = false; + *rty_wake = false; + localDW->is_active_Sensing = 1U; + + /* Entry Internal 'Sensing': '<S3>:96' */ + /* Transition: '<S3>:153' */ + localDW->is_Sensing = powerwindow_powerwindow_control_IN_Start; + localDW->temporalCounter_i2 = 0U; + + /* Chart: '<S2>/stateflow control model' incorporates: + TriggerPort: '<S3>/ticks' + */ + /* Entry 'Start': '<S3>:170' */ + *rty_overcurrent = false; + *rty_pinch = false; + } else { + switch ( localDW->is_c2_PowerWindow_control ) { + case powerwindow_powerwindow_contr_IN_EndReached: + /* During 'EndReached': '<S3>:97' */ + if ( localDW->temporalCounter_i1 >= 10 ) { + /* Transition: '<S3>:101' */ + localDW->is_c2_PowerWindow_control = powerwindow_powerwindow_control_IN_System; + + /* Entry Internal 'System': '<S3>:94' */ + localDW->is_active_Logic = 1U; + + /* Entry Internal 'Logic': '<S3>:95' */ + /* Transition: '<S3>:82' */ + localDW->is_Logic = powerwindow_powerwindow_control_IN_Neutral; + + /* Chart: '<S2>/stateflow control model' incorporates: + TriggerPort: '<S3>/ticks' + */ + /* Entry 'Neutral': '<S3>:16' */ + *rty_window_up = false; + *rty_window_down = false; + *rty_wake = false; + localDW->is_active_Sensing = 1U; + + /* Entry Internal 'Sensing': '<S3>:96' */ + /* Transition: '<S3>:153' */ + localDW->is_Sensing = powerwindow_powerwindow_control_IN_Start; + localDW->temporalCounter_i2 = 0U; + + /* Chart: '<S2>/stateflow control model' incorporates: + TriggerPort: '<S3>/ticks' + */ + /* Entry 'Start': '<S3>:170' */ + *rty_overcurrent = false; + *rty_pinch = false; + } + break; + + case powerwindow_powerwindow_control_IN_Pinch: + /* During 'Pinch': '<S3>:152' */ + if ( localDW->temporalCounter_i1 >= 40 ) { + /* Transition: '<S3>:157' */ + localDW->is_c2_PowerWindow_control = powerwindow_powerwindow_control_IN_System; + + /* Entry Internal 'System': '<S3>:94' */ + localDW->is_active_Logic = 1U; + + /* Entry Internal 'Logic': '<S3>:95' */ + /* Transition: '<S3>:82' */ + localDW->is_Logic = powerwindow_powerwindow_control_IN_Neutral; + + /* Chart: '<S2>/stateflow control model' incorporates: + TriggerPort: '<S3>/ticks' + */ + /* Entry 'Neutral': '<S3>:16' */ + *rty_window_up = false; + *rty_window_down = false; + *rty_wake = false; + localDW->is_active_Sensing = 1U; + + /* Entry Internal 'Sensing': '<S3>:96' */ + /* Transition: '<S3>:153' */ + localDW->is_Sensing = powerwindow_powerwindow_control_IN_Start; + localDW->temporalCounter_i2 = 0U; + + /* Chart: '<S2>/stateflow control model' incorporates: + TriggerPort: '<S3>/ticks' + */ + /* Entry 'Start': '<S3>:170' */ + *rty_overcurrent = false; + *rty_pinch = false; + } + break; + + default: + /* Chart: '<S2>/stateflow control model' incorporates: + TriggerPort: '<S3>/ticks' + */ + /* During 'System': '<S3>:94' */ + if ( *rty_pinch == 1 ) { + /* Transition: '<S3>:155' */ + /* Exit Internal 'System': '<S3>:94' */ + /* Exit Internal 'Sensing': '<S3>:96' */ + localDW->is_Sensing = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + localDW->is_active_Sensing = 0U; + + /* Exit Internal 'Logic': '<S3>:95' */ + /* Exit Internal 'Down': '<S3>:18' */ + localDW->is_Down = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + localDW->is_Logic = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + + /* Exit Internal 'Up': '<S3>:17' */ + localDW->is_Up = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + localDW->is_active_Logic = 0U; + localDW->is_c2_PowerWindow_control = powerwindow_powerwindow_control_IN_Pinch; + localDW->temporalCounter_i1 = 0U; + + /* Entry 'Pinch': '<S3>:152' */ + *rty_window_up = false; + *rty_window_down = true; + } else + if ( *rty_overcurrent == 1 ) { + /* Transition: '<S3>:100' */ + /* Exit Internal 'System': '<S3>:94' */ + /* Exit Internal 'Sensing': '<S3>:96' */ + localDW->is_Sensing = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + localDW->is_active_Sensing = 0U; + + /* Exit Internal 'Logic': '<S3>:95' */ + /* Exit Internal 'Down': '<S3>:18' */ + localDW->is_Down = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + localDW->is_Logic = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + + /* Exit Internal 'Up': '<S3>:17' */ + localDW->is_Up = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + localDW->is_active_Logic = 0U; + localDW->is_c2_PowerWindow_control = + powerwindow_powerwindow_contr_IN_EndReached; + localDW->temporalCounter_i1 = 0U; + + /* Entry 'EndReached': '<S3>:97' */ + *rty_window_up = false; + *rty_window_down = false; + } else { + /* During 'Logic': '<S3>:95' */ + switch ( localDW->is_Logic ) { + case powerwindow_powerwindow_control_IN_Down_d: + /* During 'Down': '<S3>:18' */ + if ( localB->map[ 1 ] ) { + /* Transition: '<S3>:169' */ + /* Exit Internal 'Down': '<S3>:18' */ + localDW->is_Down = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + localDW->is_Logic = powerwindow_powerwindow_control_IN_Up; + + /* Entry 'Up': '<S3>:17' */ + *rty_window_up = true; + *rty_window_down = false; + *rty_wake = true; + localDW->is_Up = powerwindow_powerwindow_control_IN_Up; + } else { + switch ( localDW->is_Down ) { + case powerwindow_powerwindow_control_IN_AutoDown: + /* During 'AutoDown': '<S3>:111' */ + break; + + case powerwindow_powerwindow_control_IN_Down: + /* During 'Down': '<S3>:110' */ + if ( localB->map[ 0 ] ) { + /* Transition: '<S3>:26' */ + localDW->is_Down = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + localDW->is_Logic = powerwindow_powerwindow_control_IN_Neutral; + + /* Entry 'Neutral': '<S3>:16' */ + *rty_window_up = false; + *rty_window_down = false; + *rty_wake = false; + } + break; + + default: + /* During 'InitDown': '<S3>:109' */ + if ( localDW->temporalCounter_i1 >= 20 ) { + /* Transition: '<S3>:119' */ + if ( localB->map[ 0 ] ) { + /* Transition: '<S3>:120' */ + localDW->is_Down = powerwindow_powerwindow_control_IN_AutoDown; + } else { + if ( localB->map[ 2 ] ) { + /* Transition: '<S3>:121' */ + localDW->is_Down = powerwindow_powerwindow_control_IN_Down; + } + } + } + break; + } + } + break; + + case powerwindow_powerwindow_control_IN_Neutral: + /* During 'Neutral': '<S3>:16' */ + if ( localB->map[ 1 ] ) { + /* Transition: '<S3>:24' */ + localDW->is_Logic = powerwindow_powerwindow_control_IN_Up; + + /* Entry 'Up': '<S3>:17' */ + *rty_window_up = true; + *rty_window_down = false; + *rty_wake = true; + localDW->is_Up = powerwindow_powerwindow_control_IN_InitUp; + localDW->temporalCounter_i1 = 0U; + } else { + if ( localB->map[ 2 ] ) { + /* Transition: '<S3>:25' */ + localDW->is_Logic = powerwindow_powerwindow_control_IN_Down_d; + + /* Entry 'Down': '<S3>:18' */ + *rty_window_up = false; + *rty_window_down = true; + *rty_wake = true; + localDW->is_Down = powerwindow_powerwindow_control_IN_InitDown; + localDW->temporalCounter_i1 = 0U; + } + } + break; + + default: + /* During 'Up': '<S3>:17' */ + if ( localB->map[ 2 ] ) { + /* Transition: '<S3>:166' */ + /* Exit Internal 'Up': '<S3>:17' */ + localDW->is_Up = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + localDW->is_Logic = powerwindow_powerwindow_control_IN_Down_d; + + /* Entry 'Down': '<S3>:18' */ + *rty_window_up = false; + *rty_window_down = true; + *rty_wake = true; + localDW->is_Down = powerwindow_powerwindow_control_IN_Down; + } else { + switch ( localDW->is_Up ) { + case powerwindow_powerwindow_control_IN_AutoUp: + /* During 'AutoUp': '<S3>:108' */ + break; + + case powerwindow_powerwindow_control_IN_InitUp: + /* During 'InitUp': '<S3>:106' */ + if ( localDW->temporalCounter_i1 >= 20 ) { + /* Transition: '<S3>:115' */ + if ( localB->map[ 0 ] ) { + /* Transition: '<S3>:118' */ + localDW->is_Up = powerwindow_powerwindow_control_IN_AutoUp; + } else { + if ( localB->map[ 1 ] ) { + /* Transition: '<S3>:117' */ + localDW->is_Up = powerwindow_powerwindow_control_IN_Up; + } + } + } + break; + + default: + /* During 'Up': '<S3>:107' */ + if ( localB->map[ 0 ] ) { + /* Transition: '<S3>:23' */ + localDW->is_Up = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + localDW->is_Logic = powerwindow_powerwindow_control_IN_Neutral; + + /* Entry 'Neutral': '<S3>:16' */ + *rty_window_up = false; + *rty_window_down = false; + *rty_wake = false; + } + break; + } + } + break; + } + + /* During 'Sensing': '<S3>:96' */ + switch ( localDW->is_Sensing ) { + case powerwindow_powerwindow_control_IN_SenseEnd: + /* During 'SenseEnd': '<S3>:147' */ + if ( ( localB->LogicalOperator == 0 ) && ( *rty_window_up == 1 ) ) { + /* Transition: '<S3>:173' */ + localDW->is_Sensing = powerwindow_powerwindow_control_IN_Start; + localDW->temporalCounter_i2 = 0U; + + /* Entry 'Start': '<S3>:170' */ + *rty_overcurrent = false; + *rty_pinch = false; + } else + *rty_overcurrent = ( localB->RateTransition1 > 184 ); + break; + + case powerwindow_powerwindow_contr_IN_SensePinch: + /* During 'SensePinch': '<S3>:148' */ + if ( ( localB->LogicalOperator == 1 ) || ( *rty_window_down == 1 ) ) { + /* Transition: '<S3>:150' */ + localDW->is_Sensing = powerwindow_powerwindow_control_IN_SenseEnd; + } else + *rty_pinch = ( localB->RateTransition1 > 92 ); + break; + + default: + /* During 'Start': '<S3>:170' */ + if ( localDW->temporalCounter_i2 >= 6 ) { + /* Transition: '<S3>:171' */ + localDW->is_Sensing = powerwindow_powerwindow_contr_IN_SensePinch; + } + break; + } + } + break; + } + } +} + +/* Initial conditions for referenced model: 'powerwindow_powerwindow_control' */ +void powerwindow_powerwindow_control_Init( powerwindow_boolean_T *rty_window_up, + powerwindow_boolean_T + *rty_window_down, powerwindow_boolean_T *rty_overcurrent, + powerwindow_boolean_T *rty_pinch, powerwindow_boolean_T * + rty_wake, powerwindow_rtDW_PowerWindow_control *localDW ) +{ + /* InitializeConditions for Chart: '<S2>/stateflow control model' */ + localDW->is_active_Logic = 0U; + localDW->is_Logic = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + localDW->is_Down = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + localDW->is_Up = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + localDW->temporalCounter_i1 = 0U; + localDW->is_active_Sensing = 0U; + localDW->is_Sensing = powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + localDW->temporalCounter_i2 = 0U; + localDW->is_active_c2_PowerWindow_contro = 0U; + localDW->is_c2_PowerWindow_control = + powerwindow_powerwindow__IN_NO_ACTIVE_CHILD; + *rty_window_up = false; + *rty_window_down = false; + *rty_overcurrent = false; + *rty_pinch = false; + *rty_wake = false; +} + +/* Start for referenced model: 'powerwindow_powerwindow_control' */ +void powerwindow_powerwindow_control_Start( powerwindow_rtDW_PowerWindow_control + *localDW ) +{ + /* Start for DiscretePulseGenerator: '<S2>/period of 50ms' */ + localDW->clockTickCounter = 0L; +} + +/* Output and update for referenced model: 'powerwindow_powerwindow_control' */ +void powerwindow_powerwindow_control_main( const powerwindow_boolean_T *rtu_up, + const powerwindow_boolean_T *rtu_down, + const powerwindow_boolean_T *rtu_endofdetectionrange, + const powerwindow_uint8_T *rtu_currentsense, + powerwindow_boolean_T *rty_window_up, powerwindow_boolean_T *rty_window_down, + powerwindow_boolean_T + *rty_overcurrent, powerwindow_boolean_T *rty_pinch, + powerwindow_boolean_T *rty_wake, + powerwindow_rtB_PowerWindow_control *localB, + powerwindow_rtDW_PowerWindow_control *localDW, + powerwindow_rtZCE_PowerWindow_control *localZCE ) +{ + powerwindow_int16_T rowIdx; + powerwindow_int16_T rtb_periodof50ms; + + /* DiscretePulseGenerator: '<S2>/period of 50ms' */ + rtb_periodof50ms = ( localDW->clockTickCounter < 5L ) && + ( localDW->clockTickCounter >= 0L ) ? 1 : 0; + if ( localDW->clockTickCounter >= 9L ) + localDW->clockTickCounter = 0L; + + else + localDW->clockTickCounter++; + + /* End of DiscretePulseGenerator: '<S2>/period of 50ms' */ + + /* Logic: '<S2>/Logical Operator' */ + localB->LogicalOperator = !*rtu_endofdetectionrange; + + /* RateTransition: '<S2>/Rate Transition1' */ + localB->RateTransition1 = *rtu_currentsense; + + /* CombinatorialLogic: '<S2>/map' */ + rowIdx = ( powerwindow_int16_T )( ( ( powerwindow_uint16_T ) * rtu_up << 1 ) + + *rtu_down ); + localB->map[ 0U ] = rtCP_map_table[ ( powerwindow_uint16_T )rowIdx ]; + localB->map[ 1U ] = rtCP_map_table[ rowIdx + 4U ]; + localB->map[ 2U ] = rtCP_map_table[ rowIdx + 8U ]; + + /* Chart: '<S2>/stateflow control model' incorporates: + TriggerPort: '<S3>/ticks' + */ + /* DataTypeConversion: '<S2>/Data Type Conversion' */ + if ( ( ( rtb_periodof50ms != 0 ) != ( localZCE->stateflowcontrolmodel_Trig_ZCE + == + powerwindow_POS_ZCSIG ) ) && ( localZCE->stateflowcontrolmodel_Trig_ZCE != + powerwindow_UNINITIALIZED_ZCSIG ) ) { + /* Gateway: PW_PSG/PWExternalClock/stateflow control model */ + if ( localDW->temporalCounter_i1 < 63U ) + localDW->temporalCounter_i1++; + + if ( localDW->temporalCounter_i2 < 7U ) + localDW->temporalCounter_i2++; + + powerwindow_powerwindow_con_broadcast_ticks( rty_window_up, rty_window_down, + rty_overcurrent, rty_pinch, rty_wake, localB, localDW ); + } + + localZCE->stateflowcontrolmodel_Trig_ZCE = ( powerwindow_uint8_T )( + rtb_periodof50ms != 0 ? + ( powerwindow_int16_T )powerwindow_POS_ZCSIG : ( powerwindow_int16_T ) + powerwindow_ZERO_ZCSIG ); + + /* End of DataTypeConversion: '<S2>/Data Type Conversion' */ +} + +/* Model initialize function */ +void powerwindow_powerwindow_control_initialize( const powerwindow_char_T + **rt_errorStatus, + powerwindow_RT_MODEL_PowerWindow_control *const PowerWindow_control_M, + powerwindow_rtB_PowerWindow_control *localB, + powerwindow_rtDW_PowerWindow_control *localDW, + powerwindow_rtZCE_PowerWindow_control *localZCE ) +{ + /* Registration code */ + + /* initialize error status */ + powerwindow_powerwindow_control_rtmSetErrorStatusPointer( PowerWindow_control_M, + rt_errorStatus ); + + /* block I/O */ + ( void ) memset( ( ( void * ) localB ), 0, + sizeof( powerwindow_rtB_PowerWindow_control ) ); + + /* states (dwork) */ + ( void ) memset( ( void * )localDW, 0, + sizeof( powerwindow_rtDW_PowerWindow_control ) ); + localZCE->stateflowcontrolmodel_Trig_ZCE = powerwindow_UNINITIALIZED_ZCSIG; +} + +/* + File trailer for generated code. + + [ EOF ] +*/ diff --git a/bench/app/powerwindow/wcclib.c b/bench/app/powerwindow/wcclib.c index 20d58fdc0754a28f6642b192a979f1b5cb14e222..9120156688b03a1b28f7d8d8bceca05cd3517a99 100644 --- a/bench/app/powerwindow/wcclib.c +++ b/bench/app/powerwindow/wcclib.c @@ -7,6 +7,6 @@ void *memset( void *s, int c, size_t n ) _Pragma( "loopbound min 1 max 368" ) while ( n-- ) - *p++ = (unsigned char) c; - return( s ); + *p++ = ( unsigned char ) c; + return ( s ); } diff --git a/bench/kernel/binarysearch/ChangeLog.txt b/bench/kernel/binarysearch/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/binarysearch/binarysearch.c b/bench/kernel/binarysearch/binarysearch.c old mode 100644 new mode 100755 index 620f0a4021483c00e48917ddf35f8c1acd49c01d..c4087f5b01809c5f8e72abef4730ac56a38219cd --- a/bench/kernel/binarysearch/binarysearch.c +++ b/bench/kernel/binarysearch/binarysearch.c @@ -80,7 +80,7 @@ void binarysearch_initSeed( void ) long binarysearch_randomInteger( void ) { binarysearch_seed = ( ( binarysearch_seed * 133 ) + 81 ) % 8095; - return( binarysearch_seed ); + return ( binarysearch_seed ); } @@ -100,7 +100,7 @@ void binarysearch_init( void ) int binarysearch_return( void ) { - return( binarysearch_result ); + return ( binarysearch_result ); } @@ -126,14 +126,14 @@ int binarysearch_binary_search( int x ) fvalue = binarysearch_data[ mid ].value; } else - if ( binarysearch_data[ mid ].key > x ) - /* Item not found */ - up = mid - 1; - else - low = mid + 1; + if ( binarysearch_data[ mid ].key > x ) + /* Item not found */ + up = mid - 1; + else + low = mid + 1; } - return( fvalue ); + return ( fvalue ); } @@ -152,5 +152,5 @@ int main( void ) binarysearch_init(); binarysearch_main(); - return( binarysearch_return() - (-1) != 0 ); + return ( binarysearch_return() - ( -1 ) != 0 ); } diff --git a/bench/kernel/bitcount/ChangeLog.txt b/bench/kernel/bitcount/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/bitcount/LICENSE b/bench/kernel/bitcount/LICENSE old mode 100644 new mode 100755 diff --git a/bench/kernel/bitcount/bitcnt_1.c b/bench/kernel/bitcount/bitcnt_1.c old mode 100644 new mode 100755 index ee4f5919de6ecd1536504735817bbcb79444b190..95abfde66197bb358fea9ffd1114824ed3426958 --- a/bench/kernel/bitcount/bitcnt_1.c +++ b/bench/kernel/bitcount/bitcnt_1.c @@ -27,7 +27,7 @@ int bitcount_bit_count( long x ) ** twice as fast as the shift/test method. */ if ( x ) { - _Pragma( "loopbound min 3 max 8" ) + _Pragma( "loopbound min 3 max 8" ) do { n++; } while ( 0 != ( x = x & ( x - 1 ) ) ) ; diff --git a/bench/kernel/bitcount/bitcnt_2.c b/bench/kernel/bitcount/bitcnt_2.c old mode 100644 new mode 100755 diff --git a/bench/kernel/bitcount/bitcnt_3.c b/bench/kernel/bitcount/bitcnt_3.c old mode 100644 new mode 100755 index 08ce6643537499787115b4343ff0e5a493e00a06..5727a1736c24fc21bd84de2b395e769543f42bfe --- a/bench/kernel/bitcount/bitcnt_3.c +++ b/bench/kernel/bitcount/bitcnt_3.c @@ -20,7 +20,7 @@ #include "bitops.h" -static char bitcount_bits[256]; +static char bitcount_bits[ 256 ]; /* ** Count bits in each nybble @@ -32,7 +32,7 @@ static char bitcount_bits[256]; void bitcount_init3( void ) { int volatile i = 0; - char bitcount_bits_tmp[256] = { + char bitcount_bits_tmp[ 256 ] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, @@ -52,20 +52,20 @@ void bitcount_init3( void ) }; for ( i = 0; i < 256; i++ ) - bitcount_bits[i] = bitcount_bits_tmp[i]; + bitcount_bits[ i ] = bitcount_bits_tmp[ i ]; } int bitcount_ntbl_bitcount( long int x ) { return - bitcount_bits[ ( int ) ( x & 0x0000000FUL ) ] + - bitcount_bits[ ( int )( ( x & 0x000000F0UL ) >> 4 ) ] + - bitcount_bits[ ( int )( ( x & 0x00000F00UL ) >> 8 ) ] + - bitcount_bits[ ( int )( ( x & 0x0000F000UL ) >> 12 )] + - bitcount_bits[ ( int )( ( x & 0x000F0000UL ) >> 16 )] + - bitcount_bits[ ( int )( ( x & 0x00F00000UL ) >> 20 )] + - bitcount_bits[ ( int )( ( x & 0x0F000000UL ) >> 24 )] + - bitcount_bits[ ( int )( ( x & 0xF0000000UL ) >> 28 )]; + bitcount_bits[ ( int ) ( x & 0x0000000FUL ) ] + + bitcount_bits[ ( int )( ( x & 0x000000F0UL ) >> 4 ) ] + + bitcount_bits[ ( int )( ( x & 0x00000F00UL ) >> 8 ) ] + + bitcount_bits[ ( int )( ( x & 0x0000F000UL ) >> 12 ) ] + + bitcount_bits[ ( int )( ( x & 0x000F0000UL ) >> 16 ) ] + + bitcount_bits[ ( int )( ( x & 0x00F00000UL ) >> 20 ) ] + + bitcount_bits[ ( int )( ( x & 0x0F000000UL ) >> 24 ) ] + + bitcount_bits[ ( int )( ( x & 0xF0000000UL ) >> 28 ) ]; } /* @@ -77,14 +77,14 @@ int bitcount_ntbl_bitcount( long int x ) int bitcount_BW_btbl_bitcount( long int x ) { union { - unsigned char ch[4]; + unsigned char ch[ 4 ]; long y; } U; U.y = x; - return bitcount_bits[ U.ch[0] ] + bitcount_bits[ U.ch[1] ] + - bitcount_bits[ U.ch[3] ] + bitcount_bits[ U.ch[2] ]; + return bitcount_bits[ U.ch[ 0 ] ] + bitcount_bits[ U.ch[ 1 ] ] + + bitcount_bits[ U.ch[ 3 ] ] + bitcount_bits[ U.ch[ 2 ] ]; } /* @@ -98,9 +98,9 @@ int bitcount_AR_btbl_bitcount( long int x ) unsigned char *ptr = ( unsigned char * ) & x ; int accu ; - accu = bitcount_bits[ *ptr++ ]; - accu += bitcount_bits[ *ptr++ ]; - accu += bitcount_bits[ *ptr++ ]; - accu += bitcount_bits[ *ptr ]; + accu = bitcount_bits[ *ptr++ ]; + accu += bitcount_bits[ *ptr++ ]; + accu += bitcount_bits[ *ptr++ ]; + accu += bitcount_bits[ *ptr ]; return accu; } diff --git a/bench/kernel/bitcount/bitcnt_4.c b/bench/kernel/bitcount/bitcnt_4.c old mode 100644 new mode 100755 index 97ccbac911b24ea8bd88f021579266566611ea9f..6f27e94efb973709ce7aae492a127ab4ccfe647f --- a/bench/kernel/bitcount/bitcnt_4.c +++ b/bench/kernel/bitcount/bitcnt_4.c @@ -20,7 +20,7 @@ #include "bitops.h" /* from Snippets */ -static char bitcount_bits[256]; +static char bitcount_bits[ 256 ]; /* ** Count bits in each nybble @@ -32,7 +32,7 @@ static char bitcount_bits[256]; void bitcount_init4( void ) { int volatile i = 0; - char bitcount_bits_tmp[256] = { + char bitcount_bits_tmp[ 256 ] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, @@ -52,12 +52,13 @@ void bitcount_init4( void ) }; for ( i = 0; i < 256; i++ ) - bitcount_bits[i] = bitcount_bits_tmp[i]; + bitcount_bits[ i ] = bitcount_bits_tmp[ i ]; } int bitcount_ntbl_bitcnt( unsigned long x ) { - int cnt = bitcount_bits[( int )( x & 0x0000000FL )]; + + int cnt = bitcount_bits[ ( int )( x & 0x0000000FL ) ]; if ( 0L != ( x >>= 4 ) ) cnt += bitcount_ntbl_bitcnt( x ); @@ -71,9 +72,11 @@ int bitcount_ntbl_bitcnt( unsigned long x ) int bitcount_btbl_bitcnt( unsigned long x ) { - int cnt = bitcount_bits[ ( ( char * ) & x )[0] & 0xFF ]; + + int cnt = bitcount_bits[ ( ( char * ) & x )[ 0 ] & 0xFF ]; if ( 0L != ( x >>= 8 ) ) cnt += bitcount_btbl_bitcnt( x ); + return cnt; } diff --git a/bench/kernel/bitcount/bitcount.c b/bench/kernel/bitcount/bitcount.c old mode 100644 new mode 100755 index a54e4254ff633f3d552f728581db5f67571acba9..dfae600155015c45971761053487db41deaac088 --- a/bench/kernel/bitcount/bitcount.c +++ b/bench/kernel/bitcount/bitcount.c @@ -56,7 +56,7 @@ int bitcount_bit_shifter( long int x ) int bitcount_return() { - return (bitcount_n + (-1095) ) != 0; + return ( bitcount_n + ( -1095 ) ) != 0; } void bitcount_init() diff --git a/bench/kernel/bitcount/bitops.h b/bench/kernel/bitcount/bitops.h old mode 100644 new mode 100755 diff --git a/bench/kernel/bitonic/ChangeLog.txt b/bench/kernel/bitonic/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/bitonic/bitonic.c b/bench/kernel/bitonic/bitonic.c old mode 100644 new mode 100755 diff --git a/bench/kernel/bitonic/license.txt b/bench/kernel/bitonic/license.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/bsort/ChangeLog.txt b/bench/kernel/bsort/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/bsort/bsort.c b/bench/kernel/bsort/bsort.c old mode 100644 new mode 100755 index a01e17f3e7176077af1477d7019089e4a40b107f..8a8b640e0b6ac82826a54b992d39d40dbd66a139 --- a/bench/kernel/bsort/bsort.c +++ b/bench/kernel/bsort/bsort.c @@ -71,6 +71,7 @@ int bsort_return( void ) int Sorted = 1; int Index; + _Pragma( "loopbound min 99 max 99" ) for ( Index = 0; Index < bsort_SIZE - 1; Index ++ ) Sorted = Sorted && ( bsort_Array[ Index ] < bsort_Array[ Index + 1 ] ); @@ -92,7 +93,7 @@ int bsort_BubbleSort( int Array[] ) _Pragma( "loopbound min 99 max 99" ) for ( i = 0; i < bsort_SIZE - 1; i ++ ) { Sorted = 1; - _Pragma( "loopbound min 2 max 99" ) + _Pragma( "loopbound min 3 max 99" ) for ( Index = 0; Index < bsort_SIZE - 1; Index ++ ) { if ( Index > bsort_SIZE - i ) break; diff --git a/bench/kernel/complex_updates/ChangeLog.txt b/bench/kernel/complex_updates/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/complex_updates/complex_updates.c b/bench/kernel/complex_updates/complex_updates.c old mode 100644 new mode 100755 index 26a9f4f0b7fea1930f9823baabaea1a934f89c13..91e3ae6410bd88a37bb68922e1b485c9c7adc740 --- a/bench/kernel/complex_updates/complex_updates.c +++ b/bench/kernel/complex_updates/complex_updates.c @@ -47,8 +47,8 @@ int main( void ); Declaration of global variables */ -float complex_updates_A[2 * N], complex_updates_B[2 * N], - complex_updates_C[2 * N], complex_updates_D[2 * N]; +float complex_updates_A[ 2 * N ], complex_updates_B[ 2 * N ], + complex_updates_C[ 2 * N ], complex_updates_D[ 2 * N ]; /* @@ -60,16 +60,16 @@ void complex_updates_init( void ) int i; volatile float x = 0; - complex_updates_pin_down( &complex_updates_A[0], &complex_updates_B[0], - &complex_updates_C[0], &complex_updates_D[0] ); + complex_updates_pin_down( &complex_updates_A[ 0 ], &complex_updates_B[ 0 ], + &complex_updates_C[ 0 ], &complex_updates_D[ 0 ] ); /* avoid constant propagation */ _Pragma( "loopbound min 16 max 16" ) for ( i = 0 ; i < N ; i++ ) { - complex_updates_A[i] += x; - complex_updates_B[i] += x; - complex_updates_C[i] += x; - complex_updates_D[i] += x; + complex_updates_A[ i ] += x; + complex_updates_B[ i ] += x; + complex_updates_C[ i ] += x; + complex_updates_D[ i ] += x; } } @@ -97,8 +97,9 @@ int complex_updates_return( void ) float check_sum = 0; int i; + _Pragma( "loopbound min 16 max 16" ) for ( i = 0; i < N; i++ ) - check_sum += complex_updates_D[i]; + check_sum += complex_updates_D[ i ]; return ( check_sum != 144.0f ); } @@ -110,8 +111,8 @@ int complex_updates_return( void ) void _Pragma( "entrypoint" ) complex_updates_main( void ) { - register float *p_a = &complex_updates_A[0], *p_b = &complex_updates_B[0]; - register float *p_c = &complex_updates_C[0], *p_d = &complex_updates_D[0]; + register float *p_a = &complex_updates_A[ 0 ], *p_b = &complex_updates_B[ 0 ]; + register float *p_c = &complex_updates_C[ 0 ], *p_d = &complex_updates_D[ 0 ]; int i; _Pragma( "loopbound min 16 max 16" ) diff --git a/bench/kernel/cosf/ChangeLog.txt b/bench/kernel/cosf/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/cosf/cosf.c b/bench/kernel/cosf/cosf.c old mode 100644 new mode 100755 index a473e030abec4ae57aff174291ec8aaed012cf45..b83854644b71f76861946f29b73b63787f4fee76 --- a/bench/kernel/cosf/cosf.c +++ b/bench/kernel/cosf/cosf.c @@ -68,7 +68,7 @@ int cosf_return( void ) Main functions */ -void cosf_main( void ) +void _Pragma( "entrypoint" ) cosf_main( void ) { float i; _Pragma( "loopbound min 100 max 100" ) diff --git a/bench/kernel/cosf/math_private.h b/bench/kernel/cosf/math_private.h old mode 100644 new mode 100755 diff --git a/bench/kernel/cosf/wcclibm.c b/bench/kernel/cosf/wcclibm.c old mode 100644 new mode 100755 diff --git a/bench/kernel/cosf/wcclibm.h b/bench/kernel/cosf/wcclibm.h old mode 100644 new mode 100755 diff --git a/bench/kernel/countnegative/ChangeLog.txt b/bench/kernel/countnegative/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/countnegative/countnegative.c b/bench/kernel/countnegative/countnegative.c old mode 100644 new mode 100755 index cba12dcf07cda4579d04bb6941da9eefb40f11a8..5835cab95b5417f15a198262108efd87f34c886d --- a/bench/kernel/countnegative/countnegative.c +++ b/bench/kernel/countnegative/countnegative.c @@ -27,7 +27,7 @@ /* Type definition for the matrix */ -typedef int matrix [MAXSIZE][MAXSIZE]; +typedef int matrix [ MAXSIZE ][ MAXSIZE ]; /* Forward declaration of functions @@ -77,7 +77,7 @@ void countnegative_initialize( matrix Array ) for ( OuterIndex = 0; OuterIndex < MAXSIZE; OuterIndex++ ) _Pragma( "loopbound min 20 max 20" ) for ( InnerIndex = 0; InnerIndex < MAXSIZE; InnerIndex++ ) - Array[OuterIndex][InnerIndex] = countnegative_randomInteger(); + Array[ OuterIndex ][ InnerIndex ] = countnegative_randomInteger(); } void countnegative_init( void ) @@ -109,11 +109,11 @@ void countnegative_sum( matrix Array ) for ( Outer = 0; Outer < MAXSIZE; Outer++ ) _Pragma( "loopbound min 20 max 20" ) for ( Inner = 0; Inner < MAXSIZE; Inner++ ) - if ( Array[Outer][Inner] >= 0 ) { - Ptotal += Array[Outer][Inner]; + if ( Array[ Outer ][ Inner ] >= 0 ) { + Ptotal += Array[ Outer ][ Inner ]; Pcnt++; } else { - Ntotal += Array[Outer][Inner]; + Ntotal += Array[ Outer ][ Inner ]; Ncnt++; } diff --git a/bench/kernel/cubic/ChangeLog.txt b/bench/kernel/cubic/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/cubic/cubic.c b/bench/kernel/cubic/cubic.c old mode 100644 new mode 100755 index 3d031b778b4701cedcf3d42648d7fb81629a4061..f26639434df42f9ec684d7c607a8509fdb3dd0a9 --- a/bench/kernel/cubic/cubic.c +++ b/bench/kernel/cubic/cubic.c @@ -88,7 +88,7 @@ int cubic_return( void ) Main functions */ -void cubic_main( void ) +void _Pragma( "entrypoint" ) cubic_main( void ) { /* solve some cubic functions */ /* should get 3 solutions: 2, 6 & 2.5 */ diff --git a/bench/kernel/cubic/math_private.h b/bench/kernel/cubic/math_private.h old mode 100644 new mode 100755 diff --git a/bench/kernel/cubic/pi.h b/bench/kernel/cubic/pi.h old mode 100644 new mode 100755 diff --git a/bench/kernel/cubic/snipmath.h b/bench/kernel/cubic/snipmath.h old mode 100644 new mode 100755 diff --git a/bench/kernel/cubic/wcclibm.c b/bench/kernel/cubic/wcclibm.c old mode 100644 new mode 100755 diff --git a/bench/kernel/cubic/wcclibm.h b/bench/kernel/cubic/wcclibm.h old mode 100644 new mode 100755 diff --git a/bench/kernel/deg2rad/ChangeLog.txt b/bench/kernel/deg2rad/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/deg2rad/deg2rad.c b/bench/kernel/deg2rad/deg2rad.c old mode 100644 new mode 100755 index d85df4147839d94ebbbca619d6d858c860653273..5fc1817a7a7c9f522d2258d1001b42b217220a71 --- a/bench/kernel/deg2rad/deg2rad.c +++ b/bench/kernel/deg2rad/deg2rad.c @@ -73,7 +73,7 @@ int deg2rad_return( void ) Main functions */ -void deg2rad_main( void ) +void _Pragma( "entrypoint" ) deg2rad_main( void ) { /* convert some rads to degrees */ _Pragma( "loopbound min 361 max 361" ) diff --git a/bench/kernel/deg2rad/pi.h b/bench/kernel/deg2rad/pi.h old mode 100644 new mode 100755 diff --git a/bench/kernel/fac/ChangeLog.txt b/bench/kernel/fac/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/fac/fac.c b/bench/kernel/fac/fac.c old mode 100644 new mode 100755 index e569f31a1ce8384cc5683d353275d91683306d60..9a4518104c3ab81ea57e5c8a52cddcdc7de02ba4 --- a/bench/kernel/fac/fac.c +++ b/bench/kernel/fac/fac.c @@ -23,13 +23,13 @@ /* Forward declaration of functions */ - +int printf(const char * restrict format, ... ); int fac_fac( int n ); void fac_init(); int fac_return(); void fac_main(); int main( void ); - +int counter1 = 0; /* Declaration of global variables */ @@ -64,6 +64,7 @@ int fac_return() int fac_fac ( int n ) { + counter1++; if ( n == 0 ) return 1; else @@ -86,6 +87,7 @@ void _Pragma( "entrypoint" ) fac_main () fac_s += fac_fac ( i ); _Pragma( "flowrestriction 1*fac_fac <= 6*recursivecall" ) } + printf("%d\n", counter1); } diff --git a/bench/kernel/fft/ChangeLog.txt b/bench/kernel/fft/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/fft/fft.c b/bench/kernel/fft/fft.c old mode 100644 new mode 100755 index ab21cb22b4d99847a449ee2e3b074972c341a44c..55efc6a5d3a98e1fcca5171434c4d700412d8695 --- a/bench/kernel/fft/fft.c +++ b/bench/kernel/fft/fft.c @@ -80,28 +80,28 @@ float fft_exp2f( float x ); float fft_modff( float x, float *intpart ); int fft_convert( float value ); void fft_bit_reduct( register int *int_pointer ); -void fft_pin_down( int input_data[] ); +void fft_pin_down( int input_data[ ] ); void fft_init( void ); void fft_main( void ); -int fft_return(void); -int main(void); +int fft_return( void ); +int main( void ); /* Forward declaration of global variables */ -int fft_input_data[2 * N_FFT]; +int fft_input_data[ 2 * N_FFT ]; /* precalculated twiddle factors for an integer 1024 point FFT - in format 1.13 => table twidtable[2*(N_FFT-1)] ; */ -extern int fft_twidtable[2046]; + in format 1.13 => table twidtable[ 2*(N_FFT-1) ] ; */ +extern int fft_twidtable[ 2046 ]; /* 1024 real values as input data in float format */ -extern float fft_input[1024]; +extern float fft_input[ 1024 ]; /* will hold the transformed data */ -int fft_inputfract[N_FFT]; +int fft_inputfract[ N_FFT ]; /* @@ -137,7 +137,7 @@ void fft_bit_reduct( register int *int_pointer ) } { - register int *data_pointer = &fft_twidtable[0] ; + register int *data_pointer = &fft_twidtable[ 0 ] ; register int *p, *q ; register int tmpi, fr = 0, level, k, l ; @@ -145,7 +145,7 @@ void fft_bit_reduct( register int *int_pointer ) while ( n > max ) { level = max << 1; - _Pragma( "loopbound min 1 max 512" ) + _Pragma( "loopbound min 1 max 512" ) for ( m = 1; m < max; m += 2 ) { l = *( data_pointer + fr ); k = *( data_pointer + fr + 1 ) ; @@ -207,7 +207,7 @@ float fft_exp2f( float x ) _Pragma( "loopbound min 13 max 13" ) for ( i = 1; i < x; ++i ) ret *= 2.0f; - + return ret; } @@ -248,29 +248,29 @@ int fft_convert( float value ) } -void fft_float2fract(void) +void fft_float2fract( void ) { float f ; int j, i ; _Pragma( "loopbound min 1024 max 1024" ) for ( j = 0 ; j < N_FFT ; j++ ) { - f = fft_input[j]; + f = fft_input[ j ]; i = fft_convert( f ); - fft_inputfract[j] = i; + fft_inputfract[ j ] = i; } } -void fft_pin_down( int input_data[] ) +void fft_pin_down( int input_data[ ] ) { /* conversion from input to a 1.13 format */ fft_float2fract() ; int *pd, *ps, f; - pd = &input_data[0]; - ps = &fft_inputfract[0]; + pd = &input_data[ 0 ]; + ps = &fft_inputfract[ 0 ]; _Pragma( "loopbound min 1024 max 1024" ) for ( f = 0; f < N_FFT; f++ ) { @@ -285,28 +285,29 @@ void fft_init( void ) int i; volatile int x = 0; - fft_pin_down( &fft_input_data[0] ); + fft_pin_down( &fft_input_data[ 0 ] ); /* avoid constant propagation of input values */ - for ( i = 0; i < 2*(N_FFT-1); i++) { - fft_input_data[i] += x; - fft_twidtable[i] += x; - } - for ( ; i < 2*N_FFT; i++) { - fft_input_data[i] += x; + _Pragma( "loopbound min 2046 max 2046" ) + for ( i = 0; i < 2 * ( N_FFT - 1 ); i++ ) { + fft_input_data[ i ] += x; + fft_twidtable[ i ] += x; } - + _Pragma( "loopbound min 2 max 2" ) + for ( ; i < 2 * N_FFT; i++ ) + fft_input_data[ i ] += x; + } -int fft_return(void) +int fft_return( void ) { int check_sum = 0; int i = 0; - for(i = 0; i < 2*N_FFT; ++i){ - check_sum += fft_input_data[i]; - } + _Pragma( "loopbound min 2048 max 2048" ) + for ( i = 0; i < 2 * N_FFT; ++i ) + check_sum += fft_input_data[ i ]; return check_sum != 3968; } @@ -318,14 +319,14 @@ int fft_return(void) void _Pragma( "entrypoint" ) fft_main( void ) { - fft_bit_reduct( &fft_input_data[0] ); + fft_bit_reduct( &fft_input_data[ 0 ] ); } int main( void ) { fft_init(); - + fft_main(); return fft_return(); diff --git a/bench/kernel/fft/fft_input.c b/bench/kernel/fft/fft_input.c old mode 100644 new mode 100755 index 3c1cfabc730c521138df6b83af21e40baca581f1..c3a34910c8d07c3faebbe727421b218ab817750b --- a/bench/kernel/fft/fft_input.c +++ b/bench/kernel/fft/fft_input.c @@ -1,5 +1,5 @@ -int fft_twidtable[2046] = { +int fft_twidtable[ 2046 ] = { 8192, 0, 8192, 0, 0, -8192, 8192, 0, 5792, -5792, 0, -8191, -5792, -5792, 8192, 0, 7568, -3134, 5792, -5792, 3134, -7568, 0, -8192, -3134, -7568, -5792, -5792, -7568, -3134, 8192, 0, 8034, @@ -190,7 +190,7 @@ int fft_twidtable[2046] = { /* 1024 real values as input data in float format */ -float fft_input[1024] = { +float fft_input[ 1024 ] = { 0.243f, 0.323f, 0.505f, -0.176f, -0.87f, 0.353f, -0.344f, -0.443f, -0.434f, -0.32f, 0.232f, -0.454f, -0.32f, -0.323f, -0.733f, 0.54f, 0.243f, 0.323f, 0.505f, -0.176f, -0.87f, 0.353f, -0.344f, -0.443f, diff --git a/bench/kernel/filterbank/ChangeLog.txt b/bench/kernel/filterbank/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/filterbank/filterbank.c b/bench/kernel/filterbank/filterbank.c old mode 100644 new mode 100755 diff --git a/bench/kernel/filterbank/license.txt b/bench/kernel/filterbank/license.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/fir2dim/changeLog.txt b/bench/kernel/fir2dim/changeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/fir2dim/fir2dim.c b/bench/kernel/fir2dim/fir2dim.c old mode 100644 new mode 100755 index e262c1e46f133e69c1c3211883599afac8a7f653..054c14452747aa01fb27f29b994f33448077b4ec --- a/bench/kernel/fir2dim/fir2dim.c +++ b/bench/kernel/fir2dim/fir2dim.c @@ -38,15 +38,15 @@ int main( void ); /* Declaration of global variables */ -static float fir2dim_coefficients[3 * 3] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; -static float fir2dim_image[4 * 4] = { +static float fir2dim_coefficients[ 3 * 3 ] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; +static float fir2dim_image[ 4 * 4 ] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -static float fir2dim_array[6 * 6] = { +static float fir2dim_array[ 6 * 6 ] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -static float fir2dim_output[4 * 4] = { +static float fir2dim_output[ 4 * 4 ] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int fir2dim_result; @@ -65,22 +65,22 @@ void fir2dim_init() /* Apply volatile XOR-bitmask to entire input array. */ - p = ( unsigned char * ) &fir2dim_coefficients[ 0 ]; + p = ( unsigned char * ) &fir2dim_coefficients[ 0 ]; _Pragma( "loopbound min 36 max 36" ) for ( i = 0; i < sizeof( fir2dim_coefficients ); ++i, ++p ) *p ^= bitmask; - p = ( unsigned char * ) &fir2dim_image[ 0 ]; + p = ( unsigned char * ) &fir2dim_image[ 0 ]; _Pragma( "loopbound min 64 max 64" ) for ( i = 0; i < sizeof( fir2dim_image ); ++i, ++p ) *p ^= bitmask; - p = ( unsigned char * ) &fir2dim_array[ 0 ]; + p = ( unsigned char * ) &fir2dim_array[ 0 ]; _Pragma( "loopbound min 144 max 144" ) for ( i = 0; i < sizeof( fir2dim_array ); ++i, ++p ) *p ^= bitmask; - p = ( unsigned char * ) &fir2dim_output[ 0 ]; + p = ( unsigned char * ) &fir2dim_output[ 0 ]; _Pragma( "loopbound min 64 max 64" ) for ( i = 0; i < sizeof( fir2dim_output ); ++i, ++p ) *p ^= bitmask; @@ -97,7 +97,8 @@ int fir2dim_return() Helper functions */ -void fir2dim_pin_down( float *pimage, float *parray, float *pcoeff, float *poutput ) +void fir2dim_pin_down( float *pimage, float *parray, float *pcoeff, + float *poutput ) { register float i, f; @@ -143,23 +144,23 @@ void fir2dim_pin_down( float *pimage, float *parray, float *pcoeff, float *poutp void _Pragma( "entrypoint" ) fir2dim_main() { - register float *parray = &fir2dim_array[0], *parray2, *parray3 ; - register float *pcoeff = &fir2dim_coefficients[0] ; - register float *poutput = &fir2dim_output[0] ; + register float *parray = &fir2dim_array[ 0 ], *parray2, *parray3 ; + register float *pcoeff = &fir2dim_coefficients[ 0 ] ; + register float *poutput = &fir2dim_output[ 0 ] ; int k, f, i; - fir2dim_pin_down( &fir2dim_image[0], &fir2dim_array[0], - &fir2dim_coefficients[0], &fir2dim_output[0] ); + fir2dim_pin_down( &fir2dim_image[ 0 ], &fir2dim_array[ 0 ], + &fir2dim_coefficients[ 0 ], &fir2dim_output[ 0 ] ); - poutput = &fir2dim_output[0] ; + poutput = &fir2dim_output[ 0 ] ; _Pragma( "loopbound min 4 max 4" ) for ( k = 0 ; k < 4 ; k++ ) { _Pragma( "loopbound min 4 max 4" ) for ( f = 0 ; f < 4 ; f++ ) { - pcoeff = &fir2dim_coefficients[0] ; - parray = &fir2dim_array[k * 6 + f] ; + pcoeff = &fir2dim_coefficients[ 0 ] ; + parray = &fir2dim_array[ k * 6 + f ] ; parray2 = parray + 6 ; parray3 = parray + 6 + 6 ; @@ -181,10 +182,10 @@ void _Pragma( "entrypoint" ) fir2dim_main() } } - fir2dim_result = fir2dim_output[0] + fir2dim_output[5] + fir2dim_array[9]; + fir2dim_result = fir2dim_output[ 0 ] + fir2dim_output[ 5 ] + fir2dim_array[ 9 ]; - fir2dim_pin_down( &fir2dim_image[0], &fir2dim_array[0], - &fir2dim_coefficients[0], &fir2dim_output[0] ); + fir2dim_pin_down( &fir2dim_image[ 0 ], &fir2dim_array[ 0 ], + &fir2dim_coefficients[ 0 ], &fir2dim_output[ 0 ] ); } diff --git a/bench/kernel/iir/ChangeLog.txt b/bench/kernel/iir/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/iir/iir.c b/bench/kernel/iir/iir.c old mode 100644 new mode 100755 index 95cc4a347399fef99b0c902f6b5a371b03f96c2b..2f085bdbfe8a7d66f4cbd005405edc2c46bbd419 --- a/bench/kernel/iir/iir.c +++ b/bench/kernel/iir/iir.c @@ -92,12 +92,12 @@ void iir_init( void ) /* Apply volatile XOR-bitmask to entire input array. */ - p = (unsigned char *) &iir_coefficients[ 0 ]; + p = ( unsigned char * ) &iir_coefficients[ 0 ]; _Pragma( "loopbound min 80 max 80" ) for ( i = 0; i < sizeof( iir_coefficients ); ++i, ++p ) *p ^= bitmask; - p = (unsigned char *) &iir_wi[ 0 ]; + p = ( unsigned char * ) &iir_wi[ 0 ]; _Pragma( "loopbound min 32 max 32" ) for ( i = 0; i < sizeof( iir_wi ); ++i, ++p ) *p ^= bitmask; @@ -114,7 +114,7 @@ int iir_return( void ) for ( f = 0 ; f < 2 * 4; f++ ) checksum += iir_wi[ f ]; - return( (int) checksum ); + return ( ( int ) checksum ); } @@ -159,5 +159,5 @@ int main( void ) iir_init(); iir_main(); - return( iir_return() - 400 != 0 ); + return ( iir_return() - 400 != 0 ); } diff --git a/bench/kernel/insertsort/ChangeLog.txt b/bench/kernel/insertsort/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/insertsort/insertsort.c b/bench/kernel/insertsort/insertsort.c old mode 100644 new mode 100755 index 588b2c616956d14cc7346cbb18d112c1fe70bc5d..60be2c883a5df66e6832c04aeaced19c751d6b4a --- a/bench/kernel/insertsort/insertsort.c +++ b/bench/kernel/insertsort/insertsort.c @@ -8,7 +8,7 @@ Author: Sung-Soo Lim Function: Insertion sort for 10 integer numbers. - The integer array insertsort_a[] is initialized in main function. + The integer array insertsort_a[ ] is initialized in main function. Input-data dependent nested loop with worst-case of (n^2)/2 iterations (triangular loop). @@ -31,16 +31,16 @@ /* Forward declaration of functions */ -void insertsort_initialize(unsigned int* array); -void insertsort_init(void); -int insertsort_return(void); -void insertsort_main(void); +void insertsort_initialize( unsigned int *array ); +void insertsort_init( void ); +int insertsort_return( void ); +void insertsort_main( void ); int main( void ); /* Declaration of global variables */ -unsigned int insertsort_a[11]; +unsigned int insertsort_a[ 11 ]; int insertsort_iters_i, insertsort_min_i, insertsort_max_i; int insertsort_iters_a, insertsort_min_a, insertsort_max_a; @@ -48,39 +48,40 @@ int insertsort_iters_a, insertsort_min_a, insertsort_max_a; Initialization- and return-value-related functions */ -void insertsort_initialize(unsigned int* array) +void insertsort_initialize( unsigned int *array ) { - register volatile int i; - _Pragma( "loopbound min 10 max 10" ) - for ( i = 0; i < 10; i++ ) - insertsort_a[i] = array[i]; + register volatile int i; + _Pragma( "loopbound min 10 max 10" ) + for ( i = 0; i < 10; i++ ) + insertsort_a[ i ] = array[ i ]; } void insertsort_init() { - unsigned int a[11] = {0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2}; + unsigned int a[ 11 ] = {0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2}; - insertsort_iters_i = 0; - insertsort_min_i = 100000; - insertsort_max_i = 0; - insertsort_iters_a = 0; - insertsort_min_a = 100000; - insertsort_max_a = 0; + insertsort_iters_i = 0; + insertsort_min_i = 100000; + insertsort_max_i = 0; + insertsort_iters_a = 0; + insertsort_min_a = 100000; + insertsort_max_a = 0; - insertsort_initialize(a); + insertsort_initialize( a ); } int insertsort_return() { - int i, returnValue=0; + int i, returnValue = 0; - for ( i = 0; i < 10; i++ ) - returnValue += insertsort_a[i]; + _Pragma( "loopbound min 10 max 10" ) + for ( i = 0; i < 10; i++ ) + returnValue += insertsort_a[ i ]; - return (returnValue + (-52) ) != 0; + return ( returnValue + ( -52 ) ) != 0; } @@ -91,49 +92,48 @@ int insertsort_return() void _Pragma( "entrypoint" ) insertsort_main() { - int i,j, temp; - i = 2; + int i, j, temp; + i = 2; - insertsort_iters_i = 0; + insertsort_iters_i = 0; - _Pragma("loopbound min 9 max 9") - while(i <= 10) { + _Pragma( "loopbound min 9 max 9" ) + while ( i <= 10 ) { - insertsort_iters_i++; + insertsort_iters_i++; - j = i; + j = i; - insertsort_iters_a = 0; + insertsort_iters_a = 0; - _Pragma("loopbound min 1 max 9") - while (insertsort_a[j] < insertsort_a[j-1]) - { - insertsort_iters_a++; + _Pragma( "loopbound min 1 max 9" ) + while ( insertsort_a[ j ] < insertsort_a[ j - 1 ] ) { + insertsort_iters_a++; - temp = insertsort_a[j]; - insertsort_a[j] = insertsort_a[j-1]; - insertsort_a[j-1] = temp; - j--; - } + temp = insertsort_a[ j ]; + insertsort_a[ j ] = insertsort_a[ j - 1 ]; + insertsort_a[ j - 1 ] = temp; + j--; + } - if ( insertsort_iters_a < insertsort_min_a ) - insertsort_min_a = insertsort_iters_a; - if ( insertsort_iters_a > insertsort_max_a ) - insertsort_max_a = insertsort_iters_a; + if ( insertsort_iters_a < insertsort_min_a ) + insertsort_min_a = insertsort_iters_a; + if ( insertsort_iters_a > insertsort_max_a ) + insertsort_max_a = insertsort_iters_a; - i++; - } + i++; + } - if ( insertsort_iters_i < insertsort_min_i ) - insertsort_min_i = insertsort_iters_i; - if ( insertsort_iters_i > insertsort_max_i ) - insertsort_max_i = insertsort_iters_i; + if ( insertsort_iters_i < insertsort_min_i ) + insertsort_min_i = insertsort_iters_i; + if ( insertsort_iters_i > insertsort_max_i ) + insertsort_max_i = insertsort_iters_i; } int main( void ) { - insertsort_init(); - insertsort_main(); - return (insertsort_return()); + insertsort_init(); + insertsort_main(); + return ( insertsort_return() ); } diff --git a/bench/kernel/isqrt/ChangeLog.txt b/bench/kernel/isqrt/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/isqrt/basicmath_libc.c b/bench/kernel/isqrt/basicmath_libc.c old mode 100644 new mode 100755 diff --git a/bench/kernel/isqrt/basicmath_libc.h b/bench/kernel/isqrt/basicmath_libc.h old mode 100644 new mode 100755 diff --git a/bench/kernel/isqrt/isqrt.c b/bench/kernel/isqrt/isqrt.c old mode 100644 new mode 100755 index bff62ae580b0e3392993405ef4610861c0e1a090..82b7a72cebcd3e9db4bf463bafb15cdcefa26261 --- a/bench/kernel/isqrt/isqrt.c +++ b/bench/kernel/isqrt/isqrt.c @@ -133,7 +133,7 @@ void isqrt_usqrt( unsigned long x, struct int_sqrt *q ) } -void isqrt_main( void ) +void _Pragma( "entrypoint" ) isqrt_main( void ) { /* perform some integer square roots */ _Pragma( "loopbound min 1000 max 1000" ) diff --git a/bench/kernel/isqrt/math_private.h b/bench/kernel/isqrt/math_private.h old mode 100644 new mode 100755 diff --git a/bench/kernel/isqrt/pi.h b/bench/kernel/isqrt/pi.h old mode 100644 new mode 100755 diff --git a/bench/kernel/isqrt/snipmath.h b/bench/kernel/isqrt/snipmath.h old mode 100644 new mode 100755 diff --git a/bench/kernel/isqrt/wcclibm.c b/bench/kernel/isqrt/wcclibm.c old mode 100644 new mode 100755 diff --git a/bench/kernel/isqrt/wcclibm.h b/bench/kernel/isqrt/wcclibm.h old mode 100644 new mode 100755 diff --git a/bench/kernel/jfdctint/ChangeLog.txt b/bench/kernel/jfdctint/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/jfdctint/README b/bench/kernel/jfdctint/README old mode 100644 new mode 100755 diff --git a/bench/kernel/jfdctint/jfdctint.c b/bench/kernel/jfdctint/jfdctint.c old mode 100644 new mode 100755 index c638c995bae92bcdcd1cefadd558245643ce9ace..0e2f4fb7ea0f0b60ccb3e90dfd03e956d93334e8 --- a/bench/kernel/jfdctint/jfdctint.c +++ b/bench/kernel/jfdctint/jfdctint.c @@ -162,6 +162,7 @@ int jfdctint_return() { int checksum = 0; int i; + _Pragma( "loopbound min 64 max 64" ) for ( i = 0; i < 64; ++i ) checksum += jfdctint_data[ i ]; return ( ( checksum == jfdctint_CHECKSUM ) ? 0 : -1 ); @@ -177,7 +178,7 @@ void jfdctint_jpeg_fdct_islow( void ) int tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; int tmp10, tmp11, tmp12, tmp13; int z1, z2, z3, z4, z5; - int * dataptr; + int *dataptr; int ctr; /* Pass 1: process rows. */ @@ -207,9 +208,9 @@ void jfdctint_jpeg_fdct_islow( void ) z1 = ( tmp12 + tmp13 ) * FIX_0_541196100; dataptr[ 2 ] = ( int ) DESCALE( z1 + tmp13 * FIX_0_765366865, - CONST_BITS - PASS1_BITS ); + CONST_BITS - PASS1_BITS ); dataptr[ 6 ] = ( int ) DESCALE( z1 + tmp12 * ( - FIX_1_847759065 ), - CONST_BITS - PASS1_BITS ); + CONST_BITS - PASS1_BITS ); z1 = tmp4 + tmp7; z2 = tmp5 + tmp6; @@ -259,16 +260,16 @@ void jfdctint_jpeg_fdct_islow( void ) z1 = ( tmp12 + tmp13 ) * FIX_0_541196100; dataptr[ DCTSIZE * 2 ] = ( int ) DESCALE( z1 + tmp13 * FIX_0_765366865, - CONST_BITS + PASS1_BITS ); + CONST_BITS + PASS1_BITS ); dataptr[ DCTSIZE * 6 ] = ( int ) DESCALE( z1 - + tmp12 * ( - FIX_1_847759065 ), - CONST_BITS + PASS1_BITS ); + + tmp12 * ( - FIX_1_847759065 ), + CONST_BITS + PASS1_BITS ); z1 = tmp4 + tmp7; z2 = tmp5 + tmp6; z3 = tmp4 + tmp6; z4 = tmp5 + tmp7; - z5 = ( z3 + z4) * FIX_1_175875602; /* sqrt(2) * c3 */ + z5 = ( z3 + z4 ) * FIX_1_175875602; /* sqrt(2) * c3 */ tmp4 = tmp4 * FIX_0_298631336; /* sqrt(2) * (-c1+c3+c5-c7) */ tmp5 = tmp5 * FIX_2_053119869; /* sqrt(2) * ( c1+c3-c5+c7) */ diff --git a/bench/kernel/lms/ChangeLog.txt b/bench/kernel/lms/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/lms/lms.c b/bench/kernel/lms/lms.c old mode 100644 new mode 100755 index 5e45919b02bc8e0b3dc52bc8e6f49aa066decc19..792c8fc67fd3824a44e450b4e789adf18b711606 --- a/bench/kernel/lms/lms.c +++ b/bench/kernel/lms/lms.c @@ -24,19 +24,19 @@ */ /* -Copyright (c) 2016 Jörg Mische - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + Copyright (c) 2016 Jörg Mische + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ @@ -45,14 +45,14 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #define SAMPLING 5 -float lms_input[N + 1], lms_output[N + 1]; +float lms_input[ N + 1 ], lms_output[ N + 1 ]; /* The following table can be calculated by for (i=0; i<=SAMPLING; i++) - lms_sintab[k] = sqrt(2.0) * sin(PI * i / (2*SAMPLING)); + lms_sintab[ k ] = sqrt(2.0) * sin(PI * i / (2*SAMPLING)); */ -double lms_sintab[SAMPLING + 1] = { +double lms_sintab[ SAMPLING + 1 ] = { 0.00000000000000000, 0.43701603620715901, 0.83125389555938600, @@ -66,9 +66,9 @@ double lms_sinus( int i ) { int s = i % ( 4 * SAMPLING ); if ( s >= ( 2 * SAMPLING ) ) - return -lms_sintab[( s > 3 * SAMPLING ) ? - ( 4 * SAMPLING - s ) : ( s - 2 * SAMPLING )]; - return lms_sintab[( s > SAMPLING ) ? ( 2 * SAMPLING - s ) : s]; + return -lms_sintab[ ( s > 3 * SAMPLING ) ? + ( 4 * SAMPLING - s ) : ( s - 2 * SAMPLING ) ]; + return lms_sintab[ ( s > SAMPLING ) ? ( 2 * SAMPLING - s ) : s ]; } @@ -77,7 +77,7 @@ void lms_init( void ) unsigned long seed = 1; int k; - lms_input[0] = 0.0; + lms_input[ 0 ] = 0.0; _Pragma( "loopbound min 101 max 101" ) for ( k = 0 ; k < N ; k += 2 ) { double v1, v2, r; @@ -89,12 +89,13 @@ void lms_init( void ) seed = seed * 1103515245 + 12345; v2 = ( seed & 0x00007fffffff ) * scaleFactor - 1.0; r = v1 * v1 + v2 * v2; - } while ( r > 1.0 ); // radius < 1 + } while ( r > 1.0 ); + // radius < 1 // remap v1 and v2 to two Gaussian numbers double noise = 1 / r; // approximation of sqrt(0.96) * sqrt(-log(r)/r); - lms_input[k + 1] = lms_sinus( k ) + noise * v2; - lms_input[k + 2] = lms_sinus( k + 1 ) + noise * v1; + lms_input[ k + 1 ] = lms_sinus( k ) + noise * v2; + lms_input[ k + 2 ] = lms_sinus( k + 1 ) + noise * v1; } } @@ -102,11 +103,11 @@ void lms_init( void ) float lms_calc( float x, float d, - float b[], + float b[ ], int l, float mu, float alpha, - float history[], + float history[ ], float *sigma ) { int i; @@ -114,8 +115,8 @@ float lms_calc( float x, // shift history _Pragma( "loopbound min 20 max 20" ) for ( i = l ; i >= 1 ; i-- ) - history[i] = history[i - 1]; - history[0] = x; + history[ i ] = history[ i - 1 ]; + history[ 0 ] = x; // calculate filter float y = 0.0; @@ -123,14 +124,14 @@ float lms_calc( float x, _Pragma( "loopbound min 21 max 21" ) for ( i = 0 ; i <= l ; i++ ) - y += b[i] * history[i]; + y += b[ i ] * history[ i ]; // update coefficients float e = mu * ( d - y ) / ( *sigma ); _Pragma( "loopbound min 21 max 21" ) for ( i = 0 ; i <= l ; i++ ) - b[i] += e * history[i]; + b[ i ] += e * history[ i ]; return y; } @@ -139,20 +140,20 @@ float lms_calc( float x, void _Pragma( "entrypoint" ) lms_main( void ) { int i; - float b[L + 1]; - float history[L + 1]; + float b[ L + 1 ]; + float history[ L + 1 ]; float sigma = 2.0; _Pragma( "loopbound min 21 max 21" ) for ( i = 0; i <= L; i++ ) { - b[i] = 0.0; - history[i] = 0.0; + b[ i ] = 0.0; + history[ i ] = 0.0; } _Pragma( "loopbound min 201 max 201" ) for ( i = 0 ; i < N ; i++ ) { - lms_output[i] = lms_calc( lms_input[i], - lms_input[i + 1], + lms_output[ i ] = lms_calc( lms_input[ i ], + lms_input[ i + 1 ], b, L, 0.02 / ( L + 1 ), 0.01, history, &sigma ); } @@ -166,7 +167,7 @@ int lms_return( void ) _Pragma( "loopbound min 201 max 201" ) for ( i = 0 ; i < N ; i++ ) - sum += lms_output[i]; + sum += lms_output[ i ]; return ( int )( 1000000.0 * ( sum + 4.5052425 ) ); // correct value: -4.505242517625447362661361694336 } diff --git a/bench/kernel/ludcmp/ChangeLog.txt b/bench/kernel/ludcmp/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/ludcmp/ludcmp.c b/bench/kernel/ludcmp/ludcmp.c old mode 100644 new mode 100755 index c0c65a856700a97ba91ec227ae9e824ecb87c432..6c9127b6dcab76fdfa4ee799ef59eb03c768aa15 --- a/bench/kernel/ludcmp/ludcmp.c +++ b/bench/kernel/ludcmp/ludcmp.c @@ -37,7 +37,7 @@ int ludcmp_test( int n, double eps ); void ludcmp_main( void ); int main( void ); -double ludcmp_a[50][50], ludcmp_b[50], ludcmp_x[50]; +double ludcmp_a[ 50 ][ 50 ], ludcmp_b[ 50 ], ludcmp_x[ 50 ]; int ludcmp_chkerr; void ludcmp_init( void ) @@ -51,21 +51,19 @@ void ludcmp_init( void ) w = 0; _Pragma( "loopbound min 6 max 6" ) for ( j = 0; j <= n; j++ ) { - ludcmp_a[i][j] = ( i + 1 ) + ( j + 1 ); + ludcmp_a[ i ][ j ] = ( i + 1 ) + ( j + 1 ); if ( i == j ) - ludcmp_a[i][j] *= 10; - w += ludcmp_a[i][j]; + ludcmp_a[ i ][ j ] *= 10; + w += ludcmp_a[ i ][ j ]; - if ( x ) { - ludcmp_a[i][j] += x; - } + if ( x ) + ludcmp_a[ i ][ j ] += x; } - ludcmp_b[i] = w; - if ( x ) { - ludcmp_b[i] += x; - } + ludcmp_b[ i ] = w; + if ( x ) + ludcmp_b[ i ] += x; } } @@ -76,7 +74,7 @@ int ludcmp_return( void ) _Pragma( "loopbound min 6 max 6" ) for ( i = 0; i <= n; i++ ) - checksum += ludcmp_x[i]; + checksum += ludcmp_x[ i ]; /* allow rounding errors for the checksum */ checksum -= 6.0; @@ -98,7 +96,7 @@ double ludcmp_fabs( double n ) int ludcmp_test( int n, double eps ) { int i, j, k; - double w, y[100]; + double w, y[ 100 ]; if ( n > 99 || eps <= 0 ) @@ -106,58 +104,58 @@ int ludcmp_test( int n, double eps ) _Pragma( "loopbound min 5 max 5" ) for ( i = 0; i < n; i++ ) { - if ( ludcmp_fabs( ludcmp_a[i][i] ) <= eps ) + if ( ludcmp_fabs( ludcmp_a[ i ][ i ] ) <= eps ) return ( 1 ); _Pragma( "loopbound min 1 max 5" ) for ( j = i + 1; j <= n; j++ ) { - w = ludcmp_a[j][i]; + w = ludcmp_a[ j ][ i ]; if ( i != 0 ) { _Pragma( "loopbound min 1 max 4" ) for ( k = 0; k < i; k++ ) - w -= ludcmp_a[j][k] * ludcmp_a[k][i]; + w -= ludcmp_a[ j ][ k ] * ludcmp_a[ k ][ i ]; } - ludcmp_a[j][i] = w / ludcmp_a[i][i]; + ludcmp_a[ j ][ i ] = w / ludcmp_a[ i ][ i ]; } _Pragma( "loopbound min 1 max 5" ) for ( j = i + 1; j <= n; j++ ) { - w = ludcmp_a[i + 1][j]; + w = ludcmp_a[ i + 1 ][ j ]; _Pragma( "loopbound min 1 max 5" ) for ( k = 0; k <= i; k++ ) - w -= ludcmp_a[i + 1][k] * ludcmp_a[k][j]; + w -= ludcmp_a[ i + 1 ][ k ] * ludcmp_a[ k ][ j ]; - ludcmp_a[i + 1][j] = w; + ludcmp_a[ i + 1 ][ j ] = w; } } - y[0] = ludcmp_b[0]; + y[ 0 ] = ludcmp_b[ 0 ]; _Pragma( "loopbound min 5 max 5" ) for ( i = 1; i <= n; i++ ) { - w = ludcmp_b[i]; + w = ludcmp_b[ i ]; _Pragma( "loopbound min 1 max 5" ) for ( j = 0; j < i; j++ ) - w -= ludcmp_a[i][j] * y[j]; + w -= ludcmp_a[ i ][ j ] * y[ j ]; - y[i] = w; + y[ i ] = w; } - ludcmp_x[n] = y[n] / ludcmp_a[n][n]; + ludcmp_x[ n ] = y[ n ] / ludcmp_a[ n ][ n ]; _Pragma( "loopbound min 5 max 5" ) for ( i = n - 1; i >= 0; i-- ) { - w = y[i]; + w = y[ i ]; _Pragma( "loopbound min 1 max 5" ) for ( j = i + 1; j <= n; j++ ) - w -= ludcmp_a[i][j] * ludcmp_x[j]; + w -= ludcmp_a[ i ][ j ] * ludcmp_x[ j ]; - ludcmp_x[i] = w / ludcmp_a[i][i]; + ludcmp_x[ i ] = w / ludcmp_a[ i ][ i ]; } return ( 0 ); diff --git a/bench/kernel/matrix1/ChangeLog.txt b/bench/kernel/matrix1/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/matrix1/matrix1.c b/bench/kernel/matrix1/matrix1.c old mode 100644 new mode 100755 index 81d1086ad8ff0d7b407c4b71347dfd5ecb1b151b..2b235041cf089f3b5b5448f8fb74b2f6cf8d1abf --- a/bench/kernel/matrix1/matrix1.c +++ b/bench/kernel/matrix1/matrix1.c @@ -14,37 +14,37 @@ The only restriction os that the inner dimension of the arrays must be greater than 1. - A[X x Y] * B[Y x Z] = C[X x Z] + A[ X x Y ] * B[ Y x Z ] = C[ X x Z ] |a11 a12 .. a1y| |a21 a22 .. a2y| - matrix A[X x Y]= |.. .. .. .. | + matrix A[ X x Y ]= |.. .. .. .. | |a(x-1)1 a(x-1)2 .. a(x-1)y| |ax1 ax2 .. axy| |b11 b12 .. b1z| |b21 b22 .. b2z| - matrix B[Y x Z]= |.. .. .. .. | + matrix B[ Y x Z ]= |.. .. .. .. | |b(y-1)1 b(y-1)2 .. b(y-1)z| |by1 by2 .. byz| |c11 c12 .. c1z| |c21 c22 .. c2z| - matrix C[X x Z]= |.. .. .. .. | + matrix C[ X x Z ]= |.. .. .. .. | |c(x-1)1 c(x-1)2 .. c(x-1)z| |cx1 cx2 .. cxz| matrix elements are stored as - A[X x Y] = { a11, a12, .. , a1y, + A[ X x Y ] = { a11, a12, .. , a1y, a21, a22, .. , a2y, ..., ax1, ax2, .. , axy} - B[Y x Z] = { b11, b21, .., b(y-1)1, by1, b12, b22, .. , b(y-1)z, byz } + B[ Y x Z ] = { b11, b21, .., b(y-1)1, by1, b12, b22, .. , b(y-1)z, byz } - C[X x Z] = { c11, c21, .. , c(x-1)1, cx1, c12, c22, .. ,c(x-1)z, cxz } + C[ X x Z ] = { c11, c21, .. , c(x-1)1, cx1, c12, c22, .. ,c(x-1)z, cxz } Source: DSP-Stone http://www.ice.rwth-aachen.de/research/tools-projects/entry/detail/dspstone @@ -69,7 +69,7 @@ Forward declaration of functions */ -void matrix1_pin_down( int A[], int B[], int C[] ); +void matrix1_pin_down( int A[ ], int B[ ], int C[ ] ); void matrix1_init( void ); void matrix1_main( void ); int main( void ); @@ -79,37 +79,37 @@ int main( void ); Declaration of global variables */ -int matrix1_A[X * Y]; -int matrix1_B[Y * Z]; -int matrix1_C[X * Z]; +int matrix1_A[ X * Y ]; +int matrix1_B[ Y * Z ]; +int matrix1_C[ X * Z ]; /* Initialization functions */ -void matrix1_pin_down( int A[], int B[], int C[] ) +void matrix1_pin_down( int A[ ], int B[ ], int C[ ] ) { int i; volatile int x = 1; _Pragma( "loopbound min 100 max 100" ) for ( i = 0 ; i < X * Y; i++ ) - A[i] = x ; + A[ i ] = x ; _Pragma( "loopbound min 100 max 100" ) for ( i = 0 ; i < Y * Z ; i++ ) - B[i] = x ; + B[ i ] = x ; _Pragma( "loopbound min 100 max 100" ) for ( i = 0 ; i < X * Z ; i++ ) - C[i] = 0 ; + C[ i ] = 0 ; } void matrix1_init( void ) { - matrix1_pin_down( &matrix1_A[0], &matrix1_B[0], &matrix1_C[0] ); + matrix1_pin_down( &matrix1_A[ 0 ], &matrix1_B[ 0 ], &matrix1_C[ 0 ] ); } /* @@ -118,14 +118,14 @@ void matrix1_init( void ) int matrix1_return( void ) { - int i; - int checksum = 0; + int i; + int checksum = 0; - _Pragma( "loopbound min 100 max 100" ) - for ( i = 0; i < X*Z; i++ ) - checksum += matrix1_C[i]; + _Pragma( "loopbound min 100 max 100" ) + for ( i = 0; i < X * Z; i++ ) + checksum += matrix1_C[ i ]; - return ( checksum == 1000 ? 0 : -1 ); + return ( checksum == 1000 ? 0 : -1 ); } @@ -135,19 +135,19 @@ int matrix1_return( void ) void _Pragma ( "entrypoint" ) matrix1_main( void ) { - register int *p_a = &matrix1_A[0]; - register int *p_b = &matrix1_B[0]; - register int *p_c = &matrix1_C[0]; + register int *p_a = &matrix1_A[ 0 ]; + register int *p_b = &matrix1_B[ 0 ]; + register int *p_c = &matrix1_C[ 0 ]; register int f, i, k; _Pragma( "loopbound min 10 max 10" ) for ( k = 0; k < Z; k++ ) { - p_a = &matrix1_A[0]; /* point to the beginning of array A */ + p_a = &matrix1_A[ 0 ]; /* point to the beginning of array A */ _Pragma( "loopbound min 10 max 10" ) for ( i = 0; i < X; i++ ) { - p_b = &matrix1_B[k * Y]; /* take next column */ + p_b = &matrix1_B[ k * Y ]; /* take next column */ *p_c = 0; _Pragma( "loopbound min 10 max 10" ) diff --git a/bench/kernel/md5/ChangeLog.txt b/bench/kernel/md5/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/md5/md5.c b/bench/kernel/md5/md5.c old mode 100644 new mode 100755 index 0f9669b6fea0def4c288cd2353415bf8bd50386e..09ab091fc065c0dd2933b53b16b349143c41d3b2 --- a/bench/kernel/md5/md5.c +++ b/bench/kernel/md5/md5.c @@ -28,7 +28,7 @@ #define EXCHANGEKEYS 10 ////////////////////////// md5c.c ///////////////////// /* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm - */ +*/ /* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. @@ -41,16 +41,16 @@ License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material - mentioning or referencing the derived work. - + mentioning or referencing the derived work. + RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" - without express or implied warranty of any kind. - + without express or implied warranty of any kind. + These notices must be retained in any copies of any part of this - documentation and/or software. - */ + documentation and/or software. +*/ //////// global.h /////////////// //#include "global.h" @@ -58,7 +58,7 @@ /* Copyright (C) RSA Laboratories, a division of RSA Data Security, Inc., created 1991. All rights reserved. - */ +*/ #ifndef _GLOBAL_H_ #define _GLOBAL_H_ 1 @@ -67,7 +67,7 @@ function argument prototyping. The following makes PROTOTYPES default to 1 if it has not already been defined as 0 with C compiler flags. - */ +*/ #ifndef PROTOTYPES #define PROTOTYPES 1 #endif @@ -91,8 +91,8 @@ typedef unsigned long int UINT4; /* PROTO_LIST is defined depending on how PROTOTYPES is defined above. If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it - returns an empty list. - */ + returns an empty list. +*/ #if PROTOTYPES #define PROTO_LIST(list) list #else @@ -106,7 +106,7 @@ typedef unsigned long int UINT4; ///////////// md5.h ////////////// //#include "md5.h" /* MD5.H - header file for MD5C.C - */ +*/ /* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. @@ -119,16 +119,16 @@ typedef unsigned long int UINT4; License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material - mentioning or referencing the derived work. - + mentioning or referencing the derived work. + RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" - without express or implied warranty of any kind. - + without express or implied warranty of any kind. + These notices must be retained in any copies of any part of this - documentation and/or software. - */ + documentation and/or software. +*/ #ifndef _MD5_H_ #define _MD5_H_ 1 @@ -139,9 +139,9 @@ extern "C" { /* MD5 context. */ typedef struct { - UINT4 state[16]; /* state (ABCD) */ - UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ - unsigned char buffer[64]; /* input buffer */ + UINT4 state[ 16 ]; /* state (ABCD) */ + UINT4 count[ 2 ]; /* number of bits, modulo 2^64 (lsb first) */ + unsigned char buffer[ 64 ]; /* input buffer */ } MD5_CTX; #ifdef __cplusplus @@ -152,7 +152,7 @@ typedef struct { /////////// end md5.h ///////// /* Constants for MD5Transform routine. - */ +*/ #define S11 7 #define S12 12 #define S13 17 @@ -171,56 +171,58 @@ typedef struct { #define S44 21 /* Random structure. - */ +*/ typedef struct { unsigned int bytesNeeded; - unsigned char state[16]; + unsigned char state[ 16 ]; unsigned int outputAvailable; - unsigned char output[16]; + unsigned char output[ 16 ]; } R_RANDOM_STRUCT; -void md5_orig_init PROTO_LIST ((MD5_CTX *)); -void md5_update PROTO_LIST ((MD5_CTX *, unsigned char *, unsigned int)); -void md5_final PROTO_LIST ((unsigned char [64], MD5_CTX *)); -void md5_memset PROTO_LIST ((POINTER, int, unsigned int)); -void md5_transform PROTO_LIST ((UINT4 [4], unsigned char [64])); -void md5_encode PROTO_LIST ((unsigned char *, UINT4 *, int)); -void md5_decode PROTO_LIST ((UINT4 *, unsigned char *, unsigned int)); -void md5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int)); -void md5_R_memset (POINTER output, int value, unsigned int len ); +void md5_orig_init PROTO_LIST ( ( MD5_CTX * ) ); +void md5_update PROTO_LIST ( ( MD5_CTX *, unsigned char *, unsigned int ) ); +void md5_final PROTO_LIST ( ( unsigned char [ 64 ], MD5_CTX * ) ); +void md5_memset PROTO_LIST ( ( POINTER, int, unsigned int ) ); +void md5_transform PROTO_LIST ( ( UINT4 [ 4 ], unsigned char [ 64 ] ) ); +void md5_encode PROTO_LIST ( ( unsigned char *, UINT4 *, int ) ); +void md5_decode PROTO_LIST ( ( UINT4 *, unsigned char *, unsigned int ) ); +void md5_memcpy PROTO_LIST ( ( POINTER, POINTER, unsigned int ) ); +void md5_R_memset ( POINTER output, int value, unsigned int len ); void md5_memset_x( unsigned char *ptr, int value, unsigned long len ); -int md5_R_RandomInit (R_RANDOM_STRUCT *randomStruct); -int md5_R_RandomUpdate (R_RANDOM_STRUCT *randomStruct, unsigned char *block, unsigned int blockLen ); +int md5_R_RandomInit ( R_RANDOM_STRUCT *randomStruct ); +int md5_R_RandomUpdate ( R_RANDOM_STRUCT *randomStruct, unsigned char *block, + unsigned int blockLen ); void md5_InitRandomStruct ( R_RANDOM_STRUCT *randomStruct ); -int md5_R_GetRandomBytesNeeded ( unsigned int *bytesNeeded, R_RANDOM_STRUCT *randomStruct ); +int md5_R_GetRandomBytesNeeded ( unsigned int *bytesNeeded, + R_RANDOM_STRUCT *randomStruct ); -void md5_main(void); -void md5_init(void); -int md5_return(void); +void md5_main( void ); +void md5_init( void ); +int md5_return( void ); int md5_bytesNeeded; -int main(void); +int main( void ); -unsigned char md5_PADDING[64] = { +unsigned char md5_PADDING[ 64 ] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /* F, G, H and I are basic MD5 functions. - */ +*/ #define F(x, y, z) (((x) & (y)) | ((~x) & (z))) #define G(x, y, z) (((x) & (z)) | ((y) & (~z))) #define H(x, y, z) ((x) ^ (y) ^ (z)) #define I(x, y, z) ((y) ^ ((x) | (~z))) /* ROTATE_LEFT rotates x left n bits. - */ +*/ #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) /* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. Rotation is separate from addition to prevent recomputation. - */ +*/ #define FF(a, b, c, d, x, s, ac) { \ (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ @@ -244,36 +246,38 @@ unsigned char md5_PADDING[64] = { /* MD5 initialization. Begins an MD5 operation, writing a new context. - */ -void md5_orig_init ( MD5_CTX *context ) /* context */ +*/ +void md5_orig_init ( MD5_CTX + *context ) /* context */ { - context->count[0] = context->count[1] = 0; + context->count[ 0 ] = context->count[ 1 ] = 0; /* Load magic initialization constants. - */ - context->state[0] = 0x67452301; - context->state[1] = 0xefcdab89; - context->state[2] = 0x98badcfe; - context->state[3] = 0x10325476; - context->state[4] = 0x0; - context->state[5] = 0x0; - context->state[6] = 0x0; - context->state[7] = 0x0; - context->state[8] = 0x0; - context->state[9] = 0x0; - context->state[10] = 0x0; - context->state[11] = 0x0; - context->state[12] = 0x0; - context->state[13] = 0x0; - context->state[14] = 0x0; - context->state[15] = 0x0; + */ + context->state[ 0 ] = 0x67452301; + context->state[ 1 ] = 0xefcdab89; + context->state[ 2 ] = 0x98badcfe; + context->state[ 3 ] = 0x10325476; + context->state[ 4 ] = 0x0; + context->state[ 5 ] = 0x0; + context->state[ 6 ] = 0x0; + context->state[ 7 ] = 0x0; + context->state[ 8 ] = 0x0; + context->state[ 9 ] = 0x0; + context->state[ 10 ] = 0x0; + context->state[ 11 ] = 0x0; + context->state[ 12 ] = 0x0; + context->state[ 13 ] = 0x0; + context->state[ 14 ] = 0x0; + context->state[ 15 ] = 0x0; } /* MD5 block update operation. Continues an MD5 message-digest operation, processing another message block, and updating the context. - */ -void md5_update (MD5_CTX *context, unsigned char *input, unsigned int inputLen ) +*/ +void md5_update ( MD5_CTX *context, unsigned char *input, + unsigned int inputLen ) //MD5_CTX *context; /* context */ //unsigned char *input; /* input block */ //unsigned int inputLen; /* length of input block */ @@ -281,279 +285,277 @@ void md5_update (MD5_CTX *context, unsigned char *input, unsigned int inputLen ) unsigned int i, index, partLen; /* Compute number of bytes mod 64 */ - index = (unsigned int)((context->count[0] >> 3) & 0x3F); + index = ( unsigned int )( ( context->count[ 0 ] >> 3 ) & 0x3F ); /* Update number of bits */ - if ((context->count[0] += ((UINT4)inputLen << 3)) - < ((UINT4)inputLen << 3)) - context->count[1]++; - context->count[1] += ((UINT4)inputLen >> 29); + if ( ( context->count[ 0 ] += ( ( UINT4 )inputLen << 3 ) ) + < ( ( UINT4 )inputLen << 3 ) ) + context->count[ 1 ]++; + context->count[ 1 ] += ( ( UINT4 )inputLen >> 29 ); partLen = 64 - index; - + /* Transform as many times as possible. - */ - if (inputLen >= partLen) { - md5_memcpy ((POINTER)&context->buffer[index], (POINTER)input, partLen); - md5_transform (context->state, context->buffer); - - _Pragma("loopbound min 0 max 0") - for (i = partLen; i + 63 < inputLen; i += 64) { - md5_transform (context->state, &input[i]); - } - + */ + if ( inputLen >= partLen ) { + md5_memcpy ( ( POINTER )&context->buffer[ index ], ( POINTER )input, partLen ); + md5_transform ( context->state, context->buffer ); + + _Pragma( "loopbound min 0 max 0" ) + for ( i = partLen; i + 63 < inputLen; i += 64 ) + md5_transform ( context->state, &input[ i ] ); + index = 0; - } - else + } else i = 0; - + /* Buffer remaining input */ - md5_memcpy ((POINTER)&context->buffer[index], (POINTER)&input[i], inputLen-i); + md5_memcpy ( ( POINTER )&context->buffer[ index ], ( POINTER )&input[ i ], + inputLen - i ); } /* MD5 finalization. Ends an MD5 message-digest operation, writing the the message digest and zeroizing the context. - */ -void md5_final (unsigned char digest[64], MD5_CTX *context ) -//unsigned char digest[16]; /* message digest */ +*/ +void md5_final ( unsigned char digest[ 64 ], MD5_CTX *context ) +//unsigned char digest[ 16 ]; /* message digest */ //MD5_CTX *context; /* context */ { - unsigned char bits[8]; + unsigned char bits[ 8 ]; unsigned int index, padLen; /* Save number of bits */ - md5_encode (bits, context->count, 8); + md5_encode ( bits, context->count, 8 ); /* Pad out to 56 mod 64. - */ - index = (unsigned int)((context->count[0] >> 3) & 0x3f); - padLen = (index < 56) ? (56 - index) : (120 - index); - md5_update (context, md5_PADDING, padLen); - + */ + index = ( unsigned int )( ( context->count[ 0 ] >> 3 ) & 0x3f ); + padLen = ( index < 56 ) ? ( 56 - index ) : ( 120 - index ); + md5_update ( context, md5_PADDING, padLen ); + /* Append length (before padding) */ - md5_update (context, bits, 8); + md5_update ( context, bits, 8 ); /* Store state in digest */ - md5_encode (digest, context->state, 64); - + md5_encode ( digest, context->state, 64 ); + /* Zeroize sensitive information. - */ - md5_memset ((POINTER)context, 0, sizeof (*context)); + */ + md5_memset ( ( POINTER )context, 0, sizeof ( *context ) ); } /* Note: Replace "for loop" with standard memset if possible. - */ +*/ void md5_memset ( POINTER output, int value, unsigned int len ) { unsigned int i; - - _Pragma("loopbound min 64 max 136") - for (i = 0; i < len; i++) { - ((char *)output)[i] = (char)value; - } + + _Pragma( "loopbound min 128 max 208" ) + for ( i = 0; i < len; i++ ) + ( ( char * )output )[ i ] = ( char )value; } /* MD5 basic transformation. Transforms state based on block. - */ -void md5_transform ( UINT4 state[4], unsigned char block[64] ) +*/ +void md5_transform ( UINT4 state[ 4 ], unsigned char block[ 64 ] ) { - UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; - - md5_decode (x, block, 64); + UINT4 a = state[ 0 ], b = state[ 1 ], c = state[ 2 ], d = state[ 3 ], x[ 16 ]; + + md5_decode ( x, block, 64 ); /* Round 1 */ - FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ - FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ - FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ - FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ - FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ - FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ - FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ - FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ - FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ - FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ - FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ - FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ - FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ - FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ - FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ - FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ + FF ( a, b, c, d, x[ 0 ], S11, 0xd76aa478 ); /* 1 */ + FF ( d, a, b, c, x[ 1 ], S12, 0xe8c7b756 ); /* 2 */ + FF ( c, d, a, b, x[ 2 ], S13, 0x242070db ); /* 3 */ + FF ( b, c, d, a, x[ 3 ], S14, 0xc1bdceee ); /* 4 */ + FF ( a, b, c, d, x[ 4 ], S11, 0xf57c0faf ); /* 5 */ + FF ( d, a, b, c, x[ 5 ], S12, 0x4787c62a ); /* 6 */ + FF ( c, d, a, b, x[ 6 ], S13, 0xa8304613 ); /* 7 */ + FF ( b, c, d, a, x[ 7 ], S14, 0xfd469501 ); /* 8 */ + FF ( a, b, c, d, x[ 8 ], S11, 0x698098d8 ); /* 9 */ + FF ( d, a, b, c, x[ 9 ], S12, 0x8b44f7af ); /* 10 */ + FF ( c, d, a, b, x[ 10 ], S13, 0xffff5bb1 ); /* 11 */ + FF ( b, c, d, a, x[ 11 ], S14, 0x895cd7be ); /* 12 */ + FF ( a, b, c, d, x[ 12 ], S11, 0x6b901122 ); /* 13 */ + FF ( d, a, b, c, x[ 13 ], S12, 0xfd987193 ); /* 14 */ + FF ( c, d, a, b, x[ 14 ], S13, 0xa679438e ); /* 15 */ + FF ( b, c, d, a, x[ 15 ], S14, 0x49b40821 ); /* 16 */ /* Round 2 */ - GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ - GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ - GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ - GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ - GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ - GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ - GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ - GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ - GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ - GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ - GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ - GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ - GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ - GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ - GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ - GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ + GG ( a, b, c, d, x[ 1 ], S21, 0xf61e2562 ); /* 17 */ + GG ( d, a, b, c, x[ 6 ], S22, 0xc040b340 ); /* 18 */ + GG ( c, d, a, b, x[ 11 ], S23, 0x265e5a51 ); /* 19 */ + GG ( b, c, d, a, x[ 0 ], S24, 0xe9b6c7aa ); /* 20 */ + GG ( a, b, c, d, x[ 5 ], S21, 0xd62f105d ); /* 21 */ + GG ( d, a, b, c, x[ 10 ], S22, 0x2441453 ); /* 22 */ + GG ( c, d, a, b, x[ 15 ], S23, 0xd8a1e681 ); /* 23 */ + GG ( b, c, d, a, x[ 4 ], S24, 0xe7d3fbc8 ); /* 24 */ + GG ( a, b, c, d, x[ 9 ], S21, 0x21e1cde6 ); /* 25 */ + GG ( d, a, b, c, x[ 14 ], S22, 0xc33707d6 ); /* 26 */ + GG ( c, d, a, b, x[ 3 ], S23, 0xf4d50d87 ); /* 27 */ + GG ( b, c, d, a, x[ 8 ], S24, 0x455a14ed ); /* 28 */ + GG ( a, b, c, d, x[ 13 ], S21, 0xa9e3e905 ); /* 29 */ + GG ( d, a, b, c, x[ 2 ], S22, 0xfcefa3f8 ); /* 30 */ + GG ( c, d, a, b, x[ 7 ], S23, 0x676f02d9 ); /* 31 */ + GG ( b, c, d, a, x[ 12 ], S24, 0x8d2a4c8a ); /* 32 */ /* Round 3 */ - HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ - HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ - HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ - HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ - HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ - HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ - HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ - HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ - HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ - HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ - HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ - HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ - HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ - HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ - HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ - HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ + HH ( a, b, c, d, x[ 5 ], S31, 0xfffa3942 ); /* 33 */ + HH ( d, a, b, c, x[ 8 ], S32, 0x8771f681 ); /* 34 */ + HH ( c, d, a, b, x[ 11 ], S33, 0x6d9d6122 ); /* 35 */ + HH ( b, c, d, a, x[ 14 ], S34, 0xfde5380c ); /* 36 */ + HH ( a, b, c, d, x[ 1 ], S31, 0xa4beea44 ); /* 37 */ + HH ( d, a, b, c, x[ 4 ], S32, 0x4bdecfa9 ); /* 38 */ + HH ( c, d, a, b, x[ 7 ], S33, 0xf6bb4b60 ); /* 39 */ + HH ( b, c, d, a, x[ 10 ], S34, 0xbebfbc70 ); /* 40 */ + HH ( a, b, c, d, x[ 13 ], S31, 0x289b7ec6 ); /* 41 */ + HH ( d, a, b, c, x[ 0 ], S32, 0xeaa127fa ); /* 42 */ + HH ( c, d, a, b, x[ 3 ], S33, 0xd4ef3085 ); /* 43 */ + HH ( b, c, d, a, x[ 6 ], S34, 0x4881d05 ); /* 44 */ + HH ( a, b, c, d, x[ 9 ], S31, 0xd9d4d039 ); /* 45 */ + HH ( d, a, b, c, x[ 12 ], S32, 0xe6db99e5 ); /* 46 */ + HH ( c, d, a, b, x[ 15 ], S33, 0x1fa27cf8 ); /* 47 */ + HH ( b, c, d, a, x[ 2 ], S34, 0xc4ac5665 ); /* 48 */ /* Round 4 */ - II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ - II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ - II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ - II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ - II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ - II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ - II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ - II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ - II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ - II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ - II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ - II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ - II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ - II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ - II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ - II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - + II ( a, b, c, d, x[ 0 ], S41, 0xf4292244 ); /* 49 */ + II ( d, a, b, c, x[ 7 ], S42, 0x432aff97 ); /* 50 */ + II ( c, d, a, b, x[ 14 ], S43, 0xab9423a7 ); /* 51 */ + II ( b, c, d, a, x[ 5 ], S44, 0xfc93a039 ); /* 52 */ + II ( a, b, c, d, x[ 12 ], S41, 0x655b59c3 ); /* 53 */ + II ( d, a, b, c, x[ 3 ], S42, 0x8f0ccc92 ); /* 54 */ + II ( c, d, a, b, x[ 10 ], S43, 0xffeff47d ); /* 55 */ + II ( b, c, d, a, x[ 1 ], S44, 0x85845dd1 ); /* 56 */ + II ( a, b, c, d, x[ 8 ], S41, 0x6fa87e4f ); /* 57 */ + II ( d, a, b, c, x[ 15 ], S42, 0xfe2ce6e0 ); /* 58 */ + II ( c, d, a, b, x[ 6 ], S43, 0xa3014314 ); /* 59 */ + II ( b, c, d, a, x[ 13 ], S44, 0x4e0811a1 ); /* 60 */ + II ( a, b, c, d, x[ 4 ], S41, 0xf7537e82 ); /* 61 */ + II ( d, a, b, c, x[ 11 ], S42, 0xbd3af235 ); /* 62 */ + II ( c, d, a, b, x[ 2 ], S43, 0x2ad7d2bb ); /* 63 */ + II ( b, c, d, a, x[ 9 ], S44, 0xeb86d391 ); /* 64 */ + + state[ 0 ] += a; + state[ 1 ] += b; + state[ 2 ] += c; + state[ 3 ] += d; + /* Zeroize sensitive information. - */ - md5_memset ((POINTER)x, 0, sizeof (x)); + */ + md5_memset ( ( POINTER )x, 0, sizeof ( x ) ); } /* Encodes input (UINT4) into output (unsigned char). Assumes len is a multiple of 4. - */ +*/ void md5_encode ( unsigned char *output, UINT4 *input, int len ) { - int i = 0, - j; - - _Pragma("loopbound min 2 max 16") - for (j = 0; j < len; j += 4) { - output[j] = (unsigned char)(input[i] & 0xff); - output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); - output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); - output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); + int i = 0, + j; + + _Pragma( "loopbound min 2 max 16" ) + for ( j = 0; j < len; j += 4 ) { + output[ j ] = ( unsigned char )( input[ i ] & 0xff ); + output[ j + 1 ] = ( unsigned char )( ( input[ i ] >> 8 ) & 0xff ); + output[ j + 2 ] = ( unsigned char )( ( input[ i ] >> 16 ) & 0xff ); + output[ j + 3 ] = ( unsigned char )( ( input[ i ] >> 24 ) & 0xff ); ++i; } } /* Decodes input (unsigned char) into output (UINT4). Assumes len is a multiple of 4. - */ +*/ void md5_decode ( UINT4 *output, unsigned char *input, unsigned int len ) { unsigned int i, j; - _Pragma("loopbound min 16 max 16") - for (i = 0, j = 0; j < len; i++, j += 4) { - output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | - (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24); + _Pragma( "loopbound min 16 max 16" ) + for ( i = 0, j = 0; j < len; i++, j += 4 ) { + output[ i ] = ( ( UINT4 )input[ j ] ) | ( ( ( UINT4 )input[ j + 1 ] ) << 8 ) | + ( ( ( UINT4 )input[ j + 2 ] ) << 16 ) | ( ( ( UINT4 )input[ j + 3 ] ) << 24 ); } } /* Note: Replace "for loop" with standard memcpy if possible. - */ +*/ void md5_memcpy ( POINTER output, POINTER input, unsigned int len ) { unsigned int i; - - _Pragma("loopbound min 0 max 55") - for (i = 0; i < len; i++) { - output[i] = input[i]; - } + + _Pragma( "loopbound min 0 max 55" ) + for ( i = 0; i < len; i++ ) + output[ i ] = input[ i ]; } /////////////////// end md5c.c //////////////////////// -void md5_R_memset (POINTER output, int value, unsigned int len ) +void md5_R_memset ( POINTER output, int value, unsigned int len ) //POINTER output; /* output block */ //int value; /* value */ //unsigned int len; /* length of block */ { - if (len) - md5_memset_x (output, value, len); + if ( len ) + md5_memset_x ( output, value, len ); } // Basic implementation of C's memset void md5_memset_x( unsigned char *ptr, int value, unsigned long len ) { - _Pragma("loopbound min 16 max 64") - while( len-- ) { + _Pragma( "loopbound min 16 max 64" ) + while ( len-- ) *ptr++ = value; - } return; } -int md5_R_RandomInit (R_RANDOM_STRUCT *randomStruct) +int md5_R_RandomInit ( R_RANDOM_STRUCT *randomStruct ) //R_RANDOM_STRUCT *randomStruct; /* new random structure */ { randomStruct->bytesNeeded = RANDOM_BYTES_NEEDED; - md5_R_memset ((POINTER)randomStruct->state, 0, sizeof (randomStruct->state)); + md5_R_memset ( ( POINTER )randomStruct->state, 0, + sizeof ( randomStruct->state ) ); randomStruct->outputAvailable = 0; - - return (0); + + return ( 0 ); } -int md5_R_RandomUpdate (R_RANDOM_STRUCT *randomStruct, unsigned char *block, unsigned int blockLen ) +int md5_R_RandomUpdate ( R_RANDOM_STRUCT *randomStruct, unsigned char *block, + unsigned int blockLen ) //R_RANDOM_STRUCT *randomStruct; /* random structure */ //unsigned char *block; /* block of values to mix in */ //unsigned int blockLen; /* length of block */ { MD5_CTX context; - unsigned char digest[64]; + unsigned char digest[ 64 ]; unsigned int i, x; - - md5_orig_init (&context); - md5_update (&context, block, blockLen); - md5_final (digest, &context); + + md5_orig_init ( &context ); + md5_update ( &context, block, blockLen ); + md5_final ( digest, &context ); /* add digest to state */ x = 0; - _Pragma("loopbound min 16 max 16") - for (i = 0; i < 16; i++) { - x += randomStruct->state[15-i] + digest[15-i]; - randomStruct->state[15-i] = (unsigned char)x; + _Pragma( "loopbound min 16 max 16" ) + for ( i = 0; i < 16; i++ ) { + x += randomStruct->state[ 15 - i ] + digest[ 15 - i ]; + randomStruct->state[ 15 - i ] = ( unsigned char )x; x >>= 8; } - - if (randomStruct->bytesNeeded < blockLen) + + if ( randomStruct->bytesNeeded < blockLen ) randomStruct->bytesNeeded = 0; else randomStruct->bytesNeeded -= blockLen; - + /* Zeroize sensitive information. - */ - md5_R_memset ((POINTER)digest, 0, sizeof (digest)); - - return (0); + */ + md5_R_memset ( ( POINTER )digest, 0, sizeof ( digest ) ); + + return ( 0 ); } @@ -561,34 +563,35 @@ int md5_R_RandomUpdate (R_RANDOM_STRUCT *randomStruct, unsigned char *block, uns NOTE that this will cause the output of the "random" process to be the same every time. To produce random bytes, the random struct needs random seeds! - */ +*/ void md5_InitRandomStruct ( R_RANDOM_STRUCT *randomStruct ) { static unsigned char seedByte = 0; unsigned int bytesNeeded; - - md5_R_RandomInit (randomStruct); - + + md5_R_RandomInit ( randomStruct ); + /* Initialize with all zero seed bytes, which will not yield an actual random number output. - */ - _Pragma("loopbound min 257 max 257") - while (1) { - md5_R_GetRandomBytesNeeded (&bytesNeeded, randomStruct); - if (bytesNeeded == 0) + */ + _Pragma( "loopbound min 256 max 256" ) + while ( 1 ) { + md5_R_GetRandomBytesNeeded ( &bytesNeeded, randomStruct ); + if ( bytesNeeded == 0 ) break; - - md5_R_RandomUpdate (randomStruct, &seedByte, 1); + + md5_R_RandomUpdate ( randomStruct, &seedByte, 1 ); } } -int md5_R_GetRandomBytesNeeded ( unsigned int *bytesNeeded, R_RANDOM_STRUCT *randomStruct ) +int md5_R_GetRandomBytesNeeded ( unsigned int *bytesNeeded, + R_RANDOM_STRUCT *randomStruct ) //unsigned int *bytesNeeded; /* number of mix-in bytes needed */ //R_RANDOM_STRUCT *randomStruct; /* random structure */ { *bytesNeeded = randomStruct->bytesNeeded; - - return (0); + + return ( 0 ); } void md5_init( void ) @@ -607,13 +610,13 @@ void _Pragma( "entrypoint" ) md5_main( void ) R_RANDOM_STRUCT randomStruct2; /* We first generate parameters, and then do some key exchange each followed by a key computation...*/ int keys_exchanged = 0; - - md5_InitRandomStruct (&randomStruct); - - _Pragma("loopbound min 10 max 10") - while (keys_exchanged != EXCHANGEKEYS ) { - keys_exchanged++; - md5_InitRandomStruct (&randomStruct2); + + md5_InitRandomStruct ( &randomStruct ); + + _Pragma( "loopbound min 10 max 10" ) + while ( keys_exchanged != EXCHANGEKEYS ) { + keys_exchanged++; + md5_InitRandomStruct ( &randomStruct2 ); } md5_bytesNeeded = randomStruct.bytesNeeded + randomStruct2.bytesNeeded; diff --git a/bench/kernel/minver/ChangeLog.txt b/bench/kernel/minver/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/minver/minver.c b/bench/kernel/minver/minver.c old mode 100644 new mode 100755 index 41ae1dc70569ef1623165190dfb2fcbe1d9a79d5..2f3615e6a00d3cb9e1dda748b387ce5882d1a4ab --- a/bench/kernel/minver/minver.c +++ b/bench/kernel/minver/minver.c @@ -190,7 +190,7 @@ int minver_minver( int side, double eps ) void minver_init() { - int i,j; + int i, j; volatile int x = 0; _Pragma( "loopbound min 3 max 3" ) @@ -204,7 +204,7 @@ void minver_init() int minver_return() { - int i,j; + int i, j; double check_sum = 0; _Pragma( "loopbound min 3 max 3" ) @@ -214,7 +214,7 @@ int minver_return() check_sum += minver_a_i[ i ][ j ]; } /* Avoid double comparison */ - return (int)(check_sum*100) != 48; + return ( int )( check_sum * 100 ) != 48; } diff --git a/bench/kernel/pm/ChangeLog.txt b/bench/kernel/pm/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/pm/license.txt b/bench/kernel/pm/license.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/pm/pm.c b/bench/kernel/pm/pm.c old mode 100644 new mode 100755 index 0bf074de69376bd7e5f9ace8c96c4479ae658cd8..c0468001cfb2dd06f421a387c3ad6794b16ed49f --- a/bench/kernel/pm/pm.c +++ b/bench/kernel/pm/pm.c @@ -37,10 +37,10 @@ typedef struct pm_float_array_t { float *data; void *datav; - int size[3]; + int size[ 3 ]; unsigned int ndims; unsigned int rctype; - char padding[4]; + char padding[ 4 ]; } pm_float_array_t; @@ -71,7 +71,7 @@ typedef struct pm_data_t { int profile_size; /* the length of the pattern */ int num_templates; /* the number of library templates */ int elsize; /* the size of a single fp number */ - char padding[4]; + char padding[ 4 ]; } pm_data_t; @@ -96,8 +96,8 @@ int pm_kernel( pm_data_t *pmdata ); */ /* input data */ -extern float pm_lib_data[ 60 ][ 64 ]; -extern float pm_pattern_data[ 60 ][ 64 ]; +extern float pm_lib_data[ 60 ][ 64 ]; +extern float pm_pattern_data[ 60 ][ 64 ]; /* some magic number */ #define pm_MIN_NOISE 1e-10f @@ -105,20 +105,20 @@ extern float pm_pattern_data[ 60 ][ 64 ]; /* main data structures used by the benchmark */ static pm_data_t pm_data; static pm_float_array_t pm_lib; -static float *pm_lib_ptr[ 60 ]; +static float *pm_lib_ptr[ 60 ]; static pm_float_array_t pm_pattern; -static float *pm_pattern_ptr[ 60 ]; +static float *pm_pattern_ptr[ 60 ]; static int pm_result; /* arrays for the pm_init_data function */ -static unsigned char pm_init_array_1[64]; -static float pm_init_array_2[21]; -static float pm_init_array_3[64]; -static float pm_init_array_4[64]; -static float pm_init_array_5[21]; -static float pm_init_array_6[21]; -static float pm_init_array_7[72]; -static float pm_init_array_8[110]; +static unsigned char pm_init_array_1[ 64 ]; +static float pm_init_array_2[ 21 ]; +static float pm_init_array_3[ 64 ]; +static float pm_init_array_4[ 64 ]; +static float pm_init_array_5[ 21 ]; +static float pm_init_array_6[ 21 ]; +static float pm_init_array_7[ 72 ]; +static float pm_init_array_8[ 110 ]; /* @@ -132,17 +132,17 @@ void pm_init_lib( pm_float_array_t *lib ) lib->rctype = 1; lib->ndims = 2; - lib->size[0] = 60; - lib->size[1] = 64; - lib->size[2] = 0; + lib->size[ 0 ] = 60; + lib->size[ 1 ] = 64; + lib->size[ 2 ] = 0; _Pragma( "loopbound min 60 max 60" ) for ( i = 0; i < 60; i++ ) - pm_lib_ptr[i] = pm_lib_data[i]; + pm_lib_ptr[ i ] = pm_lib_data[ i ]; _Pragma( "loopbound min 60 max 60" ) for ( i = 0; i < 60; i++ ) - pm_lib_ptr[i] += do_not_optimize_away; + pm_lib_ptr[ i ] += do_not_optimize_away; lib->data = *pm_lib_ptr; lib->datav = ( void * )pm_lib_ptr; @@ -156,17 +156,17 @@ void pm_init_pattern( pm_float_array_t *pattern ) pattern->rctype = 1; pattern->ndims = 2; - pattern->size[0] = 60; - pattern->size[1] = 64; - pattern->size[2] = 0; + pattern->size[ 0 ] = 60; + pattern->size[ 1 ] = 64; + pattern->size[ 2 ] = 0; _Pragma( "loopbound min 60 max 60" ) for ( i = 0; i < 60; i++ ) - pm_pattern_ptr[i] = pm_pattern_data[i]; + pm_pattern_ptr[ i ] = pm_pattern_data[ i ]; _Pragma( "loopbound min 60 max 60" ) for ( i = 0; i < 60; i++ ) - pm_pattern_ptr[i] += do_not_optimize_away; + pm_pattern_ptr[ i ] += do_not_optimize_away; pattern->data = *pm_pattern_ptr; pattern->datav = ( void * )pm_pattern_ptr; @@ -210,8 +210,8 @@ void pm_init_data( pm_data_t *pmdata, pm_float_array_t *lib, float x; /* Getting the input parameters from the PCA C array structure */ - pmdata->profile_size = lib->size[1]; - pmdata->num_templates = lib->size[0]; + pmdata->profile_size = lib->size[ 1 ]; + pmdata->num_templates = lib->size[ 0 ]; pmdata->elsize = elsize; pmdata->shift_ratio = 3.0f; @@ -314,9 +314,9 @@ int pm_kernel( pm_data_t *pmdata ) float power_ratio; /* the mean power of the pixels of a template that exceeded twice test noise */ - float test_noise = ( pm_pow10f( test_profile_db[0] * 0.1f ) + float test_noise = ( pm_pow10f( test_profile_db[ 0 ] * 0.1f ) + /* noise level of the test pattern */ - pm_pow10f( test_profile_db[profile_size - 1] * 0.1f ) ) * 0.5f; + pm_pow10f( test_profile_db[ profile_size - 1 ] * 0.1f ) ) * 0.5f; /* since "shift_size/2" is used a lot, so we create a var to hold it */ int half_shift_size = ( int )( pm_ceil( ( float )( shift_size ) / 2.0f ) ); @@ -352,7 +352,7 @@ int pm_kernel( pm_data_t *pmdata ) /* Having an array of test noise for fast copying of noise returns */ _Pragma( "loopbound min 64 max 64" ) for ( i = 0; i < profile_size; i++ ) - test_noise_db_array[i] = test_noise_db; + test_noise_db_array[ i ] = test_noise_db; /* Finding the maximum pixels of the test pattern */ fptr = test_profile_db; @@ -426,7 +426,6 @@ int pm_kernel( pm_data_t *pmdata ) } fptr++; } - *fptr2++ = num_test_exceed ? sum_exceed / ( float )( num_test_exceed ) : 0.0f; @@ -488,7 +487,7 @@ int pm_kernel( pm_data_t *pmdata ) /* Calculates noise levels from first and last elements of the current template */ - template_noise = ( cur_tp[0] + cur_tp[profile_size - 1] ) * 0.5f; + template_noise = ( cur_tp[ 0 ] + cur_tp[ profile_size - 1 ] ) * 0.5f; noise_shift2 = test_noise - template_noise; fptr = cur_tp; @@ -508,7 +507,7 @@ int pm_kernel( pm_data_t *pmdata ) template_exceed */ if ( *fptr > test_noise_db_plus_3 ) { - template_exceed[i] = 1; + template_exceed[ i ] = 1; num_template_exceed++; sum_exceed += *fptr; } @@ -568,7 +567,7 @@ int pm_kernel( pm_data_t *pmdata ) _Pragma( "loopbound min 64 max 64" ) for ( i = 0; i < profile_size; i++ ) { if ( *fptr++ < test_noise_db ) - template_copy[i] = test_noise_db; + template_copy[ i ] = test_noise_db; } } /* else ... if (num_test_exceed) */ @@ -582,7 +581,7 @@ int pm_kernel( pm_data_t *pmdata ) weighted_MSE += tmp1 * tmp1; } - MSE_scores[current_shift] = weighted_MSE * sumWeights_inv; + MSE_scores[ current_shift ] = weighted_MSE * sumWeights_inv; } /* for current_shift */ } else { /* if (num_template_exceed) */ @@ -603,7 +602,7 @@ int pm_kernel( pm_data_t *pmdata ) _Pragma( "loopbound min 0 max 0" ) for ( i = 0; i < profile_size; i++ ) { if ( *fptr++ < test_noise_db ) - template_copy[i] = test_noise_db; + template_copy[ i ] = test_noise_db; } fptr2 = template_copy; @@ -618,7 +617,7 @@ int pm_kernel( pm_data_t *pmdata ) weighted_MSE += tmp1 * tmp1; } - MSE_scores[current_shift] = weighted_MSE * sumWeights_inv; + MSE_scores[ current_shift ] = weighted_MSE * sumWeights_inv; } /* for current_shift */ } /* else .. if (num_template_exceed) */ @@ -640,11 +639,11 @@ int pm_kernel( pm_data_t *pmdata ) mag_shift_scores_flag = 1; - if ( test_exceed_means[min_MSE_index] != 0.0f ) { + if ( test_exceed_means[ min_MSE_index ] != 0.0f ) { if ( num_template_exceed ) { /* Compute the difference of the average shifted test profile power to the average template power */ - ave_power_ratio = test_exceed_means[min_MSE_index] + ave_power_ratio = test_exceed_means[ min_MSE_index ] - template_exceed_mean; /* Loop over all possible magnitude shifts */ @@ -656,7 +655,7 @@ int pm_kernel( pm_data_t *pmdata ) _Pragma( "loopbound min 64 max 64" ) for ( i = 0; i < profile_size; i++ ) { if ( *bptr++ ) - template_copy[i] = cur_tp[i] + power_shift; + template_copy[ i ] = cur_tp[ i ] + power_shift; } /* Compute the weighted MSE */ @@ -669,7 +668,7 @@ int pm_kernel( pm_data_t *pmdata ) weighted_MSE += tmp1 * tmp1; } - mag_shift_scores[j++] = weighted_MSE * sumWeights_inv; + mag_shift_scores[ j++ ] = weighted_MSE * sumWeights_inv; } /* for mag_db */ } /* if (num_template_exceed) */ @@ -681,7 +680,7 @@ int pm_kernel( pm_data_t *pmdata ) _Pragma( "loopbound min 64 max 64" ) for ( i = 0; i < profile_size; i++ ) { if ( *fptr++ < test_noise_db ) - template_copy[i] = test_noise_db; + template_copy[ i ] = test_noise_db; } /* Compute the weighted MSE */ @@ -694,7 +693,7 @@ int pm_kernel( pm_data_t *pmdata ) weighted_MSE += tmp1 * tmp1; } - minimum_MSE_score[template_index] = weighted_MSE * sumWeights_inv; + minimum_MSE_score[ template_index ] = weighted_MSE * sumWeights_inv; mag_shift_scores_flag = 0; } /* if (num_test_exceed) */ @@ -710,7 +709,7 @@ int pm_kernel( pm_data_t *pmdata ) min_MSE = *fptr; } - minimum_MSE_score[template_index] = min_MSE; + minimum_MSE_score[ template_index ] = min_MSE; } } /* for template_index */ diff --git a/bench/kernel/pm/pm_input.c b/bench/kernel/pm/pm_input.c old mode 100644 new mode 100755 index 0108bfd02fbb0a859d94cb624b637c3266661e8a..4ebfa8bd626838ff4f42104d0609d48c74f8bbde --- a/bench/kernel/pm/pm_input.c +++ b/bench/kernel/pm/pm_input.c @@ -2,974 +2,1214 @@ Forward declaration of global variables */ -extern float pm_lib_data[ 60 ][ 64 ]; -extern float pm_pattern_data[ 60 ][ 64 ]; +extern float pm_lib_data[ 60 ][ 64 ]; +extern float pm_pattern_data[ 60 ][ 64 ]; /* Definition of global variables */ -float pm_lib_data[ 60 ][ 64 ] = { -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f }, -{ 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, - 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f } +float pm_lib_data[ 60 ][ 64 ] = { + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + }, + { + 0.1f, 0.1f, 0.1f, 0.1f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 50.0f, 50.0f, 10.0f, 10.0f, 50.0f, 50.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, 10.0f, + 10.0f, 10.0f, 10.0f, 10.0f, 0.1f, 0.1f, 0.1f, 0.1f + } }; -float pm_pattern_data[ 60 ][ 64 ] = { -{ 0.1f, 0.101009f, 0.103729f, 0.0993204f, 9.77204f, 9.95778f, 10.238f, 9.77676f, - 10.1271f, 9.87972f, 10.1102f, 9.78003f, 10.0172f, 9.59909f, 9.90138f, 10.0924f, - 9.9358f, 51.2366f, 49.3687f, 9.53496f, 9.75367f, 51.0556f, 49.8868f, 10.0758f, - 10.1888f, 9.57591f, 9.87106f, 9.85914f, 9.79637f, 9.96358f, 10.3042f, 9.99231f, - 10.2455f, 9.86076f, 10.0015f, 9.84342f, 10.1174f, 9.94976f, 10.096f, 10.1336f, - 9.98434f, 10.1778f, 10.4619f, 10.1049f, 9.99764f, 10.1826f, 10.0112f, 9.77859f, - 10.0971f, 9.999f, 9.94476f, 10.2553f, 10.3727f, 9.89549f, 10.0207f, 9.83847f, - 10.1361f, 9.52708f, 10.198f, 10.0438f, 0.100523f, 0.102427f, 0.0994507f, 0.0997337f }, -{ 0.0f, 2.38221e-44f, 4.00545e-34f, 0.0f, 0.0f, 1.62261e-40f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, -{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f } +float pm_pattern_data[ 60 ][ 64 ] = { + { + 0.1f, 0.101009f, 0.103729f, 0.0993204f, 9.77204f, 9.95778f, 10.238f, 9.77676f, + 10.1271f, 9.87972f, 10.1102f, 9.78003f, 10.0172f, 9.59909f, 9.90138f, 10.0924f, + 9.9358f, 51.2366f, 49.3687f, 9.53496f, 9.75367f, 51.0556f, 49.8868f, 10.0758f, + 10.1888f, 9.57591f, 9.87106f, 9.85914f, 9.79637f, 9.96358f, 10.3042f, 9.99231f, + 10.2455f, 9.86076f, 10.0015f, 9.84342f, 10.1174f, 9.94976f, 10.096f, 10.1336f, + 9.98434f, 10.1778f, 10.4619f, 10.1049f, 9.99764f, 10.1826f, 10.0112f, 9.77859f, + 10.0971f, 9.999f, 9.94476f, 10.2553f, 10.3727f, 9.89549f, 10.0207f, 9.83847f, + 10.1361f, 9.52708f, 10.198f, 10.0438f, 0.100523f, 0.102427f, 0.0994507f, 0.0997337f + }, + { + 0.0f, 2.38221e-44f, 4.00545e-34f, 0.0f, 0.0f, 1.62261e-40f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + }, + { + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + } }; diff --git a/bench/kernel/pm/pm_libm.c b/bench/kernel/pm/pm_libm.c old mode 100644 new mode 100755 index da23cfc3b089af33cd9840eb2b992500aa5259bc..18642e396c8513bf84166dbab35379812faa9578 --- a/bench/kernel/pm/pm_libm.c +++ b/bench/kernel/pm/pm_libm.c @@ -34,8 +34,8 @@ #define pm_LOG10 2.302585093f /* The coefficients for the pm_log10f and pm_pow10f functions below */ -static float pm_pow_coeff[19]; -static float pm_log_coeff[16]; +static float pm_pow_coeff[ 19 ]; +static float pm_log_coeff[ 16 ]; /* @@ -50,42 +50,42 @@ static float pm_log_coeff[16]; /***********************************************************************/ void pm_math_init( void ) { - pm_pow_coeff[0] = 0.5f; /* 1/2! */ - pm_pow_coeff[1] = 0.166666667f; /* 1/3! */ - pm_pow_coeff[2] = 0.041666666f; /* 1/4! */ - pm_pow_coeff[3] = 8.333333333e-3f; - pm_pow_coeff[4] = 1.388888889e-3f; - pm_pow_coeff[5] = 1.984126984e-4f; - pm_pow_coeff[6] = 2.480158730e-5f; - pm_pow_coeff[7] = 2.755731922e-6f; - pm_pow_coeff[8] = 2.755731922e-7f; - pm_pow_coeff[9] = 2.505210839e-8f; - pm_pow_coeff[10] = 2.087675699e-9f; - pm_pow_coeff[11] = 1.605904384e-10f; - pm_pow_coeff[12] = 1.147074560e-11f; - pm_pow_coeff[13] = 7.647163732e-13f; - pm_pow_coeff[14] = 4.779477332e-14f; - pm_pow_coeff[15] = 2.811457254e-15f; - pm_pow_coeff[16] = 1.561920697e-16f; - pm_pow_coeff[17] = 8.220635247e-18f; - pm_pow_coeff[18] = 4.110317623e-19f; - - pm_log_coeff[0] = 0.333333333f; /* 1/3 */ - pm_log_coeff[1] = 0.2f; /* 1/5 */ - pm_log_coeff[2] = 0.142857143f; /* 1/7 */ - pm_log_coeff[3] = 0.111111111f; /* 1/9 */ - pm_log_coeff[4] = 9.090909091e-2f; /* 1/11 */ - pm_log_coeff[5] = 7.692307692e-2f; /* 1/13 */ - pm_log_coeff[6] = 6.666666667e-2f; /* 1/15 */ - pm_log_coeff[7] = 5.882352941e-2f; /* 1/17 */ - pm_log_coeff[8] = 5.263157895e-2f; /* 1/19 */ - pm_log_coeff[9] = 4.761904762e-2f; /* 1/21 */ - pm_log_coeff[10] = 4.347826087e-2f; /* 1/23 */ - pm_log_coeff[11] = 0.04f; /* 1/25 */ - pm_log_coeff[12] = 3.703703704e-2f; /* 1/27 */ - pm_log_coeff[13] = 3.448275862e-2f; /* 1/29 */ - pm_log_coeff[14] = 3.225806452e-2f; /* 1/31 */ - pm_log_coeff[15] = 3.030303030e-2f; /* 1/33 */ + pm_pow_coeff[ 0 ] = 0.5f; /* 1/2! */ + pm_pow_coeff[ 1 ] = 0.166666667f; /* 1/3! */ + pm_pow_coeff[ 2 ] = 0.041666666f; /* 1/4! */ + pm_pow_coeff[ 3 ] = 8.333333333e-3f; + pm_pow_coeff[ 4 ] = 1.388888889e-3f; + pm_pow_coeff[ 5 ] = 1.984126984e-4f; + pm_pow_coeff[ 6 ] = 2.480158730e-5f; + pm_pow_coeff[ 7 ] = 2.755731922e-6f; + pm_pow_coeff[ 8 ] = 2.755731922e-7f; + pm_pow_coeff[ 9 ] = 2.505210839e-8f; + pm_pow_coeff[ 10 ] = 2.087675699e-9f; + pm_pow_coeff[ 11 ] = 1.605904384e-10f; + pm_pow_coeff[ 12 ] = 1.147074560e-11f; + pm_pow_coeff[ 13 ] = 7.647163732e-13f; + pm_pow_coeff[ 14 ] = 4.779477332e-14f; + pm_pow_coeff[ 15 ] = 2.811457254e-15f; + pm_pow_coeff[ 16 ] = 1.561920697e-16f; + pm_pow_coeff[ 17 ] = 8.220635247e-18f; + pm_pow_coeff[ 18 ] = 4.110317623e-19f; + + pm_log_coeff[ 0 ] = 0.333333333f; /* 1/3 */ + pm_log_coeff[ 1 ] = 0.2f; /* 1/5 */ + pm_log_coeff[ 2 ] = 0.142857143f; /* 1/7 */ + pm_log_coeff[ 3 ] = 0.111111111f; /* 1/9 */ + pm_log_coeff[ 4 ] = 9.090909091e-2f; /* 1/11 */ + pm_log_coeff[ 5 ] = 7.692307692e-2f; /* 1/13 */ + pm_log_coeff[ 6 ] = 6.666666667e-2f; /* 1/15 */ + pm_log_coeff[ 7 ] = 5.882352941e-2f; /* 1/17 */ + pm_log_coeff[ 8 ] = 5.263157895e-2f; /* 1/19 */ + pm_log_coeff[ 9 ] = 4.761904762e-2f; /* 1/21 */ + pm_log_coeff[ 10 ] = 4.347826087e-2f; /* 1/23 */ + pm_log_coeff[ 11 ] = 0.04f; /* 1/25 */ + pm_log_coeff[ 12 ] = 3.703703704e-2f; /* 1/27 */ + pm_log_coeff[ 13 ] = 3.448275862e-2f; /* 1/29 */ + pm_log_coeff[ 14 ] = 3.225806452e-2f; /* 1/31 */ + pm_log_coeff[ 15 ] = 3.030303030e-2f; /* 1/33 */ } diff --git a/bench/kernel/pm/pm_math.h b/bench/kernel/pm/pm_math.h old mode 100644 new mode 100755 diff --git a/bench/kernel/pm/pm_stdlib.c b/bench/kernel/pm/pm_stdlib.c old mode 100644 new mode 100755 index 8221a9222c6047f2cc0ca6cd28b5a03e6b716b30..bae64a1aa8b31254c22282c8fc3cd600aed0aa4c --- a/bench/kernel/pm/pm_stdlib.c +++ b/bench/kernel/pm/pm_stdlib.c @@ -36,7 +36,7 @@ void pm_memcpy( void *dest, void *src, int size ) int i; _Pragma( "loopbound min 44 max 256" ) for ( i = 0; i < size; i++ ) - ( ( unsigned char * )dest )[i] = ( ( unsigned char * )src )[i]; + ( ( unsigned char * )dest )[ i ] = ( ( unsigned char * )src )[ i ]; return; } @@ -46,7 +46,7 @@ void pm_memset( void *s, int c, int n ) int i; _Pragma( "loopbound min 64 max 64" ) for ( i = 0; i < n; i++ ) - ( ( unsigned char * )s )[i] = ( unsigned char )c; + ( ( unsigned char * )s )[ i ] = ( unsigned char )c; return; } diff --git a/bench/kernel/pm/pm_string.h b/bench/kernel/pm/pm_string.h old mode 100644 new mode 100755 diff --git a/bench/kernel/prime/ChangeLog.txt b/bench/kernel/prime/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/prime/prime.c b/bench/kernel/prime/prime.c old mode 100644 new mode 100755 index fda1066685cedd92007ebbcb719c47e0834780d8..b694a6fcbeceb2d7adaaae242275ba6fad3db77f --- a/bench/kernel/prime/prime.c +++ b/bench/kernel/prime/prime.c @@ -99,8 +99,7 @@ unsigned char prime_prime ( unsigned int n ) unsigned int i; if ( prime_even ( n ) ) return ( n == 2 ); - _Pragma( "loopbound min 2 max 16" ) - + _Pragma( "loopbound min 0 max 16" ) for ( i = 3; i * i <= n; i += 2 ) { if ( prime_divides ( i, n ) ) /* ai: loop here min 0 max 357 end; */ return 0; diff --git a/bench/kernel/quicksort/ChangeLog.txt b/bench/kernel/quicksort/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/quicksort/input.c b/bench/kernel/quicksort/input.c old mode 100644 new mode 100755 index dd04d20d8ba510bb0eece5f1f02fe6232b171632..a66b020cc0d850c618248dee8031d34def16bbc2 --- a/bench/kernel/quicksort/input.c +++ b/bench/kernel/quicksort/input.c @@ -22,7 +22,7 @@ */ -const char *quicksort_input_string[ 681 ] = { +const char *quicksort_input_string[ 681 ] = { "Kurt", "Vonneguts", "Commencement", "Address", "at", "MIT", "Ladies", "and", "gentlemen", "of", "the", "class", "of", "97", "Wear", "sunscreen", "If", "I", "could", "offer", "you", "only", "one", "tip", "for", "the", "future", @@ -98,9 +98,10 @@ const char *quicksort_input_string[ 681 ] = { "it", "is", "a", "way", "of", "fishing", "the", "past", "from", "the", "disposal", "wiping", "it", "off", "painting", "over", "the", "ugly", "parts", "and", "recycling", "it", "for", "more", "than", "its", "worth", "But", - "trust", "me", "on", "the", "sunscreen" }; + "trust", "me", "on", "the", "sunscreen" +}; -unsigned int quicksort_input_vector[ 3000 ] = { +unsigned int quicksort_input_vector[ 3000 ] = { 1681692777, 846930886, 1804289383, 424238335, 1957747793, 1714636915, 596516649, 1649760492, 719885386, 1350490027, 1025202362, 1189641421, 2044897763, 1102520059, 783368690, 1540383426, 1365180540, 1967513926, @@ -381,7 +382,7 @@ unsigned int quicksort_input_vector[ 3000 ] = { 880492499, 1684259683, 322334813, 1820965014, 253674535, 224048977, 1950148346, 636600769, 2115115464, 353673391, 340563072, 542314107, 217852623, 1776088411, 1438865740, 1999337836, 680007057, 683309587, - 2094613281, 1925473439, 503458793, 356228371, 1279820114,330546620, + 2094613281, 1925473439, 503458793, 356228371, 1279820114, 330546620, 29860596, 978053418, 2097657371, 1817049764, 1594769883, 960188534, 1353825800, 1917104697, 209473567, 1607500335, 2141153674, 1089966067, 96617457, 2108785490, 763447433, 437180529, 503615949, 566112132, diff --git a/bench/kernel/quicksort/math_private.h b/bench/kernel/quicksort/math_private.h old mode 100644 new mode 100755 index 3a5379becb2fec3bfbbb6516f4ba5b2c8ee36277..0490524ce70034d219b571b5dfcf40035e283413 --- a/bench/kernel/quicksort/math_private.h +++ b/bench/kernel/quicksort/math_private.h @@ -21,19 +21,19 @@ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ /* - * from: @(#)fdlibm.h 5.1 93/09/24 - */ + from: @(#)fdlibm.h 5.1 93/09/24 +*/ #ifndef _MATH_PRIVATE_H_ #define _MATH_PRIVATE_H_ @@ -41,28 +41,27 @@ /* A union which permits us to convert between a float and a 32 bit int. */ -typedef union -{ +typedef union { float value; unsigned int word; } quicksort_ieee_float_shape_type; /* Get a 32 bit int from a float. */ -#define QUICKSORT_GET_FLOAT_WORD(i,d) \ -{ \ - quicksort_ieee_float_shape_type gf_u; \ - gf_u.value = (d); \ - (i) = gf_u.word; \ +#define QUICKSORT_GET_FLOAT_WORD(i,d) \ +{ \ + quicksort_ieee_float_shape_type gf_u; \ + gf_u.value = (d); \ + (i) = gf_u.word; \ } /* Set a float from a 32 bit int. */ -#define QUICKSORT_SET_FLOAT_WORD(d,i) \ -{ \ - quicksort_ieee_float_shape_type sf_u; \ - sf_u.word = (i); \ - (d) = sf_u.value; \ +#define QUICKSORT_SET_FLOAT_WORD(d,i) \ +{ \ + quicksort_ieee_float_shape_type sf_u; \ + sf_u.word = (i); \ + (d) = sf_u.value; \ } #endif /* _MATH_PRIVATE_H_ */ diff --git a/bench/kernel/quicksort/quicksort.c b/bench/kernel/quicksort/quicksort.c old mode 100644 new mode 100755 index 1320924cf6a5f8076dc8849611b10bc4ee65c125..55b4c73365d8a682abf30e5af9210f50a9a5e1f3 --- a/bench/kernel/quicksort/quicksort.c +++ b/bench/kernel/quicksort/quicksort.c @@ -47,11 +47,11 @@ int main( void ); Declaration of global variables */ -extern const char *quicksort_input_string[ 681 ]; -char quicksort_strings[ 681 ][ 20 ]; +extern const char *quicksort_input_string[ 681 ]; +char quicksort_strings[ 681 ][ 20 ]; -extern unsigned int quicksort_input_vector[ 1000 * 3 ]; -struct quicksort_3DVertexStruct quicksort_vectors[ 1000 ]; +extern unsigned int quicksort_input_vector[ 1000 * 3 ]; +struct quicksort_3DVertexStruct quicksort_vectors[ 1000 ]; volatile int quicksort_const_prop_border_i = 0; volatile char quicksort_const_prop_border_c = 0; @@ -69,33 +69,32 @@ void quicksort_init( void ) /* constant propagation border */ _Pragma( "loopbound min 3000 max 3000" ) - for ( i = 0; i < 3000; i++ ) { - quicksort_input_vector[ i ] += quicksort_const_prop_border_i; - } + for ( i = 0; i < 3000; i++ ) + quicksort_input_vector[ i ] += quicksort_const_prop_border_i; /* Init arrays */ _Pragma( "loopbound min 681 max 681" ) for ( i = 0; i < 681; i++ ) { _Pragma( "loopbound min 1 max 20" ) for ( j = 0; j < 20 - 1; j++ ) { - quicksort_strings[ i ][ j ] = quicksort_input_string[ i ][ j ]; - quicksort_strings[ i ][ j ] += quicksort_const_prop_border_c; + quicksort_strings[ i ][ j ] = quicksort_input_string[ i ][ j ]; + quicksort_strings[ i ][ j ] += quicksort_const_prop_border_c; - if ( quicksort_input_string[ i ][ j ] == '\0' ) + if ( quicksort_input_string[ i ][ j ] == '\0' ) break; } /* Terminate with '\0' anyways. */ - quicksort_strings[ i ][ 20 - 1 ] = '\0'; + quicksort_strings[ i ][ 20 - 1 ] = '\0'; } _Pragma( "loopbound min 1000 max 1000" ) for ( i = 0; i < 1000; i++ ) { - x = quicksort_vectors[ i ].x = quicksort_input_vector[ read_counter++ ]; - y = quicksort_vectors[ i ].y = quicksort_input_vector[ read_counter++ ]; - z = quicksort_vectors[ i ].z = quicksort_input_vector[ read_counter++ ]; + x = quicksort_vectors[ i ].x = quicksort_input_vector[ read_counter++ ]; + y = quicksort_vectors[ i ].y = quicksort_input_vector[ read_counter++ ]; + z = quicksort_vectors[ i ].z = quicksort_input_vector[ read_counter++ ]; - quicksort_vectors[ i ].distance = + quicksort_vectors[ i ].distance = quicksort_sqrt( quicksort_pow( x, 2 ) + quicksort_pow( y, 2 ) + quicksort_pow( z, 2 ) ); } @@ -107,11 +106,11 @@ int quicksort_return( void ) int checksum = 0; checksum += - quicksort_strings[ 42 ][ 1 ] + - quicksort_vectors[ 42 ].x + quicksort_vectors[ 42 ].y + - quicksort_vectors[ 42 ].z; + quicksort_strings[ 42 ][ 1 ] + + quicksort_vectors[ 42 ].x + quicksort_vectors[ 42 ].y + + quicksort_vectors[ 42 ].z; - return( checksum ); + return ( checksum ); } @@ -125,7 +124,7 @@ void quicksort_str( char *a, unsigned long n, unsigned long es ) char *pi, *pj, *pn; - _Pragma( "loopbound min 0 max 31" ) + _Pragma( "loopbound min 0 max 8" ) while ( n > 1 ) { if ( n > 10 ) pi = quicksort_pivot_strings( a, n, es ); @@ -137,24 +136,22 @@ void quicksort_str( char *a, unsigned long n, unsigned long es ) pn = a + n * es; pj = pn; - _Pragma( "loopbound min 1 max 170" ) + _Pragma( "loopbound min 0 max 169" ) while ( 1 ) { _Pragma( "loopbound min 1 max 26" ) do pi += es; while ( ( pi < pn ) && ( quicksort_compare_strings( pi, a ) < 0 ) ); - _Pragma( "loopbound min 1 max 49" ) + _Pragma( "loopbound min 1 max 23" ) do pj -= es; while ( ( pj > a ) && ( quicksort_compare_strings( pj, a ) > 0 ) ); if ( pj < pi ) break; - quicksort_swapi( pi, pj, es ); } - quicksort_swapi( a, pj, es ); j = ( pj - a ) / es; n = n - j - 1; @@ -229,7 +226,7 @@ void _Pragma ( "entrypoint" ) quicksort_main( void ) { _Pragma( "marker recursivecall" ) _Pragma( "flowrestriction 1*quicksort_str <= 521*recursivecall" ) - quicksort_str( *quicksort_strings, 681, sizeof( char[ 20 ] ) ); + quicksort_str( *quicksort_strings, 681, sizeof( char[ 20 ] ) ); _Pragma( "marker recursivecall2" ) _Pragma( "flowrestriction 1*quicksort_vec <= 650*recursivecall2" ) diff --git a/bench/kernel/quicksort/quicksort.h b/bench/kernel/quicksort/quicksort.h old mode 100644 new mode 100755 diff --git a/bench/kernel/quicksort/quicksortlibm.c b/bench/kernel/quicksort/quicksortlibm.c old mode 100644 new mode 100755 index 8dc83a1b1c6ca22287c1bd3d995e8de10b12fd1b..d3a48e6d0a865c17c7b4b322db53e144f4120195 --- a/bench/kernel/quicksort/quicksortlibm.c +++ b/bench/kernel/quicksort/quicksortlibm.c @@ -57,30 +57,30 @@ const float #else float #endif -quicksort_bp[] = { 1.0f, 1.5f, }, -quicksort_dp_h[] = { 0.0f, 5.84960938e-01f,}, /* 0x3f15c000 */ -quicksort_dp_l[] = { 0.0f, 1.56322085e-06f,}, /* 0x35d1cfdc */ -quicksort_L1 = 6.0000002384e-01f, /* 0x3f19999a */ -quicksort_L2 = 4.2857143283e-01f, /* 0x3edb6db7 */ -quicksort_L3 = 3.3333334327e-01f, /* 0x3eaaaaab */ -quicksort_L4 = 2.7272811532e-01f, /* 0x3e8ba305 */ -quicksort_L5 = 2.3066075146e-01f, /* 0x3e6c3255 */ -quicksort_L6 = 2.0697501302e-01f, /* 0x3e53f142 */ -quicksort_P1 = 1.6666667163e-01f, /* 0x3e2aaaab */ -quicksort_P2 = -2.7777778450e-03f, /* 0xbb360b61 */ -quicksort_P3 = 6.6137559770e-05f, /* 0x388ab355 */ -quicksort_P4 = -1.6533901999e-06f, /* 0xb5ddea0e */ -quicksort_P5 = 4.1381369442e-08f, /* 0x3331bb4c */ -quicksort_lg2 = 6.9314718246e-01f, /* 0x3f317218 */ -quicksort_lg2_h = 6.93145752e-01f, /* 0x3f317200 */ -quicksort_lg2_l = 1.42860654e-06f, /* 0x35bfbe8c */ -quicksort_ovt = 4.2995665694e-08f, /* -(128-log2(ovfl+.5ulp)) */ -quicksort_cp = 9.6179670095e-01f, /* 0x3f76384f =2/(3ln2) */ -quicksort_cp_h = 9.6179199219e-01f, /* 0x3f763800 =head of cp */ -quicksort_cp_l = 4.7017383622e-06f, /* 0x369dc3a0 =tail of cp_h */ -quicksort_ivln2 = 1.4426950216e+00f, /* 0x3fb8aa3b =1/ln2 */ -quicksort_ivln2_h = 1.4426879883e+00f, /* 0x3fb8aa00 =16b 1/ln2*/ -quicksort_ivln2_l = 7.0526075433e-06f; /* 0x36eca570 =1/ln2 tail*/ +quicksort_bp[ ] = { 1.0f, 1.5f, }, + quicksort_dp_h[ ] = { 0.0f, 5.84960938e-01f,}, /* 0x3f15c000 */ + quicksort_dp_l[ ] = { 0.0f, 1.56322085e-06f,}, /* 0x35d1cfdc */ + quicksort_L1 = 6.0000002384e-01f, /* 0x3f19999a */ + quicksort_L2 = 4.2857143283e-01f, /* 0x3edb6db7 */ + quicksort_L3 = 3.3333334327e-01f, /* 0x3eaaaaab */ + quicksort_L4 = 2.7272811532e-01f, /* 0x3e8ba305 */ + quicksort_L5 = 2.3066075146e-01f, /* 0x3e6c3255 */ + quicksort_L6 = 2.0697501302e-01f, /* 0x3e53f142 */ + quicksort_P1 = 1.6666667163e-01f, /* 0x3e2aaaab */ + quicksort_P2 = -2.7777778450e-03f, /* 0xbb360b61 */ + quicksort_P3 = 6.6137559770e-05f, /* 0x388ab355 */ + quicksort_P4 = -1.6533901999e-06f, /* 0xb5ddea0e */ + quicksort_P5 = 4.1381369442e-08f, /* 0x3331bb4c */ + quicksort_lg2 = 6.9314718246e-01f, /* 0x3f317218 */ + quicksort_lg2_h = 6.93145752e-01f, /* 0x3f317200 */ + quicksort_lg2_l = 1.42860654e-06f, /* 0x35bfbe8c */ + quicksort_ovt = 4.2995665694e-08f, /* -(128-log2(ovfl+.5ulp)) */ + quicksort_cp = 9.6179670095e-01f, /* 0x3f76384f =2/(3ln2) */ + quicksort_cp_h = 9.6179199219e-01f, /* 0x3f763800 =head of cp */ + quicksort_cp_l = 4.7017383622e-06f, /* 0x369dc3a0 =tail of cp_h */ + quicksort_ivln2 = 1.4426950216e+00f, /* 0x3fb8aa3b =1/ln2 */ + quicksort_ivln2_h = 1.4426879883e+00f, /* 0x3fb8aa00 =16b 1/ln2*/ + quicksort_ivln2_l = 7.0526075433e-06f; /* 0x36eca570 =1/ln2 tail*/ #ifdef __STDC__ @@ -103,17 +103,17 @@ float x, y; /* y==zero: x**0 = 1 */ if ( iy == 0 ) - return( quicksort_one ); + return ( quicksort_one ); /* x==+-1 */ if ( x == 1.0f ) - return( quicksort_one ); + return ( quicksort_one ); if ( ( x == -1.0f ) && quicksort_isinf( y ) ) - return( quicksort_one ); + return ( quicksort_one ); /* +-NaN return x+y */ if ( ( ix > 0x7f800000 ) || ( iy > 0x7f800000 ) ) - return( x + y ); + return ( x + y ); /* determine if y is an odd int when x < 0 yisint = 0 ... y is not an integer @@ -137,24 +137,24 @@ float x, y; /* special value of y */ if ( iy == 0x7f800000 ) { /* y is +-inf */ if ( ix == 0x3f800000 ) - return( y - y ); /* inf**+-1 is NaN */ + return ( y - y ); /* inf**+-1 is NaN */ else if ( ix > 0x3f800000 ) /* (|x|>1)**+-inf = inf,0 */ - return( ( hy >= 0 ) ? y : quicksort_zero ); + return ( ( hy >= 0 ) ? y : quicksort_zero ); else /* (|x|<1)**-,+inf = inf,0 */ - return( ( hy < 0 ) ? -y : quicksort_zero ); + return ( ( hy < 0 ) ? -y : quicksort_zero ); } if ( iy == 0x3f800000 ) { /* y is +-1 */ if ( hy < 0 ) - return( quicksort_one / x ); + return ( quicksort_one / x ); else - return( x ); + return ( x ); } if ( hy == 0x40000000 ) - return( x * x ); /* y is 2 */ + return ( x * x ); /* y is 2 */ if ( hy == 0x3f000000 ) { /* y is 0.5 */ if ( hx >= 0 ) /* x >= +0 */ - return( quicksort___ieee754_sqrtf( x ) ); + return ( quicksort___ieee754_sqrtf( x ) ); } ax = quicksort_fabsf( x ); @@ -168,26 +168,26 @@ float x, y; z = ( z - z ) / ( z - z ); /* (-1)**non-int is NaN */ else - if ( yisint == 1 ) - z = -z; /* (x<0)**odd = -(|x|**odd) */ + if ( yisint == 1 ) + z = -z; /* (x<0)**odd = -(|x|**odd) */ } - return( z ); + return ( z ); } /* (x<0)**(non-int) is NaN */ - if ( ( ( ( (unsigned int) hx >> 31 ) - 1 ) | yisint ) == 0 ) - return( ( x - x ) / ( x - x ) ); + if ( ( ( ( ( unsigned int ) hx >> 31 ) - 1 ) | yisint ) == 0 ) + return ( ( x - x ) / ( x - x ) ); /* |y| is huge */ if ( iy > 0x4d000000 ) { /* if |y| > 2**27 */ /* over/underflow if x is not close to one */ if ( ix < 0x3f7ffff8 ) - return( ( hy < 0 ) ? - quicksort_huge * quicksort_huge : quicksort_tiny * quicksort_tiny ); + return ( ( hy < 0 ) ? + quicksort_huge *quicksort_huge : quicksort_tiny * quicksort_tiny ); if ( ix > 0x3f800007 ) - return( ( hy > 0 ) ? - quicksort_huge * quicksort_huge : quicksort_tiny * quicksort_tiny ); + return ( ( hy > 0 ) ? + quicksort_huge *quicksort_huge : quicksort_tiny * quicksort_tiny ); /* now |1-x| is tiny <= 2**-20, suffice to compute log(x) by x-x^2/2+x^3/3-x^4/4 */ t = x - 1; /* t has 20 trailing zeros */ @@ -219,33 +219,33 @@ float x, y; k = 0; /* |x|<sqrt(3/2) */ else - if ( j < 0x5db3d7 ) - k = 1; /* |x|<sqrt(3) */ - else { - k = 0; - n += 1; - ix -= 0x00800000; - } + if ( j < 0x5db3d7 ) + k = 1; /* |x|<sqrt(3) */ + else { + k = 0; + n += 1; + ix -= 0x00800000; + } QUICKSORT_SET_FLOAT_WORD( ax, ix ); /* compute s = s_h+s_l = (x-1)/(x+1) or (x-1.5)/(x+1.5) */ - u = ax - quicksort_bp[k]; /* bp[0]=1.0, bp[1]=1.5 */ - v = quicksort_one / ( ax + quicksort_bp[k] ); + u = ax - quicksort_bp[ k ]; /* bp[ 0 ]=1.0, bp[ 1 ]=1.5 */ + v = quicksort_one / ( ax + quicksort_bp[ k ] ); s = u * v; s_h = s; QUICKSORT_GET_FLOAT_WORD( is, s_h ); QUICKSORT_SET_FLOAT_WORD( s_h, is & 0xfffff000 ); - /* t_h=ax+bp[k] High */ + /* t_h=ax+bp[ k ] High */ QUICKSORT_SET_FLOAT_WORD( t_h, ( ( ix >> 1 ) | 0x20000000 ) + 0x0040000 + ( k << 21 ) ); - t_l = ax - ( t_h - quicksort_bp[k] ); + t_l = ax - ( t_h - quicksort_bp[ k ] ); s_l = v * ( ( u - s_h * t_h ) - s_h * t_l ); /* compute log(ax) */ s2 = s * s; r = s2 * s2 * ( quicksort_L1 + s2 * ( quicksort_L2 + s2 * ( quicksort_L3 + s2 * - ( quicksort_L4 + s2 * ( quicksort_L5 + s2 * quicksort_L6 ) ) ) ) ); + ( quicksort_L4 + s2 * ( quicksort_L5 + s2 * quicksort_L6 ) ) ) ) ); r += s_l * ( s_h + s ); s2 = s_h * s_h; t_h = ( float ) 3.0f + s2 + r; @@ -261,13 +261,13 @@ float x, y; QUICKSORT_SET_FLOAT_WORD( p_h, is & 0xfffff000 ); p_l = v - ( p_h - u ); z_h = quicksort_cp_h * p_h; /* cp_h+cp_l = 2/(3*log2) */ - z_l = quicksort_cp_l * p_h + p_l * quicksort_cp + quicksort_dp_l[k]; + z_l = quicksort_cp_l * p_h + p_l * quicksort_cp + quicksort_dp_l[ k ]; /* log2(ax) = (s+..)*2/(3*log2) = n + dp_h + z_h + z_l */ t = ( float ) n; - t1 = ( ( ( z_h + z_l ) + quicksort_dp_h[k] ) + t ); + t1 = ( ( ( z_h + z_l ) + quicksort_dp_h[ k ] ) + t ); QUICKSORT_GET_FLOAT_WORD( is, t1 ); QUICKSORT_SET_FLOAT_WORD( t1, is & 0xfffff000 ); - t2 = z_l - ( ( ( t1 - t ) - quicksort_dp_h[k] ) - z_h ); + t2 = z_l - ( ( ( t1 - t ) - quicksort_dp_h[ k ] ) - z_h ); } s = quicksort_one; /* s (sign of result -ve**odd) = -1 else = 1 */ @@ -282,22 +282,22 @@ float x, y; z = p_l + p_h; QUICKSORT_GET_FLOAT_WORD( j, z ); if ( j > 0x43000000 ) /* if z > 128 */ - return( s * quicksort_huge * quicksort_huge ); /* overflow */ + return ( s * quicksort_huge * quicksort_huge ); /* overflow */ else - if ( j == 0x43000000 ) { /* if z == 128 */ - if ( p_l + quicksort_ovt > z - p_h ) - return( s * quicksort_huge * quicksort_huge ); /* overflow */ - } else + if ( j == 0x43000000 ) { /* if z == 128 */ + if ( p_l + quicksort_ovt > z - p_h ) + return ( s * quicksort_huge * quicksort_huge ); /* overflow */ + } else - if ( ( j & 0x7fffffff ) > 0x43160000 ) /* z <= -150 */ - return( s * quicksort_tiny * quicksort_tiny ); /* underflow */ - else + if ( ( j & 0x7fffffff ) > 0x43160000 ) /* z <= -150 */ + return ( s * quicksort_tiny * quicksort_tiny ); /* underflow */ + else - if ( ( unsigned int ) j == 0xc3160000 ) { /* z == -150 */ - if ( p_l <= z - p_h ) - return( s * quicksort_tiny * quicksort_tiny ); /* underflow */ - } + if ( ( unsigned int ) j == 0xc3160000 ) { /* z == -150 */ + if ( p_l <= z - p_h ) + return ( s * quicksort_tiny * quicksort_tiny ); /* underflow */ + } /* compute 2**(p_h+p_l) @@ -305,7 +305,7 @@ float x, y; i = j & 0x7fffffff; k = ( i >> 23 ) - 0x7f; n = 0; - if ( i > 0x3f000000 ) { /* if |z| > 0.5, set n = [z+0.5] */ + if ( i > 0x3f000000 ) { /* if |z| > 0.5, set n = [ z+0.5 ] */ n = j + ( 0x00800000 >> ( k + 1 ) ); k = ( ( n & 0x7fffffff ) >> 23 ) - 0x7f; /* new k for n */ QUICKSORT_SET_FLOAT_WORD( t, n & ~( 0x007fffff >> k ) ); @@ -324,7 +324,7 @@ float x, y; t = z * z; t1 = z - t * ( quicksort_P1 + t * ( quicksort_P2 + t * ( quicksort_P3 + t * - ( quicksort_P4 + t * quicksort_P5 ) ) ) ); + ( quicksort_P4 + t * quicksort_P5 ) ) ) ); r = ( z * t1 ) / ( t1 - quicksort_two ) - ( w + z * w ); z = quicksort_one - ( r - z ); QUICKSORT_GET_FLOAT_WORD( j, z ); @@ -334,7 +334,7 @@ float x, y; else QUICKSORT_SET_FLOAT_WORD( z, j ); - return( s * z ); + return ( s * z ); } @@ -370,17 +370,17 @@ float x; /* take care of Inf and NaN */ if ( ( ix & 0x7f800000 ) == 0x7f800000 ) - return( x * x + x ); /* sqrt(NaN)=NaN, sqrt(+inf)=+inf + return ( x * x + x ); /* sqrt(NaN)=NaN, sqrt(+inf)=+inf sqrt(-inf)=sNaN */ /* take care of zero */ if ( ix <= 0 ) { if ( ( ix & ( ~sign ) ) == 0 ) - return( x ); /* sqrt(+-0) = +-0 */ + return ( x ); /* sqrt(+-0) = +-0 */ else - if ( ix < 0 ) - return( ( x - x ) / ( x - x ) ); /* sqrt(-ve) = sNaN */ + if ( ix < 0 ) + return ( ( x - x ) / ( x - x ) ); /* sqrt(-ve) = sNaN */ } /* normalize x */ @@ -395,7 +395,7 @@ float x; ix = ( ix & 0x007fffff ) | 0x00800000; if ( m & 1 ) /* odd m, double x to make it even */ ix += ix; - m >>= 1; /* m = [m/2] */ + m >>= 1; /* m = [ m/2 ] */ /* generate sqrt(x) bit by bit */ ix += ix; @@ -429,7 +429,7 @@ float x; ix += ( m << 23 ); QUICKSORT_SET_FLOAT_WORD( z, ix ); - return( z ); + return ( z ); } @@ -468,7 +468,7 @@ float x, y; QUICKSORT_GET_FLOAT_WORD( iy, y ); QUICKSORT_SET_FLOAT_WORD( x, ( ix & 0x7fffffff ) | ( iy & 0x80000000 ) ); - return( x ); + return ( x ); } @@ -489,7 +489,7 @@ float x, y; /* __ieee754_rem_pio2f(x,y) - return the remainder of x rem pi/2 in y[0]+y[1] + return the remainder of x rem pi/2 in y[ 0 ]+y[ 1 ] use __kernel_rem_pio2f() */ @@ -497,9 +497,9 @@ float x, y; /* This array is like the one in e_rem_pio2.c, but the numbers are single precision and the last 8 bits are forced to 0. */ #ifdef __STDC__ -const int quicksort_npio2_hw[] = { +const int quicksort_npio2_hw[ ] = { #else -int quicksort_npio2_hw[] = { +int quicksort_npio2_hw[ ] = { #endif 0x3fc90f00, 0x40490f00, 0x4096cb00, 0x40c90f00, 0x40fb5300, 0x4116cb00, 0x412fed00, 0x41490f00, 0x41623100, 0x417b5300, 0x418a3a00, 0x4196cb00, @@ -538,7 +538,7 @@ quicksort_pio2_3t = 6.1232342629e-17f; /* 0x248d3132 */ int quicksort___ieee754_rem_pio2f( float x, float *y ) #else int quicksort___ieee754_rem_pio2f( x, y ) -float x, y[]; +float x, y[ ]; #endif { float z, w, t, r, fn; @@ -548,35 +548,35 @@ float x, y[]; QUICKSORT_GET_FLOAT_WORD( hx, x ); ix = hx & 0x7fffffff; if ( ix <= 0x3f490fd8 ) { /* |x| ~<= pi/4 , no need for reduction */ - y[ 0 ] = x; - y[ 1 ] = 0; + y[ 0 ] = x; + y[ 1 ] = 0; - return( 0 ); + return ( 0 ); } if ( ix < 0x4016cbe4 ) { /* |x| < 3pi/4, special case with n=+-1 */ if ( hx > 0 ) { z = x - quicksort_pio2_1; if ( ( ix & 0xfffffff0 ) != 0x3fc90fd0 ) { /* 24+24 bit pi OK */ - y[ 0 ] = z - quicksort_pio2_1t; - y[ 1 ] = ( z - y[ 0 ] ) - quicksort_pio2_1t; + y[ 0 ] = z - quicksort_pio2_1t; + y[ 1 ] = ( z - y[ 0 ] ) - quicksort_pio2_1t; } else { /* near pi/2, use 24+24+24 bit pi */ z -= quicksort_pio2_2; - y[ 0 ] = z - quicksort_pio2_2t; - y[ 1 ] = ( z - y[ 0 ] ) - quicksort_pio2_2t; + y[ 0 ] = z - quicksort_pio2_2t; + y[ 1 ] = ( z - y[ 0 ] ) - quicksort_pio2_2t; } - return( 1 ); + return ( 1 ); } else { /* negative x */ z = x + quicksort_pio2_1; if ( ( ix & 0xfffffff0 ) != 0x3fc90fd0 ) { /* 24+24 bit pi OK */ - y[ 0 ] = z + quicksort_pio2_1t; - y[ 1 ] = ( z - y[ 0 ] ) + quicksort_pio2_1t; + y[ 0 ] = z + quicksort_pio2_1t; + y[ 1 ] = ( z - y[ 0 ] ) + quicksort_pio2_1t; } else { /* near pi/2, use 24+24+24 bit pi */ z += quicksort_pio2_2; - y[ 0 ] = z + quicksort_pio2_2t; - y[ 1 ] = ( z - y[ 0 ] ) + quicksort_pio2_2t; + y[ 0 ] = z + quicksort_pio2_2t; + y[ 1 ] = ( z - y[ 0 ] ) + quicksort_pio2_2t; } - return( -1 ); + return ( -1 ); } } @@ -588,52 +588,52 @@ float x, y[]; w = fn * quicksort_pio2_1t; /* 1st round good to 40 bit */ if ( ( n < 32 ) && ( ( int ) ( ix & 0xffffff00 ) != - quicksort_npio2_hw[ n - 1 ] ) ) - y[ 0 ] = r - w; /* quick check no cancellation */ + quicksort_npio2_hw[ n - 1 ] ) ) + y[ 0 ] = r - w; /* quick check no cancellation */ else { unsigned int high; j = ix >> 23; - y[ 0 ] = r - w; - QUICKSORT_GET_FLOAT_WORD( high, y[ 0 ] ); + y[ 0 ] = r - w; + QUICKSORT_GET_FLOAT_WORD( high, y[ 0 ] ); i = j - ( ( high >> 23 ) & 0xff ); if ( i > 8 ) { /* 2nd iteration needed, good to 57 */ t = r; w = fn * quicksort_pio2_2; r = t - w; w = fn * quicksort_pio2_2t - ( ( t - r ) - w ); - y[ 0 ] = r - w; - QUICKSORT_GET_FLOAT_WORD( high, y[ 0 ] ); + y[ 0 ] = r - w; + QUICKSORT_GET_FLOAT_WORD( high, y[ 0 ] ); i = j - ( ( high >> 23 ) & 0xff ); if ( i > 25 ) { /* 3rd iteration need, 74 bits acc */ t = r; /* will cover all possible cases */ w = fn * quicksort_pio2_3; r = t - w; w = fn * quicksort_pio2_3t - ( ( t - r ) - w ); - y[ 0 ] = r - w; + y[ 0 ] = r - w; } } } - y[ 1 ] = ( r - y[ 0 ] ) - w; + y[ 1 ] = ( r - y[ 0 ] ) - w; if ( hx < 0 ) { - y[ 0 ] = -y[ 0 ]; - y[ 1 ] = -y[ 1 ]; - return( -n ); + y[ 0 ] = -y[ 0 ]; + y[ 1 ] = -y[ 1 ]; + return ( -n ); } else - return( n ); + return ( n ); } /* all other (large) arguments */ if ( ix >= 0x7f800000 ) { /* x is inf or NaN */ - y[ 0 ] = y[ 1 ] = x - x; - return( 0 ); + y[ 0 ] = y[ 1 ] = x - x; + return ( 0 ); } - y[ 0 ] = y[ 1 ] = x - x; /* dummy initialization */ - return( 0 ); /* doesn't happen for our input */ + y[ 0 ] = y[ 1 ] = x - x; /* dummy initialization */ + return ( 0 ); /* doesn't happen for our input */ } @@ -679,14 +679,14 @@ float x, y; ix &= 0x7fffffff; /* ix = |x|'s high word*/ if ( ix < 0x32000000 ) { /* if x < 2**27 */ if ( ( ( int ) x ) == 0 ) - return( quicksort_one ); /* generate inexact */ + return ( quicksort_one ); /* generate inexact */ } z = x * x; r = z * ( quicksort_C1 + z * ( quicksort_C2 + z * ( quicksort_C3 + z * - ( quicksort_C4 + z * ( quicksort_C5 + z * quicksort_C6 ) ) ) ) ); + ( quicksort_C4 + z * ( quicksort_C5 + z * quicksort_C6 ) ) ) ) ); if ( ix < 0x3e99999a ) /* if |x| < 0.3 */ - return( quicksort_one - ( ( float ) 0.5f * z - ( z * r - x * y ) ) ); + return ( quicksort_one - ( ( float ) 0.5f * z - ( z * r - x * y ) ) ); else { if ( ix > 0x3f480000 ) /* x > 0.78125 */ qx = ( float ) 0.28125f; @@ -695,7 +695,7 @@ float x, y; } hz = ( float ) 0.5f * z - qx; a = quicksort_one - qx; - return( a - ( hz - ( z * r - x * y ) ) ); + return ( a - ( hz - ( z * r - x * y ) ) ); } } @@ -744,19 +744,19 @@ int iy; /* iy=0 if y is zero */ ix &= 0x7fffffff; /* high word of x */ if ( ix < 0x32000000 ) { /* |x| < 2**-27 */ if ( ( int ) x == 0 ) - return( x ); /* generate inexact */ + return ( x ); /* generate inexact */ } z = x * x; v = z * x; r = quicksort_S2 + z * ( quicksort_S3 + z * ( quicksort_S4 + z * - ( quicksort_S5 + z * quicksort_S6 ) ) ); + ( quicksort_S5 + z * quicksort_S6 ) ) ); if ( iy == 0 ) - return( x + v * ( quicksort_S1 + z * r ) ); + return ( x + v * ( quicksort_S1 + z * r ) ); else - return( - x - ( ( z * ( quicksort_half * y - v * r ) - y ) - v * quicksort_S1 ) ); + return ( + x - ( ( z * ( quicksort_half * y - v * r ) - y ) - v * quicksort_S1 ) ); } @@ -776,9 +776,9 @@ int iy; /* iy=0 if y is zero */ */ #ifdef __STDC__ -const float quicksort_atanhi[] = { +const float quicksort_atanhi[ ] = { #else -float quicksort_atanhi[] = { +float quicksort_atanhi[ ] = { #endif 4.6364760399e-01f, /* atan(0.5)hi 0x3eed6338 */ 7.8539812565e-01f, /* atan(1.0)hi 0x3f490fda */ @@ -788,9 +788,9 @@ float quicksort_atanhi[] = { #ifdef __STDC__ -const float quicksort_atanlo[] = { +const float quicksort_atanlo[ ] = { #else -float quicksort_atanlo[] = { +float quicksort_atanlo[ ] = { #endif 5.0121582440e-09f, /* atan(0.5)lo 0x31ac3769 */ 3.7748947079e-08f, /* atan(1.0)lo 0x33222168 */ @@ -800,9 +800,9 @@ float quicksort_atanlo[] = { #ifdef __STDC__ -const float quicksort_aT[] = { +const float quicksort_aT[ ] = { #else -float quicksort_aT[] = { +float quicksort_aT[ ] = { #endif 3.3333334327e-01f, /* 0x3eaaaaaa */ -2.0000000298e-01f, /* 0xbe4ccccd */ @@ -833,16 +833,16 @@ float x; ix = hx & 0x7fffffff; if ( ix >= 0x50800000 ) { /* if |x| >= 2^34 */ if ( ix > 0x7f800000 ) - return( x + x ); /* NaN */ + return ( x + x ); /* NaN */ if ( hx > 0 ) - return( quicksort_atanhi[ 3 ] + quicksort_atanlo[ 3 ] ); + return ( quicksort_atanhi[ 3 ] + quicksort_atanlo[ 3 ] ); else - return( -quicksort_atanhi[ 3 ] - quicksort_atanlo[ 3 ] ); + return ( -quicksort_atanhi[ 3 ] - quicksort_atanlo[ 3 ] ); } if ( ix < 0x3ee00000 ) { /* |x| < 0.4375 */ if ( ix < 0x31000000 ) { /* |x| < 2^-29 */ if ( quicksort_huge + x > quicksort_one ) - return( x ); /* raise inexact */ + return ( x ); /* raise inexact */ } id = -1; } else { @@ -868,27 +868,27 @@ float x; /* end of argument reduction */ z = x * x; w = z * z; - /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */ + /* break sum from i=0 to 10 aT[ i ]z**(i+1) into odd and even poly */ s1 = - z * ( quicksort_aT[ 0 ] + - w * ( quicksort_aT[ 2 ] + - w * ( quicksort_aT[ 4 ] + - w * ( quicksort_aT[ 6 ] + - w * ( quicksort_aT[ 8 ] + - w * quicksort_aT[ 10 ] ) ) ) ) ); + z * ( quicksort_aT[ 0 ] + + w * ( quicksort_aT[ 2 ] + + w * ( quicksort_aT[ 4 ] + + w * ( quicksort_aT[ 6 ] + + w * ( quicksort_aT[ 8 ] + + w * quicksort_aT[ 10 ] ) ) ) ) ); s2 = - w * ( quicksort_aT[ 1 ] + - w * ( quicksort_aT[ 3 ] + - w * ( quicksort_aT[ 5 ] + - w * ( quicksort_aT[ 7 ] + - w * quicksort_aT[ 9 ] ) ) ) ); + w * ( quicksort_aT[ 1 ] + + w * ( quicksort_aT[ 3 ] + + w * ( quicksort_aT[ 5 ] + + w * ( quicksort_aT[ 7 ] + + w * quicksort_aT[ 9 ] ) ) ) ); if ( id < 0 ) - return( x - x * ( s1 + s2 ) ); + return ( x - x * ( s1 + s2 ) ); else { - z = quicksort_atanhi[ id ] - - ( ( x * ( s1 + s2 ) - quicksort_atanlo[ id ] ) - x ); - return( ( hx < 0 ) ? -z : z ); + z = quicksort_atanhi[ id ] - + ( ( x * ( s1 + s2 ) - quicksort_atanlo[ id ] ) - x ); + return ( ( hx < 0 ) ? -z : z ); } } @@ -915,7 +915,7 @@ float quicksort___cosf( x ) float x; #endif { - float y[ 2 ], z = 0.0f; + float y[ 2 ], z = 0.0f; int n, ix; @@ -924,12 +924,12 @@ float x; /* |x| ~< pi/4 */ ix &= 0x7fffffff; if ( ix <= 0x3f490fd8 ) - return( quicksort___kernel_cosf( x, z ) ); + return ( quicksort___kernel_cosf( x, z ) ); /* cos(Inf or NaN) is NaN */ else if ( ix >= 0x7f800000 ) - return( x - x ); + return ( x - x ); /* argument reduction needed */ else { @@ -937,13 +937,13 @@ float x; switch ( n & 3 ) { case 0: - return( quicksort___kernel_cosf( y[ 0 ], y[ 1 ] ) ); + return ( quicksort___kernel_cosf( y[ 0 ], y[ 1 ] ) ); case 1: - return( -quicksort___kernel_sinf( y[ 0 ], y[ 1 ], 1 ) ); + return ( -quicksort___kernel_sinf( y[ 0 ], y[ 1 ], 1 ) ); case 2: - return( -quicksort___kernel_cosf( y[ 0 ], y[ 1 ] ) ); + return ( -quicksort___kernel_cosf( y[ 0 ], y[ 1 ] ) ); default: - return( quicksort___kernel_sinf( y[ 0 ], y[ 1 ], 1 ) ); + return ( quicksort___kernel_sinf( y[ 0 ], y[ 1 ], 1 ) ); } } } @@ -971,7 +971,7 @@ float quicksort___sinf( x ) float x; #endif { - float y[ 2 ], z = 0.0; + float y[ 2 ], z = 0.0; int n, ix; @@ -980,12 +980,12 @@ float x; /* |x| ~< pi/4 */ ix &= 0x7fffffff; if ( ix <= 0x3f490fd8 ) - return( quicksort___kernel_sinf( x, z, 0 ) ); + return ( quicksort___kernel_sinf( x, z, 0 ) ); /* sin(Inf or NaN) is NaN */ else if ( ix >= 0x7f800000 ) - return( x - x ); + return ( x - x ); /* argument reduction needed */ else { @@ -993,13 +993,13 @@ float x; switch ( n & 3 ) { case 0: - return( quicksort___kernel_sinf( y[ 0 ], y[ 1 ], 1 ) ); + return ( quicksort___kernel_sinf( y[ 0 ], y[ 1 ], 1 ) ); case 1: - return( quicksort___kernel_cosf( y[ 0 ], y[ 1 ] ) ); + return ( quicksort___kernel_cosf( y[ 0 ], y[ 1 ] ) ); case 2: - return( -quicksort___kernel_sinf( y[ 0 ], y[ 1 ], 1 ) ); + return ( -quicksort___kernel_sinf( y[ 0 ], y[ 1 ], 1 ) ); default: - return( -quicksort___kernel_cosf( y[ 0 ], y[ 1 ] ) ); + return ( -quicksort___kernel_cosf( y[ 0 ], y[ 1 ] ) ); } } } @@ -1036,7 +1036,7 @@ float x; QUICKSORT_GET_FLOAT_WORD( ix, x ); QUICKSORT_SET_FLOAT_WORD( x, ix & 0x7fffffff ); - return( x ); + return ( x ); } @@ -1078,32 +1078,32 @@ int n; k = ( ix & 0x7f800000 ) >> 23; /* extract exponent */ if ( k == 0 ) { /* 0 or subnormal x */ if ( ( ix & 0x7fffffff ) == 0 ) - return( x ); /* +-0 */ + return ( x ); /* +-0 */ x *= quicksort_two25; QUICKSORT_GET_FLOAT_WORD( ix, x ); k = ( ( ix & 0x7f800000 ) >> 23 ) - 25; } if ( k == 0xff ) - return( x + x ); /* NaN or Inf */ + return ( x + x ); /* NaN or Inf */ k = k + n; if ( ( n > 50000 ) || ( k > 0xfe ) ) /* overflow */ - return( quicksort_huge * quicksort___copysignf( quicksort_huge, x ) ); + return ( quicksort_huge * quicksort___copysignf( quicksort_huge, x ) ); if ( n < -50000 ) /* underflow */ - return( quicksort_tiny * quicksort___copysignf( quicksort_tiny, x ) ); + return ( quicksort_tiny * quicksort___copysignf( quicksort_tiny, x ) ); if ( k > 0 ) { /* normal result */ QUICKSORT_SET_FLOAT_WORD( x, ( ix & 0x807fffff ) | ( k << 23 ) ); - return( x ); + return ( x ); } if ( k <= -25 ) /* underflow */ - return( quicksort_tiny * quicksort___copysignf( quicksort_tiny, x ) ); + return ( quicksort_tiny * quicksort___copysignf( quicksort_tiny, x ) ); k += 25; /* subnormal result */ QUICKSORT_SET_FLOAT_WORD( x, ( ix & 0x807fffff ) | ( k << 23 ) ); - return( x * quicksort_twom25 ); + return ( x * quicksort_twom25 ); } @@ -1125,5 +1125,5 @@ int quicksort___isinff( float x ) t = ix & 0x7fffffff; t ^= 0x7f800000; t |= -t; - return( ~( t >> 31 ) & ( ix >> 30 ) ); + return ( ~( t >> 31 ) & ( ix >> 30 ) ); } diff --git a/bench/kernel/quicksort/quicksortlibm.h b/bench/kernel/quicksort/quicksortlibm.h old mode 100644 new mode 100755 diff --git a/bench/kernel/quicksort/quicksortstdlib.c b/bench/kernel/quicksort/quicksortstdlib.c old mode 100644 new mode 100755 index 91ad523e15de38b4dc915120c285efa5032e609f..6e210d5d71d5d3f0cdf559eb82dffb91776a0b7a --- a/bench/kernel/quicksort/quicksortstdlib.c +++ b/bench/kernel/quicksort/quicksortstdlib.c @@ -29,9 +29,9 @@ int quicksort_strcmp( const char *str1, const char *str2 ) { _Pragma( "loopbound min 0 max 11" ) while ( *str1 && ( *str1 == *str2 ) ) - ++str1, ++str2; - - return( *(const unsigned char *)str1 - *(const unsigned char *)str2 ); + ++str1, ++str2; + + return ( *( const unsigned char * )str1 - * ( const unsigned char * )str2 ); } @@ -42,13 +42,13 @@ int quicksort_compare_strings( const char *elem1, const char *elem2 ) result = quicksort_strcmp( elem1, elem2 ); - return( ( result < 0 ) ? 1 : ( ( result == 0 ) ? 0 : -1 ) ); + return ( ( result < 0 ) ? 1 : ( ( result == 0 ) ? 0 : -1 ) ); } int quicksort_compare_vectors( const char *elem1, const char *elem2 ) { - /* D = [(x1 - x2)^2 + (y1 - y2)^2 + (z1 - z2)^2]^(1/2) */ + /* D = [ (x1 - x2)^2 + (y1 - y2)^2 + (z1 - z2)^2 ]^(1/2) */ /* sort based on distances from the origin... */ double distance1, distance2; @@ -57,8 +57,8 @@ int quicksort_compare_vectors( const char *elem1, const char *elem2 ) distance1 = ( *( ( struct quicksort_3DVertexStruct * )elem1 ) ).distance; distance2 = ( *( ( struct quicksort_3DVertexStruct * )elem2 ) ).distance; - return( - ( distance1 > distance2 ) ? 1 : ( ( distance1 == distance2 ) ? 0 : -1 ) ); + return ( + ( distance1 > distance2 ) ? 1 : ( ( distance1 == distance2 ) ? 0 : -1 ) ); } @@ -67,10 +67,10 @@ void quicksort_swapi( char *ii, char *ij, unsigned long es ) char *i, *j, c; - i = (char *) ii; - j = (char *) ij; + i = ( char * ) ii; + j = ( char * ) ij; - _Pragma( "loopbound min 20 max 20" ) + _Pragma( "loopbound min 20 max 24" ) do { c = *i; *i++ = *j; @@ -95,19 +95,19 @@ char *quicksort_pivot_strings( char *a, unsigned long n, unsigned long es ) if ( quicksort_compare_strings( pi, pj ) < 0 ) { if ( quicksort_compare_strings( pi, pk ) < 0 ) { if ( quicksort_compare_strings( pj, pk ) < 0 ) - return( pj ); - return( pk ); + return ( pj ); + return ( pk ); } - return( pi ); + return ( pi ); } if ( quicksort_compare_strings( pj, pk ) < 0 ) { if ( quicksort_compare_strings( pi, pk ) < 0 ) - return( pi ); - return( pk ); + return ( pi ); + return ( pk ); } - return( pj ); + return ( pj ); } @@ -126,17 +126,17 @@ char *quicksort_pivot_vectors( char *a, unsigned long n, unsigned long es ) if ( quicksort_compare_vectors( pi, pj ) < 0 ) { if ( quicksort_compare_vectors( pi, pk ) < 0 ) { if ( quicksort_compare_vectors( pj, pk ) < 0 ) - return( pj ); - return( pk ); + return ( pj ); + return ( pk ); } - return( pi ); + return ( pi ); } if ( quicksort_compare_vectors( pj, pk ) < 0 ) { if ( quicksort_compare_vectors( pi, pk ) < 0 ) - return( pi ); - return( pk ); + return ( pi ); + return ( pk ); } - return( pj ); + return ( pj ); } diff --git a/bench/kernel/quicksort/quicksortstdlib.h b/bench/kernel/quicksort/quicksortstdlib.h old mode 100644 new mode 100755 diff --git a/bench/kernel/rad2deg/ChangeLog.txt b/bench/kernel/rad2deg/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/rad2deg/pi.h b/bench/kernel/rad2deg/pi.h old mode 100644 new mode 100755 diff --git a/bench/kernel/rad2deg/rad2deg.c b/bench/kernel/rad2deg/rad2deg.c old mode 100644 new mode 100755 diff --git a/bench/kernel/recursion/ChangeLog.txt b/bench/kernel/recursion/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/recursion/recursion.c b/bench/kernel/recursion/recursion.c old mode 100644 new mode 100755 index c4ae41f34af92fb8910acfea724100bd94e9ead5..f0e7eddbdbab02139040636ae8d20361c0750185 --- a/bench/kernel/recursion/recursion.c +++ b/bench/kernel/recursion/recursion.c @@ -54,7 +54,7 @@ int recursion_fib( int i ) int recursion_return() { - return (recursion_result + (-89) ) != 0; + return ( recursion_result + ( -89 ) ) != 0; } void _Pragma( "entrypoint" ) recursion_main( void ) diff --git a/bench/kernel/sha/Changelog.txt b/bench/kernel/sha/Changelog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/sha/input_small.c b/bench/kernel/sha/input_small.c old mode 100644 new mode 100755 index f15f864ba907c55d6938635f0f9503de6571ad01..863fd97a8ac5c701416dfa24a1caed76813287c8 --- a/bench/kernel/sha/input_small.c +++ b/bench/kernel/sha/input_small.c @@ -15,1643 +15,1643 @@ License: May be used, modified, and re-distributed freely. */ -unsigned volatile char sha_data[32743] = { - 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', - 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', - 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', - 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', - 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', - 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', - 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', - 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', - 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', - 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', - 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', - 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', - 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', - 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', - 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', - 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', - 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', - 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', - 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', - 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', - 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', - 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', - 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', - 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', - 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', - 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', - 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', - 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', - 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', - 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', - 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', - 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', - 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', - 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', - 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', - 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', - 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', - 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', - 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', - 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', - 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', - 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', - 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', - 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', - 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', - 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', - 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', - 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', - 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', - 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', - 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', - 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', - 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', - 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', - 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', - 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', - 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', - 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', - 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', - 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', - 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', - 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', - 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', - 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', - 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', - 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', - 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', - 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', - 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', - 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', - 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', - 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', - 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', - 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', - 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', - 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', - 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', - 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', - 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', - 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', - 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', - 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', - 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', - 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', - 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', - 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', - 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', - 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', - 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', - 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', - 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', - 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', - 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', - 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', - 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', - 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', - 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', - 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', - 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', - 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', - 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', - 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', - 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', - 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', - 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', - 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', - 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', - 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', - 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', - 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', - 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', - 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', - 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', - 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', - 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', - 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', - 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', - 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', - 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', - 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', - 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', - 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'K', 'u', 'r', 't', - 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', - 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', - 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', - 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', - 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', - 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', - 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', - 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', - 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', - 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', - 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', - 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', - 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', - 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', - 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', - 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', - 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', - 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', - 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', - 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', - 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', - 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', - 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', - 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', - 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', - 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', - 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', - 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', - 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', - 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', - 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 'K', 'u', 'r', 't', - 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', - 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', - 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', - 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', - 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', - 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', - 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', - 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', - 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', - 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', - 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', - 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', - 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', - 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', - 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', - 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', - 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', - 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', - 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', - 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', - 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', - 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', - 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', - 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', - 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', - 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', - 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', - 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', - 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', - 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', - 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', - 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', - 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', - 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', - 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', - 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', - 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', - 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', - 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', - 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', - 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', - 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', - 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', - 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', - 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', - 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', - 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', - 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', - 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', - 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', - 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', - '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', - 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', - 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', - 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', - 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', - 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', - 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', - 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', - 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', - 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', - 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', - 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', - 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', - 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', - 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', - 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', - 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', - 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', - 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', - 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', - 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', - 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', - 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', - 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', - 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', - 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', - 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', - 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', - 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', - 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', - 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', - 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', - 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', - 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', - 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', - 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', - 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', - 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', - 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', - 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', - 'h', 'a', 't', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', - 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', - 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', - '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', - 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', - 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', - 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', - 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', - 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', - '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', - 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', - 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', - 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', - 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', - 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', - 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', - 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', - 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', - 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', - 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', - 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', - 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', - 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', - 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', - 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', - 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', - 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', - 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', - 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', - 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', - 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', - 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', - 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', - 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', - 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', - 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', - 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', - 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', - 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', - 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', - 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', - 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', - 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', - 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', - 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', - 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', - 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', - 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', - 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', - 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', - 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', - 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', - 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', - 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', - 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', - 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', - 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', - 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', - 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', - 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', - 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', - 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', - 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', - 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', - 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', - 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', - 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', - 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', - 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', - 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', - 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', - 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', - 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', - 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', - 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', - 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', - 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', - 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', - 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', - 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', - 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', - 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', - 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', - 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', - 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'K', 'u', - 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', - 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', - 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', - 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', - 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', - 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', - 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', - 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', - 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', - 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', - 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', - 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', - 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', - 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', - 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', - 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', - 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', - 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', - 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', - 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', - 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', - 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', - 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', - 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', - 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', - 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', - 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', - 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', - 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', - 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', - 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 'K', 'u', - 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', - 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', - 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', - 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', - 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', - 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', - 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', - 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', - 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', - 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', - 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', - 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', - 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', - 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', - 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', - 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', - 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', - 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', - 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', - 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', - 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', - 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', - 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', - 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', - 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', - 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', - 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', - 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', - 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', - 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', - 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', - 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', - 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', - 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', - 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', - 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', - 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', - 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', - 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', - 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', - 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', - 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', - 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', - 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', - 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', - 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', - 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', - 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', - 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', - 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', - 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', - 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', - 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', - 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', - 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', - 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', - 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', - 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', - 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', - 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', - 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', - 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', - 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', - 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', - 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', - 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', - 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', - 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', - 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', - 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', - 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', - 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', - 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', - 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', - 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', - 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', - 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', - 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', - 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', - 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', - 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', - 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', - 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', - 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', - 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', - 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', - 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', - 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', - 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', - 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', - 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', - 'w', 't', 'h', 'a', 't', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', - 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', - 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', - 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', - 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', - 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'K', 'u', 'r', 't', 'V', 'o', - 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', - 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', - 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', - 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', - 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', - 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', - 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', - 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', - 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', - 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', - 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', - 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', - 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', - 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', - 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', - 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', - 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', - 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', - 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', - 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', - 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', - 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', - 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', - 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', - 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', - 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', - 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', - 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', - 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', - 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', - 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', - 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', - 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', - 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', - 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', - 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', - 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', - 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', - 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', - 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', - 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', - 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', - 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', - 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', - 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', - 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', - 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', - 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', - 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', - 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', - 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', - 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', - 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', - 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', - 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', - 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', - 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', - 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', - 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', - 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', - 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', - 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', - 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', - 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', - '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', - 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', - 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', - 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', - 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', - 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', - 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', - 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', - 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', - 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', - 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', - 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', - 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', - 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', - 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', - 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', - 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', - 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', - 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', - 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', - 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', - 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', - 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', - 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', - 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', - 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', - 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', - 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', - 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', - 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', - 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', - 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', - 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', - 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', - 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', - 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', - 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', - 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', - 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', - 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', - 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', - 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', - 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', - 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', - 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', - 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', - 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', - 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', - 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', - 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', - 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', - 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', - 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', - 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', - 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', - 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', - 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', - 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', - 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', - 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', - 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', - 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', - 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', - 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', - 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', - 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', - 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', - 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', - 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', - 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', - 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', - 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', - 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', - 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', - 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', - 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', - 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', - 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', - 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', - 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', - 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', - 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', - 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', - 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', - 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', - 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', - 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', - 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', - 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', - 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', - 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', - 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', - 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', - 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', - 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', - 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', - 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', - 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', - 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', - 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', - 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', - 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', - 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', - 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', - 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', - 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', - 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', - 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', - 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', - 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', - 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', - 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', - 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', - 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', - 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', - 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', - 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', - 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', - 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', - 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', - 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', - 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', - 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', - 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', - 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', - 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', - 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', - 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', - 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', - 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', - 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', - 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', - 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', - 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', - 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', - 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', - 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', - 'n', 'o', 'w', 't', 'h', 'a', 't', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', - 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', - 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', - 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', - 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', - 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'K', 'u', 'r', 't', - 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', - 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', - 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', - 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', - 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', - 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', - 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', - 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', - 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', - 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', - 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', - 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', - 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', - 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', - 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', - 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', - 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', - 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', - 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', - 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', - 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', - 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', - 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', - 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', - 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', - 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', - 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', - 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', - 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', - 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', - 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', - 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', - 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', - 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', - 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', - 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', - 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', - 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', - 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', - 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', - 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', - 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', - 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', - 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', - 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', - 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', - 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', - 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', - 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', - 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', - 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', - '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', - 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', - 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', - 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', - 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', - 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', - 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', - 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', - 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', - 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', - 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', - 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', - 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', - 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', - 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', - 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', - 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', - 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', - 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', - 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', - 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', - 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', - 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', - 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', - 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', - 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', - 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', - 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', - 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', - 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', - 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', - 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', - 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', - 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', - 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', - 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', - 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', - 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', - 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', - 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', - 'h', 'a', 't', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', - 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', - 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', - 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', - 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', - 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', - 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', - 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', - 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', - 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', - 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', - 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', - 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', - 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', - 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', - 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', - 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', - 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', - 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', - 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', - 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', - 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', - 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', - 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', - 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', - 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', - 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', - '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', - 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', - 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', - 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', - 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', - 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', - 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', - 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', - 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', - 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 's', 'u', 'n', 's', 'c', 'r', 'e', - 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', - 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', - 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', - 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', - 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', - 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', - 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', - 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', - 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', - 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', - 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', - 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', - 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', - 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', - 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', - 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', - 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', - 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', - 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', - 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', - 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', - 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', - 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', - 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', - 'a', 't', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', - 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', - 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', - 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', - 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', - 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', - 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', - 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', - 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', - 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', - 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', - 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', - 'h', 'a', 't', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', - 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', - 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', - 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', - 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', - 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', - 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', - 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', - 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', - 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', - 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', - 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', - 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', - 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', - 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', - 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', - 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', - 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', - 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', - 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', - 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', - 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', - 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', - 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', - 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', - 'h', 'a', 't', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', - 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', - 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', - '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', - 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', - 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', - 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', - 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', - 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', - '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', - 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', - 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', - 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', - 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', - 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', - 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', - 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', - 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', - 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', - 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', - 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', - 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', - 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', - 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', - 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', - 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', - 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', - 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', - 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', - 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', - 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', - 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', - 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', - 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', - 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', - 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', - 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', - 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', - 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', - 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', - 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', - 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', - 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', - 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', - 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', - 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', - 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', - 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', - 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', - 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', - 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', - 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', - 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', - 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', - 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', - 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', - 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', - 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', - 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', - 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', - 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', - 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', - 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', - 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', - 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', - 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', - 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', - 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', - 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', - 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', - 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', - 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', - 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', - 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', - 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', - 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', - 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', - 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', - 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', - 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', - 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', - 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', - 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', - 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', - 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', - 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', - 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', - 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', - 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', - 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', - 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', - 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', - 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', - 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', - 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', - 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', - 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 's', - 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', - 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', - 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', - 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', - 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', - 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', - 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', - 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', - 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', - 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', - 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', - 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', - 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', - 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', - 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', - 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', - 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', - 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', - 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', - 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', - 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', - 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', - 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', - 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', - 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', '\n', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', - 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', - 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', - 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', - 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', - 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', - 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', - 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', - 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', - 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', - 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', - 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', - 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', - 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', - 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', - 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', - 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', - 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', - 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', - 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', - 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', - 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', - 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', - 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', - 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', - 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', - 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', - 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', - 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', - 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', - 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', - 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', - 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', - 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', - 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', - 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', - 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', - 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', - 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', - 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', - 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', - 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', - 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', - 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', - 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', - 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', - 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', - 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', - 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', - 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', - 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', - 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', - 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', - 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', - 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', - 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', - 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', - 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', - 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', - 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', - 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', - 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', - 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', - 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', - 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', - 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', - 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', - 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', - 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', - 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', - 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', - 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', - 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', - 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', - 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', - 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', - 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', - 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', - 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', - 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', - 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', - 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', - 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', - 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', - 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', - 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', - 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', - 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', - 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', - 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', - 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', - 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', - 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', - 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', - 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', - 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', - 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', - 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', - 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', - 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', - 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', - 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', - 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', - 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', - 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', - 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', - 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', - 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', - 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', - 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', - 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', - 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', - 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', - 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', - 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', - 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', - 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', - 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', - 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', - 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', - 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', - 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', - 'w', 'o', 'r', 'r', 'y', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', - 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', - 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', - 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', - 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', - 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', - 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', - 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', - 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', - 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', - 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', - 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', - 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', - 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', - 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', - 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', - 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', - 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', - 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', - 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', - 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', - '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', - 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', - 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', - 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', - 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', - 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', - 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', - 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', - 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', - 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', - 'n', 'n', 'e', 'g', 'u', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', - 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', - 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', - 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', - 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', - 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', - 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', - 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', - 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', - 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', - 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', - 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', - 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', - 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', - 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', - 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', - 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', - 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', - 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', - 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', - 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', - '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', - 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', - 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', - 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', - 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', - 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', - 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', - 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', - 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', - 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', - 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', - 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', - 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', - 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', - 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', - 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', - 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', - 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', - 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', - 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', - 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', - 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', - 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', - 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', - 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', - 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', - 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', - 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', - 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', - 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', - 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', - 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', - 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', - 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', - 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', - 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', - 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', - 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', - 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', - 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', - 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', - 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', - 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', - 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', - 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', - 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', - 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', - 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', - 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', - 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', - 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', - 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', - 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', - 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', - 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', - 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', - 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', - 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', - 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', - 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', - 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', - 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', - 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', - 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', - 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', - 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', - 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', - 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', - 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', - 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', - 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', - 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', - 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', - 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', - 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', - 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', - 'e', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', - 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', - 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', - 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', - 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', - 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', - 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', - 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', - 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', - 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', - 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', - 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', - 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', - 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', - 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', - 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', - 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', - 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', - 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', - 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', - 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', - 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', - 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', - 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', - 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', - 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', - 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', - 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', - 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', - 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', - 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', - 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', - 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', - 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', - 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', - 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', - 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', - 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', - 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', - 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', - 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', - 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', - 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', - 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', - 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', - 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', - 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', - 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', - 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', - 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', - 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', - 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', - 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', - 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', - 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', - 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', - 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', - 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', - 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', - 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', - 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', - 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', - 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', - 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', - 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', - 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', - 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', - 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', - 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', - 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', - 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', - 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', - 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', - 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', - 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', - 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', - 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', - 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', - 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', - 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', - 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', - 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', - 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', - 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', - 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', - 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', - 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', - 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', - 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', - 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', - 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', - 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', - 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', - 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', - 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', - 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', - 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', - 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', - 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', - 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', - 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', - 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', - 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', - 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', - 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', - 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', - 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', - 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', - 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', - 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', - 'V', 'o', 'n', 'n', 'e', 'g', 'u', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', - 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', - 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', - 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', - 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', - 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', - 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', - 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', - 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', - 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', - 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', - 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', - 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', - 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', - 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', - 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', - 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', - 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', - 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', - 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', - 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', - 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', - 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', - 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', - 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', - 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', - 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', - 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', - 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', - 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', - 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', - 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', - 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', - 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', - 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', - 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', - 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', - 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', - 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', - 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', - 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', - 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', - 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', - 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', - 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', - 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', - 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', - 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', - 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', - 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', - 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', - 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', - 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', - 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', - 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', - 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', - 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', - 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', - 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', - 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', - 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', - 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', - 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', - 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', - 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', - 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', - 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', - 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', - 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', - 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', - 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', - 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', - 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', - 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', - 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', - 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', - 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', - 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', - 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', - 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', - 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', - 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', - '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', - 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', - 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', - 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', - 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', - 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', - 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', - 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', - 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', - 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 't', 's', 'C', 'o', 'm', 'm', - 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', - 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', - 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', - 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', - 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', - 'u', 'r', 'e', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', - 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', - 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', - 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', - 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', - 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', - 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', - 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', - 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', - 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', - 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', - 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', - 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', - 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', - 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', - 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', - 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', - 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', - 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', - 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', - 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', - 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', - 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', - 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', - 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', - 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', - 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', - 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', - 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', - 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', - 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', - 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', - 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', - 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', - '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', - 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', - 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', - 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', - 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', - 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', - 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', - 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', - 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', - 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', - 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', - 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', - 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', - 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', - 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', - 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', - 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', - 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', - 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', - 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', - 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', - 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', - 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', - 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', - 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', - 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', - 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', - 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', - 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', - 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', - 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', - 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', - 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', - 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', - 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', - 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', - 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', - 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', - 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', - 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', - 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', - 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', - 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', - 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', - 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', - 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', - 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', - 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', - 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', - 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', - 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', - 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', - 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', - 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', - 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', - 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', - 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', - 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', - 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', - 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', - 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', - 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', - 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', - 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', - 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', - 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', - 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', - 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', - 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', - 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', - 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', - 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', - 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', - 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', - 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', - 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', - 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', - 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', - 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', - 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', - 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', - 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', - 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', - 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', - 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', - 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', - 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', - 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', - 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', - 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', - 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', - 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', - 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', - 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', - 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', - 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', - 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', - 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', - 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', - 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', - 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', - 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', - 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', - 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', - 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', - 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', - 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', - 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', - 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', - 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', - 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', - 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', - 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', - 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', - 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', - 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', - 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', - 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', - 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', - 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', - 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', - 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', - 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', - 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', - 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', - 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', - 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', - 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', - 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', - 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', - 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', - 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', - 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', - 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', - 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', - 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', - 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', - 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', - 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', - 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', - 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', - 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', - 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', - 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', - 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', - 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', - 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', - 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', - 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', - 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', - 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', - 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', - 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', - 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', - 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', - 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', - 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', - 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', - 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', - 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', - 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', - 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', - 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', - 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', - 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', - 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', - 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', - 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 't', 's', 'C', 'o', - 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', - 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', - 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', - 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', - 'y', '\n' +unsigned volatile char sha_data[ 32743 ] = { + 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', + 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', + 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', + 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', + 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', + 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', + 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', + 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', + 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', + 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', + 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', + 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', + 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', + 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', + 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', + 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', + 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', + 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', + 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', + 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', + 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', + 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', + 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', + 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', + 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', + 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', + 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', + 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', + 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', + 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', + 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', + 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', + 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', + 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', + 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', + 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', + 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', + 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', + 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', + 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', + 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', + 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', + 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', + 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', + 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', + 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', + 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', + 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', + 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', + 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', + 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', + 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', + 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', + 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', + 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', + 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', + 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', + 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', + 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', + 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', + 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', + 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', + 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', + 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', + 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', + 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', + 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', + 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', + 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', + 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', + 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', + 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', + 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', + 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', + 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', + 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', + 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', + 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', + 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', + 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', + 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', + 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', + 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', + 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', + 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', + 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', + 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', + 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', + 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', + 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', + 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', + 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', + 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', + 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', + 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', + 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', + 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', + 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', + 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', + 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', + 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', + 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', + 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', + 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', + 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', + 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', + 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', + 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', + 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', + 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', + 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', + 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', + 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', + 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', + 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'K', 'u', 'r', 't', + 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', + 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', + 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', + 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', + 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', + 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', + 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', + 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', + 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', + 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', + 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', + 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', + 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', + 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', + 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', + 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', + 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', + 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', + 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', + 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', + 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', + 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', + 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', + 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', + 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', + 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', + 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', + 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', + 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', + 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 'K', 'u', 'r', 't', + 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', + 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', + 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', + 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', + 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', + 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', + 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', + 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', + 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', + 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', + 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', + 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', + 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', + 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', + 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', + 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', + 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', + 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', + 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', + 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', + 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', + 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', + 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', + 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', + 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', + 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', + 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', + 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', + 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', + 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', + 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', + 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', + 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', + 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', + 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', + 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', + 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', + 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', + 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', + 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', + 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', + 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', + 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', + 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', + 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', + 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', + 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', + 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', + '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', + 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', + 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', + 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', + 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', + 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', + 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', + 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', + 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', + 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', + 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', + 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', + 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', + 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', + 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', + 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', + 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', + 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', + 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', + 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', + 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', + 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', + 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', + 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', + 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', + 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', + 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', + 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', + 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', + 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', + 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', + 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', + 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', + 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', + 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', + 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', + 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', + 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', + 'h', 'a', 't', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', + 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', + 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', + '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', + 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', + 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', + 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', + 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', + 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', + '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', + 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', + 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', + 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', + 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', + 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', + 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', + 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', + 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', + 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', + 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', + 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', + 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', + 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', + 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', + 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', + 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', + 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', + 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', + 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', + 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', + 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', + 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', + 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', + 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', + 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', + 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', + 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', + 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', + 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', + 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', + 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', + 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', + 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', + 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', + 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', + 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', + 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', + 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', + 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', + 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', + 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', + 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', + 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', + 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', + 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', + 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', + 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', + 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', + 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', + 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', + 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', + 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', + 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', + 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', + 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', + 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', + 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', + 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', + 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', + 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', + 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', + 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', + 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', + 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', + 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', + 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', + 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', + 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', + 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', + 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', + 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', + 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', + 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', + 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'K', 'u', + 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', + 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', + 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', + 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', + 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', + 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', + 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', + 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', + 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', + 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', + 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', + 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', + 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', + 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', + 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', + 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', + 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', + 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', + 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', + 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', + 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', + 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', + 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', + 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', + 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', + 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', + 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', + 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 'K', 'u', + 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', + 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', + 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', + 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', + 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', + 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', + 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', + 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', + 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', + 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', + 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', + 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', + 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', + 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', + 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', + 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', + 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', + 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', + 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', + 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', + 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', + 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', + 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', + 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', + 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', + 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', + 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', + 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', + 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', + 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', + 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', + 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', + 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', + 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', + 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', + 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', + 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', + 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', + 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', + 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', + 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', + 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', + 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', + 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', + 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', + 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', + 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', + 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', + 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', + 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', + 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', + 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', + 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', + 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', + 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', + 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', + 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', + 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', + 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', + 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', + 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', + 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', + 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', + 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', + 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', + 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', + 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', + 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', + 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', + 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', + 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', + 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', + 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', + 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', + 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', + 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', + 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', + 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', + 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', + 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', + 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', + 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', + 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', + 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', + 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', + 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', + 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', + 'w', 't', 'h', 'a', 't', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', + 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', + 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', + 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', + 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', + 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'K', 'u', 'r', 't', 'V', 'o', + 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', + 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', + 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', + 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', + 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', + 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', + 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', + 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', + 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', + 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', + 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', + 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', + 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', + 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', + 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', + 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', + 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', + 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', + 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', + 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', + 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', + 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', + 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', + 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', + 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', + 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', + 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', + 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', + 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', + 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', + 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', + 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', + 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', + 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', + 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', + 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', + 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', + 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', + 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', + 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', + 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', + 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', + 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', + 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', + 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', + 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', + 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', + 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', + 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', + 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', + 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', + 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', + 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', + 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', + 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', + 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', + 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', + 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', + 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', + 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', + 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', + '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', + 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', + 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', + 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', + 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', + 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', + 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', + 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', + 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', + 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', + 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', + 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', + 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', + 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', + 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', + 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', + 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', + 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', + 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', + 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', + 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', + 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', + 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', + 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', + 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', + 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', + 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', + 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', + 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', + 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', + 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', + 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', + 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', + 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', + 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', + 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', + 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', + 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', + 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', + 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', + 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', + 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', + 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', + 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', + 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', + 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', + 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', + 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', + 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', + 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', + 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', + 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', + 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', + 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', + 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', + 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', + 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', + 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', + 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', + 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', + 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', + 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', + 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', + 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', + 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', + 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', + 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', + 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', + 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', + 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', + 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', + 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', + 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', + 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', + 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', + 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', + 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', + 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', + 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', + 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', + 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', + 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', + 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', + 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', + 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', + 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', + 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', + 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', + 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', + 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', + 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', + 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', + 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', + 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', + 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', + 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', + 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', + 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', + 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', + 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', + 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', + 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', + 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', + 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', + 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', + 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', + 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', + 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', + 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', + 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', + 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', + 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', + 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', + 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', + 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', + 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', + 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', + 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', + 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', + 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', + 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', + 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', + 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', + 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', + 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', + 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', + 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', + 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', + 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', + 'n', 'o', 'w', 't', 'h', 'a', 't', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', + 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', + 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', + 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', + 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', + 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'K', 'u', 'r', 't', + 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', + 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', + 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', + 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', + 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', + 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', + 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', + 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', + 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', + 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', + 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', + 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', + 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', + 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', + 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', + 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', + 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', + 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', + 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', + 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', + 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', + 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', + 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', + 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', + 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', + 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', + 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', + 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', + 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', + 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', + 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', + 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', + 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', + 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', + 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', + 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', + 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', + 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', + 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', + 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', + 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', + 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', + 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', + 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', + 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', + 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', + 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', + 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', + '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', + 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', + 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', + 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', + 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', + 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', + 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', + 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', + 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', + 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', + 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', + 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', + 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', + 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', + 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', + 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', + 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', + 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', + 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', + 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', + 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', + 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', + 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', + 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', + 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', + 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', + 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', + 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', + 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', + 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', + 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', + 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', + 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', + 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', + 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', + 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', + 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', + 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', + 'h', 'a', 't', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', + 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', + 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', + 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', + 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', + 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', + 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', + 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', + 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', + 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', + 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', + 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', + 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', + 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', + 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', + 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', + 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', + 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', + 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', + 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', + 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', + 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', + 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', + 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', + 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', + 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', + 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', + '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', + 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', + 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', + 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', + 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', + 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', + 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', + 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', + 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', + 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', + 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', + 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', + 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', + 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', + 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', + 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', + 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', + 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', + 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', + 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', + 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', + 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', + 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', + 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', + 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', + 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', + 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', + 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', + 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', + 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', + 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', + 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', + 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', + 'a', 't', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', + 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', + 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', + 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', + 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', + 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', + 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', + 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', + 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', + 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', + 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', + 'h', 'a', 't', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', + 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', + 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', + 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', + 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', + 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', + 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', + 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', + 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', + 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', + 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', + 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', + 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', + 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', + 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', + 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', + 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', + 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', + 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', + 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', + 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', + 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', + 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', + 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', + 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', + 'h', 'a', 't', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', + 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', + 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', + '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', + 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', + 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', + 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', + 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', + 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', + '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', + 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', + 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', + 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', + 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', + 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', + 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', + 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', + 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', + 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', + 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', + 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', + 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', + 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', + 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', + 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', + 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', + 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', + 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', + 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', + 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', + 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', + 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', + 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', + 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', + 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', + 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', + 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', + 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', + 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', + 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', + 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', + 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', + 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', + 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', + 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', + 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', + 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', + 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', + 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', + 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', + 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', + 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', + 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', + 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', + 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', + 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', + 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', + 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', + 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', + 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', + 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', + 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', + 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', + 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', + 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', + 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', + 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', + 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', + 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', + 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', + 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', + 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', + 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', + 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', + 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', + 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', + 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', + 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', + 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', + 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', + 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', + 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', + 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', + 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', + 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', + 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', + 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', + 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', + 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', + 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', + 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', + 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', + 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', + 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', + 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', + 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', + 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', + 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', + 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', + 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', + 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', + 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', + 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', + 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', + 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', + 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', + 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', + 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', + 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', + 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', + 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', + 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', + 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', + 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', + 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', + 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', + 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', + 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', + 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', '\n', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', + 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', + 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', + 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', + 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', + 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', + 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', + 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', + 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', + 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', + 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', + 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', + 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', + 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', + 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', + 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', + 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', + 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', + 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', + 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', + 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', + 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', + 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', + 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', + 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', + 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', + 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', + 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', + 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', + 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', + 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', + 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', + 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', + 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', + 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', + 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', + 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', + 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', + 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', + 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', + 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', + 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', + 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', + 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', + 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', + 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', + 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', + 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', + 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', + 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', + 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', + 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', + 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', + 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', + 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', + 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', + 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', + 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', + 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', + 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', + 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', + 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', + 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', + 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', + 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', + 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', + 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', + 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', + 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', + 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', + 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', + 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', + 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', + 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', + 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', + 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', + 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', + 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', + 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', + 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', + 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', + 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', + 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', + 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', + 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', + 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', + 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', + 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', + 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', + 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', + 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', + 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', + 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', + 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', + 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', + 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', + 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', + 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', + 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', + 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', + 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', + 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', + 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', + 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', + 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', + 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', + 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', + 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', + 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', + 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', + 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', + 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', + 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', + 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', + 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', + 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', + 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', + 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', + 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', + 'w', 'o', 'r', 'r', 'y', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', + 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', + 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', + 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', + 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', + 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', + 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', + 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', + 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', + 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', + 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', + 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', + 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', + 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', + 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', + 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', + 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', + 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', + 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', + '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', + 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', + 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', + 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', + 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', + 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', + 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', + 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', + 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', + 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', + 'n', 'n', 'e', 'g', 'u', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', + 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', + 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', + 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', + 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', + 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', + 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', + 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', + 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', + 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', + 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', + 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', + 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', + 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', + 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', + 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', + 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', + 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', + 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', + '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', + 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', + 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', + 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', + 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', + 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', + 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', + 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', + 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', + 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', + 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', + 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', + 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', + 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', + 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', + 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', + 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', + 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', + 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', + 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', + 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', + 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', + 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', + 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', + 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', + 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', + 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', + 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', + 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', + 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', + 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', + 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', + 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', + 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', + 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', + 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', + 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', + 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', + 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', + 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', + 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', + 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', + 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', + 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', + 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', + 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', + 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', + 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', + 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', + 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', + 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', + 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', + 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', + 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', + 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', + 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', + 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', + 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', + 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', + 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', + 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', + 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', + 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', + 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', + 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', + 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', + 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', + 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', + 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', + 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', + 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', + 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', + 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', + 'e', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', + 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', + 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', + 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', + 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', + 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', + 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', + 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', + 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', + 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', + 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', + 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', + 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', + 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', + 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', + 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', + 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', + 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', + 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', + 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', + 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', + 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', + 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', + 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', + 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', + 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', + 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', + 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', + 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', + 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', + 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', + 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', + 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', + 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', + 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', + 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', + 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', + 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', + 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', + 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', + 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', + 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', + 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', + 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', + 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', + 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', + 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', + 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', + 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', + 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', + 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', + 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', + 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', + 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', + 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', + 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', + 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', + 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', + 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', + 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', + 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', + 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', + 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', + 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', + 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', + 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', + 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', + 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', + 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', + 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', + 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', + 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', + 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', + 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', + 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', + 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', + 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', + 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', + 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', + 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', + 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', + 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', + 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', + 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', + 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', + 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', + 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', + 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', + 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', + 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', + 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', + 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', + 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', + 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', + 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', + 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', + 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', + 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', + 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', + 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', + 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', + 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', + 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', + 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', + 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', + 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', + 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', + 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', + 'V', 'o', 'n', 'n', 'e', 'g', 'u', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', + 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', + 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', + 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', + 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', + 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', + 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', + 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', + 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', + 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', + 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', + 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', + 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', + 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', + 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', + 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', + 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', + 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', + 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', + 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', + 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', + 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', + 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', + 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', + 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', + 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', + 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', + 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', + 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', + 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', + 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', + 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', + 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', + 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', + 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', + 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', + 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', + 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', + 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', + 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', + 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', + 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', + 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', + 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', + 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', + 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', + 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', + 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', + 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', + 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', + 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', + 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', + 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', + 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', + 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', + 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', + 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', + 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', + 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', + 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', + 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', + 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', + 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', + 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', + 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', + 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', + 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', + 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', + 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', + 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', + 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', + 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', + 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', + 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', + 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', + 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', + 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', + 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', + 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', + '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', + 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', + 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', + 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', + 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', + 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', + 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', + 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', + 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', + 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 't', 's', 'C', 'o', 'm', 'm', + 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', + 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', + 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', + 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', + 'u', 'r', 'e', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', + 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', + 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', + 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', + 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', + 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', + 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', + 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', + 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', + 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', + 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', + 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', + 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', + 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', + 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', + 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', + 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', + 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', + 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', + 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', + 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', + 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', + 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', + 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', + 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', + 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', + 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', + 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', + 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', + 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', + 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', + 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', + 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', + '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', + 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', + 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', + 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', + 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', + 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', + 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', + 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', + 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', + 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', + 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', + 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', + 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', + 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', + 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', + 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', + 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', + 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', + 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', + 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', + 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', + 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', + 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', + 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', + 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', + 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', + 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', + 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', + 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', + 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', + 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', + 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', + 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', + 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', + 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', + 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', + 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', + 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', + 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', + 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', + 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', + 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', + 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', + 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', + 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', + 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', + 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', + 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', + 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', + 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', + 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', + 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', + 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', + 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', + 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', + 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', + 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', + 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', + 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', + 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', + 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', + 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', + 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', + 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', + 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', + 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', + 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', + 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', + 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', + 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', + 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', + 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', + 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', + 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', + 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', + 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', + 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', + 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', + 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', + 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', + 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', + 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', + 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', + 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', + 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', + 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', + 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', + 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', + 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', + 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', + 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', + 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', + 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', + 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', + 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', + 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', + 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', + 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', + 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', + 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', + 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', + 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', + 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', + 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', + 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', + 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', + 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', + 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', + 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', + 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', + 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', + 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', + 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', + 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', + 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', + 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', + 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', + 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', + 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', + 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', + 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', + 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', + 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', + 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', + 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', + 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', + 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', + 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', + 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', + 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', + 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', + 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', + 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', + 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', + 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', + 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', + 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', + 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', + 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', + 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', + 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', + 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', + 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', + 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', + 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', + 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', + 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', + 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', + 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', + 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', + 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', + 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', + 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', + 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', + 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', + 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', + 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', + 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', + 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', + 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', + 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', + 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', + 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', + 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 't', 's', 'C', 'o', + 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', + 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', + 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', + 'y', '\n' }; diff --git a/bench/kernel/sha/memcpy.c b/bench/kernel/sha/memcpy.c old mode 100644 new mode 100755 index e6984169aaac8936caf21d44418dc2e30c46c536..c8416f60c7091ef72e61003605947661db9cc8d9 --- a/bench/kernel/sha/memcpy.c +++ b/bench/kernel/sha/memcpy.c @@ -37,10 +37,10 @@ void *sha_glibc_memcpy( void *dstpp, const void *srcpp, size_t len ) __nbytes = ( -dstp ) % OPSIZ; _Pragma( "loopbound min 0 max 0" ) while ( __nbytes > 0 ) { - BYTE __x = ( ( BYTE * ) srcp )[0]; + BYTE __x = ( ( BYTE * ) srcp )[ 0 ]; srcp += 1; __nbytes -= 1; - ( ( BYTE * ) dstp )[0] = __x; + ( ( BYTE * ) dstp )[ 0 ] = __x; dstp += 1; } @@ -62,10 +62,10 @@ void *sha_glibc_memcpy( void *dstpp, const void *srcpp, size_t len ) __nbytes = len; _Pragma( "loopbound min 0 max 7" ) while ( __nbytes > 0 ) { - BYTE __x = ( ( BYTE * ) srcp )[0]; + BYTE __x = ( ( BYTE * ) srcp )[ 0 ]; srcp += 1; __nbytes -= 1; - ( ( BYTE * ) dstp )[0] = __x; + ( ( BYTE * ) dstp )[ 0 ] = __x; dstp += 1; } diff --git a/bench/kernel/sha/memcpy.h b/bench/kernel/sha/memcpy.h old mode 100644 new mode 100755 diff --git a/bench/kernel/sha/memhelper.c b/bench/kernel/sha/memhelper.c old mode 100644 new mode 100755 index 0ff992e647212c836a33534b519982a78e92e5a6..f232bc259cfc46ba1c0961d34f3a2ee0a3707492 --- a/bench/kernel/sha/memhelper.c +++ b/bench/kernel/sha/memhelper.c @@ -21,7 +21,7 @@ */ #include "memhelper.h" - +int printf(const char * restrict format, ... ); /* sha_wordcopy_fwd_aligned -- Copy block beginning at SRCP to block beginning at DSTP with LEN `op_t' words (not LEN bytes!). Both SRCP and DSTP should be aligned for memory operations on `op_t's. @@ -35,42 +35,42 @@ void sha_wordcopy_fwd_aligned( long int dstp, long int srcp, size_t len ) switch ( len % 8 ) { case 2: - a0 = ( ( op_t * ) srcp )[0]; + a0 = ( ( op_t * ) srcp )[ 0 ]; srcp -= 6 * OPSIZ; dstp -= 7 * OPSIZ; len += 6; switch_target = 1; break; case 3: - a1 = ( ( op_t * ) srcp )[0]; + a1 = ( ( op_t * ) srcp )[ 0 ]; srcp -= 5 * OPSIZ; dstp -= 6 * OPSIZ; len += 5; switch_target = 2; break; case 4: - a0 = ( ( op_t * ) srcp )[0]; + a0 = ( ( op_t * ) srcp )[ 0 ]; srcp -= 4 * OPSIZ; dstp -= 5 * OPSIZ; len += 4; switch_target = 3; break; case 5: - a1 = ( ( op_t * ) srcp )[0]; + a1 = ( ( op_t * ) srcp )[ 0 ]; srcp -= 3 * OPSIZ; dstp -= 4 * OPSIZ; len += 3; switch_target = 4; break; case 6: - a0 = ( ( op_t * ) srcp )[0]; + a0 = ( ( op_t * ) srcp )[ 0 ]; srcp -= 2 * OPSIZ; dstp -= 3 * OPSIZ; len += 2; switch_target = 5; break; case 7: - a1 = ( ( op_t * ) srcp )[0]; + a1 = ( ( op_t * ) srcp )[ 0 ]; srcp -= 1 * OPSIZ; dstp -= 2 * OPSIZ; len += 1; @@ -79,18 +79,18 @@ void sha_wordcopy_fwd_aligned( long int dstp, long int srcp, size_t len ) case 0: if ( OP_T_THRES <= 3 * OPSIZ && len == 0 ) return; - a0 = ( ( op_t * ) srcp )[0]; + a0 = ( ( op_t * ) srcp )[ 0 ]; srcp -= 0 * OPSIZ; dstp -= 1 * OPSIZ; switch_target = 7; break; case 1: - a1 = ( ( op_t * ) srcp )[0]; + a1 = ( ( op_t * ) srcp )[ 0 ]; srcp -= -1 * OPSIZ; dstp -= 0 * OPSIZ; len -= 1; if ( OP_T_THRES <= 3 * OPSIZ && len == 0 ) { - ( ( op_t * ) dstp )[0] = a1; + ( ( op_t * ) dstp )[ 0 ] = a1; return; } else { switch_target = 8; @@ -98,40 +98,40 @@ void sha_wordcopy_fwd_aligned( long int dstp, long int srcp, size_t len ) } } - _Pragma( "loopbound min 1 max 2" ) + _Pragma( "loopbound min 1 max 2" ) //max 1 do { switch ( switch_target ) { case 8: - a0 = ( ( op_t * ) srcp )[0]; - ( ( op_t * ) dstp )[0] = a1; + a0 = ( ( op_t * ) srcp )[ 0 ]; + ( ( op_t * ) dstp )[ 0 ] = a1; break; case 7: - a1 = ( ( op_t * ) srcp )[1]; - ( ( op_t * ) dstp )[1] = a0; + a1 = ( ( op_t * ) srcp )[ 1 ]; + ( ( op_t * ) dstp )[ 1 ] = a0; break; case 6: - a0 = ( ( op_t * ) srcp )[2]; - ( ( op_t * ) dstp )[2] = a1; + a0 = ( ( op_t * ) srcp )[ 2 ]; + ( ( op_t * ) dstp )[ 2 ] = a1; break; case 5: - a1 = ( ( op_t * ) srcp )[3]; - ( ( op_t * ) dstp )[3] = a0; + a1 = ( ( op_t * ) srcp )[ 3 ]; + ( ( op_t * ) dstp )[ 3 ] = a0; break; case 4: - a0 = ( ( op_t * ) srcp )[4]; - ( ( op_t * ) dstp )[4] = a1; + a0 = ( ( op_t * ) srcp )[ 4 ]; + ( ( op_t * ) dstp )[ 4 ] = a1; break; case 3: - a1 = ( ( op_t * ) srcp )[5]; - ( ( op_t * ) dstp )[5] = a0; + a1 = ( ( op_t * ) srcp )[ 5 ]; + ( ( op_t * ) dstp )[ 5 ] = a0; break; case 2: - a0 = ( ( op_t * ) srcp )[6]; - ( ( op_t * ) dstp )[6] = a1; + a0 = ( ( op_t * ) srcp )[ 6 ]; + ( ( op_t * ) dstp )[ 6 ] = a1; break; case 1: - a1 = ( ( op_t * ) srcp )[7]; - ( ( op_t * ) dstp )[7] = a0; + a1 = ( ( op_t * ) srcp )[ 7 ]; + ( ( op_t * ) dstp )[ 7 ] = a0; break; } @@ -141,6 +141,6 @@ void sha_wordcopy_fwd_aligned( long int dstp, long int srcp, size_t len ) switch_target = 8; } while ( len != 0 ); - ( ( op_t * ) dstp )[0] = a1; + ( ( op_t * ) dstp )[ 0 ] = a1; } diff --git a/bench/kernel/sha/memhelper.h b/bench/kernel/sha/memhelper.h old mode 100644 new mode 100755 diff --git a/bench/kernel/sha/memset.c b/bench/kernel/sha/memset.c old mode 100644 new mode 100755 index 3419238fad845772ef045eca31356e9def1237ff..58e3aeabb10d19e90db5fc11a2d74c89ba46aa15 --- a/bench/kernel/sha/memset.c +++ b/bench/kernel/sha/memset.c @@ -19,6 +19,7 @@ License: GNU Lesser General Public License */ #include "memset.h" +int printf(const char * restrict format, ... ); void *sha_glibc_memset( void *dstpp, int c, size_t len ) { @@ -39,23 +40,23 @@ void *sha_glibc_memset( void *dstpp, int c, size_t len ) No need to test for LEN == 0 in this alignment loop. */ _Pragma( "loopbound min 3 max 3" ) while ( dstp % OPSIZ != 0 ) { - ( ( BYTE * ) dstp )[0] = c; + ( ( BYTE * ) dstp )[ 0 ] = c; dstp += 1; len -= 1; } /* Write 8 `op_t' per iteration until less than 8 `op_t' remain. */ xlen = len / ( OPSIZ * 8 ); - _Pragma( "loopbound min 1 max 1" ) + _Pragma( "loopbound min 0 max 1" ) while ( xlen > 0 ) { - ( ( op_t * ) dstp )[0] = cccc; - ( ( op_t * ) dstp )[1] = cccc; - ( ( op_t * ) dstp )[2] = cccc; - ( ( op_t * ) dstp )[3] = cccc; - ( ( op_t * ) dstp )[4] = cccc; - ( ( op_t * ) dstp )[5] = cccc; - ( ( op_t * ) dstp )[6] = cccc; - ( ( op_t * ) dstp )[7] = cccc; + ( ( op_t * ) dstp )[ 0 ] = cccc; + ( ( op_t * ) dstp )[ 1 ] = cccc; + ( ( op_t * ) dstp )[ 2 ] = cccc; + ( ( op_t * ) dstp )[ 3 ] = cccc; + ( ( op_t * ) dstp )[ 4 ] = cccc; + ( ( op_t * ) dstp )[ 5 ] = cccc; + ( ( op_t * ) dstp )[ 6 ] = cccc; + ( ( op_t * ) dstp )[ 7 ] = cccc; dstp += 8 * OPSIZ; xlen -= 1; } @@ -63,9 +64,9 @@ void *sha_glibc_memset( void *dstpp, int c, size_t len ) /* Write 1 `op_t' per iteration until less than OPSIZ bytes remain. */ xlen = len / OPSIZ; - _Pragma( "loopbound min 1 max 1" ) + _Pragma( "loopbound min 1 max 2" ) while ( xlen > 0 ) { - ( ( op_t * ) dstp )[0] = cccc; + ( ( op_t * ) dstp )[ 0 ] = cccc; dstp += OPSIZ; xlen -= 1; } @@ -75,7 +76,7 @@ void *sha_glibc_memset( void *dstpp, int c, size_t len ) /* Write the last few bytes. */ _Pragma( "loopbound min 0 max 0" ) while ( len > 0 ) { - ( ( BYTE * ) dstp )[0] = c; + ( ( BYTE * ) dstp )[ 0 ] = c; dstp += 1; len -= 1; } diff --git a/bench/kernel/sha/memset.h b/bench/kernel/sha/memset.h old mode 100644 new mode 100755 diff --git a/bench/kernel/sha/sha.c b/bench/kernel/sha/sha.c old mode 100644 new mode 100755 index 8aea39a0dca988ddc89031762f7fe088f5b9bd8d..552c6146a642af7dc584992e790106e8345a7548 --- a/bench/kernel/sha/sha.c +++ b/bench/kernel/sha/sha.c @@ -15,7 +15,7 @@ License: GNU Lesser General Public License - */ +*/ #include "memcpy.h" #include "memset.h" @@ -45,27 +45,27 @@ struct SHA_INFO sha_info; #define ROT32(x,n) ((x << n) | (x >> (32 - n))) #define FUNC(n,i) \ - temp = ROT32(A,5) + f##n(B,C,D) + E + W[i] + CONST##n; \ + temp = ROT32(A,5) + f##n(B,C,D) + E + W[ i ] + CONST##n; \ E = D; D = C; C = ROT32(B,30); B = A; A = temp /* do SHA transformation */ void sha_transform( struct SHA_INFO *sha_info ) { int i; - LONG temp, A, B, C, D, E, W[80]; + LONG temp, A, B, C, D, E, W[ 80 ]; _Pragma( "loopbound min 16 max 16" ) for ( i = 0; i < 16; ++i ) - W[i] = sha_info->data[i]; + W[ i ] = sha_info->data[ i ]; _Pragma( "loopbound min 64 max 64" ) for ( i = 16; i < 80; ++i ) - W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; + W[ i ] = W[ i - 3 ] ^ W[ i - 8 ] ^ W[ i - 14 ] ^ W[ i - 16 ]; - A = sha_info->digest[0]; - B = sha_info->digest[1]; - C = sha_info->digest[2]; - D = sha_info->digest[3]; - E = sha_info->digest[4]; + A = sha_info->digest[ 0 ]; + B = sha_info->digest[ 1 ]; + C = sha_info->digest[ 2 ]; + D = sha_info->digest[ 3 ]; + E = sha_info->digest[ 4 ]; _Pragma( "loopbound min 20 max 20" ) @@ -80,11 +80,11 @@ void sha_transform( struct SHA_INFO *sha_info ) _Pragma( "loopbound min 20 max 20" ) for ( i = 60; i < 80; ++i ) FUNC( 4, i ); - sha_info->digest[0] += A; - sha_info->digest[1] += B; - sha_info->digest[2] += C; - sha_info->digest[3] += D; - sha_info->digest[4] += E; + sha_info->digest[ 0 ] += A; + sha_info->digest[ 1 ] += B; + sha_info->digest[ 2 ] += C; + sha_info->digest[ 3 ] += D; + sha_info->digest[ 4 ] += E; } @@ -92,20 +92,20 @@ void sha_transform( struct SHA_INFO *sha_info ) void sha_byte_reverse( LONG *buffer, int count ) { int i; - BYTE ct[4], *cp; + BYTE ct[ 4 ], *cp; count /= sizeof( LONG ); cp = ( BYTE * ) buffer; _Pragma( "loopbound min 16 max 16" ) for ( i = 0; i < count; ++i ) { - ct[0] = cp[0]; - ct[1] = cp[1]; - ct[2] = cp[2]; - ct[3] = cp[3]; - cp[0] = ct[3]; - cp[1] = ct[2]; - cp[2] = ct[1]; - cp[3] = ct[0]; + ct[ 0 ] = cp[ 0 ]; + ct[ 1 ] = cp[ 1 ]; + ct[ 2 ] = cp[ 2 ]; + ct[ 3 ] = cp[ 3 ]; + cp[ 0 ] = ct[ 3 ]; + cp[ 1 ] = ct[ 2 ]; + cp[ 2 ] = ct[ 1 ]; + cp[ 3 ] = ct[ 0 ]; cp += sizeof( LONG ); } } @@ -113,16 +113,16 @@ void sha_byte_reverse( LONG *buffer, int count ) /* initialize the SHA digest */ void sha_init( void ) { - int i; - sha_info.digest[0] = 0x67452301L; - sha_info.digest[1] = 0xefcdab89L; - sha_info.digest[2] = 0x98badcfeL; - sha_info.digest[3] = 0x10325476L; - sha_info.digest[4] = 0xc3d2e1f0L; + int i; + sha_info.digest[ 0 ] = 0x67452301L; + sha_info.digest[ 1 ] = 0xefcdab89L; + sha_info.digest[ 2 ] = 0x98badcfeL; + sha_info.digest[ 3 ] = 0x10325476L; + sha_info.digest[ 4 ] = 0xc3d2e1f0L; sha_info.count_lo = 0L; sha_info.count_hi = 0L; - for(i=0;i<16;i++) - sha_info.data[i]=0; + for ( i = 0; i < 16; i++ ) + sha_info.data[ i ] = 0; } size_t sha_fread( void *ptr, size_t size, size_t count, @@ -134,7 +134,7 @@ size_t sha_fread( void *ptr, size_t size, size_t count, size * count : stream->size - stream->cur_pos; _Pragma( "loopbound min 0 max 8192" ) while ( i < stream->cur_pos + number_of_chars_to_read ) - ( ( unsigned char * )ptr )[i2++] = stream->data[i++]; + ( ( unsigned char * )ptr )[ i2++ ] = stream->data[ i++ ]; stream->cur_pos += number_of_chars_to_read; return ( number_of_chars_to_read ); } @@ -167,7 +167,7 @@ void sha_final( struct SHA_INFO *sha_info ) lo_bit_count = sha_info->count_lo; hi_bit_count = sha_info->count_hi; count = ( int ) ( ( lo_bit_count >> 3 ) & 0x3f ); - ( ( BYTE * ) sha_info->data )[count++] = 0x80; + ( ( BYTE * ) sha_info->data )[ count++ ] = 0x80; if ( count > 56 ) { sha_glibc_memset( ( BYTE * ) &sha_info->data + count, 0, 64 - count ); sha_byte_reverse( sha_info->data, SHA_BLOCKSIZE ); @@ -177,8 +177,8 @@ void sha_final( struct SHA_INFO *sha_info ) sha_glibc_memset( ( BYTE * ) &sha_info->data + count, 0, 56 - count ); sha_byte_reverse( sha_info->data, SHA_BLOCKSIZE ); - sha_info->data[14] = hi_bit_count; - sha_info->data[15] = lo_bit_count; + sha_info->data[ 14 ] = hi_bit_count; + sha_info->data[ 15 ] = lo_bit_count; sha_transform( sha_info ); } @@ -187,7 +187,7 @@ void sha_final( struct SHA_INFO *sha_info ) void sha_stream( struct SHA_INFO *sha_info, struct SHA_MY_FILE *fin ) { int i; - BYTE data[BLOCK_SIZE]; + BYTE data[ BLOCK_SIZE ]; _Pragma( "loopbound min 5 max 5" ) while ( ( i = sha_fread( data, 1, BLOCK_SIZE, fin ) ) > 0 ) sha_update( sha_info, data, i ); @@ -206,9 +206,9 @@ void _Pragma( "entrypoint" ) sha_main( void ) int sha_return( void ) { - int sum=0; - sum = sha_info.data[14] + sha_info.data[15]; - return ( sum - 261944 != 0); + int sum = 0; + sum = sha_info.data[ 14 ] + sha_info.data[ 15 ]; + return ( sum - 261944 != 0 ); } int main ( void ) diff --git a/bench/kernel/sha/sha.h b/bench/kernel/sha/sha.h old mode 100644 new mode 100755 index 2f23e2e03cb88cc8707da7af9113ee7657c299a7..8ea05f7662b8e06f6a1ff269b3c5f9ca720558c3 --- a/bench/kernel/sha/sha.h +++ b/bench/kernel/sha/sha.h @@ -31,7 +31,7 @@ typedef unsigned size_t; #define LITTLE_ENDIAN #define NULL ((void*)0) -extern unsigned volatile char sha_data[32743]; +extern unsigned volatile char sha_data[ 32743 ]; struct SHA_MY_FILE { unsigned volatile char *data; @@ -40,9 +40,9 @@ struct SHA_MY_FILE { }; struct SHA_INFO { - LONG digest[5]; /* message digest */ + LONG digest[ 5 ]; /* message digest */ LONG count_lo, count_hi; /* 64-bit bit count */ - LONG data[16]; /* SHA data buffer */ + LONG data[ 16 ]; /* SHA data buffer */ }; /* @@ -51,7 +51,7 @@ struct SHA_INFO { void sha_transform( struct SHA_INFO * ); void sha_byte_reverse( LONG *buffer, int count ); void sha_init( void ); -size_t sha_fread( void *, size_t , size_t , struct SHA_MY_FILE * ); +size_t sha_fread( void *, size_t, size_t, struct SHA_MY_FILE * ); void sha_update( struct SHA_INFO *, BYTE *, int ); void sha_final( struct SHA_INFO * ); void sha_stream( struct SHA_INFO *, struct SHA_MY_FILE * ); diff --git a/bench/kernel/st/ChangeLog.txt b/bench/kernel/st/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/kernel/st/st.c b/bench/kernel/st/st.c old mode 100644 new mode 100755 diff --git a/bench/parallel/DEBIE/code/ad_conv.h b/bench/parallel/DEBIE/code/ad_conv.h index 8336191607d0304444eb87255b3d94c34d96e6c5..894a49192015a94d2f954dfe4af368222c8ea039 100644 --- a/bench/parallel/DEBIE/code/ad_conv.h +++ b/bench/parallel/DEBIE/code/ad_conv.h @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : ad_conv.h - * - * Macros, functions, types and constants for controlling AD converter. - * - * Based on the SSF DHI file ad_conv.h, revision 1.6, Tue Jun 01 12:35:44 1999. - * - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : ad_conv.h + + Macros, functions, types and constants for controlling AD converter. + + Based on the SSF DHI file ad_conv.h, revision 1.6, Tue Jun 01 12:35:44 1999. + + + - * -------------------------------------------------------------------------- +*/ #ifndef AD_CONV_H diff --git a/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/cpulib.c b/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/cpulib.c index 3385df5a8df58a9dfc22e4a685ac58547512b6f9..8e9bf2b7b15dd2b278668dd75f549f2e5b8f0b65 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/cpulib.c +++ b/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/cpulib.c @@ -1,47 +1,47 @@ /* -cpulib: Routines for CPU initialization and configuration. + cpulib: Routines for CPU initialization and configuration. -Target : iSYSTEM LPC2138-M minitarget board (ARM7TDMI) -Source : iSYSTEM iF-DEV-LPC kit -Changes : Tidorum Ltd (N. Holsti) + Target : iSYSTEM LPC2138-M minitarget board (ARM7TDMI) + Source : iSYSTEM iF-DEV-LPC kit + Changes : Tidorum Ltd (N. Holsti) -$Id: cpulib.c,v 1.1 2008/04/08 09:44:55 niklas Exp $ + $Id: cpulib.c,v 1.1 2008/04/08 09:44:55 niklas Exp $ */ -#include "cpulib.h" +#include "cpulib.h" -void cpulib_init_cpu (void) +void cpulib_init_cpu ( void ) { - // The MAM is assumed to be initialized in crt0.s. + // The MAM is assumed to be initialized in crt0.s. - // Turn off the LED: + // Turn off the LED: - IO0DIR|=IO_LED; // Set pin direction to output. - IO0SET|=IO_LED; // Set pin value to 1 = turn off LED. + IO0DIR |= IO_LED; // Set pin direction to output. + IO0SET |= IO_LED; // Set pin value to 1 = turn off LED. } -void cpulib_go_fast (unsigned int mode) -{ - // Turn on PLL from 12 MHz to 60 MHz cclk: - - PLLCFG=0x24; - PLLCON=0x1; - PLLFEED=0xAA; - PLLFEED=0x55; - while(!(PLLSTAT & 0x400)){}; - PLLCON=0x3; - PLLFEED=0xAA; - PLLFEED=0x55; +void cpulib_go_fast ( unsigned int mode ) +{ + // Turn on PLL from 12 MHz to 60 MHz cclk: + + PLLCFG = 0x24; + PLLCON = 0x1; + PLLFEED = 0xAA; + PLLFEED = 0x55; + while ( !( PLLSTAT & 0x400 ) ) {}; + PLLCON = 0x3; + PLLFEED = 0xAA; + PLLFEED = 0x55; } -void cpulib_set_led (int state) +void cpulib_set_led ( int state ) { - if (state) - IO0CLR=IO_LED; // LED on. - else - IO0SET=IO_LED; // LED off. + if ( state ) + IO0CLR = IO_LED; // LED on. + else + IO0SET = IO_LED; // LED off. } @@ -49,29 +49,29 @@ static volatile int flash_timer; /* Loop counter for timing flash_led. */ -void cpulib_flash_led (void) +void cpulib_flash_led ( void ) { - cpulib_set_led (1); + cpulib_set_led ( 1 ); - flash_timer = 10000; - while (flash_timer > 0) flash_timer--; + flash_timer = 10000; + while ( flash_timer > 0 ) flash_timer--; - cpulib_set_led (0); + cpulib_set_led ( 0 ); } -void cpulib_blink_led (void) +void cpulib_blink_led ( void ) { - cpulib_set_led (0); + cpulib_set_led ( 0 ); - flash_timer = 30000; - while (flash_timer > 0) flash_timer--; + flash_timer = 30000; + while ( flash_timer > 0 ) flash_timer--; - cpulib_set_led (1); + cpulib_set_led ( 1 ); - flash_timer = 10000; - while (flash_timer > 0) flash_timer--; + flash_timer = 10000; + while ( flash_timer > 0 ) flash_timer--; - cpulib_set_led (0); + cpulib_set_led ( 0 ); } diff --git a/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/cpulib.h b/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/cpulib.h index 98dbb70a10fd201d1d687d7ea84ed02412a341da..c40b33b468bc12cb1d6b66fe626b765190aac1c5 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/cpulib.h +++ b/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/cpulib.h @@ -1,11 +1,11 @@ /* -cpulib: Routines for CPU initialization and configuration. + cpulib: Routines for CPU initialization and configuration. -Target : iSYSTEM LPC2138-M minitarget board (ARM7TDMI) -Source : iSYSTEM iF-DEV-LPC kit -Changes : Tidorum Ltd (N. Holsti) + Target : iSYSTEM LPC2138-M minitarget board (ARM7TDMI) + Source : iSYSTEM iF-DEV-LPC kit + Changes : Tidorum Ltd (N. Holsti) -$Id: cpulib.h,v 1.1 2008/04/08 09:44:55 niklas Exp $ + $Id: cpulib.h,v 1.1 2008/04/08 09:44:55 niklas Exp $ */ @@ -22,29 +22,29 @@ $Id: cpulib.h,v 1.1 2008/04/08 09:44:55 niklas Exp $ #define PLLSTAT REG(0xE01FC088) // PLL-Status register #define MAMCR REG(0xE01FC000) // MAM Control register #define MAMTIM REG(0xE01FC004) // MAM Timing register - + #define IO_LED 0x00000001 // The LED is connected to pin P0.0. -void cpulib_init_cpu (void); +void cpulib_init_cpu ( void ); // Initializes the processor (in addition to crt0 actions). // Defines the LED control pin (P0.0) as output and emits a "1" // to turn off the LED. -void cpulib_go_fast (unsigned int mode); +void cpulib_go_fast ( unsigned int mode ); // Sets the PLL to run the processor at 60 MHz. // Does not alter the MAM mode (because of the LPC2138 errata). -void cpulib_set_led (int state); +void cpulib_set_led ( int state ); // Turns the LED on if state != 0, off if state = 0. -void cpulib_flash_led (void); +void cpulib_flash_led ( void ); // Turns the LED on for a brief time, then off. // Useful only if the LED is initially off. -void cpulib_blink_led (void); +void cpulib_blink_led ( void ); // Turns the LED off for short time, then on // for a shorter time, then off again. diff --git a/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/crt_asyst.c b/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/crt_asyst.c index 26dff739aa6fb4078249abed8944ab1f29d693d2..0909faeff8b177e6a8fb487abbf7a8313b8c2662 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/crt_asyst.c +++ b/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/crt_asyst.c @@ -1,98 +1,99 @@ typedef unsigned char byte; typedef unsigned int uint; -typedef void (*pfunc)(void); +typedef void ( *pfunc )( void ); -int main(int argc, char *argv[]); -extern byte __ASYST_DATA_LOAD[]; -extern byte __ASYST_DATA_START[]; -extern byte __ASYST_DATA_END[]; -extern byte __ASYST_BSS_START[]; -extern byte __ASYST_BSS_END[]; -extern pfunc __ASYST_CTOR_START[]; -extern pfunc __ASYST_CTOR_END[]; -extern pfunc __ASYST_DTOR_START[]; -extern pfunc __ASYST_DTOR_END[]; -extern byte __ASYST_HEAP_START[]; +int main( int argc, char *argv[ ] ); +extern byte __ASYST_DATA_LOAD[ ]; +extern byte __ASYST_DATA_START[ ]; +extern byte __ASYST_DATA_END[ ]; +extern byte __ASYST_BSS_START[ ]; +extern byte __ASYST_BSS_END[ ]; +extern pfunc __ASYST_CTOR_START[ ]; +extern pfunc __ASYST_CTOR_END[ ]; +extern pfunc __ASYST_DTOR_START[ ]; +extern pfunc __ASYST_DTOR_END[ ]; +extern byte __ASYST_HEAP_START[ ]; #define __ASYST_IS_ALIGNED(P) ((((uint)(P)) & (~(sizeof(uint) -1))) == ((uint)(P))) -void __asyst_memset_byte(byte *pbyDest, byte byValue, uint uiSize) +void __asyst_memset_byte( byte *pbyDest, byte byValue, uint uiSize ) { - byte *pbyDestLast=pbyDest+uiSize; - for(; pbyDest!=pbyDestLast; pbyDest++) - pbyDest[0]=byValue; + byte *pbyDestLast = pbyDest + uiSize; + for ( ; pbyDest != pbyDestLast; pbyDest++ ) + pbyDest[ 0 ] = byValue; } -void __asyst_memset_uint(uint *puiDest, uint uiValue, uint uiSize) +void __asyst_memset_uint( uint *puiDest, uint uiValue, uint uiSize ) { - uint *puiDestLast=puiDest+uiSize; - for(; puiDest!=puiDestLast; puiDest++) - puiDest[0]=uiValue; + uint *puiDestLast = puiDest + uiSize; + for ( ; puiDest != puiDestLast; puiDest++ ) + puiDest[ 0 ] = uiValue; } -void __asyst_memset(byte *pbyDest, byte byValue, uint uiSize) +void __asyst_memset( byte *pbyDest, byte byValue, uint uiSize ) { - if(__ASYST_IS_ALIGNED(pbyDest) && - __ASYST_IS_ALIGNED(uiSize)) - { - uint uiValue=0; - __asyst_memset_byte((byte*)&uiValue, byValue, sizeof(uint)); - return __asyst_memset_uint((uint*)pbyDest, uiValue, uiSize/sizeof(uint)); - } - else - return __asyst_memset_byte(pbyDest, byValue, uiSize); - + if ( __ASYST_IS_ALIGNED( pbyDest ) && + __ASYST_IS_ALIGNED( uiSize ) ) { + uint uiValue = 0; + __asyst_memset_byte( ( byte * )&uiValue, byValue, sizeof( uint ) ); + return __asyst_memset_uint( ( uint * )pbyDest, uiValue, + uiSize / sizeof( uint ) ); + } else + return __asyst_memset_byte( pbyDest, byValue, uiSize ); + } -void *__asyst_memcpy_uint(uint *puiDest, const uint *puiSrc, uint uiSize) +void *__asyst_memcpy_uint( uint *puiDest, const uint *puiSrc, uint uiSize ) { - uint *puiDestLast=puiDest+uiSize; - for(; puiDest!=puiDestLast; puiSrc++,puiDest++) - puiDest[0]=puiSrc[0]; + uint *puiDestLast = puiDest + uiSize; + for ( ; puiDest != puiDestLast; puiSrc++, puiDest++ ) + puiDest[ 0 ] = puiSrc[ 0 ]; return puiDestLast; } -void *__asyst_memcpy_byte(byte *pbyDest, const byte *pbySrc, uint uiSize) +void *__asyst_memcpy_byte( byte *pbyDest, const byte *pbySrc, uint uiSize ) { - byte *pbyDestLast=pbyDest+uiSize; - for(; pbyDest!=pbyDestLast; pbySrc++,pbyDest++) - pbyDest[0]=pbySrc[0]; - return pbyDestLast; + byte *pbyDestLast = pbyDest + uiSize; + for ( ; pbyDest != pbyDestLast; pbySrc++, pbyDest++ ) + pbyDest[ 0 ] = pbySrc[ 0 ]; + return pbyDestLast; } -void *__asyst_memcpy(byte *pbyDest, const byte *pbySrc, uint uiSize) +void *__asyst_memcpy( byte *pbyDest, const byte *pbySrc, uint uiSize ) { - if(__ASYST_IS_ALIGNED(pbyDest) && - __ASYST_IS_ALIGNED(pbySrc) && - __ASYST_IS_ALIGNED(uiSize)) - return __asyst_memcpy_uint((uint*)pbyDest, (uint*)pbySrc, uiSize/sizeof(uint)); + if ( __ASYST_IS_ALIGNED( pbyDest ) && + __ASYST_IS_ALIGNED( pbySrc ) && + __ASYST_IS_ALIGNED( uiSize ) ) + return __asyst_memcpy_uint( ( uint * )pbyDest, ( uint * )pbySrc, + uiSize / sizeof( uint ) ); else - return __asyst_memcpy_byte(pbyDest, pbySrc, uiSize); + return __asyst_memcpy_byte( pbyDest, pbySrc, uiSize ); } void __asyst_main() { pfunc *pfTable; // copy data - if(__ASYST_DATA_START != __ASYST_DATA_LOAD) - __asyst_memcpy(__ASYST_DATA_START, __ASYST_DATA_LOAD, __ASYST_DATA_END - __ASYST_DATA_START); + if ( __ASYST_DATA_START != __ASYST_DATA_LOAD ) + __asyst_memcpy( __ASYST_DATA_START, __ASYST_DATA_LOAD, + __ASYST_DATA_END - __ASYST_DATA_START ); // zero bss - __asyst_memset(__ASYST_BSS_START, 0, __ASYST_BSS_END - __ASYST_BSS_START); - + __asyst_memset( __ASYST_BSS_START, 0, __ASYST_BSS_END - __ASYST_BSS_START ); + /* Not used in C project - // call constructors - for(pfTable=__ASYST_CTOR_END-1; pfTable!=__ASYST_CTOR_START; pfTable--) - pfTable[0](); + // call constructors + for(pfTable=__ASYST_CTOR_END-1; pfTable!=__ASYST_CTOR_START; pfTable--) + pfTable[ 0 ](); */ - + // main - main(0, 0); - + main( 0, 0 ); + /* Not used in C project - // call destructors - //for(pfTable=__ASYST_DTOR_START; pfTable!=__ASYST_DTOR_END; pfTable++) - //pfTable[0](); + // call destructors + //for(pfTable=__ASYST_DTOR_START; pfTable!=__ASYST_DTOR_END; pfTable++) + //pfTable[ 0 ](); */ - - while(1); + + while ( 1 ); } diff --git a/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/keyword.h b/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/keyword.h index 47f8e71c8d67d58e527119c4e452d383bf996dea..2f7304987b0e3e7635276b2fd5d7a849d27a7c21 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/keyword.h +++ b/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/keyword.h @@ -1,28 +1,28 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DNI (DEBIE Null Interface) - * Module : keyword.h - * - * Macro definitions for Keil specific keywords to be used - * in portable parts of the DEBIE DPU software. - * - * This version adapted to the GNU ARM compiler for the ARM7 as - * delivered with the IF-DEV-LPC, no kernel. - * - * Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DNI (DEBIE Null Interface) + Module : keyword.h + + Macro definitions for Keil specific keywords to be used + in portable parts of the DEBIE DPU software. + + This version adapted to the GNU ARM compiler for the ARM7 as + delivered with the IF-DEV-LPC, no kernel. + + Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef KEYWORD_H @@ -33,27 +33,27 @@ /* Integer type definitions for native types that can hold integer - * values of at least a given number of bits. These types are used - * as loop counters to give the most natural and speedy code for - * the current target. This is Not the C99 stdint.h, but the types - * have similar names. - * - * There is a particular form of this file for each (kind of) target - * processor. The present form is for ARM7/GCC, where the widths of - * the integer types are the following (as observed from the code of - * the function Check_Type_Size in harness.c): - * - * Type Octets Bits - * char 1 8 - * short 2 16 - * int 4 32 - * long 4 32 - * - * This processor/compiler also has alignment concerns, so here we - * define all telemetry data as octets and access it using memcpy() - * instead of direct assignment. - * - */ + values of at least a given number of bits. These types are used + as loop counters to give the most natural and speedy code for + the current target. This is Not the C99 stdint.h, but the types + have similar names. + + There is a particular form of this file for each (kind of) target + processor. The present form is for ARM7/GCC, where the widths of + the integer types are the following (as observed from the code of + the function Check_Type_Size in harness.c): + + Type Octets Bits + char 1 8 + short 2 16 + int 4 32 + long 4 32 + + This processor/compiler also has alignment concerns, so here we + define all telemetry data as octets and access it using memcpy() + instead of direct assignment. + +*/ /* General types */ @@ -95,7 +95,7 @@ typedef uint16_t code_address_t; /* Macros for accessing the DPU data memory by numeric address. */ -extern unsigned char *Data_Pointer (uint16_t address); +extern unsigned char *Data_Pointer ( uint16_t address ); #define DATA_POINTER(ADDR) Data_Pointer (ADDR) @@ -108,7 +108,7 @@ extern unsigned char *Data_Pointer (uint16_t address); #define COPY(DEST,SOURCE) memcpy (&(DEST), &(SOURCE), sizeof(DEST)) /* Copies the value of SOURCE to the location DEST. */ -extern unsigned short Short_Value (uskew16_t *x); +extern unsigned short Short_Value ( uskew16_t *x ); #define VALUE_OF(SOURCE) Short_Value (&(SOURCE)) /* Returns the (integer) value of SOURCE, type uskew16_t. */ @@ -125,7 +125,7 @@ typedef code_address_t fptr_t; /* The function may or may not be part of the patched code. */ /* In the real SW this is "typedef void (*fptr_t)(void);" */ -extern void Call_Patch (fptr_t func); +extern void Call_Patch ( fptr_t func ); /* "Call" the patch func. */ #define CALL_PATCH(FUNCTION) Call_Patch (FUNCTION) @@ -133,10 +133,10 @@ extern void Call_Patch (fptr_t func); /* Some macros for task and interrupt management */ -#define TASK(TASK_NUMBER) -#define PRIORITY(LEVEL) -#define INTERRUPT(SOURCE) -#define USED_REG_BANK(BANK) +#define TASK(TASK_NUMBER) +#define PRIORITY(LEVEL) +#define INTERRUPT(SOURCE) +#define USED_REG_BANK(BANK) /* Macro for declaring re-entrant function */ @@ -149,9 +149,9 @@ extern void Call_Patch (fptr_t func); #define PROGRAM -#define EXTERNAL -#define DIRECT_INTERNAL -#define INDIRECT_INTERNAL +#define EXTERNAL +#define DIRECT_INTERNAL +#define INDIRECT_INTERNAL #define LOCATION(ADDRESS) diff --git a/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/problems.h b/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/problems.h index d6dc338815ecc32ebb0809ce43c9ca7923cf37ac..cbf6049757f3833cf9eb3e60ea02174da278cc07 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/problems.h +++ b/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/problems.h @@ -1,21 +1,21 @@ /* -problems.h for arm7/gcc-if07 + problems.h for arm7/gcc-if07 -Part of the DEBIE-1 benchmark. + Part of the DEBIE-1 benchmark. -$Id: problems.h,v 1.1 2008/04/09 11:26:38 niklas Exp $ + $Id: problems.h,v 1.1 2008/04/09 11:26:38 niklas Exp $ */ #ifndef PROBLEMS_H #define PROBLEMS_H -#define FOR_PROBLEM(P) +#define FOR_PROBLEM(P) /* A marker to indicate that the program is about to execute */ /* a test case that is to be included in the analysis problem */ /* identified by P. */ -#define END_PROBLEM +#define END_PROBLEM /* A marker to indicate the end of a test case that is to be */ /* included in the analysis problem identified by the last */ /* executed FOR_PROBLEM. */ diff --git a/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/target.c b/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/target.c index 599da04f8331a0e09a6f200e13332b190a5f4675..93ece25603e26dd47c375b90a6689f721d265c10 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/target.c +++ b/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/target.c @@ -1,32 +1,32 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW, test harness for WCET analysis - * Subsystem : DNI (DEBIE Null Interface) - * Module : target.c - * - * Target-specific implementations of the DNI operations, specifically - * for the iF-DEV-LPC kit and the LPC2138 processor. - * - * Based, with extensive changes, on parts of the SSF file rtx_if.c, - * rev 1.13, Fri May 21 00:14:00 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW, test harness for WCET analysis + Subsystem : DNI (DEBIE Null Interface) + Module : target.c + + Target-specific implementations of the DNI operations, specifically + for the iF-DEV-LPC kit and the LPC2138 processor. + + Based, with extensive changes, on parts of the SSF file rtx_if.c, + rev 1.13, Fri May 21 00:14:00 1999. + + - * -------------------------------------------------------------------------- +*/ /* This file contains one set of operations, as follows: - * - * > memory operations: dpu_ctrl.h - * - */ + + > memory operations: dpu_ctrl.h + +*/ #include "keyword.h" @@ -42,26 +42,26 @@ /* The SRAM starts at this address. */ -unsigned char *Data_Pointer (uint16_t address) +unsigned char *Data_Pointer ( uint16_t address ) { - return (unsigned char *)(DATA_MEM_BASE + (uint32_t)address); + return ( unsigned char * )( DATA_MEM_BASE + ( uint32_t )address ); } -void Set_Data_Byte (data_address_t addr, unsigned char value) +void Set_Data_Byte ( data_address_t addr, unsigned char value ) { - /* *(Data_Pointer (addr)) = value; */ - /* Safer to do nothing. */ + /* *(Data_Pointer (addr)) = value; */ + /* Safer to do nothing. */ } -unsigned char Get_Data_Byte (data_address_t addr) +unsigned char Get_Data_Byte ( data_address_t addr ) { - return *(Data_Pointer (addr)); + return *( Data_Pointer ( addr ) ); } -unsigned char Get_Code_Byte (code_address_t addr) +unsigned char Get_Code_Byte ( code_address_t addr ) { - return 0; + return 0; } diff --git a/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/target_tm_data.h b/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/target_tm_data.h index f365afe950a10081785a0f53679c4d6449623af5..721170419e0b22e1c3ade854e81db04e88e5ffae 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/target_tm_data.h +++ b/bench/parallel/DEBIE/code/arch/arm7-lpc2138-mam/target_tm_data.h @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : target_tm_data.h - * - * The target-specific aspects of the Telemetry Data Structure. - * This version for the target arm7/gcc-if07. - * - * Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : target_tm_data.h + + The target-specific aspects of the Telemetry Data Structure. + This version for the target arm7/gcc-if07. + + Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TARGET_TM_DATA_H #define TARGET_TM_DATA_H diff --git a/bench/parallel/DEBIE/code/arch/arm7-x1/keyword.h b/bench/parallel/DEBIE/code/arch/arm7-x1/keyword.h index 9310e51cfa08fc0cabb4b7b6d3a2a589bd692077..ea2053758581fe800d3b5732db01d94dd1724248 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x1/keyword.h +++ b/bench/parallel/DEBIE/code/arch/arm7-x1/keyword.h @@ -1,28 +1,28 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DNI (DEBIE Null Interface) - * Module : keyword.h - * - * Macro definitions for Keil specific keywords to be used - * in portable parts of the DEBIE DPU software. - * - * This version adapted to the GNU ARM compiler for the ARM7 as - * delivered with the IF-DEV-LPC, no kernel. - * - * Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DNI (DEBIE Null Interface) + Module : keyword.h + + Macro definitions for Keil specific keywords to be used + in portable parts of the DEBIE DPU software. + + This version adapted to the GNU ARM compiler for the ARM7 as + delivered with the IF-DEV-LPC, no kernel. + + Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef KEYWORD_H @@ -30,27 +30,27 @@ /* Integer type definitions for native types that can hold integer - * values of at least a given number of bits. These types are used - * as loop counters to give the most natural and speedy code for - * the current target. This is Not the C99 stdint.h, but the types - * have similar names. - * - * There is a particular form of this file for each (kind of) target - * processor. The present form is for ARM7/GCC, where the widths of - * the integer types are the following (as observed from the code of - * the function Check_Type_Size in harness.c): - * - * Type Octets Bits - * char 1 8 - * short 2 16 - * int 4 32 - * long 4 32 - * - * This processor/compiler also has alignment concerns, so here we - * define all telemetry data as octets and access it using memcpy() - * instead of direct assignment. - * - */ + values of at least a given number of bits. These types are used + as loop counters to give the most natural and speedy code for + the current target. This is Not the C99 stdint.h, but the types + have similar names. + + There is a particular form of this file for each (kind of) target + processor. The present form is for ARM7/GCC, where the widths of + the integer types are the following (as observed from the code of + the function Check_Type_Size in harness.c): + + Type Octets Bits + char 1 8 + short 2 16 + int 4 32 + long 4 32 + + This processor/compiler also has alignment concerns, so here we + define all telemetry data as octets and access it using memcpy() + instead of direct assignment. + +*/ /* General types */ @@ -92,7 +92,7 @@ typedef uint16_t code_address_t; /* Macros for accessing the DPU data memory by numeric address. */ -extern unsigned char *Data_Pointer (uint16_t address); +extern unsigned char *Data_Pointer ( uint16_t address ); #define DATA_POINTER(ADDR) Data_Pointer (ADDR) @@ -102,12 +102,12 @@ extern unsigned char *Data_Pointer (uint16_t address); /* because the operands in these macros may not be aligned */ /* in the required way. */ -extern void wcc_memcpy( void*, void*, int ); +extern void wcc_memcpy( void *, void *, int ); #define COPY(DEST,SOURCE) wcc_memcpy (&(DEST), &(SOURCE), sizeof(DEST)) /* Copies the value of SOURCE to the location DEST. */ -extern unsigned short Short_Value (uskew16_t *x); +extern unsigned short Short_Value ( uskew16_t *x ); #define VALUE_OF(SOURCE) Short_Value (&(SOURCE)) /* Returns the (integer) value of SOURCE, type uskew16_t. */ @@ -124,7 +124,7 @@ typedef code_address_t fptr_t; /* The function may or may not be part of the patched code. */ /* In the real SW this is "typedef void (*fptr_t)(void);" */ -extern void Call_Patch (fptr_t func); +extern void Call_Patch ( fptr_t func ); /* "Call" the patch func. */ #define CALL_PATCH(FUNCTION) Call_Patch (FUNCTION) @@ -132,10 +132,10 @@ extern void Call_Patch (fptr_t func); /* Some macros for task and interrupt management */ -#define TASK(TASK_NUMBER) -#define PRIORITY(LEVEL) -#define INTERRUPT(SOURCE) -#define USED_REG_BANK(BANK) +#define TASK(TASK_NUMBER) +#define PRIORITY(LEVEL) +#define INTERRUPT(SOURCE) +#define USED_REG_BANK(BANK) /* Macro for declaring re-entrant function */ @@ -148,9 +148,9 @@ extern void Call_Patch (fptr_t func); #define PROGRAM -#define EXTERNAL -#define DIRECT_INTERNAL -#define INDIRECT_INTERNAL +#define EXTERNAL +#define DIRECT_INTERNAL +#define INDIRECT_INTERNAL #define LOCATION(ADDRESS) @@ -158,7 +158,7 @@ extern void Call_Patch (fptr_t func); #define TARGET_INIT #define TARGET_MARK -#define TARGET_REBOOT +#define TARGET_REBOOT #define TARGET_START_TEST #define TARGET_REPEAT_TEST 0 diff --git a/bench/parallel/DEBIE/code/arch/arm7-x1/problems.h b/bench/parallel/DEBIE/code/arch/arm7-x1/problems.h index d6dc338815ecc32ebb0809ce43c9ca7923cf37ac..cbf6049757f3833cf9eb3e60ea02174da278cc07 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x1/problems.h +++ b/bench/parallel/DEBIE/code/arch/arm7-x1/problems.h @@ -1,21 +1,21 @@ /* -problems.h for arm7/gcc-if07 + problems.h for arm7/gcc-if07 -Part of the DEBIE-1 benchmark. + Part of the DEBIE-1 benchmark. -$Id: problems.h,v 1.1 2008/04/09 11:26:38 niklas Exp $ + $Id: problems.h,v 1.1 2008/04/09 11:26:38 niklas Exp $ */ #ifndef PROBLEMS_H #define PROBLEMS_H -#define FOR_PROBLEM(P) +#define FOR_PROBLEM(P) /* A marker to indicate that the program is about to execute */ /* a test case that is to be included in the analysis problem */ /* identified by P. */ -#define END_PROBLEM +#define END_PROBLEM /* A marker to indicate the end of a test case that is to be */ /* included in the analysis problem identified by the last */ /* executed FOR_PROBLEM. */ diff --git a/bench/parallel/DEBIE/code/arch/arm7-x1/target.c b/bench/parallel/DEBIE/code/arch/arm7-x1/target.c index b8126ddc8eb791558277bf69aeb64d07c245edfe..6e9d4cf75d7f5d0624bdd0a82cfadef30d6a1604 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x1/target.c +++ b/bench/parallel/DEBIE/code/arch/arm7-x1/target.c @@ -1,32 +1,32 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW, test harness for WCET analysis - * Subsystem : DNI (DEBIE Null Interface) - * Module : target.c - * - * Target-specific implementations of the DNI operations, specifically - * for the iF-DEV-LPC kit and the LPC2138 processor. - * - * Based, with extensive changes, on parts of the SSF file rtx_if.c, - * rev 1.13, Fri May 21 00:14:00 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW, test harness for WCET analysis + Subsystem : DNI (DEBIE Null Interface) + Module : target.c + + Target-specific implementations of the DNI operations, specifically + for the iF-DEV-LPC kit and the LPC2138 processor. + + Based, with extensive changes, on parts of the SSF file rtx_if.c, + rev 1.13, Fri May 21 00:14:00 1999. + + - * -------------------------------------------------------------------------- +*/ /* This file contains one set of operations, as follows: - * - * > memory operations: dpu_ctrl.h - * - */ + + > memory operations: dpu_ctrl.h + +*/ #include "keyword.h" @@ -42,26 +42,26 @@ /* The SRAM starts at this address. */ -unsigned char *Data_Pointer (uint16_t address) +unsigned char *Data_Pointer ( uint16_t address ) { - return (unsigned char *)(DATA_MEM_BASE + (uint32_t)address); + return ( unsigned char * )( DATA_MEM_BASE + ( uint32_t )address ); } -void Set_Data_Byte (data_address_t addr, unsigned char value) +void Set_Data_Byte ( data_address_t addr, unsigned char value ) { - /* *(Data_Pointer (addr)) = value; */ - /* Safer to do nothing. */ + /* *(Data_Pointer (addr)) = value; */ + /* Safer to do nothing. */ } -unsigned char Get_Data_Byte (data_address_t addr) +unsigned char Get_Data_Byte ( data_address_t addr ) { - return *(Data_Pointer (addr)); + return *( Data_Pointer ( addr ) ); } -unsigned char Get_Code_Byte (code_address_t addr) +unsigned char Get_Code_Byte ( code_address_t addr ) { - return 0; + return 0; } diff --git a/bench/parallel/DEBIE/code/arch/arm7-x1/target_tm_data.h b/bench/parallel/DEBIE/code/arch/arm7-x1/target_tm_data.h index 7f917fcad0f10385fba67271fb11f9cb3971fdd6..5d7e53fdbce4c9e4189cf00ba751e904cda5b6a7 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x1/target_tm_data.h +++ b/bench/parallel/DEBIE/code/arch/arm7-x1/target_tm_data.h @@ -1,30 +1,30 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : target_tm_data.h - * - * The target-specific aspects of the Telemetry Data Structure. - * - * Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : target_tm_data.h + + The target-specific aspects of the Telemetry Data Structure. + + Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TARGET_TM_DATA_H #define TARGET_TM_DATA_H #define MAX_EVENTS 1261 /* Same as in the original DEBIE-1 SW, although there limited - * by the size of the data memory. - */ + by the size of the data memory. +*/ #endif diff --git a/bench/parallel/DEBIE/code/arch/arm7-x1/wcc_memcpy.c b/bench/parallel/DEBIE/code/arch/arm7-x1/wcc_memcpy.c index 955d672373965090fb6599e876491ebbf2ce8fdc..4945e519d273f793184aa39aa55593f604209ca1 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x1/wcc_memcpy.c +++ b/bench/parallel/DEBIE/code/arch/arm7-x1/wcc_memcpy.c @@ -1,11 +1,10 @@ #include "keyword.h" -void wcc_memcpy(void *dest, void *src, int size) +void wcc_memcpy( void *dest, void *src, int size ) { - int i; - _Pragma("loopbound min 1 max 4") - for(i=0;i<size;i++) { - ((unsigned char *)dest)[i]=((unsigned char *)src)[i]; - } - return; + int i; + _Pragma( "loopbound min 1 max 4" ) + for ( i = 0; i < size; i++ ) + ( ( unsigned char * )dest )[ i ] = ( ( unsigned char * )src )[ i ]; + return; } diff --git a/bench/parallel/DEBIE/code/arch/arm7-x2/keyword.h b/bench/parallel/DEBIE/code/arch/arm7-x2/keyword.h index 9310e51cfa08fc0cabb4b7b6d3a2a589bd692077..ea2053758581fe800d3b5732db01d94dd1724248 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x2/keyword.h +++ b/bench/parallel/DEBIE/code/arch/arm7-x2/keyword.h @@ -1,28 +1,28 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DNI (DEBIE Null Interface) - * Module : keyword.h - * - * Macro definitions for Keil specific keywords to be used - * in portable parts of the DEBIE DPU software. - * - * This version adapted to the GNU ARM compiler for the ARM7 as - * delivered with the IF-DEV-LPC, no kernel. - * - * Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DNI (DEBIE Null Interface) + Module : keyword.h + + Macro definitions for Keil specific keywords to be used + in portable parts of the DEBIE DPU software. + + This version adapted to the GNU ARM compiler for the ARM7 as + delivered with the IF-DEV-LPC, no kernel. + + Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef KEYWORD_H @@ -30,27 +30,27 @@ /* Integer type definitions for native types that can hold integer - * values of at least a given number of bits. These types are used - * as loop counters to give the most natural and speedy code for - * the current target. This is Not the C99 stdint.h, but the types - * have similar names. - * - * There is a particular form of this file for each (kind of) target - * processor. The present form is for ARM7/GCC, where the widths of - * the integer types are the following (as observed from the code of - * the function Check_Type_Size in harness.c): - * - * Type Octets Bits - * char 1 8 - * short 2 16 - * int 4 32 - * long 4 32 - * - * This processor/compiler also has alignment concerns, so here we - * define all telemetry data as octets and access it using memcpy() - * instead of direct assignment. - * - */ + values of at least a given number of bits. These types are used + as loop counters to give the most natural and speedy code for + the current target. This is Not the C99 stdint.h, but the types + have similar names. + + There is a particular form of this file for each (kind of) target + processor. The present form is for ARM7/GCC, where the widths of + the integer types are the following (as observed from the code of + the function Check_Type_Size in harness.c): + + Type Octets Bits + char 1 8 + short 2 16 + int 4 32 + long 4 32 + + This processor/compiler also has alignment concerns, so here we + define all telemetry data as octets and access it using memcpy() + instead of direct assignment. + +*/ /* General types */ @@ -92,7 +92,7 @@ typedef uint16_t code_address_t; /* Macros for accessing the DPU data memory by numeric address. */ -extern unsigned char *Data_Pointer (uint16_t address); +extern unsigned char *Data_Pointer ( uint16_t address ); #define DATA_POINTER(ADDR) Data_Pointer (ADDR) @@ -102,12 +102,12 @@ extern unsigned char *Data_Pointer (uint16_t address); /* because the operands in these macros may not be aligned */ /* in the required way. */ -extern void wcc_memcpy( void*, void*, int ); +extern void wcc_memcpy( void *, void *, int ); #define COPY(DEST,SOURCE) wcc_memcpy (&(DEST), &(SOURCE), sizeof(DEST)) /* Copies the value of SOURCE to the location DEST. */ -extern unsigned short Short_Value (uskew16_t *x); +extern unsigned short Short_Value ( uskew16_t *x ); #define VALUE_OF(SOURCE) Short_Value (&(SOURCE)) /* Returns the (integer) value of SOURCE, type uskew16_t. */ @@ -124,7 +124,7 @@ typedef code_address_t fptr_t; /* The function may or may not be part of the patched code. */ /* In the real SW this is "typedef void (*fptr_t)(void);" */ -extern void Call_Patch (fptr_t func); +extern void Call_Patch ( fptr_t func ); /* "Call" the patch func. */ #define CALL_PATCH(FUNCTION) Call_Patch (FUNCTION) @@ -132,10 +132,10 @@ extern void Call_Patch (fptr_t func); /* Some macros for task and interrupt management */ -#define TASK(TASK_NUMBER) -#define PRIORITY(LEVEL) -#define INTERRUPT(SOURCE) -#define USED_REG_BANK(BANK) +#define TASK(TASK_NUMBER) +#define PRIORITY(LEVEL) +#define INTERRUPT(SOURCE) +#define USED_REG_BANK(BANK) /* Macro for declaring re-entrant function */ @@ -148,9 +148,9 @@ extern void Call_Patch (fptr_t func); #define PROGRAM -#define EXTERNAL -#define DIRECT_INTERNAL -#define INDIRECT_INTERNAL +#define EXTERNAL +#define DIRECT_INTERNAL +#define INDIRECT_INTERNAL #define LOCATION(ADDRESS) @@ -158,7 +158,7 @@ extern void Call_Patch (fptr_t func); #define TARGET_INIT #define TARGET_MARK -#define TARGET_REBOOT +#define TARGET_REBOOT #define TARGET_START_TEST #define TARGET_REPEAT_TEST 0 diff --git a/bench/parallel/DEBIE/code/arch/arm7-x2/problems.h b/bench/parallel/DEBIE/code/arch/arm7-x2/problems.h index d6dc338815ecc32ebb0809ce43c9ca7923cf37ac..cbf6049757f3833cf9eb3e60ea02174da278cc07 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x2/problems.h +++ b/bench/parallel/DEBIE/code/arch/arm7-x2/problems.h @@ -1,21 +1,21 @@ /* -problems.h for arm7/gcc-if07 + problems.h for arm7/gcc-if07 -Part of the DEBIE-1 benchmark. + Part of the DEBIE-1 benchmark. -$Id: problems.h,v 1.1 2008/04/09 11:26:38 niklas Exp $ + $Id: problems.h,v 1.1 2008/04/09 11:26:38 niklas Exp $ */ #ifndef PROBLEMS_H #define PROBLEMS_H -#define FOR_PROBLEM(P) +#define FOR_PROBLEM(P) /* A marker to indicate that the program is about to execute */ /* a test case that is to be included in the analysis problem */ /* identified by P. */ -#define END_PROBLEM +#define END_PROBLEM /* A marker to indicate the end of a test case that is to be */ /* included in the analysis problem identified by the last */ /* executed FOR_PROBLEM. */ diff --git a/bench/parallel/DEBIE/code/arch/arm7-x2/target.c b/bench/parallel/DEBIE/code/arch/arm7-x2/target.c index b8126ddc8eb791558277bf69aeb64d07c245edfe..6e9d4cf75d7f5d0624bdd0a82cfadef30d6a1604 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x2/target.c +++ b/bench/parallel/DEBIE/code/arch/arm7-x2/target.c @@ -1,32 +1,32 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW, test harness for WCET analysis - * Subsystem : DNI (DEBIE Null Interface) - * Module : target.c - * - * Target-specific implementations of the DNI operations, specifically - * for the iF-DEV-LPC kit and the LPC2138 processor. - * - * Based, with extensive changes, on parts of the SSF file rtx_if.c, - * rev 1.13, Fri May 21 00:14:00 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW, test harness for WCET analysis + Subsystem : DNI (DEBIE Null Interface) + Module : target.c + + Target-specific implementations of the DNI operations, specifically + for the iF-DEV-LPC kit and the LPC2138 processor. + + Based, with extensive changes, on parts of the SSF file rtx_if.c, + rev 1.13, Fri May 21 00:14:00 1999. + + - * -------------------------------------------------------------------------- +*/ /* This file contains one set of operations, as follows: - * - * > memory operations: dpu_ctrl.h - * - */ + + > memory operations: dpu_ctrl.h + +*/ #include "keyword.h" @@ -42,26 +42,26 @@ /* The SRAM starts at this address. */ -unsigned char *Data_Pointer (uint16_t address) +unsigned char *Data_Pointer ( uint16_t address ) { - return (unsigned char *)(DATA_MEM_BASE + (uint32_t)address); + return ( unsigned char * )( DATA_MEM_BASE + ( uint32_t )address ); } -void Set_Data_Byte (data_address_t addr, unsigned char value) +void Set_Data_Byte ( data_address_t addr, unsigned char value ) { - /* *(Data_Pointer (addr)) = value; */ - /* Safer to do nothing. */ + /* *(Data_Pointer (addr)) = value; */ + /* Safer to do nothing. */ } -unsigned char Get_Data_Byte (data_address_t addr) +unsigned char Get_Data_Byte ( data_address_t addr ) { - return *(Data_Pointer (addr)); + return *( Data_Pointer ( addr ) ); } -unsigned char Get_Code_Byte (code_address_t addr) +unsigned char Get_Code_Byte ( code_address_t addr ) { - return 0; + return 0; } diff --git a/bench/parallel/DEBIE/code/arch/arm7-x2/target_tm_data.h b/bench/parallel/DEBIE/code/arch/arm7-x2/target_tm_data.h index 7f917fcad0f10385fba67271fb11f9cb3971fdd6..5d7e53fdbce4c9e4189cf00ba751e904cda5b6a7 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x2/target_tm_data.h +++ b/bench/parallel/DEBIE/code/arch/arm7-x2/target_tm_data.h @@ -1,30 +1,30 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : target_tm_data.h - * - * The target-specific aspects of the Telemetry Data Structure. - * - * Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : target_tm_data.h + + The target-specific aspects of the Telemetry Data Structure. + + Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TARGET_TM_DATA_H #define TARGET_TM_DATA_H #define MAX_EVENTS 1261 /* Same as in the original DEBIE-1 SW, although there limited - * by the size of the data memory. - */ + by the size of the data memory. +*/ #endif diff --git a/bench/parallel/DEBIE/code/arch/arm7-x2/wcc_memcpy.c b/bench/parallel/DEBIE/code/arch/arm7-x2/wcc_memcpy.c index 955d672373965090fb6599e876491ebbf2ce8fdc..4945e519d273f793184aa39aa55593f604209ca1 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x2/wcc_memcpy.c +++ b/bench/parallel/DEBIE/code/arch/arm7-x2/wcc_memcpy.c @@ -1,11 +1,10 @@ #include "keyword.h" -void wcc_memcpy(void *dest, void *src, int size) +void wcc_memcpy( void *dest, void *src, int size ) { - int i; - _Pragma("loopbound min 1 max 4") - for(i=0;i<size;i++) { - ((unsigned char *)dest)[i]=((unsigned char *)src)[i]; - } - return; + int i; + _Pragma( "loopbound min 1 max 4" ) + for ( i = 0; i < size; i++ ) + ( ( unsigned char * )dest )[ i ] = ( ( unsigned char * )src )[ i ]; + return; } diff --git a/bench/parallel/DEBIE/code/arch/arm7-x4/keyword.h b/bench/parallel/DEBIE/code/arch/arm7-x4/keyword.h index 9310e51cfa08fc0cabb4b7b6d3a2a589bd692077..ea2053758581fe800d3b5732db01d94dd1724248 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x4/keyword.h +++ b/bench/parallel/DEBIE/code/arch/arm7-x4/keyword.h @@ -1,28 +1,28 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DNI (DEBIE Null Interface) - * Module : keyword.h - * - * Macro definitions for Keil specific keywords to be used - * in portable parts of the DEBIE DPU software. - * - * This version adapted to the GNU ARM compiler for the ARM7 as - * delivered with the IF-DEV-LPC, no kernel. - * - * Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DNI (DEBIE Null Interface) + Module : keyword.h + + Macro definitions for Keil specific keywords to be used + in portable parts of the DEBIE DPU software. + + This version adapted to the GNU ARM compiler for the ARM7 as + delivered with the IF-DEV-LPC, no kernel. + + Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef KEYWORD_H @@ -30,27 +30,27 @@ /* Integer type definitions for native types that can hold integer - * values of at least a given number of bits. These types are used - * as loop counters to give the most natural and speedy code for - * the current target. This is Not the C99 stdint.h, but the types - * have similar names. - * - * There is a particular form of this file for each (kind of) target - * processor. The present form is for ARM7/GCC, where the widths of - * the integer types are the following (as observed from the code of - * the function Check_Type_Size in harness.c): - * - * Type Octets Bits - * char 1 8 - * short 2 16 - * int 4 32 - * long 4 32 - * - * This processor/compiler also has alignment concerns, so here we - * define all telemetry data as octets and access it using memcpy() - * instead of direct assignment. - * - */ + values of at least a given number of bits. These types are used + as loop counters to give the most natural and speedy code for + the current target. This is Not the C99 stdint.h, but the types + have similar names. + + There is a particular form of this file for each (kind of) target + processor. The present form is for ARM7/GCC, where the widths of + the integer types are the following (as observed from the code of + the function Check_Type_Size in harness.c): + + Type Octets Bits + char 1 8 + short 2 16 + int 4 32 + long 4 32 + + This processor/compiler also has alignment concerns, so here we + define all telemetry data as octets and access it using memcpy() + instead of direct assignment. + +*/ /* General types */ @@ -92,7 +92,7 @@ typedef uint16_t code_address_t; /* Macros for accessing the DPU data memory by numeric address. */ -extern unsigned char *Data_Pointer (uint16_t address); +extern unsigned char *Data_Pointer ( uint16_t address ); #define DATA_POINTER(ADDR) Data_Pointer (ADDR) @@ -102,12 +102,12 @@ extern unsigned char *Data_Pointer (uint16_t address); /* because the operands in these macros may not be aligned */ /* in the required way. */ -extern void wcc_memcpy( void*, void*, int ); +extern void wcc_memcpy( void *, void *, int ); #define COPY(DEST,SOURCE) wcc_memcpy (&(DEST), &(SOURCE), sizeof(DEST)) /* Copies the value of SOURCE to the location DEST. */ -extern unsigned short Short_Value (uskew16_t *x); +extern unsigned short Short_Value ( uskew16_t *x ); #define VALUE_OF(SOURCE) Short_Value (&(SOURCE)) /* Returns the (integer) value of SOURCE, type uskew16_t. */ @@ -124,7 +124,7 @@ typedef code_address_t fptr_t; /* The function may or may not be part of the patched code. */ /* In the real SW this is "typedef void (*fptr_t)(void);" */ -extern void Call_Patch (fptr_t func); +extern void Call_Patch ( fptr_t func ); /* "Call" the patch func. */ #define CALL_PATCH(FUNCTION) Call_Patch (FUNCTION) @@ -132,10 +132,10 @@ extern void Call_Patch (fptr_t func); /* Some macros for task and interrupt management */ -#define TASK(TASK_NUMBER) -#define PRIORITY(LEVEL) -#define INTERRUPT(SOURCE) -#define USED_REG_BANK(BANK) +#define TASK(TASK_NUMBER) +#define PRIORITY(LEVEL) +#define INTERRUPT(SOURCE) +#define USED_REG_BANK(BANK) /* Macro for declaring re-entrant function */ @@ -148,9 +148,9 @@ extern void Call_Patch (fptr_t func); #define PROGRAM -#define EXTERNAL -#define DIRECT_INTERNAL -#define INDIRECT_INTERNAL +#define EXTERNAL +#define DIRECT_INTERNAL +#define INDIRECT_INTERNAL #define LOCATION(ADDRESS) @@ -158,7 +158,7 @@ extern void Call_Patch (fptr_t func); #define TARGET_INIT #define TARGET_MARK -#define TARGET_REBOOT +#define TARGET_REBOOT #define TARGET_START_TEST #define TARGET_REPEAT_TEST 0 diff --git a/bench/parallel/DEBIE/code/arch/arm7-x4/problems.h b/bench/parallel/DEBIE/code/arch/arm7-x4/problems.h index d6dc338815ecc32ebb0809ce43c9ca7923cf37ac..cbf6049757f3833cf9eb3e60ea02174da278cc07 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x4/problems.h +++ b/bench/parallel/DEBIE/code/arch/arm7-x4/problems.h @@ -1,21 +1,21 @@ /* -problems.h for arm7/gcc-if07 + problems.h for arm7/gcc-if07 -Part of the DEBIE-1 benchmark. + Part of the DEBIE-1 benchmark. -$Id: problems.h,v 1.1 2008/04/09 11:26:38 niklas Exp $ + $Id: problems.h,v 1.1 2008/04/09 11:26:38 niklas Exp $ */ #ifndef PROBLEMS_H #define PROBLEMS_H -#define FOR_PROBLEM(P) +#define FOR_PROBLEM(P) /* A marker to indicate that the program is about to execute */ /* a test case that is to be included in the analysis problem */ /* identified by P. */ -#define END_PROBLEM +#define END_PROBLEM /* A marker to indicate the end of a test case that is to be */ /* included in the analysis problem identified by the last */ /* executed FOR_PROBLEM. */ diff --git a/bench/parallel/DEBIE/code/arch/arm7-x4/target.c b/bench/parallel/DEBIE/code/arch/arm7-x4/target.c index b8126ddc8eb791558277bf69aeb64d07c245edfe..6e9d4cf75d7f5d0624bdd0a82cfadef30d6a1604 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x4/target.c +++ b/bench/parallel/DEBIE/code/arch/arm7-x4/target.c @@ -1,32 +1,32 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW, test harness for WCET analysis - * Subsystem : DNI (DEBIE Null Interface) - * Module : target.c - * - * Target-specific implementations of the DNI operations, specifically - * for the iF-DEV-LPC kit and the LPC2138 processor. - * - * Based, with extensive changes, on parts of the SSF file rtx_if.c, - * rev 1.13, Fri May 21 00:14:00 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW, test harness for WCET analysis + Subsystem : DNI (DEBIE Null Interface) + Module : target.c + + Target-specific implementations of the DNI operations, specifically + for the iF-DEV-LPC kit and the LPC2138 processor. + + Based, with extensive changes, on parts of the SSF file rtx_if.c, + rev 1.13, Fri May 21 00:14:00 1999. + + - * -------------------------------------------------------------------------- +*/ /* This file contains one set of operations, as follows: - * - * > memory operations: dpu_ctrl.h - * - */ + + > memory operations: dpu_ctrl.h + +*/ #include "keyword.h" @@ -42,26 +42,26 @@ /* The SRAM starts at this address. */ -unsigned char *Data_Pointer (uint16_t address) +unsigned char *Data_Pointer ( uint16_t address ) { - return (unsigned char *)(DATA_MEM_BASE + (uint32_t)address); + return ( unsigned char * )( DATA_MEM_BASE + ( uint32_t )address ); } -void Set_Data_Byte (data_address_t addr, unsigned char value) +void Set_Data_Byte ( data_address_t addr, unsigned char value ) { - /* *(Data_Pointer (addr)) = value; */ - /* Safer to do nothing. */ + /* *(Data_Pointer (addr)) = value; */ + /* Safer to do nothing. */ } -unsigned char Get_Data_Byte (data_address_t addr) +unsigned char Get_Data_Byte ( data_address_t addr ) { - return *(Data_Pointer (addr)); + return *( Data_Pointer ( addr ) ); } -unsigned char Get_Code_Byte (code_address_t addr) +unsigned char Get_Code_Byte ( code_address_t addr ) { - return 0; + return 0; } diff --git a/bench/parallel/DEBIE/code/arch/arm7-x4/target_tm_data.h b/bench/parallel/DEBIE/code/arch/arm7-x4/target_tm_data.h index 7f917fcad0f10385fba67271fb11f9cb3971fdd6..5d7e53fdbce4c9e4189cf00ba751e904cda5b6a7 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x4/target_tm_data.h +++ b/bench/parallel/DEBIE/code/arch/arm7-x4/target_tm_data.h @@ -1,30 +1,30 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : target_tm_data.h - * - * The target-specific aspects of the Telemetry Data Structure. - * - * Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : target_tm_data.h + + The target-specific aspects of the Telemetry Data Structure. + + Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TARGET_TM_DATA_H #define TARGET_TM_DATA_H #define MAX_EVENTS 1261 /* Same as in the original DEBIE-1 SW, although there limited - * by the size of the data memory. - */ + by the size of the data memory. +*/ #endif diff --git a/bench/parallel/DEBIE/code/arch/arm7-x4/wcc_memcpy.c b/bench/parallel/DEBIE/code/arch/arm7-x4/wcc_memcpy.c index 955d672373965090fb6599e876491ebbf2ce8fdc..4945e519d273f793184aa39aa55593f604209ca1 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x4/wcc_memcpy.c +++ b/bench/parallel/DEBIE/code/arch/arm7-x4/wcc_memcpy.c @@ -1,11 +1,10 @@ #include "keyword.h" -void wcc_memcpy(void *dest, void *src, int size) +void wcc_memcpy( void *dest, void *src, int size ) { - int i; - _Pragma("loopbound min 1 max 4") - for(i=0;i<size;i++) { - ((unsigned char *)dest)[i]=((unsigned char *)src)[i]; - } - return; + int i; + _Pragma( "loopbound min 1 max 4" ) + for ( i = 0; i < size; i++ ) + ( ( unsigned char * )dest )[ i ] = ( ( unsigned char * )src )[ i ]; + return; } diff --git a/bench/parallel/DEBIE/code/arch/arm7-x8/keyword.h b/bench/parallel/DEBIE/code/arch/arm7-x8/keyword.h index 9310e51cfa08fc0cabb4b7b6d3a2a589bd692077..ea2053758581fe800d3b5732db01d94dd1724248 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x8/keyword.h +++ b/bench/parallel/DEBIE/code/arch/arm7-x8/keyword.h @@ -1,28 +1,28 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DNI (DEBIE Null Interface) - * Module : keyword.h - * - * Macro definitions for Keil specific keywords to be used - * in portable parts of the DEBIE DPU software. - * - * This version adapted to the GNU ARM compiler for the ARM7 as - * delivered with the IF-DEV-LPC, no kernel. - * - * Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DNI (DEBIE Null Interface) + Module : keyword.h + + Macro definitions for Keil specific keywords to be used + in portable parts of the DEBIE DPU software. + + This version adapted to the GNU ARM compiler for the ARM7 as + delivered with the IF-DEV-LPC, no kernel. + + Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef KEYWORD_H @@ -30,27 +30,27 @@ /* Integer type definitions for native types that can hold integer - * values of at least a given number of bits. These types are used - * as loop counters to give the most natural and speedy code for - * the current target. This is Not the C99 stdint.h, but the types - * have similar names. - * - * There is a particular form of this file for each (kind of) target - * processor. The present form is for ARM7/GCC, where the widths of - * the integer types are the following (as observed from the code of - * the function Check_Type_Size in harness.c): - * - * Type Octets Bits - * char 1 8 - * short 2 16 - * int 4 32 - * long 4 32 - * - * This processor/compiler also has alignment concerns, so here we - * define all telemetry data as octets and access it using memcpy() - * instead of direct assignment. - * - */ + values of at least a given number of bits. These types are used + as loop counters to give the most natural and speedy code for + the current target. This is Not the C99 stdint.h, but the types + have similar names. + + There is a particular form of this file for each (kind of) target + processor. The present form is for ARM7/GCC, where the widths of + the integer types are the following (as observed from the code of + the function Check_Type_Size in harness.c): + + Type Octets Bits + char 1 8 + short 2 16 + int 4 32 + long 4 32 + + This processor/compiler also has alignment concerns, so here we + define all telemetry data as octets and access it using memcpy() + instead of direct assignment. + +*/ /* General types */ @@ -92,7 +92,7 @@ typedef uint16_t code_address_t; /* Macros for accessing the DPU data memory by numeric address. */ -extern unsigned char *Data_Pointer (uint16_t address); +extern unsigned char *Data_Pointer ( uint16_t address ); #define DATA_POINTER(ADDR) Data_Pointer (ADDR) @@ -102,12 +102,12 @@ extern unsigned char *Data_Pointer (uint16_t address); /* because the operands in these macros may not be aligned */ /* in the required way. */ -extern void wcc_memcpy( void*, void*, int ); +extern void wcc_memcpy( void *, void *, int ); #define COPY(DEST,SOURCE) wcc_memcpy (&(DEST), &(SOURCE), sizeof(DEST)) /* Copies the value of SOURCE to the location DEST. */ -extern unsigned short Short_Value (uskew16_t *x); +extern unsigned short Short_Value ( uskew16_t *x ); #define VALUE_OF(SOURCE) Short_Value (&(SOURCE)) /* Returns the (integer) value of SOURCE, type uskew16_t. */ @@ -124,7 +124,7 @@ typedef code_address_t fptr_t; /* The function may or may not be part of the patched code. */ /* In the real SW this is "typedef void (*fptr_t)(void);" */ -extern void Call_Patch (fptr_t func); +extern void Call_Patch ( fptr_t func ); /* "Call" the patch func. */ #define CALL_PATCH(FUNCTION) Call_Patch (FUNCTION) @@ -132,10 +132,10 @@ extern void Call_Patch (fptr_t func); /* Some macros for task and interrupt management */ -#define TASK(TASK_NUMBER) -#define PRIORITY(LEVEL) -#define INTERRUPT(SOURCE) -#define USED_REG_BANK(BANK) +#define TASK(TASK_NUMBER) +#define PRIORITY(LEVEL) +#define INTERRUPT(SOURCE) +#define USED_REG_BANK(BANK) /* Macro for declaring re-entrant function */ @@ -148,9 +148,9 @@ extern void Call_Patch (fptr_t func); #define PROGRAM -#define EXTERNAL -#define DIRECT_INTERNAL -#define INDIRECT_INTERNAL +#define EXTERNAL +#define DIRECT_INTERNAL +#define INDIRECT_INTERNAL #define LOCATION(ADDRESS) @@ -158,7 +158,7 @@ extern void Call_Patch (fptr_t func); #define TARGET_INIT #define TARGET_MARK -#define TARGET_REBOOT +#define TARGET_REBOOT #define TARGET_START_TEST #define TARGET_REPEAT_TEST 0 diff --git a/bench/parallel/DEBIE/code/arch/arm7-x8/problems.h b/bench/parallel/DEBIE/code/arch/arm7-x8/problems.h index d6dc338815ecc32ebb0809ce43c9ca7923cf37ac..cbf6049757f3833cf9eb3e60ea02174da278cc07 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x8/problems.h +++ b/bench/parallel/DEBIE/code/arch/arm7-x8/problems.h @@ -1,21 +1,21 @@ /* -problems.h for arm7/gcc-if07 + problems.h for arm7/gcc-if07 -Part of the DEBIE-1 benchmark. + Part of the DEBIE-1 benchmark. -$Id: problems.h,v 1.1 2008/04/09 11:26:38 niklas Exp $ + $Id: problems.h,v 1.1 2008/04/09 11:26:38 niklas Exp $ */ #ifndef PROBLEMS_H #define PROBLEMS_H -#define FOR_PROBLEM(P) +#define FOR_PROBLEM(P) /* A marker to indicate that the program is about to execute */ /* a test case that is to be included in the analysis problem */ /* identified by P. */ -#define END_PROBLEM +#define END_PROBLEM /* A marker to indicate the end of a test case that is to be */ /* included in the analysis problem identified by the last */ /* executed FOR_PROBLEM. */ diff --git a/bench/parallel/DEBIE/code/arch/arm7-x8/target.c b/bench/parallel/DEBIE/code/arch/arm7-x8/target.c index b8126ddc8eb791558277bf69aeb64d07c245edfe..6e9d4cf75d7f5d0624bdd0a82cfadef30d6a1604 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x8/target.c +++ b/bench/parallel/DEBIE/code/arch/arm7-x8/target.c @@ -1,32 +1,32 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW, test harness for WCET analysis - * Subsystem : DNI (DEBIE Null Interface) - * Module : target.c - * - * Target-specific implementations of the DNI operations, specifically - * for the iF-DEV-LPC kit and the LPC2138 processor. - * - * Based, with extensive changes, on parts of the SSF file rtx_if.c, - * rev 1.13, Fri May 21 00:14:00 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW, test harness for WCET analysis + Subsystem : DNI (DEBIE Null Interface) + Module : target.c + + Target-specific implementations of the DNI operations, specifically + for the iF-DEV-LPC kit and the LPC2138 processor. + + Based, with extensive changes, on parts of the SSF file rtx_if.c, + rev 1.13, Fri May 21 00:14:00 1999. + + - * -------------------------------------------------------------------------- +*/ /* This file contains one set of operations, as follows: - * - * > memory operations: dpu_ctrl.h - * - */ + + > memory operations: dpu_ctrl.h + +*/ #include "keyword.h" @@ -42,26 +42,26 @@ /* The SRAM starts at this address. */ -unsigned char *Data_Pointer (uint16_t address) +unsigned char *Data_Pointer ( uint16_t address ) { - return (unsigned char *)(DATA_MEM_BASE + (uint32_t)address); + return ( unsigned char * )( DATA_MEM_BASE + ( uint32_t )address ); } -void Set_Data_Byte (data_address_t addr, unsigned char value) +void Set_Data_Byte ( data_address_t addr, unsigned char value ) { - /* *(Data_Pointer (addr)) = value; */ - /* Safer to do nothing. */ + /* *(Data_Pointer (addr)) = value; */ + /* Safer to do nothing. */ } -unsigned char Get_Data_Byte (data_address_t addr) +unsigned char Get_Data_Byte ( data_address_t addr ) { - return *(Data_Pointer (addr)); + return *( Data_Pointer ( addr ) ); } -unsigned char Get_Code_Byte (code_address_t addr) +unsigned char Get_Code_Byte ( code_address_t addr ) { - return 0; + return 0; } diff --git a/bench/parallel/DEBIE/code/arch/arm7-x8/target_tm_data.h b/bench/parallel/DEBIE/code/arch/arm7-x8/target_tm_data.h index 7f917fcad0f10385fba67271fb11f9cb3971fdd6..5d7e53fdbce4c9e4189cf00ba751e904cda5b6a7 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x8/target_tm_data.h +++ b/bench/parallel/DEBIE/code/arch/arm7-x8/target_tm_data.h @@ -1,30 +1,30 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : target_tm_data.h - * - * The target-specific aspects of the Telemetry Data Structure. - * - * Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : target_tm_data.h + + The target-specific aspects of the Telemetry Data Structure. + + Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TARGET_TM_DATA_H #define TARGET_TM_DATA_H #define MAX_EVENTS 1261 /* Same as in the original DEBIE-1 SW, although there limited - * by the size of the data memory. - */ + by the size of the data memory. +*/ #endif diff --git a/bench/parallel/DEBIE/code/arch/arm7-x8/wcc_memcpy.c b/bench/parallel/DEBIE/code/arch/arm7-x8/wcc_memcpy.c index 955d672373965090fb6599e876491ebbf2ce8fdc..4945e519d273f793184aa39aa55593f604209ca1 100644 --- a/bench/parallel/DEBIE/code/arch/arm7-x8/wcc_memcpy.c +++ b/bench/parallel/DEBIE/code/arch/arm7-x8/wcc_memcpy.c @@ -1,11 +1,10 @@ #include "keyword.h" -void wcc_memcpy(void *dest, void *src, int size) +void wcc_memcpy( void *dest, void *src, int size ) { - int i; - _Pragma("loopbound min 1 max 4") - for(i=0;i<size;i++) { - ((unsigned char *)dest)[i]=((unsigned char *)src)[i]; - } - return; + int i; + _Pragma( "loopbound min 1 max 4" ) + for ( i = 0; i < size; i++ ) + ( ( unsigned char * )dest )[ i ] = ( ( unsigned char * )src )[ i ]; + return; } diff --git a/bench/parallel/DEBIE/code/arch/arm7/keyword.h b/bench/parallel/DEBIE/code/arch/arm7/keyword.h index 9310e51cfa08fc0cabb4b7b6d3a2a589bd692077..ea2053758581fe800d3b5732db01d94dd1724248 100644 --- a/bench/parallel/DEBIE/code/arch/arm7/keyword.h +++ b/bench/parallel/DEBIE/code/arch/arm7/keyword.h @@ -1,28 +1,28 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DNI (DEBIE Null Interface) - * Module : keyword.h - * - * Macro definitions for Keil specific keywords to be used - * in portable parts of the DEBIE DPU software. - * - * This version adapted to the GNU ARM compiler for the ARM7 as - * delivered with the IF-DEV-LPC, no kernel. - * - * Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DNI (DEBIE Null Interface) + Module : keyword.h + + Macro definitions for Keil specific keywords to be used + in portable parts of the DEBIE DPU software. + + This version adapted to the GNU ARM compiler for the ARM7 as + delivered with the IF-DEV-LPC, no kernel. + + Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef KEYWORD_H @@ -30,27 +30,27 @@ /* Integer type definitions for native types that can hold integer - * values of at least a given number of bits. These types are used - * as loop counters to give the most natural and speedy code for - * the current target. This is Not the C99 stdint.h, but the types - * have similar names. - * - * There is a particular form of this file for each (kind of) target - * processor. The present form is for ARM7/GCC, where the widths of - * the integer types are the following (as observed from the code of - * the function Check_Type_Size in harness.c): - * - * Type Octets Bits - * char 1 8 - * short 2 16 - * int 4 32 - * long 4 32 - * - * This processor/compiler also has alignment concerns, so here we - * define all telemetry data as octets and access it using memcpy() - * instead of direct assignment. - * - */ + values of at least a given number of bits. These types are used + as loop counters to give the most natural and speedy code for + the current target. This is Not the C99 stdint.h, but the types + have similar names. + + There is a particular form of this file for each (kind of) target + processor. The present form is for ARM7/GCC, where the widths of + the integer types are the following (as observed from the code of + the function Check_Type_Size in harness.c): + + Type Octets Bits + char 1 8 + short 2 16 + int 4 32 + long 4 32 + + This processor/compiler also has alignment concerns, so here we + define all telemetry data as octets and access it using memcpy() + instead of direct assignment. + +*/ /* General types */ @@ -92,7 +92,7 @@ typedef uint16_t code_address_t; /* Macros for accessing the DPU data memory by numeric address. */ -extern unsigned char *Data_Pointer (uint16_t address); +extern unsigned char *Data_Pointer ( uint16_t address ); #define DATA_POINTER(ADDR) Data_Pointer (ADDR) @@ -102,12 +102,12 @@ extern unsigned char *Data_Pointer (uint16_t address); /* because the operands in these macros may not be aligned */ /* in the required way. */ -extern void wcc_memcpy( void*, void*, int ); +extern void wcc_memcpy( void *, void *, int ); #define COPY(DEST,SOURCE) wcc_memcpy (&(DEST), &(SOURCE), sizeof(DEST)) /* Copies the value of SOURCE to the location DEST. */ -extern unsigned short Short_Value (uskew16_t *x); +extern unsigned short Short_Value ( uskew16_t *x ); #define VALUE_OF(SOURCE) Short_Value (&(SOURCE)) /* Returns the (integer) value of SOURCE, type uskew16_t. */ @@ -124,7 +124,7 @@ typedef code_address_t fptr_t; /* The function may or may not be part of the patched code. */ /* In the real SW this is "typedef void (*fptr_t)(void);" */ -extern void Call_Patch (fptr_t func); +extern void Call_Patch ( fptr_t func ); /* "Call" the patch func. */ #define CALL_PATCH(FUNCTION) Call_Patch (FUNCTION) @@ -132,10 +132,10 @@ extern void Call_Patch (fptr_t func); /* Some macros for task and interrupt management */ -#define TASK(TASK_NUMBER) -#define PRIORITY(LEVEL) -#define INTERRUPT(SOURCE) -#define USED_REG_BANK(BANK) +#define TASK(TASK_NUMBER) +#define PRIORITY(LEVEL) +#define INTERRUPT(SOURCE) +#define USED_REG_BANK(BANK) /* Macro for declaring re-entrant function */ @@ -148,9 +148,9 @@ extern void Call_Patch (fptr_t func); #define PROGRAM -#define EXTERNAL -#define DIRECT_INTERNAL -#define INDIRECT_INTERNAL +#define EXTERNAL +#define DIRECT_INTERNAL +#define INDIRECT_INTERNAL #define LOCATION(ADDRESS) @@ -158,7 +158,7 @@ extern void Call_Patch (fptr_t func); #define TARGET_INIT #define TARGET_MARK -#define TARGET_REBOOT +#define TARGET_REBOOT #define TARGET_START_TEST #define TARGET_REPEAT_TEST 0 diff --git a/bench/parallel/DEBIE/code/arch/arm7/problems.h b/bench/parallel/DEBIE/code/arch/arm7/problems.h index d6dc338815ecc32ebb0809ce43c9ca7923cf37ac..cbf6049757f3833cf9eb3e60ea02174da278cc07 100644 --- a/bench/parallel/DEBIE/code/arch/arm7/problems.h +++ b/bench/parallel/DEBIE/code/arch/arm7/problems.h @@ -1,21 +1,21 @@ /* -problems.h for arm7/gcc-if07 + problems.h for arm7/gcc-if07 -Part of the DEBIE-1 benchmark. + Part of the DEBIE-1 benchmark. -$Id: problems.h,v 1.1 2008/04/09 11:26:38 niklas Exp $ + $Id: problems.h,v 1.1 2008/04/09 11:26:38 niklas Exp $ */ #ifndef PROBLEMS_H #define PROBLEMS_H -#define FOR_PROBLEM(P) +#define FOR_PROBLEM(P) /* A marker to indicate that the program is about to execute */ /* a test case that is to be included in the analysis problem */ /* identified by P. */ -#define END_PROBLEM +#define END_PROBLEM /* A marker to indicate the end of a test case that is to be */ /* included in the analysis problem identified by the last */ /* executed FOR_PROBLEM. */ diff --git a/bench/parallel/DEBIE/code/arch/arm7/target.c b/bench/parallel/DEBIE/code/arch/arm7/target.c index 599da04f8331a0e09a6f200e13332b190a5f4675..93ece25603e26dd47c375b90a6689f721d265c10 100644 --- a/bench/parallel/DEBIE/code/arch/arm7/target.c +++ b/bench/parallel/DEBIE/code/arch/arm7/target.c @@ -1,32 +1,32 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW, test harness for WCET analysis - * Subsystem : DNI (DEBIE Null Interface) - * Module : target.c - * - * Target-specific implementations of the DNI operations, specifically - * for the iF-DEV-LPC kit and the LPC2138 processor. - * - * Based, with extensive changes, on parts of the SSF file rtx_if.c, - * rev 1.13, Fri May 21 00:14:00 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW, test harness for WCET analysis + Subsystem : DNI (DEBIE Null Interface) + Module : target.c + + Target-specific implementations of the DNI operations, specifically + for the iF-DEV-LPC kit and the LPC2138 processor. + + Based, with extensive changes, on parts of the SSF file rtx_if.c, + rev 1.13, Fri May 21 00:14:00 1999. + + - * -------------------------------------------------------------------------- +*/ /* This file contains one set of operations, as follows: - * - * > memory operations: dpu_ctrl.h - * - */ + + > memory operations: dpu_ctrl.h + +*/ #include "keyword.h" @@ -42,26 +42,26 @@ /* The SRAM starts at this address. */ -unsigned char *Data_Pointer (uint16_t address) +unsigned char *Data_Pointer ( uint16_t address ) { - return (unsigned char *)(DATA_MEM_BASE + (uint32_t)address); + return ( unsigned char * )( DATA_MEM_BASE + ( uint32_t )address ); } -void Set_Data_Byte (data_address_t addr, unsigned char value) +void Set_Data_Byte ( data_address_t addr, unsigned char value ) { - /* *(Data_Pointer (addr)) = value; */ - /* Safer to do nothing. */ + /* *(Data_Pointer (addr)) = value; */ + /* Safer to do nothing. */ } -unsigned char Get_Data_Byte (data_address_t addr) +unsigned char Get_Data_Byte ( data_address_t addr ) { - return *(Data_Pointer (addr)); + return *( Data_Pointer ( addr ) ); } -unsigned char Get_Code_Byte (code_address_t addr) +unsigned char Get_Code_Byte ( code_address_t addr ) { - return 0; + return 0; } diff --git a/bench/parallel/DEBIE/code/arch/arm7/target_tm_data.h b/bench/parallel/DEBIE/code/arch/arm7/target_tm_data.h index 7f917fcad0f10385fba67271fb11f9cb3971fdd6..5d7e53fdbce4c9e4189cf00ba751e904cda5b6a7 100644 --- a/bench/parallel/DEBIE/code/arch/arm7/target_tm_data.h +++ b/bench/parallel/DEBIE/code/arch/arm7/target_tm_data.h @@ -1,30 +1,30 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : target_tm_data.h - * - * The target-specific aspects of the Telemetry Data Structure. - * - * Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : target_tm_data.h + + The target-specific aspects of the Telemetry Data Structure. + + Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TARGET_TM_DATA_H #define TARGET_TM_DATA_H #define MAX_EVENTS 1261 /* Same as in the original DEBIE-1 SW, although there limited - * by the size of the data memory. - */ + by the size of the data memory. +*/ #endif diff --git a/bench/parallel/DEBIE/code/arch/arm7/wcc_memcpy.c b/bench/parallel/DEBIE/code/arch/arm7/wcc_memcpy.c index 955d672373965090fb6599e876491ebbf2ce8fdc..4945e519d273f793184aa39aa55593f604209ca1 100644 --- a/bench/parallel/DEBIE/code/arch/arm7/wcc_memcpy.c +++ b/bench/parallel/DEBIE/code/arch/arm7/wcc_memcpy.c @@ -1,11 +1,10 @@ #include "keyword.h" -void wcc_memcpy(void *dest, void *src, int size) +void wcc_memcpy( void *dest, void *src, int size ) { - int i; - _Pragma("loopbound min 1 max 4") - for(i=0;i<size;i++) { - ((unsigned char *)dest)[i]=((unsigned char *)src)[i]; - } - return; + int i; + _Pragma( "loopbound min 1 max 4" ) + for ( i = 0; i < size; i++ ) + ( ( unsigned char * )dest )[ i ] = ( ( unsigned char * )src )[ i ]; + return; } diff --git a/bench/parallel/DEBIE/code/arch/mpc5554/debie1.elf b/bench/parallel/DEBIE/code/arch/mpc5554/debie1.elf deleted file mode 100755 index c51dc6b5225db1afb621a0efad7b0cf9ba5f89f2..0000000000000000000000000000000000000000 Binary files a/bench/parallel/DEBIE/code/arch/mpc5554/debie1.elf and /dev/null differ diff --git a/bench/parallel/DEBIE/code/arch/mpc5554/keyword.h b/bench/parallel/DEBIE/code/arch/mpc5554/keyword.h index 2323f3b16d08a1569f91d1934c4528e72881564b..e844d606d0594efc3ada7d3f9bbfade8193e332e 100644 --- a/bench/parallel/DEBIE/code/arch/mpc5554/keyword.h +++ b/bench/parallel/DEBIE/code/arch/mpc5554/keyword.h @@ -1,27 +1,27 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DNI (DEBIE Null Interface) - * Module : keyword.h - * - * Macro definitions for Keil specific keywords to be used - * in portable parts of the DEBIE DPU software. - * - * This version adapted to the GNU C compiler for the MPC5554. - * - * Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DNI (DEBIE Null Interface) + Module : keyword.h + + Macro definitions for Keil specific keywords to be used + in portable parts of the DEBIE DPU software. + + This version adapted to the GNU C compiler for the MPC5554. + + Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef KEYWORD_H @@ -32,27 +32,27 @@ /* Integer type definitions for native types that can hold integer - * values of at least a given number of bits. These types are used - * as loop counters to give the most natural and speedy code for - * the current target. This is Not the C99 stdint.h, but the types - * have similar names. - * - * There is a particular form of this file for each (kind of) target - * processor. The present form is for MPC5554/gcc, where the - * widths the integer types are the following (as observed from the - * code of the function Check_Type_Size in harness.c): - * - * Type Octets Bits - * char 1 8 - * short 2 16 - * int 4 32 - * long 4 32 - * - * This processor/compiler also has alignment concerns, so here we - * define all telemetry data as octets and access it using memcpy() - * instead of direct assignment. - * - */ + values of at least a given number of bits. These types are used + as loop counters to give the most natural and speedy code for + the current target. This is Not the C99 stdint.h, but the types + have similar names. + + There is a particular form of this file for each (kind of) target + processor. The present form is for MPC5554/gcc, where the + widths the integer types are the following (as observed from the + code of the function Check_Type_Size in harness.c): + + Type Octets Bits + char 1 8 + short 2 16 + int 4 32 + long 4 32 + + This processor/compiler also has alignment concerns, so here we + define all telemetry data as octets and access it using memcpy() + instead of direct assignment. + +*/ /* General types */ @@ -94,7 +94,7 @@ typedef uint16_t code_address_t; /* Macros for accessing the DPU data memory by numeric address. */ -extern unsigned char *Data_Pointer (uint16_t address); +extern unsigned char *Data_Pointer ( uint16_t address ); #define DATA_POINTER(ADDR) Data_Pointer (ADDR) @@ -107,7 +107,7 @@ extern unsigned char *Data_Pointer (uint16_t address); #define COPY(DEST,SOURCE) memcpy (&(DEST), &(SOURCE), sizeof(DEST)) /* Copies the value of SOURCE to the location DEST. */ -extern unsigned short Short_Value (uskew16_t *x); +extern unsigned short Short_Value ( uskew16_t *x ); #define VALUE_OF(SOURCE) Short_Value (&(SOURCE)) /* Returns the (integer) value of SOURCE, type uskew16_t. */ @@ -124,7 +124,7 @@ typedef code_address_t fptr_t; /* The function may or may not be part of the patched code. */ /* In the real SW this is "typedef void (*fptr_t)(void);" */ -extern void Call_Patch (fptr_t func); +extern void Call_Patch ( fptr_t func ); /* "Call" the patch func. */ #define CALL_PATCH(FUNCTION) Call_Patch (FUNCTION) @@ -132,10 +132,10 @@ extern void Call_Patch (fptr_t func); /* Some macros for task and interrupt management */ -#define TASK(TASK_NUMBER) -#define PRIORITY(LEVEL) -#define INTERRUPT(SOURCE) -#define USED_REG_BANK(BANK) +#define TASK(TASK_NUMBER) +#define PRIORITY(LEVEL) +#define INTERRUPT(SOURCE) +#define USED_REG_BANK(BANK) /* Macro for declaring re-entrant function */ @@ -148,9 +148,9 @@ extern void Call_Patch (fptr_t func); #define PROGRAM -#define EXTERNAL -#define DIRECT_INTERNAL -#define INDIRECT_INTERNAL +#define EXTERNAL +#define DIRECT_INTERNAL +#define INDIRECT_INTERNAL #define LOCATION(ADDRESS) diff --git a/bench/parallel/DEBIE/code/arch/mpc5554/problems.h b/bench/parallel/DEBIE/code/arch/mpc5554/problems.h index 77dc266f0dfc1149e650ee5e726de102055c05c1..91cd1134f1916ccaa7f2d05f53a64ec7fba4f37d 100644 --- a/bench/parallel/DEBIE/code/arch/mpc5554/problems.h +++ b/bench/parallel/DEBIE/code/arch/mpc5554/problems.h @@ -1,6 +1,6 @@ /* -problems.h for mpc5554/gcc. -Part of the DEBIE-1 benchmark. + problems.h for mpc5554/gcc. + Part of the DEBIE-1 benchmark. */ diff --git a/bench/parallel/DEBIE/code/arch/mpc5554/target.c b/bench/parallel/DEBIE/code/arch/mpc5554/target.c index 5fec9879ea307f1e93d5da08f31f97729a5efd3e..2aeef42ae8f80afba55362af2c68540799bf47bc 100644 --- a/bench/parallel/DEBIE/code/arch/mpc5554/target.c +++ b/bench/parallel/DEBIE/code/arch/mpc5554/target.c @@ -1,35 +1,35 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW, test harness for WCET analysis - * Subsystem : DNI (DEBIE Null Interface) - * Module : target.c - * - * Target-specific implementations of the DNI operations, specifically - * for the mpc5554/gcc target. - * - * Options: if the preprocessor symbol TRACE_TARGET is defined, - * these operations generate trace message on stdout. - * - * Based, with extensive changes, on parts of the SSF file rtx_if.c, - * rev 1.13, Fri May 21 00:14:00 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW, test harness for WCET analysis + Subsystem : DNI (DEBIE Null Interface) + Module : target.c + + Target-specific implementations of the DNI operations, specifically + for the mpc5554/gcc target. + + Options: if the preprocessor symbol TRACE_TARGET is defined, + these operations generate trace message on stdout. + + Based, with extensive changes, on parts of the SSF file rtx_if.c, + rev 1.13, Fri May 21 00:14:00 1999. + + - * -------------------------------------------------------------------------- +*/ /* This file contains one set of operations, as follows: - * - * > memory operations: dpu_ctrl.h - * - */ + + > memory operations: dpu_ctrl.h + +*/ #if defined(TRACE_TARGET) @@ -45,40 +45,40 @@ #include "dpu_ctrl.h" -static char data_memory[65536] __attribute__((section(".externalram"))); +static char data_memory[ 65536 ] __attribute__( ( section( ".externalram" ) ) ); /* Simulated 80C32 external data RAM. */ -unsigned char *Data_Pointer (uint16_t address) +unsigned char *Data_Pointer ( uint16_t address ) { - return &data_memory[address]; + return &data_memory[ address ]; } -void Set_Data_Byte (data_address_t addr, unsigned char value) +void Set_Data_Byte ( data_address_t addr, unsigned char value ) { -#if defined(TRACE_TARGET) - printf ("Set_Data_Byte 0x%x to %d = 0x%x\n", addr, value, value); -#endif - data_memory[addr] = value; + #if defined(TRACE_TARGET) + printf ( "Set_Data_Byte 0x%x to %d = 0x%x\n", addr, value, value ); + #endif + data_memory[ addr ] = value; } -unsigned char Get_Data_Byte (data_address_t addr) +unsigned char Get_Data_Byte ( data_address_t addr ) { - unsigned char value = data_memory[addr]; -#if defined(TRACE_TARGET) - printf ("Get_Data_Byte 0x%x is %d = 0x%x\n", addr, value, value); -#endif - return value; + unsigned char value = data_memory[ addr ]; + #if defined(TRACE_TARGET) + printf ( "Get_Data_Byte 0x%x is %d = 0x%x\n", addr, value, value ); + #endif + return value; } -unsigned char Get_Code_Byte (code_address_t addr) +unsigned char Get_Code_Byte ( code_address_t addr ) { -#if defined(TRACE_TARGET) - /* printf ("Get_Code_Byte 0x%x\n", addr); */ - /* This would be to much output. Skip. */ -#endif - return 0; + #if defined(TRACE_TARGET) + /* printf ("Get_Code_Byte 0x%x\n", addr); */ + /* This would be to much output. Skip. */ + #endif + return 0; } diff --git a/bench/parallel/DEBIE/code/arch/mpc5554/target_tm_data.h b/bench/parallel/DEBIE/code/arch/mpc5554/target_tm_data.h index 3afd3066c07252454a0e04cbc6d44a9b1cd26d8a..7f52819e1e573affe59c109fca207717373f8755 100644 --- a/bench/parallel/DEBIE/code/arch/mpc5554/target_tm_data.h +++ b/bench/parallel/DEBIE/code/arch/mpc5554/target_tm_data.h @@ -1,31 +1,31 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : target_tm_data.h - * - * The target-specific aspects of the Telemetry Data Structure. - * This version for the target mpc5554/gcc. - * - * Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : target_tm_data.h + + The target-specific aspects of the Telemetry Data Structure. + This version for the target mpc5554/gcc. + + Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TARGET_TM_DATA_H #define TARGET_TM_DATA_H #define MAX_EVENTS 1261 /* Same as in the original DEBIE-1 SW, although there limited - * by the size of the data memory. - */ + by the size of the data memory. +*/ #endif diff --git a/bench/parallel/DEBIE/code/arch/tc1796/keyword.h b/bench/parallel/DEBIE/code/arch/tc1796/keyword.h index d4cac8968d2d420d44a2ce39c2f8203a59aa4b6a..2d1fb42a5c95a9c5a67a4cad6aac791feecc6424 100644 --- a/bench/parallel/DEBIE/code/arch/tc1796/keyword.h +++ b/bench/parallel/DEBIE/code/arch/tc1796/keyword.h @@ -1,27 +1,27 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DNI (DEBIE Null Interface) - * Module : keyword.h - * - * Macro definitions for Keil specific keywords to be used - * in portable parts of the DEBIE DPU software. - * - * This version adapted to GNU GCC on host Intel/Linux. - * - * Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DNI (DEBIE Null Interface) + Module : keyword.h + + Macro definitions for Keil specific keywords to be used + in portable parts of the DEBIE DPU software. + + This version adapted to GNU GCC on host Intel/Linux. + + Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef KEYWORD_H @@ -29,27 +29,27 @@ /* Integer type definitions for native types that can hold integer - * values of at least a given number of bits. These types are used - * as loop counters to give the most natural and speedy code for - * the current target. This is Not the C99 stdint.h, but the types - * have similar names. - * - * There is a particular form of this file for each (kind of) target - * processor. The present form is for GCC on 32-bit Intel/Linux, where - * the widths of the integer types are the following: - * - * Type Octets Bits - * char 1 8 - * short 2 16 - * int 4 32 - * long 4 32 - * - * This processor/compiler accepts unaliged multi-octet data, although - * access is slower. However, we still access possibly misaligned - * telemetry data using memcpy() instead of direct assignment, - * just to test that this approach works. - * - */ + values of at least a given number of bits. These types are used + as loop counters to give the most natural and speedy code for + the current target. This is Not the C99 stdint.h, but the types + have similar names. + + There is a particular form of this file for each (kind of) target + processor. The present form is for GCC on 32-bit Intel/Linux, where + the widths of the integer types are the following: + + Type Octets Bits + char 1 8 + short 2 16 + int 4 32 + long 4 32 + + This processor/compiler accepts unaliged multi-octet data, although + access is slower. However, we still access possibly misaligned + telemetry data using memcpy() instead of direct assignment, + just to test that this approach works. + +*/ /* General types */ @@ -91,7 +91,7 @@ typedef uint32_t code_address_t; /* Macros for accessing the DPU data memory by numeric address. */ -extern unsigned char *Data_Pointer (uint16_t address); +extern unsigned char *Data_Pointer ( uint16_t address ); #define DATA_POINTER(ADDR) Data_Pointer (ADDR) @@ -106,7 +106,7 @@ extern void wcc_memcpy( void *dest, void *src, int size ); #define COPY(DEST,SOURCE) wcc_memcpy (&(DEST), &(SOURCE), sizeof(DEST)) /* Copies the value of SOURCE to the location DEST. */ -extern unsigned short Short_Value (uskew16_t *x); +extern unsigned short Short_Value ( uskew16_t *x ); #define VALUE_OF(SOURCE) Short_Value (&(SOURCE)) /* Returns the (integer) value of SOURCE, type uskew16_t. */ @@ -123,7 +123,7 @@ typedef code_address_t fptr_t; /* The function may or may not be part of the patched code. */ /* In the real SW this is "typedef void (*fptr_t)(void);" */ -extern void Call_Patch (fptr_t func); +extern void Call_Patch ( fptr_t func ); /* "Call" the patch func. */ #define CALL_PATCH(FUNCTION) Call_Patch (FUNCTION) @@ -131,10 +131,10 @@ extern void Call_Patch (fptr_t func); /* Some macros for task and interrupt management */ -#define TASK(TASK_NUMBER) -#define PRIORITY(LEVEL) -#define INTERRUPT(SOURCE) -#define USED_REG_BANK(BANK) +#define TASK(TASK_NUMBER) +#define PRIORITY(LEVEL) +#define INTERRUPT(SOURCE) +#define USED_REG_BANK(BANK) /* Macro for declaring re-entrant function */ @@ -147,19 +147,19 @@ extern void Call_Patch (fptr_t func); #define PROGRAM -#define EXTERNAL -#define DIRECT_INTERNAL -#define INDIRECT_INTERNAL +#define EXTERNAL +#define DIRECT_INTERNAL +#define INDIRECT_INTERNAL #define LOCATION(ADDRESS) /* Dealing with the benchmark target system */ -#define TARGET_INIT -#define TARGET_MARK -#define TARGET_REBOOT -#define TARGET_START_TEST +#define TARGET_INIT +#define TARGET_MARK +#define TARGET_REBOOT +#define TARGET_START_TEST #define TARGET_REPEAT_TEST 0 #endif diff --git a/bench/parallel/DEBIE/code/arch/tc1796/problems.h b/bench/parallel/DEBIE/code/arch/tc1796/problems.h index 6b623906b999a6b8aab8fda355950da2c28c4f2b..e11a596470a1610d59576bae752c34db0ed9f227 100644 --- a/bench/parallel/DEBIE/code/arch/tc1796/problems.h +++ b/bench/parallel/DEBIE/code/arch/tc1796/problems.h @@ -1,9 +1,9 @@ /* -problems.h for intel/linux + problems.h for intel/linux -Part of the DEBIE-1 benchmark. + Part of the DEBIE-1 benchmark. -$Id: problems.h,v 1.1 2008/03/28 08:22:17 niklas Exp $ + $Id: problems.h,v 1.1 2008/03/28 08:22:17 niklas Exp $ */ diff --git a/bench/parallel/DEBIE/code/arch/tc1796/target.c b/bench/parallel/DEBIE/code/arch/tc1796/target.c index 9294ea9bf6d68a627e56a10f419217fac4457e83..739e8765053b9f39e24ac21321f5c31c4d6436b3 100644 --- a/bench/parallel/DEBIE/code/arch/tc1796/target.c +++ b/bench/parallel/DEBIE/code/arch/tc1796/target.c @@ -1,32 +1,32 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW, test harness for WCET analysis - * Subsystem : DNI (DEBIE Null Interface) - * Module : target.c - * - * Target-specific implementations of the DNI operations, specifically - * for the iF-DEV-LPC kit and the LPC2138 processor. - * - * Based, with extensive changes, on parts of the SSF file rtx_if.c, - * rev 1.13, Fri May 21 00:14:00 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW, test harness for WCET analysis + Subsystem : DNI (DEBIE Null Interface) + Module : target.c + + Target-specific implementations of the DNI operations, specifically + for the iF-DEV-LPC kit and the LPC2138 processor. + + Based, with extensive changes, on parts of the SSF file rtx_if.c, + rev 1.13, Fri May 21 00:14:00 1999. + + - * -------------------------------------------------------------------------- +*/ /* This file contains one set of operations, as follows: - * - * > memory operations: dpu_ctrl.h - * - */ + + > memory operations: dpu_ctrl.h + +*/ #include "keyword.h" @@ -42,26 +42,26 @@ /* The SRAM starts at this address. */ -unsigned char *Data_Pointer (uint16_t address) +unsigned char *Data_Pointer ( uint16_t address ) { - return (unsigned char *)(DATA_MEM_BASE + (uint32_t)address); + return ( unsigned char * )( DATA_MEM_BASE + ( uint32_t )address ); } -void Set_Data_Byte (data_address_t addr, unsigned char value) +void Set_Data_Byte ( data_address_t addr, unsigned char value ) { - /* *(Data_Pointer (addr)) = value; */ - /* Safer to do nothing. */ + /* *(Data_Pointer (addr)) = value; */ + /* Safer to do nothing. */ } -unsigned char Get_Data_Byte (data_address_t addr) +unsigned char Get_Data_Byte ( data_address_t addr ) { - return *(Data_Pointer (addr)); + return *( Data_Pointer ( addr ) ); } -unsigned char Get_Code_Byte (code_address_t addr) +unsigned char Get_Code_Byte ( code_address_t addr ) { - return 0; + return 0; } diff --git a/bench/parallel/DEBIE/code/arch/tc1796/target_tm_data.h b/bench/parallel/DEBIE/code/arch/tc1796/target_tm_data.h index 7f917fcad0f10385fba67271fb11f9cb3971fdd6..5d7e53fdbce4c9e4189cf00ba751e904cda5b6a7 100644 --- a/bench/parallel/DEBIE/code/arch/tc1796/target_tm_data.h +++ b/bench/parallel/DEBIE/code/arch/tc1796/target_tm_data.h @@ -1,30 +1,30 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : target_tm_data.h - * - * The target-specific aspects of the Telemetry Data Structure. - * - * Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : target_tm_data.h + + The target-specific aspects of the Telemetry Data Structure. + + Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TARGET_TM_DATA_H #define TARGET_TM_DATA_H #define MAX_EVENTS 1261 /* Same as in the original DEBIE-1 SW, although there limited - * by the size of the data memory. - */ + by the size of the data memory. +*/ #endif diff --git a/bench/parallel/DEBIE/code/arch/tc1796/wcc_memcpy.c b/bench/parallel/DEBIE/code/arch/tc1796/wcc_memcpy.c index 955d672373965090fb6599e876491ebbf2ce8fdc..4945e519d273f793184aa39aa55593f604209ca1 100644 --- a/bench/parallel/DEBIE/code/arch/tc1796/wcc_memcpy.c +++ b/bench/parallel/DEBIE/code/arch/tc1796/wcc_memcpy.c @@ -1,11 +1,10 @@ #include "keyword.h" -void wcc_memcpy(void *dest, void *src, int size) +void wcc_memcpy( void *dest, void *src, int size ) { - int i; - _Pragma("loopbound min 1 max 4") - for(i=0;i<size;i++) { - ((unsigned char *)dest)[i]=((unsigned char *)src)[i]; - } - return; + int i; + _Pragma( "loopbound min 1 max 4" ) + for ( i = 0; i < size; i++ ) + ( ( unsigned char * )dest )[ i ] = ( ( unsigned char * )src )[ i ]; + return; } diff --git a/bench/parallel/DEBIE/code/arch/tc1797/keyword.h b/bench/parallel/DEBIE/code/arch/tc1797/keyword.h index d4cac8968d2d420d44a2ce39c2f8203a59aa4b6a..2d1fb42a5c95a9c5a67a4cad6aac791feecc6424 100644 --- a/bench/parallel/DEBIE/code/arch/tc1797/keyword.h +++ b/bench/parallel/DEBIE/code/arch/tc1797/keyword.h @@ -1,27 +1,27 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DNI (DEBIE Null Interface) - * Module : keyword.h - * - * Macro definitions for Keil specific keywords to be used - * in portable parts of the DEBIE DPU software. - * - * This version adapted to GNU GCC on host Intel/Linux. - * - * Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DNI (DEBIE Null Interface) + Module : keyword.h + + Macro definitions for Keil specific keywords to be used + in portable parts of the DEBIE DPU software. + + This version adapted to GNU GCC on host Intel/Linux. + + Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef KEYWORD_H @@ -29,27 +29,27 @@ /* Integer type definitions for native types that can hold integer - * values of at least a given number of bits. These types are used - * as loop counters to give the most natural and speedy code for - * the current target. This is Not the C99 stdint.h, but the types - * have similar names. - * - * There is a particular form of this file for each (kind of) target - * processor. The present form is for GCC on 32-bit Intel/Linux, where - * the widths of the integer types are the following: - * - * Type Octets Bits - * char 1 8 - * short 2 16 - * int 4 32 - * long 4 32 - * - * This processor/compiler accepts unaliged multi-octet data, although - * access is slower. However, we still access possibly misaligned - * telemetry data using memcpy() instead of direct assignment, - * just to test that this approach works. - * - */ + values of at least a given number of bits. These types are used + as loop counters to give the most natural and speedy code for + the current target. This is Not the C99 stdint.h, but the types + have similar names. + + There is a particular form of this file for each (kind of) target + processor. The present form is for GCC on 32-bit Intel/Linux, where + the widths of the integer types are the following: + + Type Octets Bits + char 1 8 + short 2 16 + int 4 32 + long 4 32 + + This processor/compiler accepts unaliged multi-octet data, although + access is slower. However, we still access possibly misaligned + telemetry data using memcpy() instead of direct assignment, + just to test that this approach works. + +*/ /* General types */ @@ -91,7 +91,7 @@ typedef uint32_t code_address_t; /* Macros for accessing the DPU data memory by numeric address. */ -extern unsigned char *Data_Pointer (uint16_t address); +extern unsigned char *Data_Pointer ( uint16_t address ); #define DATA_POINTER(ADDR) Data_Pointer (ADDR) @@ -106,7 +106,7 @@ extern void wcc_memcpy( void *dest, void *src, int size ); #define COPY(DEST,SOURCE) wcc_memcpy (&(DEST), &(SOURCE), sizeof(DEST)) /* Copies the value of SOURCE to the location DEST. */ -extern unsigned short Short_Value (uskew16_t *x); +extern unsigned short Short_Value ( uskew16_t *x ); #define VALUE_OF(SOURCE) Short_Value (&(SOURCE)) /* Returns the (integer) value of SOURCE, type uskew16_t. */ @@ -123,7 +123,7 @@ typedef code_address_t fptr_t; /* The function may or may not be part of the patched code. */ /* In the real SW this is "typedef void (*fptr_t)(void);" */ -extern void Call_Patch (fptr_t func); +extern void Call_Patch ( fptr_t func ); /* "Call" the patch func. */ #define CALL_PATCH(FUNCTION) Call_Patch (FUNCTION) @@ -131,10 +131,10 @@ extern void Call_Patch (fptr_t func); /* Some macros for task and interrupt management */ -#define TASK(TASK_NUMBER) -#define PRIORITY(LEVEL) -#define INTERRUPT(SOURCE) -#define USED_REG_BANK(BANK) +#define TASK(TASK_NUMBER) +#define PRIORITY(LEVEL) +#define INTERRUPT(SOURCE) +#define USED_REG_BANK(BANK) /* Macro for declaring re-entrant function */ @@ -147,19 +147,19 @@ extern void Call_Patch (fptr_t func); #define PROGRAM -#define EXTERNAL -#define DIRECT_INTERNAL -#define INDIRECT_INTERNAL +#define EXTERNAL +#define DIRECT_INTERNAL +#define INDIRECT_INTERNAL #define LOCATION(ADDRESS) /* Dealing with the benchmark target system */ -#define TARGET_INIT -#define TARGET_MARK -#define TARGET_REBOOT -#define TARGET_START_TEST +#define TARGET_INIT +#define TARGET_MARK +#define TARGET_REBOOT +#define TARGET_START_TEST #define TARGET_REPEAT_TEST 0 #endif diff --git a/bench/parallel/DEBIE/code/arch/tc1797/problems.h b/bench/parallel/DEBIE/code/arch/tc1797/problems.h index 6b623906b999a6b8aab8fda355950da2c28c4f2b..e11a596470a1610d59576bae752c34db0ed9f227 100644 --- a/bench/parallel/DEBIE/code/arch/tc1797/problems.h +++ b/bench/parallel/DEBIE/code/arch/tc1797/problems.h @@ -1,9 +1,9 @@ /* -problems.h for intel/linux + problems.h for intel/linux -Part of the DEBIE-1 benchmark. + Part of the DEBIE-1 benchmark. -$Id: problems.h,v 1.1 2008/03/28 08:22:17 niklas Exp $ + $Id: problems.h,v 1.1 2008/03/28 08:22:17 niklas Exp $ */ diff --git a/bench/parallel/DEBIE/code/arch/tc1797/target.c b/bench/parallel/DEBIE/code/arch/tc1797/target.c index ccb6c405adcdae60558ab55d6af98467dbb9e01e..0f0723d3587c7ae6b91f4223d6128305317da8ee 100644 --- a/bench/parallel/DEBIE/code/arch/tc1797/target.c +++ b/bench/parallel/DEBIE/code/arch/tc1797/target.c @@ -1,32 +1,32 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW, test harness for WCET analysis - * Subsystem : DNI (DEBIE Null Interface) - * Module : target.c - * - * Target-specific implementations of the DNI operations, specifically - * for the iF-DEV-LPC kit and the LPC2138 processor. - * - * Based, with extensive changes, on parts of the SSF file rtx_if.c, - * rev 1.13, Fri May 21 00:14:00 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW, test harness for WCET analysis + Subsystem : DNI (DEBIE Null Interface) + Module : target.c + + Target-specific implementations of the DNI operations, specifically + for the iF-DEV-LPC kit and the LPC2138 processor. + + Based, with extensive changes, on parts of the SSF file rtx_if.c, + rev 1.13, Fri May 21 00:14:00 1999. + + - * -------------------------------------------------------------------------- +*/ /* This file contains one set of operations, as follows: - * - * > memory operations: dpu_ctrl.h - * - */ + + > memory operations: dpu_ctrl.h + +*/ #include "keyword.h" @@ -42,26 +42,26 @@ /* The SRAM starts at this address. */ -unsigned char *Data_Pointer (uint16_t address) +unsigned char *Data_Pointer ( uint16_t address ) { - return (unsigned char *)(DATA_MEM_BASE + (uint32_t)address); + return ( unsigned char * )( DATA_MEM_BASE + ( uint32_t )address ); } -void Set_Data_Byte (data_address_t addr, unsigned char value) +void Set_Data_Byte ( data_address_t addr, unsigned char value ) { - /* *(Data_Pointer (addr)) = value; */ - /* Safer to do nothing. */ + /* *(Data_Pointer (addr)) = value; */ + /* Safer to do nothing. */ } -unsigned char Get_Data_Byte (data_address_t addr) +unsigned char Get_Data_Byte ( data_address_t addr ) { - return *(Data_Pointer (addr)); + return *( Data_Pointer ( addr ) ); } -unsigned char Get_Code_Byte (code_address_t addr) +unsigned char Get_Code_Byte ( code_address_t addr ) { - return 0; + return 0; } diff --git a/bench/parallel/DEBIE/code/arch/tc1797/target_tm_data.h b/bench/parallel/DEBIE/code/arch/tc1797/target_tm_data.h index 7f917fcad0f10385fba67271fb11f9cb3971fdd6..5d7e53fdbce4c9e4189cf00ba751e904cda5b6a7 100644 --- a/bench/parallel/DEBIE/code/arch/tc1797/target_tm_data.h +++ b/bench/parallel/DEBIE/code/arch/tc1797/target_tm_data.h @@ -1,30 +1,30 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : target_tm_data.h - * - * The target-specific aspects of the Telemetry Data Structure. - * - * Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : target_tm_data.h + + The target-specific aspects of the Telemetry Data Structure. + + Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TARGET_TM_DATA_H #define TARGET_TM_DATA_H #define MAX_EVENTS 1261 /* Same as in the original DEBIE-1 SW, although there limited - * by the size of the data memory. - */ + by the size of the data memory. +*/ #endif diff --git a/bench/parallel/DEBIE/code/arch/tc1797/wcc_memcpy.c b/bench/parallel/DEBIE/code/arch/tc1797/wcc_memcpy.c index 955d672373965090fb6599e876491ebbf2ce8fdc..4945e519d273f793184aa39aa55593f604209ca1 100644 --- a/bench/parallel/DEBIE/code/arch/tc1797/wcc_memcpy.c +++ b/bench/parallel/DEBIE/code/arch/tc1797/wcc_memcpy.c @@ -1,11 +1,10 @@ #include "keyword.h" -void wcc_memcpy(void *dest, void *src, int size) +void wcc_memcpy( void *dest, void *src, int size ) { - int i; - _Pragma("loopbound min 1 max 4") - for(i=0;i<size;i++) { - ((unsigned char *)dest)[i]=((unsigned char *)src)[i]; - } - return; + int i; + _Pragma( "loopbound min 1 max 4" ) + for ( i = 0; i < size; i++ ) + ( ( unsigned char * )dest )[ i ] = ( ( unsigned char * )src )[ i ]; + return; } diff --git a/bench/parallel/DEBIE/code/arch/x86/keyword.h b/bench/parallel/DEBIE/code/arch/x86/keyword.h index bbbac9d0c7cc6749a21126017d52092d3ec3f397..807ea8305bac0a1b1b92d99ce27a6628998a83a9 100644 --- a/bench/parallel/DEBIE/code/arch/x86/keyword.h +++ b/bench/parallel/DEBIE/code/arch/x86/keyword.h @@ -1,27 +1,27 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DNI (DEBIE Null Interface) - * Module : keyword.h - * - * Macro definitions for Keil specific keywords to be used - * in portable parts of the DEBIE DPU software. - * - * This version adapted to GNU GCC on host Intel/Linux. - * - * Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DNI (DEBIE Null Interface) + Module : keyword.h + + Macro definitions for Keil specific keywords to be used + in portable parts of the DEBIE DPU software. + + This version adapted to GNU GCC on host Intel/Linux. + + Based on the SSF DHI file keyword.h, revision 1.9, Tue Mar 09 12:37:20 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef KEYWORD_H @@ -29,27 +29,27 @@ /* Integer type definitions for native types that can hold integer - * values of at least a given number of bits. These types are used - * as loop counters to give the most natural and speedy code for - * the current target. This is Not the C99 stdint.h, but the types - * have similar names. - * - * There is a particular form of this file for each (kind of) target - * processor. The present form is for GCC on 32-bit Intel/Linux, where - * the widths of the integer types are the following: - * - * Type Octets Bits - * char 1 8 - * short 2 16 - * int 4 32 - * long 4 32 - * - * This processor/compiler accepts unaliged multi-octet data, although - * access is slower. However, we still access possibly misaligned - * telemetry data using memcpy() instead of direct assignment, - * just to test that this approach works. - * - */ + values of at least a given number of bits. These types are used + as loop counters to give the most natural and speedy code for + the current target. This is Not the C99 stdint.h, but the types + have similar names. + + There is a particular form of this file for each (kind of) target + processor. The present form is for GCC on 32-bit Intel/Linux, where + the widths of the integer types are the following: + + Type Octets Bits + char 1 8 + short 2 16 + int 4 32 + long 4 32 + + This processor/compiler accepts unaliged multi-octet data, although + access is slower. However, we still access possibly misaligned + telemetry data using memcpy() instead of direct assignment, + just to test that this approach works. + +*/ /* General types */ @@ -91,7 +91,7 @@ typedef uint16_t code_address_t; /* Macros for accessing the DPU data memory by numeric address. */ -extern unsigned char *Data_Pointer (uint16_t address); +extern unsigned char *Data_Pointer ( uint16_t address ); #define DATA_POINTER(ADDR) Data_Pointer (ADDR) @@ -101,12 +101,12 @@ extern unsigned char *Data_Pointer (uint16_t address); /* because the operands in these macros may not be aligned */ /* in the required way. */ -extern void wcc_memcpy(void *, void *, int); +extern void wcc_memcpy( void *, void *, int ); #define COPY(DEST,SOURCE) wcc_memcpy (&(DEST), &(SOURCE), sizeof(DEST)) /* Copies the value of SOURCE to the location DEST. */ -extern unsigned short Short_Value (uskew16_t *x); +extern unsigned short Short_Value ( uskew16_t *x ); #define VALUE_OF(SOURCE) Short_Value (&(SOURCE)) /* Returns the (integer) value of SOURCE, type uskew16_t. */ @@ -123,7 +123,7 @@ typedef code_address_t fptr_t; /* The function may or may not be part of the patched code. */ /* In the real SW this is "typedef void (*fptr_t)(void);" */ -extern void Call_Patch (fptr_t func); +extern void Call_Patch ( fptr_t func ); /* "Call" the patch func. */ #define CALL_PATCH(FUNCTION) Call_Patch (FUNCTION) @@ -131,10 +131,10 @@ extern void Call_Patch (fptr_t func); /* Some macros for task and interrupt management */ -#define TASK(TASK_NUMBER) -#define PRIORITY(LEVEL) -#define INTERRUPT(SOURCE) -#define USED_REG_BANK(BANK) +#define TASK(TASK_NUMBER) +#define PRIORITY(LEVEL) +#define INTERRUPT(SOURCE) +#define USED_REG_BANK(BANK) /* Macro for declaring re-entrant function */ @@ -147,9 +147,9 @@ extern void Call_Patch (fptr_t func); #define PROGRAM -#define EXTERNAL -#define DIRECT_INTERNAL -#define INDIRECT_INTERNAL +#define EXTERNAL +#define DIRECT_INTERNAL +#define INDIRECT_INTERNAL #define LOCATION(ADDRESS) diff --git a/bench/parallel/DEBIE/code/arch/x86/problems.h b/bench/parallel/DEBIE/code/arch/x86/problems.h index d897421cc8c0851ad457ad3e10080e3e1cf9726f..53fc2bff38b3fd3f0c41beb072d712239dd24183 100644 --- a/bench/parallel/DEBIE/code/arch/x86/problems.h +++ b/bench/parallel/DEBIE/code/arch/x86/problems.h @@ -1,9 +1,9 @@ /* -problems.h for intel/linux + problems.h for intel/linux -Part of the DEBIE-1 benchmark. + Part of the DEBIE-1 benchmark. -$Id: problems.h,v 1.1 2008/03/28 08:22:17 niklas Exp $ + $Id: problems.h,v 1.1 2008/03/28 08:22:17 niklas Exp $ */ diff --git a/bench/parallel/DEBIE/code/arch/x86/rpt_ipoint.h b/bench/parallel/DEBIE/code/arch/x86/rpt_ipoint.h index 8e7019f17071b24c3301660c3812b01125d44f3c..d34092e17d247cc85c78592f01829175404708a0 100644 --- a/bench/parallel/DEBIE/code/arch/x86/rpt_ipoint.h +++ b/bench/parallel/DEBIE/code/arch/x86/rpt_ipoint.h @@ -1,9 +1,9 @@ /* -rpt_ipoint.h for intel/linux + rpt_ipoint.h for intel/linux -Part of the DEBIE-1 benchmark. + Part of the DEBIE-1 benchmark. -$Id: rpt_ipoint.h,v 1.1 2008/03/28 08:22:18 niklas Exp $ + $Id: rpt_ipoint.h,v 1.1 2008/03/28 08:22:18 niklas Exp $ */ diff --git a/bench/parallel/DEBIE/code/arch/x86/target.c b/bench/parallel/DEBIE/code/arch/x86/target.c index c28e38a659f7da130e1bba72995cbff95a85c41c..90302828cff1810bb40d4b18957589dc6f00953e 100644 --- a/bench/parallel/DEBIE/code/arch/x86/target.c +++ b/bench/parallel/DEBIE/code/arch/x86/target.c @@ -1,35 +1,35 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW, test harness for WCET analysis - * Subsystem : DNI (DEBIE Null Interface) - * Module : target.c - * - * Target-specific implementations of the DNI operations, specifically - * for the intel/linux target. - * - * Options: if the preprocessor symbol TRACE_TARGET is defined, - * these operations generate trace message on stdout. - * - * Based, with extensive changes, on parts of the SSF file rtx_if.c, - * rev 1.13, Fri May 21 00:14:00 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW, test harness for WCET analysis + Subsystem : DNI (DEBIE Null Interface) + Module : target.c + + Target-specific implementations of the DNI operations, specifically + for the intel/linux target. + + Options: if the preprocessor symbol TRACE_TARGET is defined, + these operations generate trace message on stdout. + + Based, with extensive changes, on parts of the SSF file rtx_if.c, + rev 1.13, Fri May 21 00:14:00 1999. + + - * -------------------------------------------------------------------------- +*/ /* This file contains one set of operations, as follows: - * - * > memory operations: dpu_ctrl.h - * - */ + + > memory operations: dpu_ctrl.h + +*/ #if defined(TRACE_TARGET) @@ -45,40 +45,40 @@ #include "dpu_ctrl.h" -static char data_memory[65536]; +static char data_memory[ 65536 ]; /* Simulated 80C32 external data RAM. */ -unsigned char *Data_Pointer (uint16_t address) +unsigned char *Data_Pointer ( uint16_t address ) { - return &data_memory[address]; + return &data_memory[ address ]; } -void Set_Data_Byte (data_address_t addr, unsigned char value) +void Set_Data_Byte ( data_address_t addr, unsigned char value ) { -#if defined(TRACE_TARGET) - printf ("Set_Data_Byte 0x%x to %d = 0x%x\n", addr, value, value); -#endif - data_memory[addr] = value; + #if defined(TRACE_TARGET) + printf ( "Set_Data_Byte 0x%x to %d = 0x%x\n", addr, value, value ); + #endif + data_memory[ addr ] = value; } -unsigned char Get_Data_Byte (data_address_t addr) +unsigned char Get_Data_Byte ( data_address_t addr ) { - unsigned char value = data_memory[addr]; -#if defined(TRACE_TARGET) - printf ("Get_Data_Byte 0x%x is %d = 0x%x\n", addr, value, value); -#endif - return value; + unsigned char value = data_memory[ addr ]; + #if defined(TRACE_TARGET) + printf ( "Get_Data_Byte 0x%x is %d = 0x%x\n", addr, value, value ); + #endif + return value; } -unsigned char Get_Code_Byte (code_address_t addr) +unsigned char Get_Code_Byte ( code_address_t addr ) { -#if defined(TRACE_TARGET) - /* printf ("Get_Code_Byte 0x%x\n", addr); */ - /* This would be to much output. Skip. */ -#endif - return 0; + #if defined(TRACE_TARGET) + /* printf ("Get_Code_Byte 0x%x\n", addr); */ + /* This would be to much output. Skip. */ + #endif + return 0; } diff --git a/bench/parallel/DEBIE/code/arch/x86/target_tm_data.h b/bench/parallel/DEBIE/code/arch/x86/target_tm_data.h index 7f917fcad0f10385fba67271fb11f9cb3971fdd6..5d7e53fdbce4c9e4189cf00ba751e904cda5b6a7 100644 --- a/bench/parallel/DEBIE/code/arch/x86/target_tm_data.h +++ b/bench/parallel/DEBIE/code/arch/x86/target_tm_data.h @@ -1,30 +1,30 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : target_tm_data.h - * - * The target-specific aspects of the Telemetry Data Structure. - * - * Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : target_tm_data.h + + The target-specific aspects of the Telemetry Data Structure. + + Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TARGET_TM_DATA_H #define TARGET_TM_DATA_H #define MAX_EVENTS 1261 /* Same as in the original DEBIE-1 SW, although there limited - * by the size of the data memory. - */ + by the size of the data memory. +*/ #endif diff --git a/bench/parallel/DEBIE/code/arch/x86/wcc_memcpy.c b/bench/parallel/DEBIE/code/arch/x86/wcc_memcpy.c new file mode 100644 index 0000000000000000000000000000000000000000..05db2a7294fbaaff34271aa5ee917a54d6d532cd --- /dev/null +++ b/bench/parallel/DEBIE/code/arch/x86/wcc_memcpy.c @@ -0,0 +1,10 @@ +#include "keyword.h" + +void wcc_memcpy( void *dest, void *src, int size ) +{ + int i; + _Pragma( "loopbound min 2 max 4" ) + for ( i = 0; i < size; i++ ) + ( ( unsigned char * )dest )[ i ] = ( ( unsigned char * )src )[ i ]; + return; +} diff --git a/bench/parallel/DEBIE/code/class.c b/bench/parallel/DEBIE/code/class.c index 652fbe6831018ab1033d25a49d697044b851ca3f..bd29a9b44b5919590f0a2fe2134a6130fe5cc2c3 100644 --- a/bench/parallel/DEBIE/code/class.c +++ b/bench/parallel/DEBIE/code/class.c @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : class.c - * - * Event-classification module. - * - * Based on the SSF file class.c, rev 1.10, Tue Jun 01 12:34:56 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : class.c + + Event-classification module. + + Based on the SSF file class.c, rev 1.10, Tue Jun 01 12:34:56 1999. + + - * -------------------------------------------------------------------------- +*/ #include "keyword.h" #include "class.h" @@ -27,7 +27,7 @@ #include "measure.h" #define MAX_QUALITY 255 -unsigned char RoughLogarithm (unsigned int x) +unsigned char RoughLogarithm ( unsigned int x ) /* An integer approximation (0..16) of the base-2 log of x */ /* computed as the number of the most-significant non-zero bit. */ /* When x = 0, returns zero. */ @@ -38,24 +38,23 @@ unsigned char RoughLogarithm (unsigned int x) /* when x = x7FFF, returns 15. */ /* when x = x8000, returns 16. */ { - unsigned char INDIRECT_INTERNAL greatest_non_zero_bit; - unsigned int INDIRECT_INTERNAL shifted; + unsigned char INDIRECT_INTERNAL greatest_non_zero_bit; + unsigned int INDIRECT_INTERNAL shifted; - greatest_non_zero_bit = 0; - shifted = x; + greatest_non_zero_bit = 0; + shifted = x; - _Pragma("loopbound min 16 max 16") - while (shifted) - { - greatest_non_zero_bit++; - shifted >>= 1; - } + _Pragma( "loopbound min 15 max 15" ) + while ( shifted ) { + greatest_non_zero_bit++; + shifted >>= 1; + } - return greatest_non_zero_bit; + return greatest_non_zero_bit; } -float GetQualityTerm(unsigned char coeff, unsigned int amplitude) +float GetQualityTerm( unsigned char coeff, unsigned int amplitude ) /* Purpose : Calculates the ampltude term of the quality formula. */ /* Interface : inputs - parameter coeff defines number of the */ /* quality coefficient. */ @@ -67,33 +66,31 @@ float GetQualityTerm(unsigned char coeff, unsigned int amplitude) /* Postconditions : none. */ /* Algorithm : quality term is calculated according to following */ /* formula : */ -/* coefficient[coeff] */ +/* coefficient[ coeff ] */ /* * RoughLogaritm(amplitude) */ /* / AMPLTUDE_DIVIDER */ -/* where coefficient[coeff] is the amplitude coefficient of */ +/* where coefficient[ coeff ] is the amplitude coefficient of */ /* the quality term and AMPLTUDE_DIVIDER is a scaling */ /* factor whose purpose is scale the result below 5.0. */ /* However if the result would become larger than that, */ /* 5.0 is returned. */ { - float EXTERNAL quality; + float EXTERNAL quality; - quality = - (float)(telemetry_data.coefficient[coeff] - * RoughLogarithm(amplitude)) - / AMPLITUDE_DIVIDER; + quality = + ( float )( telemetry_data.coefficient[ coeff ] + * RoughLogarithm( amplitude ) ) + / AMPLITUDE_DIVIDER; - if (quality > 5.0) - { - quality = 5.0; - } + if ( quality > 5.0 ) + quality = 5.0; - return quality; + return quality; } -void CalculateQualityNumber(event_record_t EXTERNAL *new_event) +void CalculateQualityNumber( event_record_t EXTERNAL *new_event ) /* Purpose : Calculates the quality number of a particle hit event */ /* and stores in the event record. */ /* Interface : inputs - event record pointed by the parameter. */ @@ -116,32 +113,32 @@ void CalculateQualityNumber(event_record_t EXTERNAL *new_event) /* and i goes from 1 to 5. */ { - float INDIRECT_INTERNAL quality; + float INDIRECT_INTERNAL quality; - quality = 25.0 * new_event -> classification; - /* First term of the quality formula. */ + quality = 25.0 * new_event -> classification; + /* First term of the quality formula. */ - quality += GetQualityTerm(0, VALUE_OF (new_event -> plasma_1_plus)); - /* Add amplitude term for i=1 (see function algorithm). */ + quality += GetQualityTerm( 0, VALUE_OF ( new_event -> plasma_1_plus ) ); + /* Add amplitude term for i=1 (see function algorithm). */ - quality += GetQualityTerm(1, VALUE_OF (new_event -> plasma_1_minus)); - /* Add amplitude term for i=2 (see function algorithm). */ + quality += GetQualityTerm( 1, VALUE_OF ( new_event -> plasma_1_minus ) ); + /* Add amplitude term for i=2 (see function algorithm). */ - quality += GetQualityTerm(2, VALUE_OF (new_event -> piezo_1)); - /* Add amplitude term for i=3 (see function algorithm). */ + quality += GetQualityTerm( 2, VALUE_OF ( new_event -> piezo_1 ) ); + /* Add amplitude term for i=3 (see function algorithm). */ - quality += GetQualityTerm(3, VALUE_OF (new_event -> piezo_2)); - /* Add amplitude term for i=4 (see function algorithm). */ + quality += GetQualityTerm( 3, VALUE_OF ( new_event -> piezo_2 ) ); + /* Add amplitude term for i=4 (see function algorithm). */ - quality += GetQualityTerm(4, VALUE_OF (new_event -> plasma_2_plus)); - /* Add amplitude term for i=5 (see function algorithm). */ + quality += GetQualityTerm( 4, VALUE_OF ( new_event -> plasma_2_plus ) ); + /* Add amplitude term for i=5 (see function algorithm). */ - new_event -> quality_number = (unsigned char) (quality + 0.5); - /* Store quality number to the event record */ + new_event -> quality_number = ( unsigned char ) ( quality + 0.5 ); + /* Store quality number to the event record */ } -void ClassifyEvent(event_record_t EXTERNAL *new_event) +void ClassifyEvent( event_record_t EXTERNAL *new_event ) /* Purpose : Classifies a particle hit event and stores result */ /* to the event record pointed by the parameter. */ /* Interface : inputs - event record pointed by the parameter. */ @@ -159,111 +156,99 @@ void ClassifyEvent(event_record_t EXTERNAL *new_event) /* - CalculateQualityNumber is called. */ { - unsigned char INDIRECT_INTERNAL class_index; - /* Index for the class look-up table. */ - - SU_settings_t EXTERNAL * INDIRECT_INTERNAL limits; - /* Pointer to the struct holding classification thresholds. */ - - class_index = 0; - /* Bits will be set below according to event attributes. */ - - switch (new_event -> SU_number) - /* Select proper classification thresholds. */ - { - case SU_1: - limits = &telemetry_data.sensor_unit_1; - break; - - case SU_2: - limits = &telemetry_data.sensor_unit_2; - break; - - case SU_3: - limits = &telemetry_data.sensor_unit_3; - break; - - case SU_4: - limits = &telemetry_data.sensor_unit_4; - break; - } - - if (VALUE_OF (new_event -> plasma_1_plus) >= - ((limits -> plasma_1_plus_classification) * 256)) - { - class_index |= PLASMA_1_PLUS_CLASS; - /* Set classification index bit for Plasma1+ peak amplitude. */ - } - - if (VALUE_OF (new_event -> plasma_1_minus) >= - ((limits -> plasma_1_minus_classification) * 256)) - { - class_index |= PLASMA_1_MINUS_CLASS; - /* Set classification index bit for Plasma1- peak amplitude. */ - } - - if (VALUE_OF (new_event -> piezo_1) >= - ((limits -> piezo_1_classification) * 256)) - { - class_index |= PIEZO_1_CLASS; - /* Set classification index bit for Piezo1 peak amplitude. */ - } - - if (VALUE_OF (new_event -> piezo_2) >= - ((limits -> piezo_2_classification) * 256)) - { - class_index |= PIEZO_2_CLASS; - /* Set classification index bit for Piezo2 peak amplitude. */ - } - - if (VALUE_OF (new_event -> plasma_2_plus) >= - ((limits -> plasma_2_plus_classification) * 256)) - { - class_index |= PLASMA_2_PLUS_CLASS; - /* Set classification index bit for Plasma2+ peak amplitude. */ - } - - if (VALUE_OF (new_event -> delay_2) >= - ((limits -> plasma_1_plus_to_piezo_min_time) * 16) && - VALUE_OF (new_event -> delay_2) <= - ((limits -> plasma_1_plus_to_piezo_max_time) * 16)) - { - class_index |= PLASMA_1_PLUS_TO_PIEZO_CLASS; - /* Set classification index bit for Plasma1+ to Piezo delay. */ - } - - if (VALUE_OF (new_event -> delay_3) >= - ((limits -> plasma_1_minus_to_piezo_min_time) * 16) && - VALUE_OF (new_event -> delay_3) <= - ((limits -> plasma_1_minus_to_piezo_max_time) * 16)) - { - class_index |= PLASMA_1_MINUS_TO_PIEZO_CLASS; - /* Set classification index bit for Plasma1- to Piezo delay. */ - } - - if (new_event -> delay_1 <= - limits -> plasma_1_plus_to_minus_max_time) - { - class_index |= PLASMA_1_PLUS_TO_MINUS_CLASS; - /* Set classification index bit for Plasma1+ to Plasma1- delay. */ - } - - new_event -> classification = event_class[class_index]; - /* Store classification number to the event record */ - - if (SU_state[new_event->SU_number - SU_1] == self_test_e) - { - new_event -> quality_number = MAX_QUALITY; - } - - else - { - CalculateQualityNumber(new_event); - } + unsigned char INDIRECT_INTERNAL class_index; + /* Index for the class look-up table. */ + + SU_settings_t EXTERNAL *INDIRECT_INTERNAL limits; + /* Pointer to the struct holding classification thresholds. */ + + class_index = 0; + /* Bits will be set below according to event attributes. */ + + switch ( new_event -> SU_number ) + /* Select proper classification thresholds. */ + { + case SU_1: + limits = &telemetry_data.sensor_unit_1; + break; + + case SU_2: + limits = &telemetry_data.sensor_unit_2; + break; + + case SU_3: + limits = &telemetry_data.sensor_unit_3; + break; + + case SU_4: + limits = &telemetry_data.sensor_unit_4; + break; + } + + if ( VALUE_OF ( new_event -> plasma_1_plus ) >= + ( ( limits -> plasma_1_plus_classification ) * 256 ) ) { + class_index |= PLASMA_1_PLUS_CLASS; + /* Set classification index bit for Plasma1+ peak amplitude. */ + } + + if ( VALUE_OF ( new_event -> plasma_1_minus ) >= + ( ( limits -> plasma_1_minus_classification ) * 256 ) ) { + class_index |= PLASMA_1_MINUS_CLASS; + /* Set classification index bit for Plasma1- peak amplitude. */ + } + + if ( VALUE_OF ( new_event -> piezo_1 ) >= + ( ( limits -> piezo_1_classification ) * 256 ) ) { + class_index |= PIEZO_1_CLASS; + /* Set classification index bit for Piezo1 peak amplitude. */ + } + + if ( VALUE_OF ( new_event -> piezo_2 ) >= + ( ( limits -> piezo_2_classification ) * 256 ) ) { + class_index |= PIEZO_2_CLASS; + /* Set classification index bit for Piezo2 peak amplitude. */ + } + + if ( VALUE_OF ( new_event -> plasma_2_plus ) >= + ( ( limits -> plasma_2_plus_classification ) * 256 ) ) { + class_index |= PLASMA_2_PLUS_CLASS; + /* Set classification index bit for Plasma2+ peak amplitude. */ + } + + if ( VALUE_OF ( new_event -> delay_2 ) >= + ( ( limits -> plasma_1_plus_to_piezo_min_time ) * 16 ) && + VALUE_OF ( new_event -> delay_2 ) <= + ( ( limits -> plasma_1_plus_to_piezo_max_time ) * 16 ) ) { + class_index |= PLASMA_1_PLUS_TO_PIEZO_CLASS; + /* Set classification index bit for Plasma1+ to Piezo delay. */ + } + + if ( VALUE_OF ( new_event -> delay_3 ) >= + ( ( limits -> plasma_1_minus_to_piezo_min_time ) * 16 ) && + VALUE_OF ( new_event -> delay_3 ) <= + ( ( limits -> plasma_1_minus_to_piezo_max_time ) * 16 ) ) { + class_index |= PLASMA_1_MINUS_TO_PIEZO_CLASS; + /* Set classification index bit for Plasma1- to Piezo delay. */ + } + + if ( new_event -> delay_1 <= + limits -> plasma_1_plus_to_minus_max_time ) { + class_index |= PLASMA_1_PLUS_TO_MINUS_CLASS; + /* Set classification index bit for Plasma1+ to Plasma1- delay. */ + } + + new_event -> classification = event_class[ class_index ]; + /* Store classification number to the event record */ + + if ( SU_state[ new_event->SU_number - SU_1 ] == self_test_e ) + new_event -> quality_number = MAX_QUALITY; + + else + CalculateQualityNumber( new_event ); } -void InitClassification(void) +void InitClassification( void ) /* Purpose : Initializes classication coefficients and levels. */ /* Interface : inputs - none. */ /* outputs - quality coefficients in telemetry_data. */ @@ -277,25 +262,23 @@ void InitClassification(void) /* Algorithm : see below */ { - uint_least8_t EXTERNAL i; - /* Loop variable. */ - - _Pragma("loopbound min 5 max 5") - for (i=0; i<NUM_QCOEFF; i++) - { - telemetry_data.coefficient[i] = DEFAULT_COEFF; - } - - Init_SU_Settings (&telemetry_data.sensor_unit_1); - Init_SU_Settings (&telemetry_data.sensor_unit_2); - Init_SU_Settings (&telemetry_data.sensor_unit_3); - Init_SU_Settings (&telemetry_data.sensor_unit_4); - /* Default values for thresholds, classification levels and min/max times */ - /* related to classification are set here. */ + uint_least8_t EXTERNAL i; + /* Loop variable. */ + + _Pragma( "loopbound min 5 max 5" ) + for ( i = 0; i < NUM_QCOEFF; i++ ) + telemetry_data.coefficient[ i ] = DEFAULT_COEFF; + + Init_SU_Settings ( &telemetry_data.sensor_unit_1 ); + Init_SU_Settings ( &telemetry_data.sensor_unit_2 ); + Init_SU_Settings ( &telemetry_data.sensor_unit_3 ); + Init_SU_Settings ( &telemetry_data.sensor_unit_4 ); + /* Default values for thresholds, classification levels and min/max times */ + /* related to classification are set here. */ } -void Init_SU_Settings (SU_settings_t EXTERNAL *set) +void Init_SU_Settings ( SU_settings_t EXTERNAL *set ) /* Purpose : Initializes classication parameters */ /* Interface : inputs - none. */ /* outputs - classification levels in telemetry_data. */ @@ -307,19 +290,19 @@ void Init_SU_Settings (SU_settings_t EXTERNAL *set) /* Postconditions : outputs have their default values. */ /* Algorithm : Sets default values to telemetry_data. */ { - set -> plasma_1_plus_threshold = DEFAULT_THRESHOLD; - set -> plasma_1_minus_threshold = DEFAULT_THRESHOLD; - set -> piezo_threshold = DEFAULT_THRESHOLD; - set -> plasma_1_plus_classification = DEFAULT_CLASSIFICATION_LEVEL; - set -> plasma_1_minus_classification = DEFAULT_CLASSIFICATION_LEVEL; - set -> piezo_1_classification = DEFAULT_CLASSIFICATION_LEVEL; - set -> piezo_2_classification = DEFAULT_CLASSIFICATION_LEVEL; - set -> plasma_2_plus_classification = DEFAULT_CLASSIFICATION_LEVEL; - set -> plasma_1_plus_to_minus_max_time = DEFAULT_MAX_TIME; - set -> plasma_1_plus_to_piezo_min_time = DEFAULT_MIN_TIME; - set -> plasma_1_plus_to_piezo_max_time = DEFAULT_MAX_TIME; - set -> plasma_1_minus_to_piezo_min_time = DEFAULT_MIN_TIME; - set -> plasma_1_minus_to_piezo_max_time = DEFAULT_MAX_TIME; + set -> plasma_1_plus_threshold = DEFAULT_THRESHOLD; + set -> plasma_1_minus_threshold = DEFAULT_THRESHOLD; + set -> piezo_threshold = DEFAULT_THRESHOLD; + set -> plasma_1_plus_classification = DEFAULT_CLASSIFICATION_LEVEL; + set -> plasma_1_minus_classification = DEFAULT_CLASSIFICATION_LEVEL; + set -> piezo_1_classification = DEFAULT_CLASSIFICATION_LEVEL; + set -> piezo_2_classification = DEFAULT_CLASSIFICATION_LEVEL; + set -> plasma_2_plus_classification = DEFAULT_CLASSIFICATION_LEVEL; + set -> plasma_1_plus_to_minus_max_time = DEFAULT_MAX_TIME; + set -> plasma_1_plus_to_piezo_min_time = DEFAULT_MIN_TIME; + set -> plasma_1_plus_to_piezo_max_time = DEFAULT_MAX_TIME; + set -> plasma_1_minus_to_piezo_min_time = DEFAULT_MIN_TIME; + set -> plasma_1_minus_to_piezo_max_time = DEFAULT_MAX_TIME; } diff --git a/bench/parallel/DEBIE/code/class.h b/bench/parallel/DEBIE/code/class.h index cc0c2b8d3caaf4f1cf47759a9f5667303300a4ee..478d34f1afc3b81792fcc25d9773688cb0223ae6 100644 --- a/bench/parallel/DEBIE/code/class.h +++ b/bench/parallel/DEBIE/code/class.h @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : class.h - * - * Prototypes etc. for the event-classification module Class. - * - * Based on the SSF file class.h, rev 1.6, Fri Jun 04 14:47:38 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : class.h + + Prototypes etc. for the event-classification module Class. + + Based on the SSF file class.h, rev 1.6, Fri Jun 04 14:47:38 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef CLASS_H @@ -60,13 +60,13 @@ /* Classification index mask values for delays inside the */ /* time windows. */ -extern void InitClassification(void); +extern void InitClassification( void ); /* Inits classification thresholds and coefficients. */ -extern void ClassifyEvent(event_record_t EXTERNAL *new_event); +extern void ClassifyEvent( event_record_t EXTERNAL *new_event ); /* Classifies event and calculates the quality number. */ -extern void Init_SU_Settings (SU_settings_t EXTERNAL *set); +extern void Init_SU_Settings ( SU_settings_t EXTERNAL *set ); /* Sets the default values for classification parameters. */ #endif diff --git a/bench/parallel/DEBIE/code/classtab.c b/bench/parallel/DEBIE/code/classtab.c index 398aea8f3aa1ea070e45ed1ce4edb2da70f302ff..4709b755be1e0d41901456053ed922cb9d514c1c 100644 --- a/bench/parallel/DEBIE/code/classtab.c +++ b/bench/parallel/DEBIE/code/classtab.c @@ -1,283 +1,283 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : classtab.c - * - * Table for classifying event according to multiple measurements. - * - * Based on the SSF file classtab.c, rev 1.2, Thu Feb 18 15:12:22 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : classtab.c + + Table for classifying event according to multiple measurements. + + Based on the SSF file classtab.c, rev 1.2, Thu Feb 18 15:12:22 1999. + + - * -------------------------------------------------------------------------- +*/ #include "keyword.h" -unsigned char EXTERNAL event_class[256] = { - /* Que Qui P1 P2 Qle dTei dTep dTip */ - 0, /* 0 0 0 0 0 OUTSIDE OUTSIDE OUTSIDE */ - 0, /* 0 0 0 0 0 OUTSIDE OUTSIDE INSIDE */ - 0, /* 0 0 0 0 0 OUTSIDE INSIDE OUTSIDE */ - 0, /* 0 0 0 0 0 OUTSIDE INSIDE INSIDE */ - 0, /* 0 0 0 0 0 INSIDE OUTSIDE OUTSIDE */ - 0, /* 0 0 0 0 0 INSIDE OUTSIDE INSIDE */ - 0, /* 0 0 0 0 0 INSIDE INSIDE OUTSIDE */ - 0, /* 0 0 0 0 0 INSIDE INSIDE INSIDE */ - 0, /* 0 0 0 0 1 OUTSIDE OUTSIDE OUTSIDE */ - 0, /* 0 0 0 0 1 OUTSIDE OUTSIDE INSIDE */ - 0, /* 0 0 0 0 1 OUTSIDE INSIDE OUTSIDE */ - 0, /* 0 0 0 0 1 OUTSIDE INSIDE INSIDE */ - 0, /* 0 0 0 0 1 INSIDE OUTSIDE OUTSIDE */ - 0, /* 0 0 0 0 1 INSIDE OUTSIDE INSIDE */ - 0, /* 0 0 0 0 1 INSIDE INSIDE OUTSIDE */ - 0, /* 0 0 0 0 1 INSIDE INSIDE INSIDE */ - 0, /* 0 0 0 1 0 OUTSIDE OUTSIDE OUTSIDE */ - 0, /* 0 0 0 1 0 OUTSIDE OUTSIDE INSIDE */ - 0, /* 0 0 0 1 0 OUTSIDE INSIDE OUTSIDE */ - 0, /* 0 0 0 1 0 OUTSIDE INSIDE INSIDE */ - 0, /* 0 0 0 1 0 INSIDE OUTSIDE OUTSIDE */ - 0, /* 0 0 0 1 0 INSIDE OUTSIDE INSIDE */ - 0, /* 0 0 0 1 0 INSIDE INSIDE OUTSIDE */ - 0, /* 0 0 0 1 0 INSIDE INSIDE INSIDE */ - 3, /* 0 0 0 1 1 OUTSIDE OUTSIDE OUTSIDE */ - 3, /* 0 0 0 1 1 OUTSIDE OUTSIDE INSIDE */ - 3, /* 0 0 0 1 1 OUTSIDE INSIDE OUTSIDE */ - 3, /* 0 0 0 1 1 OUTSIDE INSIDE INSIDE */ - 3, /* 0 0 0 1 1 INSIDE OUTSIDE OUTSIDE */ - 3, /* 0 0 0 1 1 INSIDE OUTSIDE INSIDE */ - 3, /* 0 0 0 1 1 INSIDE INSIDE OUTSIDE */ - 3, /* 0 0 0 1 1 INSIDE INSIDE INSIDE */ - 0, /* 0 0 1 0 0 OUTSIDE OUTSIDE OUTSIDE */ - 0, /* 0 0 1 0 0 OUTSIDE OUTSIDE INSIDE */ - 0, /* 0 0 1 0 0 OUTSIDE INSIDE OUTSIDE */ - 0, /* 0 0 1 0 0 OUTSIDE INSIDE INSIDE */ - 0, /* 0 0 1 0 0 INSIDE OUTSIDE OUTSIDE */ - 0, /* 0 0 1 0 0 INSIDE OUTSIDE INSIDE */ - 0, /* 0 0 1 0 0 INSIDE INSIDE OUTSIDE */ - 0, /* 0 0 1 0 0 INSIDE INSIDE INSIDE */ - 3, /* 0 0 1 0 1 OUTSIDE OUTSIDE OUTSIDE */ - 3, /* 0 0 1 0 1 OUTSIDE OUTSIDE INSIDE */ - 3, /* 0 0 1 0 1 OUTSIDE INSIDE OUTSIDE */ - 3, /* 0 0 1 0 1 OUTSIDE INSIDE INSIDE */ - 3, /* 0 0 1 0 1 INSIDE OUTSIDE OUTSIDE */ - 3, /* 0 0 1 0 1 INSIDE OUTSIDE INSIDE */ - 3, /* 0 0 1 0 1 INSIDE INSIDE OUTSIDE */ - 3, /* 0 0 1 0 1 INSIDE INSIDE INSIDE */ - 5, /* 0 0 1 1 0 OUTSIDE OUTSIDE OUTSIDE */ - 5, /* 0 0 1 1 0 OUTSIDE OUTSIDE INSIDE */ - 5, /* 0 0 1 1 0 OUTSIDE INSIDE OUTSIDE */ - 5, /* 0 0 1 1 0 OUTSIDE INSIDE INSIDE */ - 5, /* 0 0 1 1 0 INSIDE OUTSIDE OUTSIDE */ - 5, /* 0 0 1 1 0 INSIDE OUTSIDE INSIDE */ - 5, /* 0 0 1 1 0 INSIDE INSIDE OUTSIDE */ - 5, /* 0 0 1 1 0 INSIDE INSIDE INSIDE */ - 8, /* 0 0 1 1 1 OUTSIDE OUTSIDE OUTSIDE */ - 8, /* 0 0 1 1 1 OUTSIDE OUTSIDE INSIDE */ - 8, /* 0 0 1 1 1 OUTSIDE INSIDE OUTSIDE */ - 8, /* 0 0 1 1 1 OUTSIDE INSIDE INSIDE */ - 8, /* 0 0 1 1 1 INSIDE OUTSIDE OUTSIDE */ - 8, /* 0 0 1 1 1 INSIDE OUTSIDE INSIDE */ - 8, /* 0 0 1 1 1 INSIDE INSIDE OUTSIDE */ - 8, /* 0 0 1 1 1 INSIDE INSIDE INSIDE */ - 0, /* 0 1 0 0 0 OUTSIDE OUTSIDE OUTSIDE */ - 0, /* 0 1 0 0 0 OUTSIDE OUTSIDE INSIDE */ - 0, /* 0 1 0 0 0 OUTSIDE INSIDE OUTSIDE */ - 0, /* 0 1 0 0 0 OUTSIDE INSIDE INSIDE */ - 0, /* 0 1 0 0 0 INSIDE OUTSIDE OUTSIDE */ - 0, /* 0 1 0 0 0 INSIDE OUTSIDE INSIDE */ - 0, /* 0 1 0 0 0 INSIDE INSIDE OUTSIDE */ - 0, /* 0 1 0 0 0 INSIDE INSIDE INSIDE */ - 3, /* 0 1 0 0 1 OUTSIDE OUTSIDE OUTSIDE */ - 3, /* 0 1 0 0 1 OUTSIDE OUTSIDE INSIDE */ - 3, /* 0 1 0 0 1 OUTSIDE INSIDE OUTSIDE */ - 3, /* 0 1 0 0 1 OUTSIDE INSIDE INSIDE */ - 3, /* 0 1 0 0 1 INSIDE OUTSIDE OUTSIDE */ - 3, /* 0 1 0 0 1 INSIDE OUTSIDE INSIDE */ - 3, /* 0 1 0 0 1 INSIDE INSIDE OUTSIDE */ - 3, /* 0 1 0 0 1 INSIDE INSIDE INSIDE */ - 1, /* 0 1 0 1 0 OUTSIDE OUTSIDE OUTSIDE */ - 3, /* 0 1 0 1 0 OUTSIDE OUTSIDE INSIDE */ - 1, /* 0 1 0 1 0 OUTSIDE INSIDE OUTSIDE */ - 3, /* 0 1 0 1 0 OUTSIDE INSIDE INSIDE */ - 1, /* 0 1 0 1 0 INSIDE OUTSIDE OUTSIDE */ - 3, /* 0 1 0 1 0 INSIDE OUTSIDE INSIDE */ - 1, /* 0 1 0 1 0 INSIDE INSIDE OUTSIDE */ - 3, /* 0 1 0 1 0 INSIDE INSIDE INSIDE */ - 1, /* 0 1 0 1 1 OUTSIDE OUTSIDE OUTSIDE */ - 4, /* 0 1 0 1 1 OUTSIDE OUTSIDE INSIDE */ - 1, /* 0 1 0 1 1 OUTSIDE INSIDE OUTSIDE */ - 4, /* 0 1 0 1 1 OUTSIDE INSIDE INSIDE */ - 1, /* 0 1 0 1 1 INSIDE OUTSIDE OUTSIDE */ - 4, /* 0 1 0 1 1 INSIDE OUTSIDE INSIDE */ - 1, /* 0 1 0 1 1 INSIDE INSIDE OUTSIDE */ - 4, /* 0 1 0 1 1 INSIDE INSIDE INSIDE */ - 1, /* 0 1 1 0 0 OUTSIDE OUTSIDE OUTSIDE */ - 3, /* 0 1 1 0 0 OUTSIDE OUTSIDE INSIDE */ - 1, /* 0 1 1 0 0 OUTSIDE INSIDE OUTSIDE */ - 3, /* 0 1 1 0 0 OUTSIDE INSIDE INSIDE */ - 1, /* 0 1 1 0 0 INSIDE OUTSIDE OUTSIDE */ - 3, /* 0 1 1 0 0 INSIDE OUTSIDE INSIDE */ - 1, /* 0 1 1 0 0 INSIDE INSIDE OUTSIDE */ - 3, /* 0 1 1 0 0 INSIDE INSIDE INSIDE */ - 1, /* 0 1 1 0 1 OUTSIDE OUTSIDE OUTSIDE */ - 4, /* 0 1 1 0 1 OUTSIDE OUTSIDE INSIDE */ - 1, /* 0 1 1 0 1 OUTSIDE INSIDE OUTSIDE */ - 4, /* 0 1 1 0 1 OUTSIDE INSIDE INSIDE */ - 1, /* 0 1 1 0 1 INSIDE OUTSIDE OUTSIDE */ - 4, /* 0 1 1 0 1 INSIDE OUTSIDE INSIDE */ - 1, /* 0 1 1 0 1 INSIDE INSIDE OUTSIDE */ - 4, /* 0 1 1 0 1 INSIDE INSIDE INSIDE */ - 1, /* 0 1 1 1 0 OUTSIDE OUTSIDE OUTSIDE */ - 5, /* 0 1 1 1 0 OUTSIDE OUTSIDE INSIDE */ - 1, /* 0 1 1 1 0 OUTSIDE INSIDE OUTSIDE */ - 5, /* 0 1 1 1 0 OUTSIDE INSIDE INSIDE */ - 1, /* 0 1 1 1 0 INSIDE OUTSIDE OUTSIDE */ - 5, /* 0 1 1 1 0 INSIDE OUTSIDE INSIDE */ - 1, /* 0 1 1 1 0 INSIDE INSIDE OUTSIDE */ - 5, /* 0 1 1 1 0 INSIDE INSIDE INSIDE */ - 1, /* 0 1 1 1 1 OUTSIDE OUTSIDE OUTSIDE */ - 8, /* 0 1 1 1 1 OUTSIDE OUTSIDE INSIDE */ - 1, /* 0 1 1 1 1 OUTSIDE INSIDE OUTSIDE */ - 8, /* 0 1 1 1 1 OUTSIDE INSIDE INSIDE */ - 1, /* 0 1 1 1 1 INSIDE OUTSIDE OUTSIDE */ - 8, /* 0 1 1 1 1 INSIDE OUTSIDE INSIDE */ - 1, /* 0 1 1 1 1 INSIDE INSIDE OUTSIDE */ - 8, /* 0 1 1 1 1 INSIDE INSIDE INSIDE */ - 0, /* 1 0 0 0 0 OUTSIDE OUTSIDE OUTSIDE */ - 0, /* 1 0 0 0 0 OUTSIDE OUTSIDE INSIDE */ - 0, /* 1 0 0 0 0 OUTSIDE INSIDE OUTSIDE */ - 0, /* 1 0 0 0 0 OUTSIDE INSIDE INSIDE */ - 0, /* 1 0 0 0 0 INSIDE OUTSIDE OUTSIDE */ - 0, /* 1 0 0 0 0 INSIDE OUTSIDE INSIDE */ - 0, /* 1 0 0 0 0 INSIDE INSIDE OUTSIDE */ - 0, /* 1 0 0 0 0 INSIDE INSIDE INSIDE */ - 3, /* 1 0 0 0 1 OUTSIDE OUTSIDE OUTSIDE */ - 3, /* 1 0 0 0 1 OUTSIDE OUTSIDE INSIDE */ - 3, /* 1 0 0 0 1 OUTSIDE INSIDE OUTSIDE */ - 3, /* 1 0 0 0 1 OUTSIDE INSIDE INSIDE */ - 3, /* 1 0 0 0 1 INSIDE OUTSIDE OUTSIDE */ - 3, /* 1 0 0 0 1 INSIDE OUTSIDE INSIDE */ - 3, /* 1 0 0 0 1 INSIDE INSIDE OUTSIDE */ - 3, /* 1 0 0 0 1 INSIDE INSIDE INSIDE */ - 1, /* 1 0 0 1 0 OUTSIDE OUTSIDE OUTSIDE */ - 3, /* 1 0 0 1 0 OUTSIDE OUTSIDE INSIDE */ - 1, /* 1 0 0 1 0 OUTSIDE INSIDE OUTSIDE */ - 3, /* 1 0 0 1 0 OUTSIDE INSIDE INSIDE */ - 1, /* 1 0 0 1 0 INSIDE OUTSIDE OUTSIDE */ - 3, /* 1 0 0 1 0 INSIDE OUTSIDE INSIDE */ - 1, /* 1 0 0 1 0 INSIDE INSIDE OUTSIDE */ - 3, /* 1 0 0 1 0 INSIDE INSIDE INSIDE */ - 1, /* 1 0 0 1 1 OUTSIDE OUTSIDE OUTSIDE */ - 1, /* 1 0 0 1 1 OUTSIDE OUTSIDE INSIDE */ - 4, /* 1 0 0 1 1 OUTSIDE INSIDE OUTSIDE */ - 4, /* 1 0 0 1 1 OUTSIDE INSIDE INSIDE */ - 1, /* 1 0 0 1 1 INSIDE OUTSIDE OUTSIDE */ - 1, /* 1 0 0 1 1 INSIDE OUTSIDE INSIDE */ - 4, /* 1 0 0 1 1 INSIDE INSIDE OUTSIDE */ - 4, /* 1 0 0 1 1 INSIDE INSIDE INSIDE */ - 1, /* 1 0 1 0 0 OUTSIDE OUTSIDE OUTSIDE */ - 1, /* 1 0 1 0 0 OUTSIDE OUTSIDE INSIDE */ - 3, /* 1 0 1 0 0 OUTSIDE INSIDE OUTSIDE */ - 3, /* 1 0 1 0 0 OUTSIDE INSIDE INSIDE */ - 1, /* 1 0 1 0 0 INSIDE OUTSIDE OUTSIDE */ - 1, /* 1 0 1 0 0 INSIDE OUTSIDE INSIDE */ - 3, /* 1 0 1 0 0 INSIDE INSIDE OUTSIDE */ - 3, /* 1 0 1 0 0 INSIDE INSIDE INSIDE */ - 1, /* 1 0 1 0 1 OUTSIDE OUTSIDE OUTSIDE */ - 1, /* 1 0 1 0 1 OUTSIDE OUTSIDE INSIDE */ - 4, /* 1 0 1 0 1 OUTSIDE INSIDE OUTSIDE */ - 4, /* 1 0 1 0 1 OUTSIDE INSIDE INSIDE */ - 1, /* 1 0 1 0 1 INSIDE OUTSIDE OUTSIDE */ - 1, /* 1 0 1 0 1 INSIDE OUTSIDE INSIDE */ - 4, /* 1 0 1 0 1 INSIDE INSIDE OUTSIDE */ - 4, /* 1 0 1 0 1 INSIDE INSIDE INSIDE */ - 1, /* 1 0 1 1 0 OUTSIDE OUTSIDE OUTSIDE */ - 1, /* 1 0 1 1 0 OUTSIDE OUTSIDE INSIDE */ - 5, /* 1 0 1 1 0 OUTSIDE INSIDE OUTSIDE */ - 5, /* 1 0 1 1 0 OUTSIDE INSIDE INSIDE */ - 1, /* 1 0 1 1 0 INSIDE OUTSIDE OUTSIDE */ - 1, /* 1 0 1 1 0 INSIDE OUTSIDE INSIDE */ - 5, /* 1 0 1 1 0 INSIDE INSIDE OUTSIDE */ - 5, /* 1 0 1 1 0 INSIDE INSIDE INSIDE */ - 1, /* 1 0 1 1 1 OUTSIDE OUTSIDE OUTSIDE */ - 1, /* 1 0 1 1 1 OUTSIDE OUTSIDE INSIDE */ - 8, /* 1 0 1 1 1 OUTSIDE INSIDE OUTSIDE */ - 8, /* 1 0 1 1 1 OUTSIDE INSIDE INSIDE */ - 1, /* 1 0 1 1 1 INSIDE OUTSIDE OUTSIDE */ - 1, /* 1 0 1 1 1 INSIDE OUTSIDE INSIDE */ - 8, /* 1 0 1 1 1 INSIDE INSIDE OUTSIDE */ - 8, /* 1 0 1 1 1 INSIDE INSIDE INSIDE */ - 1, /* 1 1 0 0 0 OUTSIDE OUTSIDE OUTSIDE */ - 1, /* 1 1 0 0 0 OUTSIDE OUTSIDE INSIDE */ - 1, /* 1 1 0 0 0 OUTSIDE INSIDE OUTSIDE */ - 1, /* 1 1 0 0 0 OUTSIDE INSIDE INSIDE */ - 6, /* 1 1 0 0 0 INSIDE OUTSIDE OUTSIDE */ - 6, /* 1 1 0 0 0 INSIDE OUTSIDE INSIDE */ - 6, /* 1 1 0 0 0 INSIDE INSIDE OUTSIDE */ - 6, /* 1 1 0 0 0 INSIDE INSIDE INSIDE */ - 1, /* 1 1 0 0 1 OUTSIDE OUTSIDE OUTSIDE */ - 1, /* 1 1 0 0 1 OUTSIDE OUTSIDE INSIDE */ - 1, /* 1 1 0 0 1 OUTSIDE INSIDE OUTSIDE */ - 1, /* 1 1 0 0 1 OUTSIDE INSIDE INSIDE */ - 7, /* 1 1 0 0 1 INSIDE OUTSIDE OUTSIDE */ - 7, /* 1 1 0 0 1 INSIDE OUTSIDE INSIDE */ - 7, /* 1 1 0 0 1 INSIDE INSIDE OUTSIDE */ - 7, /* 1 1 0 0 1 INSIDE INSIDE INSIDE */ - 2, /* 1 1 0 1 0 OUTSIDE OUTSIDE OUTSIDE */ - 2, /* 1 1 0 1 0 OUTSIDE OUTSIDE INSIDE */ - 2, /* 1 1 0 1 0 OUTSIDE INSIDE OUTSIDE */ - 2, /* 1 1 0 1 0 OUTSIDE INSIDE INSIDE */ - 2, /* 1 1 0 1 0 INSIDE OUTSIDE OUTSIDE */ - 2, /* 1 1 0 1 0 INSIDE OUTSIDE INSIDE */ - 2, /* 1 1 0 1 0 INSIDE INSIDE OUTSIDE */ - 7, /* 1 1 0 1 0 INSIDE INSIDE INSIDE */ - 2, /* 1 1 0 1 1 OUTSIDE OUTSIDE OUTSIDE */ - 2, /* 1 1 0 1 1 OUTSIDE OUTSIDE INSIDE */ - 2, /* 1 1 0 1 1 OUTSIDE INSIDE OUTSIDE */ - 2, /* 1 1 0 1 1 OUTSIDE INSIDE INSIDE */ - 2, /* 1 1 0 1 1 INSIDE OUTSIDE OUTSIDE */ - 2, /* 1 1 0 1 1 INSIDE OUTSIDE INSIDE */ - 2, /* 1 1 0 1 1 INSIDE INSIDE OUTSIDE */ - 9, /* 1 1 0 1 1 INSIDE INSIDE INSIDE */ - 2, /* 1 1 1 0 0 OUTSIDE OUTSIDE OUTSIDE */ - 2, /* 1 1 1 0 0 OUTSIDE OUTSIDE INSIDE */ - 2, /* 1 1 1 0 0 OUTSIDE INSIDE OUTSIDE */ - 2, /* 1 1 1 0 0 OUTSIDE INSIDE INSIDE */ - 2, /* 1 1 1 0 0 INSIDE OUTSIDE OUTSIDE */ - 2, /* 1 1 1 0 0 INSIDE OUTSIDE INSIDE */ - 2, /* 1 1 1 0 0 INSIDE INSIDE OUTSIDE */ - 7, /* 1 1 1 0 0 INSIDE INSIDE INSIDE */ - 2, /* 1 1 1 0 1 OUTSIDE OUTSIDE OUTSIDE */ - 2, /* 1 1 1 0 1 OUTSIDE OUTSIDE INSIDE */ - 2, /* 1 1 1 0 1 OUTSIDE INSIDE OUTSIDE */ - 2, /* 1 1 1 0 1 OUTSIDE INSIDE INSIDE */ - 2, /* 1 1 1 0 1 INSIDE OUTSIDE OUTSIDE */ - 2, /* 1 1 1 0 1 INSIDE OUTSIDE INSIDE */ - 2, /* 1 1 1 0 1 INSIDE INSIDE OUTSIDE */ - 9, /* 1 1 1 0 1 INSIDE INSIDE INSIDE */ - 2, /* 1 1 1 1 0 OUTSIDE OUTSIDE OUTSIDE */ - 2, /* 1 1 1 1 0 OUTSIDE OUTSIDE INSIDE */ - 2, /* 1 1 1 1 0 OUTSIDE INSIDE OUTSIDE */ - 2, /* 1 1 1 1 0 OUTSIDE INSIDE INSIDE */ - 2, /* 1 1 1 1 0 INSIDE OUTSIDE OUTSIDE */ - 2, /* 1 1 1 1 0 INSIDE OUTSIDE INSIDE */ - 2, /* 1 1 1 1 0 INSIDE INSIDE OUTSIDE */ - 7, /* 1 1 1 1 0 INSIDE INSIDE INSIDE */ - 2, /* 1 1 1 1 1 OUTSIDE OUTSIDE OUTSIDE */ - 2, /* 1 1 1 1 1 OUTSIDE OUTSIDE INSIDE */ - 2, /* 1 1 1 1 1 OUTSIDE INSIDE OUTSIDE */ - 2, /* 1 1 1 1 1 OUTSIDE INSIDE INSIDE */ - 2, /* 1 1 1 1 1 INSIDE OUTSIDE OUTSIDE */ - 2, /* 1 1 1 1 1 INSIDE OUTSIDE INSIDE */ - 2, /* 1 1 1 1 1 INSIDE INSIDE OUTSIDE */ - 9 /* 1 1 1 1 1 INSIDE INSIDE INSIDE */ - }; +unsigned char EXTERNAL event_class[ 256 ] = { + /* Que Qui P1 P2 Qle dTei dTep dTip */ + 0, /* 0 0 0 0 0 OUTSIDE OUTSIDE OUTSIDE */ + 0, /* 0 0 0 0 0 OUTSIDE OUTSIDE INSIDE */ + 0, /* 0 0 0 0 0 OUTSIDE INSIDE OUTSIDE */ + 0, /* 0 0 0 0 0 OUTSIDE INSIDE INSIDE */ + 0, /* 0 0 0 0 0 INSIDE OUTSIDE OUTSIDE */ + 0, /* 0 0 0 0 0 INSIDE OUTSIDE INSIDE */ + 0, /* 0 0 0 0 0 INSIDE INSIDE OUTSIDE */ + 0, /* 0 0 0 0 0 INSIDE INSIDE INSIDE */ + 0, /* 0 0 0 0 1 OUTSIDE OUTSIDE OUTSIDE */ + 0, /* 0 0 0 0 1 OUTSIDE OUTSIDE INSIDE */ + 0, /* 0 0 0 0 1 OUTSIDE INSIDE OUTSIDE */ + 0, /* 0 0 0 0 1 OUTSIDE INSIDE INSIDE */ + 0, /* 0 0 0 0 1 INSIDE OUTSIDE OUTSIDE */ + 0, /* 0 0 0 0 1 INSIDE OUTSIDE INSIDE */ + 0, /* 0 0 0 0 1 INSIDE INSIDE OUTSIDE */ + 0, /* 0 0 0 0 1 INSIDE INSIDE INSIDE */ + 0, /* 0 0 0 1 0 OUTSIDE OUTSIDE OUTSIDE */ + 0, /* 0 0 0 1 0 OUTSIDE OUTSIDE INSIDE */ + 0, /* 0 0 0 1 0 OUTSIDE INSIDE OUTSIDE */ + 0, /* 0 0 0 1 0 OUTSIDE INSIDE INSIDE */ + 0, /* 0 0 0 1 0 INSIDE OUTSIDE OUTSIDE */ + 0, /* 0 0 0 1 0 INSIDE OUTSIDE INSIDE */ + 0, /* 0 0 0 1 0 INSIDE INSIDE OUTSIDE */ + 0, /* 0 0 0 1 0 INSIDE INSIDE INSIDE */ + 3, /* 0 0 0 1 1 OUTSIDE OUTSIDE OUTSIDE */ + 3, /* 0 0 0 1 1 OUTSIDE OUTSIDE INSIDE */ + 3, /* 0 0 0 1 1 OUTSIDE INSIDE OUTSIDE */ + 3, /* 0 0 0 1 1 OUTSIDE INSIDE INSIDE */ + 3, /* 0 0 0 1 1 INSIDE OUTSIDE OUTSIDE */ + 3, /* 0 0 0 1 1 INSIDE OUTSIDE INSIDE */ + 3, /* 0 0 0 1 1 INSIDE INSIDE OUTSIDE */ + 3, /* 0 0 0 1 1 INSIDE INSIDE INSIDE */ + 0, /* 0 0 1 0 0 OUTSIDE OUTSIDE OUTSIDE */ + 0, /* 0 0 1 0 0 OUTSIDE OUTSIDE INSIDE */ + 0, /* 0 0 1 0 0 OUTSIDE INSIDE OUTSIDE */ + 0, /* 0 0 1 0 0 OUTSIDE INSIDE INSIDE */ + 0, /* 0 0 1 0 0 INSIDE OUTSIDE OUTSIDE */ + 0, /* 0 0 1 0 0 INSIDE OUTSIDE INSIDE */ + 0, /* 0 0 1 0 0 INSIDE INSIDE OUTSIDE */ + 0, /* 0 0 1 0 0 INSIDE INSIDE INSIDE */ + 3, /* 0 0 1 0 1 OUTSIDE OUTSIDE OUTSIDE */ + 3, /* 0 0 1 0 1 OUTSIDE OUTSIDE INSIDE */ + 3, /* 0 0 1 0 1 OUTSIDE INSIDE OUTSIDE */ + 3, /* 0 0 1 0 1 OUTSIDE INSIDE INSIDE */ + 3, /* 0 0 1 0 1 INSIDE OUTSIDE OUTSIDE */ + 3, /* 0 0 1 0 1 INSIDE OUTSIDE INSIDE */ + 3, /* 0 0 1 0 1 INSIDE INSIDE OUTSIDE */ + 3, /* 0 0 1 0 1 INSIDE INSIDE INSIDE */ + 5, /* 0 0 1 1 0 OUTSIDE OUTSIDE OUTSIDE */ + 5, /* 0 0 1 1 0 OUTSIDE OUTSIDE INSIDE */ + 5, /* 0 0 1 1 0 OUTSIDE INSIDE OUTSIDE */ + 5, /* 0 0 1 1 0 OUTSIDE INSIDE INSIDE */ + 5, /* 0 0 1 1 0 INSIDE OUTSIDE OUTSIDE */ + 5, /* 0 0 1 1 0 INSIDE OUTSIDE INSIDE */ + 5, /* 0 0 1 1 0 INSIDE INSIDE OUTSIDE */ + 5, /* 0 0 1 1 0 INSIDE INSIDE INSIDE */ + 8, /* 0 0 1 1 1 OUTSIDE OUTSIDE OUTSIDE */ + 8, /* 0 0 1 1 1 OUTSIDE OUTSIDE INSIDE */ + 8, /* 0 0 1 1 1 OUTSIDE INSIDE OUTSIDE */ + 8, /* 0 0 1 1 1 OUTSIDE INSIDE INSIDE */ + 8, /* 0 0 1 1 1 INSIDE OUTSIDE OUTSIDE */ + 8, /* 0 0 1 1 1 INSIDE OUTSIDE INSIDE */ + 8, /* 0 0 1 1 1 INSIDE INSIDE OUTSIDE */ + 8, /* 0 0 1 1 1 INSIDE INSIDE INSIDE */ + 0, /* 0 1 0 0 0 OUTSIDE OUTSIDE OUTSIDE */ + 0, /* 0 1 0 0 0 OUTSIDE OUTSIDE INSIDE */ + 0, /* 0 1 0 0 0 OUTSIDE INSIDE OUTSIDE */ + 0, /* 0 1 0 0 0 OUTSIDE INSIDE INSIDE */ + 0, /* 0 1 0 0 0 INSIDE OUTSIDE OUTSIDE */ + 0, /* 0 1 0 0 0 INSIDE OUTSIDE INSIDE */ + 0, /* 0 1 0 0 0 INSIDE INSIDE OUTSIDE */ + 0, /* 0 1 0 0 0 INSIDE INSIDE INSIDE */ + 3, /* 0 1 0 0 1 OUTSIDE OUTSIDE OUTSIDE */ + 3, /* 0 1 0 0 1 OUTSIDE OUTSIDE INSIDE */ + 3, /* 0 1 0 0 1 OUTSIDE INSIDE OUTSIDE */ + 3, /* 0 1 0 0 1 OUTSIDE INSIDE INSIDE */ + 3, /* 0 1 0 0 1 INSIDE OUTSIDE OUTSIDE */ + 3, /* 0 1 0 0 1 INSIDE OUTSIDE INSIDE */ + 3, /* 0 1 0 0 1 INSIDE INSIDE OUTSIDE */ + 3, /* 0 1 0 0 1 INSIDE INSIDE INSIDE */ + 1, /* 0 1 0 1 0 OUTSIDE OUTSIDE OUTSIDE */ + 3, /* 0 1 0 1 0 OUTSIDE OUTSIDE INSIDE */ + 1, /* 0 1 0 1 0 OUTSIDE INSIDE OUTSIDE */ + 3, /* 0 1 0 1 0 OUTSIDE INSIDE INSIDE */ + 1, /* 0 1 0 1 0 INSIDE OUTSIDE OUTSIDE */ + 3, /* 0 1 0 1 0 INSIDE OUTSIDE INSIDE */ + 1, /* 0 1 0 1 0 INSIDE INSIDE OUTSIDE */ + 3, /* 0 1 0 1 0 INSIDE INSIDE INSIDE */ + 1, /* 0 1 0 1 1 OUTSIDE OUTSIDE OUTSIDE */ + 4, /* 0 1 0 1 1 OUTSIDE OUTSIDE INSIDE */ + 1, /* 0 1 0 1 1 OUTSIDE INSIDE OUTSIDE */ + 4, /* 0 1 0 1 1 OUTSIDE INSIDE INSIDE */ + 1, /* 0 1 0 1 1 INSIDE OUTSIDE OUTSIDE */ + 4, /* 0 1 0 1 1 INSIDE OUTSIDE INSIDE */ + 1, /* 0 1 0 1 1 INSIDE INSIDE OUTSIDE */ + 4, /* 0 1 0 1 1 INSIDE INSIDE INSIDE */ + 1, /* 0 1 1 0 0 OUTSIDE OUTSIDE OUTSIDE */ + 3, /* 0 1 1 0 0 OUTSIDE OUTSIDE INSIDE */ + 1, /* 0 1 1 0 0 OUTSIDE INSIDE OUTSIDE */ + 3, /* 0 1 1 0 0 OUTSIDE INSIDE INSIDE */ + 1, /* 0 1 1 0 0 INSIDE OUTSIDE OUTSIDE */ + 3, /* 0 1 1 0 0 INSIDE OUTSIDE INSIDE */ + 1, /* 0 1 1 0 0 INSIDE INSIDE OUTSIDE */ + 3, /* 0 1 1 0 0 INSIDE INSIDE INSIDE */ + 1, /* 0 1 1 0 1 OUTSIDE OUTSIDE OUTSIDE */ + 4, /* 0 1 1 0 1 OUTSIDE OUTSIDE INSIDE */ + 1, /* 0 1 1 0 1 OUTSIDE INSIDE OUTSIDE */ + 4, /* 0 1 1 0 1 OUTSIDE INSIDE INSIDE */ + 1, /* 0 1 1 0 1 INSIDE OUTSIDE OUTSIDE */ + 4, /* 0 1 1 0 1 INSIDE OUTSIDE INSIDE */ + 1, /* 0 1 1 0 1 INSIDE INSIDE OUTSIDE */ + 4, /* 0 1 1 0 1 INSIDE INSIDE INSIDE */ + 1, /* 0 1 1 1 0 OUTSIDE OUTSIDE OUTSIDE */ + 5, /* 0 1 1 1 0 OUTSIDE OUTSIDE INSIDE */ + 1, /* 0 1 1 1 0 OUTSIDE INSIDE OUTSIDE */ + 5, /* 0 1 1 1 0 OUTSIDE INSIDE INSIDE */ + 1, /* 0 1 1 1 0 INSIDE OUTSIDE OUTSIDE */ + 5, /* 0 1 1 1 0 INSIDE OUTSIDE INSIDE */ + 1, /* 0 1 1 1 0 INSIDE INSIDE OUTSIDE */ + 5, /* 0 1 1 1 0 INSIDE INSIDE INSIDE */ + 1, /* 0 1 1 1 1 OUTSIDE OUTSIDE OUTSIDE */ + 8, /* 0 1 1 1 1 OUTSIDE OUTSIDE INSIDE */ + 1, /* 0 1 1 1 1 OUTSIDE INSIDE OUTSIDE */ + 8, /* 0 1 1 1 1 OUTSIDE INSIDE INSIDE */ + 1, /* 0 1 1 1 1 INSIDE OUTSIDE OUTSIDE */ + 8, /* 0 1 1 1 1 INSIDE OUTSIDE INSIDE */ + 1, /* 0 1 1 1 1 INSIDE INSIDE OUTSIDE */ + 8, /* 0 1 1 1 1 INSIDE INSIDE INSIDE */ + 0, /* 1 0 0 0 0 OUTSIDE OUTSIDE OUTSIDE */ + 0, /* 1 0 0 0 0 OUTSIDE OUTSIDE INSIDE */ + 0, /* 1 0 0 0 0 OUTSIDE INSIDE OUTSIDE */ + 0, /* 1 0 0 0 0 OUTSIDE INSIDE INSIDE */ + 0, /* 1 0 0 0 0 INSIDE OUTSIDE OUTSIDE */ + 0, /* 1 0 0 0 0 INSIDE OUTSIDE INSIDE */ + 0, /* 1 0 0 0 0 INSIDE INSIDE OUTSIDE */ + 0, /* 1 0 0 0 0 INSIDE INSIDE INSIDE */ + 3, /* 1 0 0 0 1 OUTSIDE OUTSIDE OUTSIDE */ + 3, /* 1 0 0 0 1 OUTSIDE OUTSIDE INSIDE */ + 3, /* 1 0 0 0 1 OUTSIDE INSIDE OUTSIDE */ + 3, /* 1 0 0 0 1 OUTSIDE INSIDE INSIDE */ + 3, /* 1 0 0 0 1 INSIDE OUTSIDE OUTSIDE */ + 3, /* 1 0 0 0 1 INSIDE OUTSIDE INSIDE */ + 3, /* 1 0 0 0 1 INSIDE INSIDE OUTSIDE */ + 3, /* 1 0 0 0 1 INSIDE INSIDE INSIDE */ + 1, /* 1 0 0 1 0 OUTSIDE OUTSIDE OUTSIDE */ + 3, /* 1 0 0 1 0 OUTSIDE OUTSIDE INSIDE */ + 1, /* 1 0 0 1 0 OUTSIDE INSIDE OUTSIDE */ + 3, /* 1 0 0 1 0 OUTSIDE INSIDE INSIDE */ + 1, /* 1 0 0 1 0 INSIDE OUTSIDE OUTSIDE */ + 3, /* 1 0 0 1 0 INSIDE OUTSIDE INSIDE */ + 1, /* 1 0 0 1 0 INSIDE INSIDE OUTSIDE */ + 3, /* 1 0 0 1 0 INSIDE INSIDE INSIDE */ + 1, /* 1 0 0 1 1 OUTSIDE OUTSIDE OUTSIDE */ + 1, /* 1 0 0 1 1 OUTSIDE OUTSIDE INSIDE */ + 4, /* 1 0 0 1 1 OUTSIDE INSIDE OUTSIDE */ + 4, /* 1 0 0 1 1 OUTSIDE INSIDE INSIDE */ + 1, /* 1 0 0 1 1 INSIDE OUTSIDE OUTSIDE */ + 1, /* 1 0 0 1 1 INSIDE OUTSIDE INSIDE */ + 4, /* 1 0 0 1 1 INSIDE INSIDE OUTSIDE */ + 4, /* 1 0 0 1 1 INSIDE INSIDE INSIDE */ + 1, /* 1 0 1 0 0 OUTSIDE OUTSIDE OUTSIDE */ + 1, /* 1 0 1 0 0 OUTSIDE OUTSIDE INSIDE */ + 3, /* 1 0 1 0 0 OUTSIDE INSIDE OUTSIDE */ + 3, /* 1 0 1 0 0 OUTSIDE INSIDE INSIDE */ + 1, /* 1 0 1 0 0 INSIDE OUTSIDE OUTSIDE */ + 1, /* 1 0 1 0 0 INSIDE OUTSIDE INSIDE */ + 3, /* 1 0 1 0 0 INSIDE INSIDE OUTSIDE */ + 3, /* 1 0 1 0 0 INSIDE INSIDE INSIDE */ + 1, /* 1 0 1 0 1 OUTSIDE OUTSIDE OUTSIDE */ + 1, /* 1 0 1 0 1 OUTSIDE OUTSIDE INSIDE */ + 4, /* 1 0 1 0 1 OUTSIDE INSIDE OUTSIDE */ + 4, /* 1 0 1 0 1 OUTSIDE INSIDE INSIDE */ + 1, /* 1 0 1 0 1 INSIDE OUTSIDE OUTSIDE */ + 1, /* 1 0 1 0 1 INSIDE OUTSIDE INSIDE */ + 4, /* 1 0 1 0 1 INSIDE INSIDE OUTSIDE */ + 4, /* 1 0 1 0 1 INSIDE INSIDE INSIDE */ + 1, /* 1 0 1 1 0 OUTSIDE OUTSIDE OUTSIDE */ + 1, /* 1 0 1 1 0 OUTSIDE OUTSIDE INSIDE */ + 5, /* 1 0 1 1 0 OUTSIDE INSIDE OUTSIDE */ + 5, /* 1 0 1 1 0 OUTSIDE INSIDE INSIDE */ + 1, /* 1 0 1 1 0 INSIDE OUTSIDE OUTSIDE */ + 1, /* 1 0 1 1 0 INSIDE OUTSIDE INSIDE */ + 5, /* 1 0 1 1 0 INSIDE INSIDE OUTSIDE */ + 5, /* 1 0 1 1 0 INSIDE INSIDE INSIDE */ + 1, /* 1 0 1 1 1 OUTSIDE OUTSIDE OUTSIDE */ + 1, /* 1 0 1 1 1 OUTSIDE OUTSIDE INSIDE */ + 8, /* 1 0 1 1 1 OUTSIDE INSIDE OUTSIDE */ + 8, /* 1 0 1 1 1 OUTSIDE INSIDE INSIDE */ + 1, /* 1 0 1 1 1 INSIDE OUTSIDE OUTSIDE */ + 1, /* 1 0 1 1 1 INSIDE OUTSIDE INSIDE */ + 8, /* 1 0 1 1 1 INSIDE INSIDE OUTSIDE */ + 8, /* 1 0 1 1 1 INSIDE INSIDE INSIDE */ + 1, /* 1 1 0 0 0 OUTSIDE OUTSIDE OUTSIDE */ + 1, /* 1 1 0 0 0 OUTSIDE OUTSIDE INSIDE */ + 1, /* 1 1 0 0 0 OUTSIDE INSIDE OUTSIDE */ + 1, /* 1 1 0 0 0 OUTSIDE INSIDE INSIDE */ + 6, /* 1 1 0 0 0 INSIDE OUTSIDE OUTSIDE */ + 6, /* 1 1 0 0 0 INSIDE OUTSIDE INSIDE */ + 6, /* 1 1 0 0 0 INSIDE INSIDE OUTSIDE */ + 6, /* 1 1 0 0 0 INSIDE INSIDE INSIDE */ + 1, /* 1 1 0 0 1 OUTSIDE OUTSIDE OUTSIDE */ + 1, /* 1 1 0 0 1 OUTSIDE OUTSIDE INSIDE */ + 1, /* 1 1 0 0 1 OUTSIDE INSIDE OUTSIDE */ + 1, /* 1 1 0 0 1 OUTSIDE INSIDE INSIDE */ + 7, /* 1 1 0 0 1 INSIDE OUTSIDE OUTSIDE */ + 7, /* 1 1 0 0 1 INSIDE OUTSIDE INSIDE */ + 7, /* 1 1 0 0 1 INSIDE INSIDE OUTSIDE */ + 7, /* 1 1 0 0 1 INSIDE INSIDE INSIDE */ + 2, /* 1 1 0 1 0 OUTSIDE OUTSIDE OUTSIDE */ + 2, /* 1 1 0 1 0 OUTSIDE OUTSIDE INSIDE */ + 2, /* 1 1 0 1 0 OUTSIDE INSIDE OUTSIDE */ + 2, /* 1 1 0 1 0 OUTSIDE INSIDE INSIDE */ + 2, /* 1 1 0 1 0 INSIDE OUTSIDE OUTSIDE */ + 2, /* 1 1 0 1 0 INSIDE OUTSIDE INSIDE */ + 2, /* 1 1 0 1 0 INSIDE INSIDE OUTSIDE */ + 7, /* 1 1 0 1 0 INSIDE INSIDE INSIDE */ + 2, /* 1 1 0 1 1 OUTSIDE OUTSIDE OUTSIDE */ + 2, /* 1 1 0 1 1 OUTSIDE OUTSIDE INSIDE */ + 2, /* 1 1 0 1 1 OUTSIDE INSIDE OUTSIDE */ + 2, /* 1 1 0 1 1 OUTSIDE INSIDE INSIDE */ + 2, /* 1 1 0 1 1 INSIDE OUTSIDE OUTSIDE */ + 2, /* 1 1 0 1 1 INSIDE OUTSIDE INSIDE */ + 2, /* 1 1 0 1 1 INSIDE INSIDE OUTSIDE */ + 9, /* 1 1 0 1 1 INSIDE INSIDE INSIDE */ + 2, /* 1 1 1 0 0 OUTSIDE OUTSIDE OUTSIDE */ + 2, /* 1 1 1 0 0 OUTSIDE OUTSIDE INSIDE */ + 2, /* 1 1 1 0 0 OUTSIDE INSIDE OUTSIDE */ + 2, /* 1 1 1 0 0 OUTSIDE INSIDE INSIDE */ + 2, /* 1 1 1 0 0 INSIDE OUTSIDE OUTSIDE */ + 2, /* 1 1 1 0 0 INSIDE OUTSIDE INSIDE */ + 2, /* 1 1 1 0 0 INSIDE INSIDE OUTSIDE */ + 7, /* 1 1 1 0 0 INSIDE INSIDE INSIDE */ + 2, /* 1 1 1 0 1 OUTSIDE OUTSIDE OUTSIDE */ + 2, /* 1 1 1 0 1 OUTSIDE OUTSIDE INSIDE */ + 2, /* 1 1 1 0 1 OUTSIDE INSIDE OUTSIDE */ + 2, /* 1 1 1 0 1 OUTSIDE INSIDE INSIDE */ + 2, /* 1 1 1 0 1 INSIDE OUTSIDE OUTSIDE */ + 2, /* 1 1 1 0 1 INSIDE OUTSIDE INSIDE */ + 2, /* 1 1 1 0 1 INSIDE INSIDE OUTSIDE */ + 9, /* 1 1 1 0 1 INSIDE INSIDE INSIDE */ + 2, /* 1 1 1 1 0 OUTSIDE OUTSIDE OUTSIDE */ + 2, /* 1 1 1 1 0 OUTSIDE OUTSIDE INSIDE */ + 2, /* 1 1 1 1 0 OUTSIDE INSIDE OUTSIDE */ + 2, /* 1 1 1 1 0 OUTSIDE INSIDE INSIDE */ + 2, /* 1 1 1 1 0 INSIDE OUTSIDE OUTSIDE */ + 2, /* 1 1 1 1 0 INSIDE OUTSIDE INSIDE */ + 2, /* 1 1 1 1 0 INSIDE INSIDE OUTSIDE */ + 7, /* 1 1 1 1 0 INSIDE INSIDE INSIDE */ + 2, /* 1 1 1 1 1 OUTSIDE OUTSIDE OUTSIDE */ + 2, /* 1 1 1 1 1 OUTSIDE OUTSIDE INSIDE */ + 2, /* 1 1 1 1 1 OUTSIDE INSIDE OUTSIDE */ + 2, /* 1 1 1 1 1 OUTSIDE INSIDE INSIDE */ + 2, /* 1 1 1 1 1 INSIDE OUTSIDE OUTSIDE */ + 2, /* 1 1 1 1 1 INSIDE OUTSIDE INSIDE */ + 2, /* 1 1 1 1 1 INSIDE INSIDE OUTSIDE */ + 9 /* 1 1 1 1 1 INSIDE INSIDE INSIDE */ +}; diff --git a/bench/parallel/DEBIE/code/classtab.h b/bench/parallel/DEBIE/code/classtab.h index 591edc138a96d55f7fa47644a6e6cfe19fac055d..c7410af927ab992d637507994c78e28be3f1438e 100644 --- a/bench/parallel/DEBIE/code/classtab.h +++ b/bench/parallel/DEBIE/code/classtab.h @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : classtab.h - * - * Prototypes etc. for the ClassTab (event classification table) module. - * - * Based on the SSF file classtab.h, rev 1.1, Mon Jan 18 11:53:20 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : classtab.h + + Prototypes etc. for the ClassTab (event classification table) module. + + Based on the SSF file classtab.h, rev 1.1, Mon Jan 18 11:53:20 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef CLASSTAB_H @@ -26,7 +26,7 @@ #include "keyword.h" -extern unsigned char EXTERNAL event_class[256]; +extern unsigned char EXTERNAL event_class[ 256 ]; #endif diff --git a/bench/parallel/DEBIE/code/debie.c b/bench/parallel/DEBIE/code/debie.c index 399b7943680218783dab487a9594a93f091c3b24..18b0e81550dba9f63cf1f3be16c70e0e3d3a404a 100644 --- a/bench/parallel/DEBIE/code/debie.c +++ b/bench/parallel/DEBIE/code/debie.c @@ -1,25 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : debie.c - * - * Main function. - * - * Based on the SSF file debie.c, revision 1.4, Tue Jun 01 13:37:20 1999. - * - *- * -------------------------------------------------------------------------- - */ + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : debie.c + + Main function. + + Based on the SSF file debie.c, revision 1.4, Tue Jun 01 13:37:20 1999. + + - * -------------------------------------------------------------------------- +*/ #include "reg52.h" #include "kernobj.h" @@ -28,31 +27,31 @@ #include "taskctrl.h" -int main(void) +int main( void ) { - TARGET_INIT; - /* Initialize the benchmark target system. */ - - EA=0; - /* Disable all interrupts */ - - Boot(); - /* Execute boot sequence */ - - EA=1; - /* Enable 'enabled' interrupts */ - - StartSystem(HEALTH_MONITORING_TASK); - /* Start RTX kernel and first task */ - - // do not run simulation for ever, just exit here - return 0; - _Pragma("loopbound min 0 max 0") - while(1) - { - /* StartSystem has failed, so we just */ - /* wait here for a while for the Watch Dog */ - /* to wake up. */ - } + TARGET_INIT; + /* Initialize the benchmark target system. */ + + EA = 0; + /* Disable all interrupts */ + + Boot(); + /* Execute boot sequence */ + + EA = 1; + /* Enable 'enabled' interrupts */ + + StartSystem( HEALTH_MONITORING_TASK ); + /* Start RTX kernel and first task */ + + // do not run simulation for ever, just exit here + return 0; + + _Pragma( "loopbound min 0 max 0" ) + while ( 1 ) { + /* StartSystem has failed, so we just */ + /* wait here for a while for the Watch Dog */ + /* to wake up. */ + } } diff --git a/bench/parallel/DEBIE/code/dpu_ctrl.h b/bench/parallel/DEBIE/code/dpu_ctrl.h index efa1b23de2da957f5e793a69f529d184e79a3ba4..b85840a8f660a902be5c98848155e2a14a841eeb 100644 --- a/bench/parallel/DEBIE/code/dpu_ctrl.h +++ b/bench/parallel/DEBIE/code/dpu_ctrl.h @@ -1,26 +1,26 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : dpu_ctrl.h - * - * Operations and macros for low-level control of the Data Processing - * Unit, the 80C32 computer on which the DEBIE DPU software runs. - * This includes accessing data and code memories by address; boot - * and reset operations; watchdog handling; memory patch and test. - * - * Based on the SSF DHI file dpu_ctrl.h, rev 1.23, Fri May 28 14:59:30 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : dpu_ctrl.h + + Operations and macros for low-level control of the Data Processing + Unit, the 80C32 computer on which the DEBIE DPU software runs. + This includes accessing data and code memories by address; boot + and reset operations; watchdog handling; memory patch and test. + + Based on the SSF DHI file dpu_ctrl.h, rev 1.23, Fri May 28 14:59:30 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef DPU_CTRL_H #define DPU_CTRL_H @@ -34,17 +34,17 @@ #define MEMORY_NOT_PATCHED 0 #ifndef HIGH - #define HIGH 1 +#define HIGH 1 #endif #ifndef LOW - #define LOW 0 +#define LOW 0 #endif #define SELECTED 1 #define NOT_SELECTED 0 #define RESET_OK 1 -#define RESET_NOT_OK 0 +#define RESET_NOT_OK 0 #define ACCEPT_EVENT 1 #define REJECT_EVENT 0 @@ -88,18 +88,18 @@ typedef unsigned char DEBIE_mode_t; typedef enum { - power_up_reset_e = 0, /* Don't change value ! */ - watchdog_reset_e = 1, /* Don't change value ! */ - soft_reset_e, - warm_reset_e, - error_e, - checksum_reset_e + power_up_reset_e = 0, /* Don't change value ! */ + watchdog_reset_e = 1, /* Don't change value ! */ + soft_reset_e, + warm_reset_e, + error_e, + checksum_reset_e } reset_class_t; extern reset_class_t EXTERNAL s_w_reset; typedef enum { - PROM_e, SRAM_e + PROM_e, SRAM_e } memory_configuration_t; @@ -136,10 +136,10 @@ typedef uskew16_t tm_ushort_t; typedef struct { - unsigned char *source; - data_address_t destination; - uint_least8_t data_amount; - unsigned char execution_command; + unsigned char *source; + data_address_t destination; + uint_least8_t data_amount; + unsigned char execution_command; } memory_patch_variables_t; /* Holds parameters for PatchCode function: */ /* source source address of the patch */ @@ -169,32 +169,32 @@ extern unsigned char EXTERNAL reference_checksum; /* Function prototypes: */ -extern void Init_DPU (reset_class_t reset_class); +extern void Init_DPU ( reset_class_t reset_class ); -extern reset_class_t GetResetClass(void); +extern reset_class_t GetResetClass( void ); -extern void SignalMemoryErrors (void); +extern void SignalMemoryErrors ( void ); -extern void SetMemoryConfiguration (memory_configuration_t memory); +extern void SetMemoryConfiguration ( memory_configuration_t memory ); -extern memory_configuration_t GetMemoryConfiguration(void) - COMPACT REENTRANT_FUNC; +extern memory_configuration_t GetMemoryConfiguration( void ) +COMPACT REENTRANT_FUNC; -extern void PatchCode(memory_patch_variables_t EXTERNAL *patch_variables); +extern void PatchCode( memory_patch_variables_t EXTERNAL *patch_variables ); -extern void Reboot(reset_class_t boot_type); +extern void Reboot( reset_class_t boot_type ); /* Assembly-language function prototypes (asmfuncs.a51): */ -extern unsigned char TestMemBits (data_address_t address); +extern unsigned char TestMemBits ( data_address_t address ); extern unsigned char TestMemData ( - data_address_t start, - uint_least8_t bytes); + data_address_t start, + uint_least8_t bytes ); extern unsigned char TestMemSeq ( - data_address_t start, - uint_least8_t bytes); + data_address_t start, + uint_least8_t bytes ); #endif diff --git a/bench/parallel/DEBIE/code/harness/harness.c b/bench/parallel/DEBIE/code/harness/harness.c index b17827f12a6bdb1db10f91a66b3dfaf9ea01ee83..c349f291c9580cc28bc3203df34dc225d913c1a7 100644 --- a/bench/parallel/DEBIE/code/harness/harness.c +++ b/bench/parallel/DEBIE/code/harness/harness.c @@ -1,66 +1,65 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW, test harness for WCET analysis - * Subsystem : DNI (DEBIE Null Interface) - * Module : harness.c - * - * Implementations of the DNI operations, suitable for compiling - * and linking the DEBIE I DPU Software as a standard C program, - * on any processor that supports the required data types (eg. 8-bit - * char, 32-bit long) and has enough program and data memory. - * - * This implementation is designed to support measurement-based - * timing analysis by feeding the DEBIE SW with selected sets of - * test data. - * - * Options: if the preprocessor symbol TRACE_HARNESS is defined, - * the harness operations generate trace message on stdout. - * - * Based, with extensive changes, on the SSF file rtx_if.c, rev 1.13, - * Fri May 21 00:14:00 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW, test harness for WCET analysis + Subsystem : DNI (DEBIE Null Interface) + Module : harness.c + + Implementations of the DNI operations, suitable for compiling + and linking the DEBIE I DPU Software as a standard C program, + on any processor that supports the required data types (eg. 8-bit + char, 32-bit long) and has enough program and data memory. + + This implementation is designed to support measurement-based + timing analysis by feeding the DEBIE SW with selected sets of + test data. + + Options: if the preprocessor symbol TRACE_HARNESS is defined, + the harness operations generate trace message on stdout. + + Based, with extensive changes, on the SSF file rtx_if.c, rev 1.13, + Fri May 21 00:14:00 1999. + + - * -------------------------------------------------------------------------- +*/ /* This file contains several sets of operations, as follows: - * - * > processor registers as variables: reg52.h - * - * > kernel operations: taskctrl.h, isr_ctrl.h, msg_ctrl.h - * - * > some DPU operations: dpu_ctrl.h - * - * > telecommand and telemetry interface operations: ttc_ctrl.h, isr_ctrl.h - * - * > operations for the A/D converted: ad_conv.h - * - * > operations on the sensor units: su_ctrl.h, dpu_ctrl.h - * - * > accessing the VALUE_OF "unsigned short" telemetry items: keyword.h - * - * > "calling" a "patch function": keyword.h - * - * > checking the sizes of various types (for analysis only). - * - * For testing purposes the main operation is StartSystem(). The DEBIE - * main function calls StartSystem(), which normally activates the - * kernel and the DEBIE application tasks and interrupt handlers. In this - * version, StartSystem() takes over the show and runs the test scenario. - * - * Target-specific harness operations are implemented in target.c. There - * is a specific version of target.c for each target processor/compiler. - * - */ + > processor registers as variables: reg52.h + + > kernel operations: taskctrl.h, isr_ctrl.h, msg_ctrl.h + + > some DPU operations: dpu_ctrl.h + + > telecommand and telemetry interface operations: ttc_ctrl.h, isr_ctrl.h + + > operations for the A/D converted: ad_conv.h + + > operations on the sensor units: su_ctrl.h, dpu_ctrl.h + + > accessing the VALUE_OF "unsigned short" telemetry items: keyword.h + + > "calling" a "patch function": keyword.h + + > checking the sizes of various types (for analysis only). + + For testing purposes the main operation is StartSystem(). The DEBIE + main function calls StartSystem(), which normally activates the + kernel and the DEBIE application tasks and interrupt handlers. In this + version, StartSystem() takes over the show and runs the test scenario. + + Target-specific harness operations are implemented in target.c. There + is a specific version of target.c for each target processor/compiler. + +*/ #if defined(TRACE_HARNESS) #include <stdio.h> @@ -83,7 +82,7 @@ unsigned char EA; #include "taskctrl.h" -void CreateTask (task_info_t EXTERNAL *new_task) +void CreateTask ( task_info_t EXTERNAL *new_task ) /* Purpose : Task is created in the RTX. */ /* Interface : input: - new_task */ /* output: - telemetry_data.os_create_task_error */ @@ -91,42 +90,42 @@ void CreateTask (task_info_t EXTERNAL *new_task) /* Algorithm : -In case of an error, 'new_task' is stored to telemetry */ /* as an error indication. */ { -#if defined(TRACE_HARNESS) - printf ("CreateTask %d\n", new_task->rtx_task_number); -#endif + #if defined(TRACE_HARNESS) + printf ( "CreateTask %d\n", new_task->rtx_task_number ); + #endif - switch (new_task->rtx_task_number) { + switch ( new_task->rtx_task_number ) { - case TC_TM_INTERFACE_TASK: + case TC_TM_INTERFACE_TASK: InitTelecommandTask (); break; - case ACQUISITION_TASK: + case ACQUISITION_TASK: InitAcquisitionTask (); break; - case HIT_TRIGGER_ISR_TASK: + case HIT_TRIGGER_ISR_TASK: InitHitTriggerTask (); break; - default: + default: -#if defined(TRACE_HARNESS) - printf ("CreateTask: unknown task number\n"); -#endif + #if defined(TRACE_HARNESS) + printf ( "CreateTask: unknown task number\n" ); + #endif break; - } + } } -void WaitInterval(unsigned char time) +void WaitInterval( unsigned char time ) /* Purpose : Interval is waited with RTX. */ /* Interface : input: - time */ /* output: - telemetry_data.os_wait_error */ @@ -136,13 +135,13 @@ void WaitInterval(unsigned char time) /* as an error indication and error bit is set in */ /* software_error register. */ { -#if defined(TRACE_HARNESS) - printf ("WaitInterval %d\n", time); -#endif + #if defined(TRACE_HARNESS) + printf ( "WaitInterval %d\n", time ); + #endif } -void WaitTimeout(unsigned char time) COMPACT REENTRANT_FUNC +void WaitTimeout( unsigned char time ) COMPACT REENTRANT_FUNC /* Purpose : Timeout is waited with RTX. */ /* Interface : input: - time */ /* output: - telemetry_data.os_wait_error */ @@ -152,13 +151,13 @@ void WaitTimeout(unsigned char time) COMPACT REENTRANT_FUNC /* as an error indication and error bit is set in */ /* software_error register. */ { -#if defined(TRACE_HARNESS) - printf ("WaitTimeout %d\n", time); -#endif + #if defined(TRACE_HARNESS) + printf ( "WaitTimeout %d\n", time ); + #endif } -void SetTimeSlice(unsigned int time_slice) +void SetTimeSlice( unsigned int time_slice ) /* Purpose : Time slice in the RTX is set. */ /* Interface : input: - time_slice */ /* output: - telemetry_data.os_set_slice_error */ @@ -168,36 +167,36 @@ void SetTimeSlice(unsigned int time_slice) /* Algorithm : In case of an error, indication bit is set in */ /* the software_error register. */ { -#if defined(TRACE_HARNESS) - printf ("SetTimeSlice %d\n", time_slice); -#endif + #if defined(TRACE_HARNESS) + printf ( "SetTimeSlice %d\n", time_slice ); + #endif } static unsigned int ad_converting = 0; /* Whether the ADC is now busy with a conversion. - * 0 = no, 1 = yes. - * Declared here, because it is cleared by ShortDelay. - */ + 0 = no, 1 = yes. + Declared here, because it is cleared by ShortDelay. +*/ -void ShortDelay (uint_least8_t delay_loops) +void ShortDelay ( uint_least8_t delay_loops ) { -#if defined(TRACE_HARNESS) - printf ("ShortDelay %d\n", delay_loops); -#endif + #if defined(TRACE_HARNESS) + printf ( "ShortDelay %d\n", delay_loops ); + #endif - ad_converting = 0; - /* Any on-going A/D conversion is assumed to end during the delay. - * ShortDelay is sometimes used, instead of End_Of_ADC, when the - * A/D converter is switched between unipolar and bipolar modes. - */ + ad_converting = 0; + /* Any on-going A/D conversion is assumed to end during the delay. + ShortDelay is sometimes used, instead of End_Of_ADC, when the + A/D converter is switched between unipolar and bipolar modes. + */ } unsigned char isr_send_message ( - unsigned char mailbox, - uint16_t message) + unsigned char mailbox, + uint16_t message ) /* Purpose : Send mail from ISR to a requested mailbox. */ /* Interface : input: - mailbox, message */ /* output: - telemetry_data.os_send_message_error */ @@ -206,12 +205,12 @@ unsigned char isr_send_message ( /* Algorithm : - In case of an error, failed 'mailbox' is stored to */ /* telemetry. */ { -#if defined(TRACE_HARNESS) - printf ("isr_send_message to %d, message %d = 0x%x\n", - mailbox, message, message); -#endif - SendTaskMail (mailbox, message, 0); - return OK; + #if defined(TRACE_HARNESS) + printf ( "isr_send_message to %d, message %d = 0x%x\n", + mailbox, message, message ); + #endif + SendTaskMail ( mailbox, message, 0 ); + return OK; } @@ -221,7 +220,7 @@ unsigned char isr_send_message ( #include "isr_ctrl.h" -void AttachInterrupt(unsigned char ISR_VectorNumber) +void AttachInterrupt( unsigned char ISR_VectorNumber ) /* Purpose : Interrupt with a given number is assigned to a task in */ /* Interface : input: - ISR_VectorNumber */ /* output: - telemetry_data.os_attach_interrupt_error */ @@ -230,13 +229,13 @@ void AttachInterrupt(unsigned char ISR_VectorNumber) /* Algorithm : -In case of an error, 'ISR_VectorNumber' is stored to */ /* telemetry as an error indication. */ { -#if defined(TRACE_HARNESS) - printf ("AttachInterrupt %d\n", ISR_VectorNumber); -#endif + #if defined(TRACE_HARNESS) + printf ( "AttachInterrupt %d\n", ISR_VectorNumber ); + #endif } -void EnableInterrupt(unsigned char ISR_VectorNumber) +void EnableInterrupt( unsigned char ISR_VectorNumber ) /* Purpose : Interrupt with a given number is enabled in the RTX. */ /* Interface : input: - ISR_VectorNumber */ /* output: - telemetry_data.os_enable_isr_error */ @@ -245,13 +244,13 @@ void EnableInterrupt(unsigned char ISR_VectorNumber) /* Algorithm : -In case of an error, 'ISR_VectorNumber' is stored to */ /* telemetry as an error indication. */ { -#if defined(TRACE_HARNESS) - printf ("EnableInterrupt %d\n", ISR_VectorNumber); -#endif + #if defined(TRACE_HARNESS) + printf ( "EnableInterrupt %d\n", ISR_VectorNumber ); + #endif } -void DisableInterrupt(unsigned char ISR_VectorNumber) +void DisableInterrupt( unsigned char ISR_VectorNumber ) /* Purpose : Interrupt with a given number is disabled in the RTX. */ /* Interface : input: - ISR_VectorNumber */ /* output: - telemetry_data.os_disable_isr_error */ @@ -260,13 +259,13 @@ void DisableInterrupt(unsigned char ISR_VectorNumber) /* Algorithm : -In case of an error, 'ISR_VectorNumber' is stored to */ /* telemetry as an error indication. */ { -#if defined(TRACE_HARNESS) - printf ("DisableInterrupt %d\n", ISR_VectorNumber); -#endif + #if defined(TRACE_HARNESS) + printf ( "DisableInterrupt %d\n", ISR_VectorNumber ); + #endif } -signed char SetInterruptMask(unsigned char ISR_MaskNumber) +signed char SetInterruptMask( unsigned char ISR_MaskNumber ) /* Purpose : Interrupt mask bit is set is in the RTX. */ /* Interface : Return value, which describes the execution result, is */ /* always zero as this function does no parameter checking. */ @@ -279,14 +278,14 @@ signed char SetInterruptMask(unsigned char ISR_MaskNumber) /* Postconditions : Interrupt mask is set. */ /* Algorithm : RTX syntax is used. */ { -#if defined(TRACE_HARNESS) - printf ("SetInterruptMask 0x%x\n", ISR_MaskNumber); -#endif - return 0; /* Success. */ + #if defined(TRACE_HARNESS) + printf ( "SetInterruptMask 0x%x\n", ISR_MaskNumber ); + #endif + return 0; /* Success. */ } -signed char ResetInterruptMask(unsigned char ISR_MaskNumber) +signed char ResetInterruptMask( unsigned char ISR_MaskNumber ) /* Purpose : Interrupt mask bit is reset is in the RTX. */ /* Interface : Return value, which describes the execution result, is */ /* always zero as this function does no parameter checking. */ @@ -299,14 +298,14 @@ signed char ResetInterruptMask(unsigned char ISR_MaskNumber) /* Postconditions : Interrupt mask is reset. */ /* Algorithm : RTX syntax is used. */ { -#if defined(TRACE_HARNESS) - printf ("ResetInterruptMask 0x%x\n", ISR_MaskNumber); -#endif - return 0; /* Success. */ + #if defined(TRACE_HARNESS) + printf ( "ResetInterruptMask 0x%x\n", ISR_MaskNumber ); + #endif + return 0; /* Success. */ } -void WaitInterrupt (unsigned char ISR_VectorNumber, unsigned char timer) +void WaitInterrupt ( unsigned char ISR_VectorNumber, unsigned char timer ) /* Purpose : Interrupt is waited in the RTX. */ /* Interface : input: - ISR_VectorNumber,timer */ /* output: - telemetry_data.os_wait_error */ @@ -317,9 +316,9 @@ void WaitInterrupt (unsigned char ISR_VectorNumber, unsigned char timer) /* as an error indication and error bit is set in */ /* software_error register. */ { -#if defined(TRACE_HARNESS) - printf ("WaitInterrupt %d, time %d\n", ISR_VectorNumber, timer); -#endif + #if defined(TRACE_HARNESS) + printf ( "WaitInterrupt %d, time %d\n", ISR_VectorNumber, timer ); + #endif } /* See below, Telecommand and telemetry interface, for the ISR */ @@ -335,10 +334,10 @@ void WaitInterrupt (unsigned char ISR_VectorNumber, unsigned char timer) #include "msg_ctrl.h" -static uint16_t mail_message[8]; +static uint16_t mail_message[ 8 ]; /* The last message in the mailbox. */ -static int mail_count[8] = {0, 0, 0, 0, 0, 0, 0, 0}; +static int mail_count[ 8 ] = {0, 0, 0, 0, 0, 0, 0, 0}; /* The number of messages in the mailbox. */ /* Should be between 0 and 1. */ @@ -347,9 +346,9 @@ static int mail_overflows = 0; void SendTaskMail ( - unsigned char mailbox, - uint16_t message, - unsigned char timeout) + unsigned char mailbox, + uint16_t message, + unsigned char timeout ) /* Purpose : Send mail to a requested mailbox. */ /* Interface : input: - mailbox, message, timeout */ /* output: - telemetry_data.os_send_message_error */ @@ -359,29 +358,26 @@ void SendTaskMail ( /* Algorithm : - In case of an error, failed 'mailbox' is stored to */ /* telemetry. */ { -#if defined(TRACE_HARNESS) - printf ("SendTaskMail to %d, message %d, timeout %d\n", - mailbox, message, timeout); -#endif + #if defined(TRACE_HARNESS) + printf ( "SendTaskMail to %d, message %d, timeout %d\n", + mailbox, message, timeout ); + #endif - if (mail_count[mailbox] == 0) - { - mail_message[mailbox] = message; - } - else - { -#if defined(TRACE_HARNESS) - printf ("Overflow on mailbox %d, already %d message(s)\n", - mailbox, mail_count[mailbox]); -#endif - mail_overflows ++; - } + if ( mail_count[ mailbox ] == 0 ) + mail_message[ mailbox ] = message; + else { + #if defined(TRACE_HARNESS) + printf ( "Overflow on mailbox %d, already %d message(s)\n", + mailbox, mail_count[ mailbox ] ); + #endif + mail_overflows ++; + } - mail_count[mailbox] ++; + mail_count[ mailbox ] ++; } -void WaitMail (incoming_mail_t EXTERNAL *message) COMPACT_DATA REENTRANT_FUNC +void WaitMail ( incoming_mail_t EXTERNAL *message ) COMPACT_DATA REENTRANT_FUNC /* Purpose : Mail is waited from the given mailbox. */ /* Interface : Return value, which describes the execution result, is */ /* stored in to a struct. */ @@ -393,44 +389,43 @@ void WaitMail (incoming_mail_t EXTERNAL *message) COMPACT_DATA REENTRANT_FUNC /* telemetry as an error indication and error bit is set */ /* in software_error register. */ { -#if defined(TRACE_HARNESS) - printf ("WaitMail from %d, timeout %d\n", - message -> mailbox_number, message -> timeout); -#endif + #if defined(TRACE_HARNESS) + printf ( "WaitMail from %d, timeout %d\n", + message -> mailbox_number, message -> timeout ); + #endif - if (mail_count[message -> mailbox_number] > 0) - { - message -> wait_result = MSG_RECEIVED; - message -> execution_result = MSG_RECEIVED; - *(message -> message) = mail_message[message -> mailbox_number]; + if ( mail_count[ message -> mailbox_number ] > 0 ) + { + message -> wait_result = MSG_RECEIVED; + message -> execution_result = MSG_RECEIVED; + *( message -> message ) = mail_message[ message -> mailbox_number ]; -#if defined(TRACE_HARNESS) - printf ("Message from %d is %d = 0x%x\n", - message -> mailbox_number, - *(message -> message), - *(message -> message)); -#endif + #if defined(TRACE_HARNESS) + printf ( "Message from %d is %d = 0x%x\n", + message -> mailbox_number, + *( message -> message ), + *( message -> message ) ); + #endif - mail_count[message -> mailbox_number] --; - } - else - { - message -> wait_result = TIMEOUT_OCCURRED; - message -> execution_result = TIMEOUT_OCCURRED; - *(message -> message) = 0; - } + mail_count[ message -> mailbox_number ] --; + } else + { + message -> wait_result = TIMEOUT_OCCURRED; + message -> execution_result = TIMEOUT_OCCURRED; + *( message -> message ) = 0; + } } -static void FlushMail (unsigned char mailbox) +static void FlushMail ( unsigned char mailbox ) /* Remove all mail from the mailbox. Harness use only. */ { -#if defined(TRACE_HARNESS) - printf ("FlushMail from box %d, which had %d messages.\n", - mailbox, mail_count[mailbox]); -#endif + #if defined(TRACE_HARNESS) + printf ( "FlushMail from box %d, which had %d messages.\n", + mailbox, mail_count[ mailbox ] ); + #endif - mail_count[mailbox] = 0; + mail_count[ mailbox ] = 0; } @@ -442,145 +437,152 @@ static void FlushMail (unsigned char mailbox) static unsigned int check_current_errors = 0; /* The number of consecutive error indications to be returned - * by the next calls of Check_Current. - */ + by the next calls of Check_Current. +*/ -unsigned char Check_Current (unsigned char bits) +unsigned char Check_Current ( unsigned char bits ) { - unsigned char val; -#if defined(TRACE_HARNESS) - printf ("Check_Current 0x%x\n", bits); -#endif - switch (bits) { - case 3: val = 1; break; - case 12: val = 4; break; - case 48: val = 16; break; - case 192: val = 64; break; - default : val = 0; -#if defined(TRACE_HARNESS) - printf ("Check_Current param error\n"); - break; -#endif - } + unsigned char val; + #if defined(TRACE_HARNESS) + printf ( "Check_Current 0x%x\n", bits ); + #endif + switch ( bits ) { + case 3: + val = 1; + break; + case 12: + val = 4; + break; + case 48: + val = 16; + break; + case 192: + val = 64; + break; + default : + val = 0; + #if defined(TRACE_HARNESS) + printf ( "Check_Current param error\n" ); + break; + #endif + } - if (check_current_errors > 0) - { - val = ~val; /* Wrong value => alarm. */ - check_current_errors --; - } + if ( check_current_errors > 0 ) { + val = ~val; /* Wrong value => alarm. */ + check_current_errors --; + } - return val; + return val; } /* The memory operations (Get_Data_Byte etc) are implemented in - * target.c for each target processor/compiler. - */ + target.c for each target processor/compiler. +*/ /* The following routines are implemented in das/hw_if.c: - * Init_DPU - * GetResetClass - * SignalMemoryErrors - * SetMemoryConfiguration - * GetMemoryConfiguration - * PatchCode - */ + Init_DPU + GetResetClass + SignalMemoryErrors + SetMemoryConfiguration + GetMemoryConfiguration + PatchCode +*/ -void Reboot(reset_class_t boot_type) +void Reboot( reset_class_t boot_type ) { -#if defined(TRACE_HARNESS) - printf ("Reboot %d\n", boot_type); -#endif + #if defined(TRACE_HARNESS) + printf ( "Reboot %d\n", boot_type ); + #endif - if (boot_type == checksum_reset_e) - { - /* Make it not happen (at once) again: */ - reference_checksum = code_checksum; - } + if ( boot_type == checksum_reset_e ) { + /* Make it not happen (at once) again: */ + reference_checksum = code_checksum; + } - TARGET_REBOOT; + TARGET_REBOOT; } /* Functions originally implemented in assembly-language (asmfuncs.a51): */ -unsigned char TestMemBits (data_address_t address) +unsigned char TestMemBits ( data_address_t address ) /* - * Test each bit of a cell in RAM memory. - * For each of the eight bits, the value with this bit ON and - * all others bits OFF is written to the cell, and the written - * value is read back and verified. - * The original content of the cell is destroyed. - * Parameters: - * address Cell address. - * TestMemBits returns zero for success, and otherwise the - * first bit pattern for which the cell failed. - * - */ + Test each bit of a cell in RAM memory. + For each of the eight bits, the value with this bit ON and + all others bits OFF is written to the cell, and the written + value is read back and verified. + The original content of the cell is destroyed. + Parameters: + address Cell address. + TestMemBits returns zero for success, and otherwise the + first bit pattern for which the cell failed. + +*/ { -#if defined(TRACE_HARNESS) - printf ("TestMemBits 0x%x\n", address); -#endif - return 0; + #if defined(TRACE_HARNESS) + printf ( "TestMemBits 0x%x\n", address ); + #endif + return 0; } unsigned char TestMemData ( - data_address_t start, - uint_least8_t bytes) + data_address_t start, + uint_least8_t bytes ) /* - * Test an area of RAM memory. - * For each RAM cell in the given area, the values AAh - * and 55h are written to the cell, and the written value - * is read back and verified. - * The original content of each cell is destroyed. - * Parameters: - * start Starting address - * bytes Length of area - * 1 .. 255. Note, zero is NOT allowed! - * TestMem returns the number of bytes remaining to test - * when the first memory failure occurred. - * If this value is nonzero, the first failing address is - * found by subtracting the return value from 'start+bytes'. - * - */ + Test an area of RAM memory. + For each RAM cell in the given area, the values AAh + and 55h are written to the cell, and the written value + is read back and verified. + The original content of each cell is destroyed. + Parameters: + start Starting address + bytes Length of area + 1 .. 255. Note, zero is NOT allowed! + TestMem returns the number of bytes remaining to test + when the first memory failure occurred. + If this value is nonzero, the first failing address is + found by subtracting the return value from 'start+bytes'. + +*/ { -#if defined(TRACE_HARNESS) - printf ("TestMemData start 0x%x, bytes %d\n", start, bytes); -#endif - return 0; + #if defined(TRACE_HARNESS) + printf ( "TestMemData start 0x%x, bytes %d\n", start, bytes ); + #endif + return 0; } unsigned char TestMemSeq ( - data_address_t start, - uint_least8_t bytes) + data_address_t start, + uint_least8_t bytes ) /* - * Test an area of RAM memory. - * For each RAM cell in the given area, the logical complement of - * the low byte of the cell address is written into the cell, in - * one pass from the start to the end. Then, in a second pass, - * each cell is read and the value is is verified. - * The original content of each cell is destroyed. - * Parameters: - * start Starting address - * bytes Length of area - * 1 .. 255. Note, zero is NOT allowed! - * TestMemSeq returns the number of bytes remaining to test - * when the first memory failure occurred. - * If this value is nonzero, the first failing address is - * found by subtracting the return value from 'start+bytes'. - * - */ + Test an area of RAM memory. + For each RAM cell in the given area, the logical complement of + the low byte of the cell address is written into the cell, in + one pass from the start to the end. Then, in a second pass, + each cell is read and the value is is verified. + The original content of each cell is destroyed. + Parameters: + start Starting address + bytes Length of area + 1 .. 255. Note, zero is NOT allowed! + TestMemSeq returns the number of bytes remaining to test + when the first memory failure occurred. + If this value is nonzero, the first failing address is + found by subtracting the return value from 'start+bytes'. + +*/ { -#if defined(TRACE_HARNESS) - printf ("TestMemSeq start 0x%x, bytes %d\n", start, bytes); -#endif - return 0; + #if defined(TRACE_HARNESS) + printf ( "TestMemSeq start 0x%x, bytes %d\n", start, bytes ); + #endif + return 0; } @@ -597,21 +599,21 @@ static uint16_t tc_word; /* The simulated TC word, composed of tc_msb and tc_lsb. */ -unsigned char Read_TC_MSB (void) +unsigned char Read_TC_MSB ( void ) { -#if defined(TRACE_HARNESS) - printf ("Read_TC_MSB\n"); -#endif - return tc_msb; + #if defined(TRACE_HARNESS) + printf ( "Read_TC_MSB\n" ); + #endif + return tc_msb; } -unsigned char Read_TC_LSB (void) +unsigned char Read_TC_LSB ( void ) { -#if defined(TRACE_HARNESS) - printf ("Read_TC_LSB\n"); -#endif - return tc_lsb; + #if defined(TRACE_HARNESS) + printf ( "Read_TC_LSB\n" ); + #endif + return tc_lsb; } @@ -619,21 +621,21 @@ static unsigned char tm_msb, tm_lsb; /* Simulated TM interface registers. */ -void Write_TM_LSB (unsigned char value) +void Write_TM_LSB ( unsigned char value ) { -#if defined(TRACE_HARNESS) - printf ("Write_TM_LSB %d = 0x%x\n", value, value); -#endif - tm_lsb = value; + #if defined(TRACE_HARNESS) + printf ( "Write_TM_LSB %d = 0x%x\n", value, value ); + #endif + tm_lsb = value; } -void Write_TM_MSB (unsigned char value) +void Write_TM_MSB ( unsigned char value ) { -#if defined(TRACE_HARNESS) - printf ("Write_TM_MSB %d = 0x%x\n", value, value); -#endif - tm_msb = value; + #if defined(TRACE_HARNESS) + printf ( "Write_TM_MSB %d = 0x%x\n", value, value ); + #endif + tm_msb = value; } @@ -646,30 +648,30 @@ static unsigned char tc_timer_overflow = 1; /* 0 = no overflow = bad. */ -unsigned char TC_Timer_Overflow_Flag (void) +unsigned char TC_Timer_Overflow_Flag ( void ) { -#if defined(TRACE_HARNESS) - printf ("TC_Timer_Overflow_Flag\n"); -#endif - return tc_timer_overflow; + #if defined(TRACE_HARNESS) + printf ( "TC_Timer_Overflow_Flag\n" ); + #endif + return tc_timer_overflow; } -void Clear_TC_Timer_Overflow_Flag (void) +void Clear_TC_Timer_Overflow_Flag ( void ) { -#if defined(TRACE_HARNESS) - printf ("Clear_TC_Timer_Overflow_Flag\n"); -#endif - tc_timer_overflow = 0; + #if defined(TRACE_HARNESS) + printf ( "Clear_TC_Timer_Overflow_Flag\n" ); + #endif + tc_timer_overflow = 0; } -void Set_TC_Timer_Overflow_Flag (void) +void Set_TC_Timer_Overflow_Flag ( void ) { -#if defined(TRACE_HARNESS) - printf ("Set_TC_Timer_Overflow_Flag\n"); -#endif - tc_timer_overflow = 1; + #if defined(TRACE_HARNESS) + printf ( "Set_TC_Timer_Overflow_Flag\n" ); + #endif + tc_timer_overflow = 1; } @@ -680,9 +682,9 @@ void Set_TC_Timer_Overflow_Flag (void) /* A/D channels -Channel Meaning -------- ------- -dec hex + Channel Meaning + ------- ------- + dec hex 0 00 SU 1, plasma 1 + 1 01 SU 1, plasma 1 - 2 02 SU 1, piezo 1 @@ -693,42 +695,42 @@ dec hex 7 07 8 08 SU 2, plasma 1 + 9 09 SU 2, plasma 1 - - 10 0A SU 2, piezo 1 - 11 0B SU 2, piezo 2 - 12 0C SU 2, plasma 2 + - 13 0D SU 2, temperature 0 - 14 0E SU 2, temperature 1 - 15 0F - 16 10 SU 1 & SU 2, +5V supply - 17 11 SU 3 & SU 4, +5V supply - 18 12 SU 1,2,3,4 , +50V supply - 19 13 DPU +5V supply - 20 14 SU 1 & SU 2, -5V supply - 21 15 SU 3 & SU 4, -5V supply - 22 16 SU 1,2,3,4, -50V supply - 23 17 - 24 18 SU 3, plasma 1 + - 25 19 SU 3, plasma 1 - - 26 1A SU 3, piezo 1 - 27 1B SU 3, piezo 2 - 28 1C SU 3, plasma 2 + - 29 1D SU 3, temperature 0 - 30 1E SU 3, temperature 1 - 31 1F - 32 20 SU 4, plasma 1 + - 33 21 SU 4, plasma 1 - - 34 22 SU 4, piezo 1 - 35 23 SU 4, piezo 2 - 36 24 SU 4, plasma 2 + - 37 25 SU 4, temperature 0 - 38 26 SU 4, temperature 1 - 39 27 - 40 28 - -A/D channel-selector register: - -Bit Meaning ---- ------- + 10 0A SU 2, piezo 1 + 11 0B SU 2, piezo 2 + 12 0C SU 2, plasma 2 + + 13 0D SU 2, temperature 0 + 14 0E SU 2, temperature 1 + 15 0F + 16 10 SU 1 & SU 2, +5V supply + 17 11 SU 3 & SU 4, +5V supply + 18 12 SU 1,2,3,4 , +50V supply + 19 13 DPU +5V supply + 20 14 SU 1 & SU 2, -5V supply + 21 15 SU 3 & SU 4, -5V supply + 22 16 SU 1,2,3,4, -50V supply + 23 17 + 24 18 SU 3, plasma 1 + + 25 19 SU 3, plasma 1 - + 26 1A SU 3, piezo 1 + 27 1B SU 3, piezo 2 + 28 1C SU 3, plasma 2 + + 29 1D SU 3, temperature 0 + 30 1E SU 3, temperature 1 + 31 1F + 32 20 SU 4, plasma 1 + + 33 21 SU 4, plasma 1 - + 34 22 SU 4, piezo 1 + 35 23 SU 4, piezo 2 + 36 24 SU 4, plasma 2 + + 37 25 SU 4, temperature 0 + 38 26 SU 4, temperature 1 + 39 27 + 40 28 + + A/D channel-selector register: + + Bit Meaning + --- ------- 7 1 = do not use interleave calibration 6 1 = bipolar, 0 = unipolar 5 Channel index, 32 @@ -741,198 +743,202 @@ Bit Meaning */ -typedef struct {uint16_t min; uint16_t max; } ad_limit_t; +typedef struct { + uint16_t min; + uint16_t max; +} ad_limit_t; /* Limits on the value of a simulated A/D reading. */ -static ad_limit_t ad_limit[AD_CHANNELS] = { - {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, - {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, - {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, - {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, - {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, - {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, - {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, - {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff} }; +static ad_limit_t ad_limit[ AD_CHANNELS ] = { + {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, + {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, + {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, + {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, + {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, + {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, + {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, + {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff}, {0, 0xffff} +}; /* Limits on the simulated A/D readings for all channels. */ -void Set_AD_Unlimited (void) +void Set_AD_Unlimited ( void ) /* Sets no A/D limits. */ { - uint_least8_t c; + uint_least8_t c; -#if defined(TRACE_HARNESS) - printf ("Set AD Unlimited\n"); -#endif + #if defined(TRACE_HARNESS) + printf ( "Set AD Unlimited\n" ); + #endif - _Pragma("loopbound min 40 max 40") - for (c = 0; c < AD_CHANNELS; c++) - { - ad_limit[c].min = 0; - ad_limit[c].max = 0xffff; - } + _Pragma( "loopbound min 40 max 40" ) + for ( c = 0; c < AD_CHANNELS; c++ ) { + ad_limit[ c ].min = 0; + ad_limit[ c ].max = 0xffff; + } } -void Set_AD_Nominal (void) +void Set_AD_Nominal ( void ) /* Sets A/D limits to ensure nominal (in-range) readings. */ { -#if defined(TRACE_HARNESS) - printf ("Set AD Nominal\n"); -#endif + #if defined(TRACE_HARNESS) + printf ( "Set AD Nominal\n" ); + #endif /* SU +5V supply: */ - ad_limit[16].min = 0xba00; - ad_limit[16].max = 0xe4ff; + ad_limit[ 16 ].min = 0xba00; + ad_limit[ 16 ].max = 0xe4ff; - ad_limit[17].min = 0xba00; - ad_limit[17].max = 0xe4ff; + ad_limit[ 17 ].min = 0xba00; + ad_limit[ 17 ].max = 0xe4ff; /* SU -5V supply: */ - ad_limit[20].min = 0x0d00; - ad_limit[20].max = 0x22ff; + ad_limit[ 20 ].min = 0x0d00; + ad_limit[ 20 ].max = 0x22ff; - ad_limit[21].min = 0x0d00; - ad_limit[21].max = 0x22ff; + ad_limit[ 21 ].min = 0x0d00; + ad_limit[ 21 ].max = 0x22ff; /* SU +50V supply: */ - ad_limit[18].min = 0xa800; - ad_limit[18].max = 0xe3ff; + ad_limit[ 18 ].min = 0xa800; + ad_limit[ 18 ].max = 0xe3ff; /* SU -50V supply: */ - ad_limit[22].min = 0x0e00; - ad_limit[22].max = 0x2cff; + ad_limit[ 22 ].min = 0x0e00; + ad_limit[ 22 ].max = 0x2cff; /* DPU +5V supply: */ - ad_limit[19].min = 0xba00; - ad_limit[19].max = 0xe4ff; + ad_limit[ 19 ].min = 0xba00; + ad_limit[ 19 ].max = 0xe4ff; /* SU 1 temperatures: */ - ad_limit[5].min = 0x0000; - ad_limit[5].max = 0xfaff; - ad_limit[6].min = 0x0000; - ad_limit[6].max = 0xf4ff; + ad_limit[ 5 ].min = 0x0000; + ad_limit[ 5 ].max = 0xfaff; + ad_limit[ 6 ].min = 0x0000; + ad_limit[ 6 ].max = 0xf4ff; /* SU 2 temperatures: */ - ad_limit[13].min = 0x0000; - ad_limit[13].max = 0xfaff; - ad_limit[14].min = 0x0000; - ad_limit[14].max = 0xf4ff; + ad_limit[ 13 ].min = 0x0000; + ad_limit[ 13 ].max = 0xfaff; + ad_limit[ 14 ].min = 0x0000; + ad_limit[ 14 ].max = 0xf4ff; /* SU 3 temperatures: */ - ad_limit[29].min = 0x0000; - ad_limit[29].max = 0xfaff; - ad_limit[30].min = 0x0000; - ad_limit[30].max = 0xf4ff; + ad_limit[ 29 ].min = 0x0000; + ad_limit[ 29 ].max = 0xfaff; + ad_limit[ 30 ].min = 0x0000; + ad_limit[ 30 ].max = 0xf4ff; /* SU 4 temperatures: */ - ad_limit[37].min = 0x0000; - ad_limit[37].max = 0xfaff; - ad_limit[38].min = 0x0000; - ad_limit[38].max = 0xf4ff; + ad_limit[ 37 ].min = 0x0000; + ad_limit[ 37 ].max = 0xfaff; + ad_limit[ 38 ].min = 0x0000; + ad_limit[ 38 ].max = 0xf4ff; } static int ad_conv_timer; /* Simulate some delay in the conversion. This is a signed - * number so that the delay can be made large by initializing - * the timer to a large negative value. - */ + number so that the delay can be made large by initializing + the timer to a large negative value. +*/ #define AD_NUM_CONV 6 /* The number of consecutive A/D conversions separately simulated. */ -static int ad_conv_delay[AD_NUM_CONV]; +static int ad_conv_delay[ AD_NUM_CONV ]; /* The conversion finishes when ad_conv_timer >= ad_conv_delay, - * with provision for up to AD_NUM_CONV different delays for - * many consecutive conversions. A value of 0 or 1 means that - * the conversion is immediately ready, assuming that ad_conv_time - * starts counting from zero (and not from a negative value). - */ + with provision for up to AD_NUM_CONV different delays for + many consecutive conversions. A value of 0 or 1 means that + the conversion is immediately ready, assuming that ad_conv_time + starts counting from zero (and not from a negative value). +*/ static unsigned int ad_conv_num = 0; -/* Counts the consecutive conversions for ad_conv_delay[]. */ +/* Counts the consecutive conversions for ad_conv_delay[ ]. */ #define AD_NUM_RAND 319 /* The amount of random A/D data defined below. */ -static unsigned char ad_random[AD_NUM_RAND] = { - 0x6a, 0xde, 0xba, 0x90, 0xf2, 0x18, 0x48, 0xf3, - 0x9e, 0x2b, 0x31, 0xdb, 0xe0, 0x7e, 0xc6, 0x18, - 0x43, 0xd0, 0xd7, 0x6e, 0xbc, 0xee, 0x93, 0x9a, - 0x06, 0xb2, 0x3d, 0x1f, 0xc1, 0x51, 0x66, 0x69, - 0xbf, 0x1c, 0x9c, 0xfc, 0x9b, 0xf7, 0xf2, 0xd0, - 0xf4, 0x26, 0x60, 0x69, 0xc4, 0xd9, 0xdb, 0xd4, - 0xe7, 0x2b, 0x8a, 0xea, 0x9f, 0xab, 0x40, 0x3e, - 0xc3, 0xd8, 0x21, 0x61, 0x3b, 0x0f, 0xc1, 0x49, - 0xd3, 0x09, 0x9a, 0x4d, 0x33, 0x52, 0x7b, 0x8e, - 0x7e, 0x7b, 0x6a, 0x88, 0x4f, 0x84, 0xa2, 0xb4, - 0x83, 0xd9, 0xba, 0x79, 0x7d, 0x8f, 0xdf, 0xb2, - 0x8c, 0x86, 0x77, 0x4f, 0x29, 0x86, 0xd4, 0x8b, - 0x11, 0x65, 0x55, 0x74, 0xf4, 0x76, 0x83, 0x88, - 0xd6, 0xa6, 0xa7, 0x33, 0x22, 0xa3, 0x2e, 0x88, - 0x06, 0x54, 0x90, 0x37, 0xd5, 0xdb, 0xce, 0x7c, - 0x0b, 0xd1, 0xe1, 0xc0, 0x7d, 0xa5, 0x0b, 0xc9, - 0xaf, 0xe3, 0x75, 0xc5, 0xf5, 0xaf, 0xaa, 0xe2, - 0x2a, 0xff, 0x6e, 0x84, 0x0e, 0x04, 0x10, 0xf0, - 0x78, 0xdc, 0x96, 0x3d, 0x22, 0x96, 0x64, 0x5b, - 0x7b, 0x9e, 0x83, 0x45, 0xba, 0xb8, 0xe1, 0x31, - 0xc7, 0x0a, 0xe0, 0x31, 0xce, 0x29, 0x3d, 0x01, - 0xb8, 0xfc, 0x79, 0x83, 0x3d, 0xd1, 0x40, 0xe1, - 0x46, 0xfa, 0xe7, 0xc5, 0xdc, 0xc4, 0x1c, 0x24, - 0x29, 0x5a, 0xef, 0xeb, 0x92, 0x57, 0xba, 0x06, - 0x13, 0x1d, 0x35, 0xef, 0xb0, 0x2d, 0x69, 0x20, - 0x92, 0xb1, 0x82, 0x00, 0x8e, 0x3b, 0x12, 0xb3, - 0x78, 0xd7, 0x18, 0xb3, 0x54, 0x0f, 0xd1, 0x8e, - 0x88, 0x5d, 0x4e, 0x2b, 0x30, 0x30, 0x2d, 0x85, - 0xaa, 0x21, 0x01, 0xe1, 0x2c, 0x35, 0xa1, 0xee, - 0xa2, 0x17, 0xed, 0x60, 0x1b, 0x98, 0xea, 0x12, - 0x85, 0x21, 0xde, 0x45, 0x26, 0xef, 0x12, 0x3c, - 0x02, 0x8c, 0xd7, 0x49, 0xbd, 0x02, 0xa7, 0x7d, - 0xe7, 0x1c, 0x15, 0xf9, 0xaa, 0x44, 0x15, 0xb1, - 0xaa, 0x76, 0x5e, 0xf2, 0xb4, 0xfb, 0x85, 0x77, - 0xb9, 0x32, 0xb4, 0xc9, 0x70, 0xe1, 0xdb, 0x44, - 0x9f, 0x5b, 0x87, 0xca, 0xaa, 0xcb, 0x43, 0x53, - 0x7e, 0x49, 0xec, 0x1a, 0x13, 0x1d, 0xe1, 0x1b, - 0x13, 0xc3, 0x34, 0x95, 0x5d, 0x5a, 0xc3, 0xd0, - 0x33, 0x05, 0x82, 0x4a, 0x2e, 0x6d, 0x39, 0xeb, - 0x9c, 0x65, 0x81, 0x7f, 0xa1, 0x62, 0x11}; +static unsigned char ad_random[ AD_NUM_RAND ] = { + 0x6a, 0xde, 0xba, 0x90, 0xf2, 0x18, 0x48, 0xf3, + 0x9e, 0x2b, 0x31, 0xdb, 0xe0, 0x7e, 0xc6, 0x18, + 0x43, 0xd0, 0xd7, 0x6e, 0xbc, 0xee, 0x93, 0x9a, + 0x06, 0xb2, 0x3d, 0x1f, 0xc1, 0x51, 0x66, 0x69, + 0xbf, 0x1c, 0x9c, 0xfc, 0x9b, 0xf7, 0xf2, 0xd0, + 0xf4, 0x26, 0x60, 0x69, 0xc4, 0xd9, 0xdb, 0xd4, + 0xe7, 0x2b, 0x8a, 0xea, 0x9f, 0xab, 0x40, 0x3e, + 0xc3, 0xd8, 0x21, 0x61, 0x3b, 0x0f, 0xc1, 0x49, + 0xd3, 0x09, 0x9a, 0x4d, 0x33, 0x52, 0x7b, 0x8e, + 0x7e, 0x7b, 0x6a, 0x88, 0x4f, 0x84, 0xa2, 0xb4, + 0x83, 0xd9, 0xba, 0x79, 0x7d, 0x8f, 0xdf, 0xb2, + 0x8c, 0x86, 0x77, 0x4f, 0x29, 0x86, 0xd4, 0x8b, + 0x11, 0x65, 0x55, 0x74, 0xf4, 0x76, 0x83, 0x88, + 0xd6, 0xa6, 0xa7, 0x33, 0x22, 0xa3, 0x2e, 0x88, + 0x06, 0x54, 0x90, 0x37, 0xd5, 0xdb, 0xce, 0x7c, + 0x0b, 0xd1, 0xe1, 0xc0, 0x7d, 0xa5, 0x0b, 0xc9, + 0xaf, 0xe3, 0x75, 0xc5, 0xf5, 0xaf, 0xaa, 0xe2, + 0x2a, 0xff, 0x6e, 0x84, 0x0e, 0x04, 0x10, 0xf0, + 0x78, 0xdc, 0x96, 0x3d, 0x22, 0x96, 0x64, 0x5b, + 0x7b, 0x9e, 0x83, 0x45, 0xba, 0xb8, 0xe1, 0x31, + 0xc7, 0x0a, 0xe0, 0x31, 0xce, 0x29, 0x3d, 0x01, + 0xb8, 0xfc, 0x79, 0x83, 0x3d, 0xd1, 0x40, 0xe1, + 0x46, 0xfa, 0xe7, 0xc5, 0xdc, 0xc4, 0x1c, 0x24, + 0x29, 0x5a, 0xef, 0xeb, 0x92, 0x57, 0xba, 0x06, + 0x13, 0x1d, 0x35, 0xef, 0xb0, 0x2d, 0x69, 0x20, + 0x92, 0xb1, 0x82, 0x00, 0x8e, 0x3b, 0x12, 0xb3, + 0x78, 0xd7, 0x18, 0xb3, 0x54, 0x0f, 0xd1, 0x8e, + 0x88, 0x5d, 0x4e, 0x2b, 0x30, 0x30, 0x2d, 0x85, + 0xaa, 0x21, 0x01, 0xe1, 0x2c, 0x35, 0xa1, 0xee, + 0xa2, 0x17, 0xed, 0x60, 0x1b, 0x98, 0xea, 0x12, + 0x85, 0x21, 0xde, 0x45, 0x26, 0xef, 0x12, 0x3c, + 0x02, 0x8c, 0xd7, 0x49, 0xbd, 0x02, 0xa7, 0x7d, + 0xe7, 0x1c, 0x15, 0xf9, 0xaa, 0x44, 0x15, 0xb1, + 0xaa, 0x76, 0x5e, 0xf2, 0xb4, 0xfb, 0x85, 0x77, + 0xb9, 0x32, 0xb4, 0xc9, 0x70, 0xe1, 0xdb, 0x44, + 0x9f, 0x5b, 0x87, 0xca, 0xaa, 0xcb, 0x43, 0x53, + 0x7e, 0x49, 0xec, 0x1a, 0x13, 0x1d, 0xe1, 0x1b, + 0x13, 0xc3, 0x34, 0x95, 0x5d, 0x5a, 0xc3, 0xd0, + 0x33, 0x05, 0x82, 0x4a, 0x2e, 0x6d, 0x39, 0xeb, + 0x9c, 0x65, 0x81, 0x7f, 0xa1, 0x62, 0x11 +}; /* Random A/D data. */ -void Next (unsigned int *index) +void Next ( unsigned int *index ) /* Go on to the next random value. */ { - (*index) ++; - if ((*index) >= AD_NUM_RAND) *index = 0; + ( *index ) ++; + if ( ( *index ) >= AD_NUM_RAND ) *index = 0; } -unsigned char Next_Rand (unsigned int *index) +unsigned char Next_Rand ( unsigned int *index ) /* Go on to the next random value and return it. */ { - Next (index); - return ad_random[*index]; + Next ( index ); + return ad_random[ *index ]; } -void Set_AD_Delay (int delay) -/* Sets ad_conv_delay[all] = delay. */ +void Set_AD_Delay ( int delay ) +/* Sets ad_conv_delay[ all ] = delay. */ { - int i; - _Pragma("loopbound min 6 max 6") - for (i = 0; i < AD_NUM_CONV; i++) - ad_conv_delay[i] = delay; + int i; + _Pragma( "loopbound min 6 max 6" ) + for ( i = 0; i < AD_NUM_CONV; i++ ) + ad_conv_delay[ i ] = delay; } @@ -940,13 +946,13 @@ static unsigned int ad_delay_rand = 0; /* A roving index to randomize the A/D delays. */ -void Random_AD_Delay (void) -/* Sets random ad_conv_delay[]. */ +void Random_AD_Delay ( void ) +/* Sets random ad_conv_delay[ ]. */ { - int i; - _Pragma("loopbound min 6 max 6") - for (i = 0; i < AD_NUM_CONV; i++) - ad_conv_delay[i] = (Next_Rand (&ad_delay_rand) % (ADC_MAX_TRIES + 10)); + int i; + _Pragma( "loopbound min 6 max 6" ) + for ( i = 0; i < AD_NUM_CONV; i++ ) + ad_conv_delay[ i ] = ( Next_Rand ( &ad_delay_rand ) % ( ADC_MAX_TRIES + 10 ) ); } @@ -955,36 +961,36 @@ static unsigned int ad_rand_index = 0; static unsigned int max_adc_hits = 0; /* Maximum number of particle "hits" that may occur during - * A/D conversions (in the Monitoring task, we assume). - */ + A/D conversions (in the Monitoring task, we assume). +*/ static unsigned int ad_hit_rand_index = 0; /* A roving index to the random A/D data, for randomizing - * the occurrence of "hits" during A/D conversions. - */ + the occurrence of "hits" during A/D conversions. +*/ static unsigned int total_adc_hits = 0; /* The number of simulated particle "hits" during A/D conversion. */ static unsigned int ad_random_failures = 0; /* The number of A/D conversion failures (conversion never done) - * to be simulated, at random times, in the next conversions - * (calls of Start_Conversion). - */ + to be simulated, at random times, in the next conversions + (calls of Start_Conversion). +*/ static unsigned int ad_fail_index = 0; /* A roving index to the random A/D data, for randomizing - * the occurrence of A/D failures (conversion never done). - */ + the occurrence of A/D failures (conversion never done). +*/ /* See also ad_converting, declarer earlier. */ -void Update_ADC_Channel_Reg (unsigned char channel) +void Update_ADC_Channel_Reg ( unsigned char channel ) { -#if defined(TRACE_HARNESS) - printf ("Update_ADC_Channel_Reg %x\n", channel); -#endif + #if defined(TRACE_HARNESS) + printf ( "Update_ADC_Channel_Reg %x\n", channel ); + #endif } @@ -993,76 +999,74 @@ static unsigned int start_conversion_count = 0; static uint16_t ad_value = 0; /* Simulated ADC value, set at Start_Conversion and reported - * byte by byte. - */ + byte by byte. +*/ -void Start_Conversion (void) +void Start_Conversion ( void ) { - uint_least8_t channel; + uint_least8_t channel; - channel = ADC_channel_register & 0x3f; + channel = ADC_channel_register & 0x3f; -#if defined(TRACE_HARNESS) - printf ("Start_Conversion on channel %d\n", channel); -#endif + #if defined(TRACE_HARNESS) + printf ( "Start_Conversion on channel %d\n", channel ); + #endif - if (ad_converting != 0) - { -#if defined(TRACE_HARNESS) - printf ("- previous conversion did not end.\n"); -#endif - } + if ( ad_converting != 0 ) { + #if defined(TRACE_HARNESS) + printf ( "- previous conversion did not end.\n" ); + #endif + } - /* Pick an A/D reading for this channel: */ + /* Pick an A/D reading for this channel: */ - ad_value = ((uint16_t)Next_Rand (&ad_rand_index)) << 8; - ad_value |= (uint16_t)Next_Rand (&ad_rand_index); + ad_value = ( ( uint16_t )Next_Rand ( &ad_rand_index ) ) << 8; + ad_value |= ( uint16_t )Next_Rand ( &ad_rand_index ); - if (ad_value < ad_limit[channel].min) - ad_value = ad_limit[channel].min; - else if (ad_value > ad_limit[channel].max) - ad_value = ad_limit[channel].max; + if ( ad_value < ad_limit[ channel ].min ) + ad_value = ad_limit[ channel ].min; + else + if ( ad_value > ad_limit[ channel ].max ) + ad_value = ad_limit[ channel ].max; - start_conversion_count ++; + start_conversion_count ++; - ad_conv_timer = 0; - /* Normal case, may be changed below. */ + ad_conv_timer = 0; + /* Normal case, may be changed below. */ - ad_conv_num ++; - if (ad_conv_num >= AD_NUM_CONV) ad_conv_num = 0; + ad_conv_num ++; + if ( ad_conv_num >= AD_NUM_CONV ) ad_conv_num = 0; - if (ad_random_failures > 0) - { - if (Next_Rand (&ad_fail_index) > 0x3f) - { - /* Pretend that this conversion will fail (not end). */ + if ( ad_random_failures > 0 ) { + if ( Next_Rand ( &ad_fail_index ) > 0x3f ) { + /* Pretend that this conversion will fail (not end). */ -#if defined(TRACE_HARNESS) - printf ("Start_Conversion starts a failing A/D conversion.\n"); -#endif - ad_conv_timer = -5000; + #if defined(TRACE_HARNESS) + printf ( "Start_Conversion starts a failing A/D conversion.\n" ); + #endif + ad_conv_timer = -5000; - ad_random_failures --; - } - } + ad_random_failures --; + } + } - ad_converting = 1; + ad_converting = 1; } -void Report_Start_Conversion_Count (int problem) +void Report_Start_Conversion_Count ( int problem ) /* Reports and then clears the count of Start_Conversion calls. - * The problem parameter associates this count with a given - * analysis problem for this benchmark. - */ + The problem parameter associates this count with a given + analysis problem for this benchmark. +*/ { -#if defined(TRACE_HARNESS) - printf ("Called Start_Conversion %d times in problem %d.\n", - start_conversion_count, problem); -#endif + #if defined(TRACE_HARNESS) + printf ( "Called Start_Conversion %d times in problem %d.\n", + start_conversion_count, problem ); + #endif - start_conversion_count = 0; + start_conversion_count = 0; } @@ -1070,107 +1074,103 @@ static unsigned int end_of_adc_count = 0; /* Counts the number of calls of End_Of_ADC. */ -unsigned char End_Of_ADC (void) +unsigned char End_Of_ADC ( void ) /* Is the A/D conversion done, that is, ready for readout? - * 0 (CONVERSION_ACTIVE) means yes, any other value means no. - */ + 0 (CONVERSION_ACTIVE) means yes, any other value means no. +*/ { -#if defined(TRACE_HARNESS) - printf ("End_Of_ADC\n"); -#endif + #if defined(TRACE_HARNESS) + printf ( "End_Of_ADC\n" ); + #endif - if (ad_converting == 0) - { -#if defined(TRACE_HARNESS) - printf ("- conversion not going on.\n"); -#endif - } + if ( ad_converting == 0 ) { + #if defined(TRACE_HARNESS) + printf ( "- conversion not going on.\n" ); + #endif + } - end_of_adc_count ++; + end_of_adc_count ++; - ad_conv_timer ++; + ad_conv_timer ++; - if (ad_conv_timer >= ad_conv_delay[ad_conv_num]) - { /* Conversion done. */ + if ( ad_conv_timer >= ad_conv_delay[ ad_conv_num ] ) { + /* Conversion done. */ - ad_converting = 0; + ad_converting = 0; - return 0; - } - else - { /* Conversion still going on. */ + return 0; + } else { + /* Conversion still going on. */ - /* Perhaps get a preemptive "hit": */ + /* Perhaps get a preemptive "hit": */ - if (max_adc_hits > 0) - { - /* We have some hits in reserve. */ + if ( max_adc_hits > 0 ) { + /* We have some hits in reserve. */ - if (Next_Rand (&ad_hit_rand_index) > 0x7f) - { - /* Hit me again, Sam. */ + if ( Next_Rand ( &ad_hit_rand_index ) > 0x7f ) { + /* Hit me again, Sam. */ -#if defined(TRACE_HARNESS) - printf ("Hit during A/D\n"); -#endif - confirm_hit_result = 1; + #if defined(TRACE_HARNESS) + printf ( "Hit during A/D\n" ); + #endif + confirm_hit_result = 1; - total_adc_hits ++; - max_adc_hits --; + total_adc_hits ++; + max_adc_hits --; - ad_converting = 0; + ad_converting = 0; - return 0; - /* No point in going on. */ - } + return 0; + /* No point in going on. */ } + } - /* Conversion not yet finished and no hit. */ + /* Conversion not yet finished and no hit. */ - return 1; - } + return 1; + } } -void Report_End_Of_ADC_Count (int problem) +void Report_End_Of_ADC_Count ( int problem ) /* Reports and then clears the count of End_Of_ADC calls. - * The problem parameter associates this count with a given - * analysis problem for this benchmark. - */ + The problem parameter associates this count with a given + analysis problem for this benchmark. +*/ { -#if defined(TRACE_HARNESS) - printf ("Called End_Of_ADC %d times in problem %d.\n", - end_of_adc_count, problem); -#endif + #if defined(TRACE_HARNESS) + printf ( "Called End_Of_ADC %d times in problem %d.\n", + end_of_adc_count, problem ); + #endif - end_of_adc_count = 0; + end_of_adc_count = 0; } -unsigned char Get_Result (void) +unsigned char Get_Result ( void ) { - unsigned char value; + unsigned char value; - /* Return the current MSB of ad_value: */ + /* Return the current MSB of ad_value: */ - value = (ad_value >> 8) & 0xff; + value = ( ad_value >> 8 ) & 0xff; -#if defined(TRACE_HARNESS) - printf ("Get_Result %d = 0x%x\n", value, value); -#endif + #if defined(TRACE_HARNESS) + printf ( "Get_Result %d = 0x%x\n", value, value ); + #endif - /* Shift the LSB to the MSB, for next Get_Result: */ + /* Shift the LSB to the MSB, for next Get_Result: */ - ad_value <<= 8; + ad_value <<= 8; - return value; + return value; } -void Set_DAC_Output (unsigned char level) +void Set_DAC_Output ( unsigned char level ) { -#if defined(TRACE_HARNESS) - printf ("Set_DAC_Output %d\n", level); -#endif + #if defined(TRACE_HARNESS) + printf ( "Set_DAC_Output %d\n", level ); + #endif } @@ -1204,30 +1204,29 @@ static unsigned char self_test_pulse = 0; /* The level of the SU Self Test pulse. */ -void Sim_Self_Test_Trigger (void) +void Sim_Self_Test_Trigger ( void ) /* If conditions are such that a Self Test Hit Trigger should - * be generated, simulate this occurrence by modifying the - * SU_state for the SU being tested as the Hit Trigger ISR would do. - * This supports the testing of the SU Self Test sequences in the - * Monitoring task. - * - * The simulation does not actually invoke the Hit Trigger ISR - * nor does it process the Self Test event. These DEBIE functions - * are tested by calling Hit Trigger ISR directly, not from the - * SU Self Test sequences. - */ -{ - if ((sim_self_test == 1) - && (hit_enabled == 1) - && (self_test_pulse > 0) - && (self_test_SU_number != NO_SU) - && (SU_state[self_test_SU_number - SU1] == self_test_trigger_e)) - { -#if defined(TRACE_HARNESS) - printf ("SU Self Test trigger!\n"); -#endif - SU_state[self_test_SU_number - SU1] = self_test_e; - } + be generated, simulate this occurrence by modifying the + SU_state for the SU being tested as the Hit Trigger ISR would do. + This supports the testing of the SU Self Test sequences in the + Monitoring task. + + The simulation does not actually invoke the Hit Trigger ISR + nor does it process the Self Test event. These DEBIE functions + are tested by calling Hit Trigger ISR directly, not from the + SU Self Test sequences. +*/ +{ + if ( ( sim_self_test == 1 ) + && ( hit_enabled == 1 ) + && ( self_test_pulse > 0 ) + && ( self_test_SU_number != NO_SU ) + && ( SU_state[ self_test_SU_number - SU1 ] == self_test_trigger_e ) ) { + #if defined(TRACE_HARNESS) + printf ( "SU Self Test trigger!\n" ); + #endif + SU_state[ self_test_SU_number - SU1 ] = self_test_e; + } } @@ -1235,225 +1234,223 @@ static unsigned int event_rand_index = 0; /* Roving index for ad_random, for randomizing the event data. */ -void Random_Event (void) +void Random_Event ( void ) /* Sets random data in the event sensors. */ { - unsigned char val; + unsigned char val; - val = Next_Rand (&event_rand_index); + val = Next_Rand ( &event_rand_index ); - trigger_flag = (val >> 7) & 1; - event_flag = (val >> 6) & 1; - trigger_source_0 = (val >> 5) & 1; - trigger_source_1 = (val >> 4) & 1; + trigger_flag = ( val >> 7 ) & 1; + event_flag = ( val >> 6 ) & 1; + trigger_source_0 = ( val >> 5 ) & 1; + trigger_source_1 = ( val >> 4 ) & 1; - msb_counter = Next_Rand (&event_rand_index); - lsb1_counter = Next_Rand (&event_rand_index); - lsb2_counter = Next_Rand (&event_rand_index); - rise_time_counter = Next_Rand (&event_rand_index); + msb_counter = Next_Rand ( &event_rand_index ); + lsb1_counter = Next_Rand ( &event_rand_index ); + lsb2_counter = Next_Rand ( &event_rand_index ); + rise_time_counter = Next_Rand ( &event_rand_index ); } -static void Set_Trigger_SU (sensor_index_t SU) +static void Set_Trigger_SU ( sensor_index_t SU ) /* Sets the given SU in trigger_source_0/1. */ { -#if defined(TRACE_HARNESS) - printf ("Set Trigger SU index %d\n", SU); -#endif + #if defined(TRACE_HARNESS) + printf ( "Set Trigger SU index %d\n", SU ); + #endif - trigger_source_0 = SU & 1; - trigger_source_1 = (SU >> 1) & 1; + trigger_source_0 = SU & 1; + trigger_source_1 = ( SU >> 1 ) & 1; } -void Enable_Hit_Trigger (void) +void Enable_Hit_Trigger ( void ) { -#if defined(TRACE_HARNESS) - printf ("Enable_Hit_Trigger\n"); -#endif - hit_enabled = 1; - Sim_Self_Test_Trigger (); + #if defined(TRACE_HARNESS) + printf ( "Enable_Hit_Trigger\n" ); + #endif + hit_enabled = 1; + Sim_Self_Test_Trigger (); } -void Disable_Hit_Trigger (void) +void Disable_Hit_Trigger ( void ) { -#if defined(TRACE_HARNESS) - printf ("Disable_Hit_Trigger\n"); -#endif - hit_enabled = 0; - Sim_Self_Test_Trigger (); + #if defined(TRACE_HARNESS) + printf ( "Disable_Hit_Trigger\n" ); + #endif + hit_enabled = 0; + Sim_Self_Test_Trigger (); } -unsigned char Hit_Trigger_Flag (void) +unsigned char Hit_Trigger_Flag ( void ) { -#if defined(TRACE_HARNESS) - printf ("Hit_Trigger_Flag\n"); -#endif - return trigger_flag; + #if defined(TRACE_HARNESS) + printf ( "Hit_Trigger_Flag\n" ); + #endif + return trigger_flag; /* 1 means hit trigger ITs are enabled - * 0 means they are disabled. - */ + 0 means they are disabled. + */ } -unsigned char Event_Flag (void) +unsigned char Event_Flag ( void ) { -#if defined(TRACE_HARNESS) - printf ("Event_Flag \n"); -#endif - return event_flag; + #if defined(TRACE_HARNESS) + printf ( "Event_Flag \n" ); + #endif + return event_flag; } -unsigned char Get_MSB_Counter (void) +unsigned char Get_MSB_Counter ( void ) { -#if defined(TRACE_HARNESS) - printf ("Get_MSB_Counter\n"); -#endif - return msb_counter; + #if defined(TRACE_HARNESS) + printf ( "Get_MSB_Counter\n" ); + #endif + return msb_counter; } -unsigned char Get_LSB1_Counter (void) +unsigned char Get_LSB1_Counter ( void ) { -#if defined(TRACE_HARNESS) - printf ("Get_LSB1_Counter\n"); -#endif - return lsb1_counter; + #if defined(TRACE_HARNESS) + printf ( "Get_LSB1_Counter\n" ); + #endif + return lsb1_counter; } -unsigned char Get_LSB2_Counter (void) +unsigned char Get_LSB2_Counter ( void ) { -#if defined(TRACE_HARNESS) - printf ("Get_LSB2_Counter\n"); -#endif - return lsb2_counter; + #if defined(TRACE_HARNESS) + printf ( "Get_LSB2_Counter\n" ); + #endif + return lsb2_counter; } -unsigned char Rise_Time_Counter (void) +unsigned char Rise_Time_Counter ( void ) { -#if defined(TRACE_HARNESS) - printf ("Rise_Time_Counter\n"); -#endif - return rise_time_counter; + #if defined(TRACE_HARNESS) + printf ( "Rise_Time_Counter\n" ); + #endif + return rise_time_counter; } -unsigned char Trigger_Source_0 (void) +unsigned char Trigger_Source_0 ( void ) { -#if defined(TRACE_HARNESS) - printf ("Trigger_Source_0\n"); -#endif - return trigger_source_0; + #if defined(TRACE_HARNESS) + printf ( "Trigger_Source_0\n" ); + #endif + return trigger_source_0; } -unsigned char Trigger_Source_1 (void) +unsigned char Trigger_Source_1 ( void ) { -#if defined(TRACE_HARNESS) - printf ("Trigger_Source_1\n"); -#endif - return trigger_source_1; + #if defined(TRACE_HARNESS) + printf ( "Trigger_Source_1\n" ); + #endif + return trigger_source_1; } -void Set_SU_Self_Test_Ch (unsigned char value) +void Set_SU_Self_Test_Ch ( unsigned char value ) /* Set the SU Self Test Channel selectors. */ { -#if defined(TRACE_HARNESS) - printf ("Set SU Self-Test Channel %x\n", value); -#endif + #if defined(TRACE_HARNESS) + printf ( "Set SU Self-Test Channel %x\n", value ); + #endif } -void Set_Test_Pulse_Level (unsigned char level) +void Set_Test_Pulse_Level ( unsigned char level ) /* Set the SU Self Test pulse level. */ { -#if defined(TRACE_HARNESS) - printf ("Set SU Self-Test Pulse Level %d\n", level); -#endif - self_test_pulse = level; - Sim_Self_Test_Trigger (); + #if defined(TRACE_HARNESS) + printf ( "Set SU Self-Test Pulse Level %d\n", level ); + #endif + self_test_pulse = level; + Sim_Self_Test_Trigger (); } static unsigned int v_down_errors = 0; /* The number of consecutive error results to - * be returned from the next calls of V_Down. - */ + be returned from the next calls of V_Down. +*/ -unsigned char V_Down (void) +unsigned char V_Down ( void ) { - unsigned char result; + unsigned char result; - if (v_down_errors > 0) - { - result = 0; /* Bad. */ - v_down_errors --; - } - else - result = 1; /* Good. */ + if ( v_down_errors > 0 ) { + result = 0; /* Bad. */ + v_down_errors --; + } else + result = 1; /* Good. */ -#if defined(TRACE_HARNESS) - printf ("V_Down %d\n", result); -#endif + #if defined(TRACE_HARNESS) + printf ( "V_Down %d\n", result ); + #endif - return result; + return result; } void SignalPeakDetectorReset( - unsigned char low_reset_value, - unsigned char high_reset_value) + unsigned char low_reset_value, + unsigned char high_reset_value ) { -#if defined(TRACE_HARNESS) - printf ("SignalPeakDetectorReset low %d, high %d\n", - low_reset_value, high_reset_value); -#endif + #if defined(TRACE_HARNESS) + printf ( "SignalPeakDetectorReset low %d, high %d\n", + low_reset_value, high_reset_value ); + #endif } /* The following operations are implemented in hw_if.c: - * ReadDelayCounters - * ReadRiseTimeCounter - * ResetDelayCounters - * ResetPeakDetector - * SetTriggerLevel - * SetTestPulseLevel - * GetVoltageStatus - * Switch_SU_On - * Switch_SU_Off - * EnableAnalogSwitch - * DisableAnalogSwitch - * SelectSelfTestChannel - * SelectTriggerSwitchLevel - * SelectStartSwitchLevel - */ + ReadDelayCounters + ReadRiseTimeCounter + ResetDelayCounters + ResetPeakDetector + SetTriggerLevel + SetTestPulseLevel + GetVoltageStatus + Switch_SU_On + Switch_SU_Off + EnableAnalogSwitch + DisableAnalogSwitch + SelectSelfTestChannel + SelectTriggerSwitchLevel + SelectStartSwitchLevel +*/ /* Accessing unaligned tm_ushort_t data */ -unsigned short int Short_Value (tm_ushort_t *x) +unsigned short int Short_Value ( tm_ushort_t *x ) { - unsigned short val; - wcc_memcpy (&val, x, sizeof (val)); - return val; + unsigned short val; + wcc_memcpy ( &val, x, sizeof ( val ) ); + return val; } /* "Calling" a "patch function" */ -void Call_Patch (fptr_t func) +void Call_Patch ( fptr_t func ) { -#if defined(TRACE_HARNESS) - printf ("Call_Patch 0x%x\n", (code_address_t)func); -#endif + #if defined(TRACE_HARNESS) + printf ( "Call_Patch 0x%x\n", ( code_address_t )func ); + #endif } @@ -1464,71 +1461,71 @@ void Call_Patch (fptr_t func) static volatile uint_least8_t tsize_s; static volatile uint_least16_t tsize_l; -void Check_Type_Size (void) +void Check_Type_Size ( void ) /* - * Disassemble the code of this function to see the sizes of - * the types char, short, ..., science_data_file_t. - * This function is never called. - * - */ + Disassemble the code of this function to see the sizes of + the types char, short, ..., science_data_file_t. + This function is never called. + +*/ { - tsize_s = sizeof (char ); - tsize_s = sizeof (short); - tsize_s = sizeof (int ); - tsize_s = sizeof (long ); + tsize_s = sizeof ( char ); + tsize_s = sizeof ( short ); + tsize_s = sizeof ( int ); + tsize_s = sizeof ( long ); - tsize_s = sizeof (tm_ushort_t ); - tsize_s = sizeof (dpu_time_t ); - tsize_s = sizeof (tm_dpu_time_t ); - tsize_s = sizeof (SU_settings_t ); - tsize_s = sizeof (telemetry_data_t); + tsize_s = sizeof ( tm_ushort_t ); + tsize_s = sizeof ( dpu_time_t ); + tsize_s = sizeof ( tm_dpu_time_t ); + tsize_s = sizeof ( SU_settings_t ); + tsize_s = sizeof ( telemetry_data_t ); - tsize_s = sizeof (event_record_t ); - tsize_l = sizeof (science_data_file_t); + tsize_s = sizeof ( event_record_t ); + tsize_l = sizeof ( science_data_file_t ); } /* Test scenarios */ /* -These test cases are not intended as a full functional test. -They are intended to provide sufficient coverage for measurement- -based WCET analysis of the tested code. Built-in checks of test -execution (program state) are used only to check that the DEBIE -software has done the expected thing in each test case, but the -checks are definitely not exhaustive. - -Each test cases contributes measurements towards one of the -"analysis problems" defined for this benchmark. The macro -FOR_PROBLEM(P) is defined in problems.h and marks the start of -a test case to be included in problem P. Here P is an integer -number that identifies the analysis problem as follows: - -P Problem --- ------- -10 1 : TC interrupt handler -21 2a: TM interrupt handler, most common case -22 2b: TM interrupt handler, send internal time register -23 2c: TM interrupt handler, end of TM -31 3a: Hit Trigger interrupt handler, no ADC errors -32 3b: Hit Trigger interrupt handler, at most one ADC error -33 3c: Hit Trigger interrupt handler, any number of ADC errors -41 4a: TC Execution task, general case -42 4b: TC Execution task, start TC buffering, MSB -43 4c: TC Execution task, start TC buffering, LSB -44 4d: TC Execution task, buffer TC word -51 5a: Acquisition task, science data not full -52 5b: Acquisition task, science data full -61 6a: Monitoring task, no hits or errors -62 6b: Monitoring task, one hit during A/D conversion -63 6c: Monitoring task, many hits during A/D conversion -64 6d: Monitoring task, some SU error detected -65 6e: Monitoring task, any number of hits and errors - -The macro END_PROBLEM is also defined in problems.h and marks -the end of execution of a case belonging to the problem named -by the most recently executed FOR_PROBLEM. Note that more cases -for the same problem can be added later with another FOR_PROBLEM. + These test cases are not intended as a full functional test. + They are intended to provide sufficient coverage for measurement- + based WCET analysis of the tested code. Built-in checks of test + execution (program state) are used only to check that the DEBIE + software has done the expected thing in each test case, but the + checks are definitely not exhaustive. + + Each test cases contributes measurements towards one of the + "analysis problems" defined for this benchmark. The macro + FOR_PROBLEM(P) is defined in problems.h and marks the start of + a test case to be included in problem P. Here P is an integer + number that identifies the analysis problem as follows: + + P Problem + -- ------- + 10 1 : TC interrupt handler + 21 2a: TM interrupt handler, most common case + 22 2b: TM interrupt handler, send internal time register + 23 2c: TM interrupt handler, end of TM + 31 3a: Hit Trigger interrupt handler, no ADC errors + 32 3b: Hit Trigger interrupt handler, at most one ADC error + 33 3c: Hit Trigger interrupt handler, any number of ADC errors + 41 4a: TC Execution task, general case + 42 4b: TC Execution task, start TC buffering, MSB + 43 4c: TC Execution task, start TC buffering, LSB + 44 4d: TC Execution task, buffer TC word + 51 5a: Acquisition task, science data not full + 52 5b: Acquisition task, science data full + 61 6a: Monitoring task, no hits or errors + 62 6b: Monitoring task, one hit during A/D conversion + 63 6c: Monitoring task, many hits during A/D conversion + 64 6d: Monitoring task, some SU error detected + 65 6e: Monitoring task, any number of hits and errors + + The macro END_PROBLEM is also defined in problems.h and marks + the end of execution of a case belonging to the problem named + by the most recently executed FOR_PROBLEM. Note that more cases + for the same problem can be added later with another FOR_PROBLEM. */ #define Prob1 10 @@ -1571,45 +1568,41 @@ static int check_errors = 0; /* Counts the number of errors found in Check/Zero/Nonzero. */ -static void Report_Checks (void) +static void Report_Checks ( void ) /* Print number of checks and check-errors. */ { - TARGET_MARK; -#if defined(TRACE_HARNESS) - printf ("Total checks done %d, failed %d\n", checks, check_errors); -#endif + TARGET_MARK; + #if defined(TRACE_HARNESS) + printf ( "Total checks done %d, failed %d\n", checks, check_errors ); + #endif } -static void Fail_Check (char *message) +static void Fail_Check ( char *message ) /* Reports a failed check. */ { - check_errors ++; -#if defined(TRACE_HARNESS) - printf ("%s: FAILED (#%d)\n", message, check_errors); -#endif + check_errors ++; + #if defined(TRACE_HARNESS) + printf ( "%s: FAILED (#%d)\n", message, check_errors ); + #endif } -static void Check_Zero (int cond) +static void Check_Zero ( int cond ) /* Checks that cond == 0. */ { - checks ++; - if (cond) - { - Fail_Check("Check_Zero"); - } + checks ++; + if ( cond ) + Fail_Check( "Check_Zero" ); } -static void Check_Nonzero (int cond) +static void Check_Nonzero ( int cond ) /* Checks that cond != 0. */ { - checks ++; - if (cond == 0) - { - Fail_Check ("Check_Nonzero"); - } + checks ++; + if ( cond == 0 ) + Fail_Check ( "Check_Nonzero" ); } @@ -1617,2074 +1610,2027 @@ static void Check_Nonzero (int cond) /* Check that the (boolean) parameter is true (not zero). */ -static void Check_No_Errors (void) +static void Check_No_Errors ( void ) /* Checks that no errors are flagged in telemetry_data.error_status. */ { - Check_Zero (telemetry_data.error_status); + Check_Zero ( telemetry_data.error_status ); } -static void TC_Interrupt (void) +static void TC_Interrupt ( void ) /* Runs the TC Interrupt Service. */ { - FOR_PROBLEM(Prob1); - TC_InterruptService(); - END_PROBLEM; + FOR_PROBLEM( Prob1 ); + TC_InterruptService(); + END_PROBLEM; } -static void Send_TC (unsigned char address, unsigned char code) +static void Send_TC ( unsigned char address, unsigned char code ) /* Invokes TC_InterruptService with a TC composed of the - * given address and code, provided with valid (even) parity. - */ + given address and code, provided with valid (even) parity. +*/ { - unsigned char par; - /* The parity. */ + unsigned char par; + /* The parity. */ - /* Encode the address and code in the TC interface registers: */ + /* Encode the address and code in the TC interface registers: */ - tc_msb = address << 1; - tc_lsb = code; + tc_msb = address << 1; + tc_lsb = code; - /* Generate the even parity bit: */ + /* Generate the even parity bit: */ - par = tc_msb ^ tc_lsb; - par = (par & 0x0F) ^ (par >>4); - par = (par & 0x03) ^ (par >>2); - par = (par & 0x01) ^ (par >>1); + par = tc_msb ^ tc_lsb; + par = ( par & 0x0F ) ^ ( par >> 4 ); + par = ( par & 0x03 ) ^ ( par >> 2 ); + par = ( par & 0x01 ) ^ ( par >> 1 ); - tc_msb |= par; + tc_msb |= par; - tc_word = (tc_msb << 8) | tc_lsb; + tc_word = ( tc_msb << 8 ) | tc_lsb; - /* Invoke the TC ISR: */ + /* Invoke the TC ISR: */ - tc_timer_overflow = 1; + tc_timer_overflow = 1; - TC_Interrupt (); + TC_Interrupt (); } -static void Send_TC_Word (uint_least16_t word) +static void Send_TC_Word ( uint_least16_t word ) /* Invokes TC_InterruptService with the given TC word, - * exactly as given. - */ + exactly as given. +*/ { - /* Set the high and low TC bytes: */ + /* Set the high and low TC bytes: */ - tc_msb = (word >> 8) & 0xff; - tc_lsb = word & 0xff; + tc_msb = ( word >> 8 ) & 0xff; + tc_lsb = word & 0xff; - tc_word = (tc_msb << 8) | tc_lsb; + tc_word = ( tc_msb << 8 ) | tc_lsb; - /* Invoke the TC ISR: */ + /* Invoke the TC ISR: */ - tc_timer_overflow = 1; + tc_timer_overflow = 1; - TC_Interrupt (); + TC_Interrupt (); } -static void TC_ISR_Tests (void) +static void TC_ISR_Tests ( void ) /* Test of TC_InterruptService. */ { -#if defined(TRACE_HARNESS) - printf ("\nTC_ISR_Tests\n"); -#endif + #if defined(TRACE_HARNESS) + printf ( "\nTC_ISR_Tests\n" ); + #endif - CASE("TC rejected because timer overflow is not set"); + CASE( "TC rejected because timer overflow is not set" ); - tc_timer_overflow = 0; - TC_Interrupt (); + tc_timer_overflow = 0; + TC_Interrupt (); - CASE("TC rejected because TC_state is SC_TM_e"); + CASE( "TC rejected because TC_state is SC_TM_e" ); - TC_state = SC_TM_e; - Send_TC (0,0); + TC_state = SC_TM_e; + Send_TC ( 0, 0 ); - CASE("TC rejected because TC_state is memory_dump_e"); + CASE( "TC rejected because TC_state is memory_dump_e" ); - TC_state = memory_dump_e; - Send_TC (0,0); + TC_state = memory_dump_e; + Send_TC ( 0, 0 ); - CASE("TC in TC_state = memory_patch_e"); + CASE( "TC in TC_state = memory_patch_e" ); - TC_state = memory_patch_e; - Send_TC (0,0); - Check (mail_count[TCTM_MAILBOX] == 1); - FlushMail (TCTM_MAILBOX); + TC_state = memory_patch_e; + Send_TC ( 0, 0 ); + Check ( mail_count[ TCTM_MAILBOX ] == 1 ); + FlushMail ( TCTM_MAILBOX ); - CASE("TC with parity error"); + CASE( "TC with parity error" ); - TC_state = TC_handling_e; - tc_timer_overflow = 1; - tc_msb = 0; tc_lsb = 1; tc_word = 1; - TC_Interrupt (); + TC_state = TC_handling_e; + tc_timer_overflow = 1; + tc_msb = 0; + tc_lsb = 1; + tc_word = 1; + TC_Interrupt (); - Check_Nonzero (telemetry_data.error_status & PARITY_ERROR); + Check_Nonzero ( telemetry_data.error_status & PARITY_ERROR ); - CASE("TC = ERROR_STATUS_CLEAR, ok"); + CASE( "TC = ERROR_STATUS_CLEAR, ok" ); - Send_TC (ERROR_STATUS_CLEAR, ERROR_STATUS_CLEAR); + Send_TC ( ERROR_STATUS_CLEAR, ERROR_STATUS_CLEAR ); - /* The parity-error flag is not yet reset, because */ - /* the TC was not yet executed: */ + /* The parity-error flag is not yet reset, because */ + /* the TC was not yet executed: */ - Check_Nonzero (telemetry_data.error_status & PARITY_ERROR); + Check_Nonzero ( telemetry_data.error_status & PARITY_ERROR ); - Check (mail_count[TCTM_MAILBOX] == 1); - FlushMail (TCTM_MAILBOX); + Check ( mail_count[ TCTM_MAILBOX ] == 1 ); + FlushMail ( TCTM_MAILBOX ); - /* Clear the error manually: */ + /* Clear the error manually: */ - telemetry_data.error_status = 0; + telemetry_data.error_status = 0; - Check_No_Errors (); + Check_No_Errors (); - CASE("TC = SEND_STATUS_REGISTER, ok"); + CASE( "TC = SEND_STATUS_REGISTER, ok" ); - Send_TC (SEND_STATUS_REGISTER, 8); + Send_TC ( SEND_STATUS_REGISTER, 8 ); - Check_No_Errors (); - Check (TC_state == register_TM_e); - Check (mail_count[TCTM_MAILBOX] == 1); - FlushMail (TCTM_MAILBOX); + Check_No_Errors (); + Check ( TC_state == register_TM_e ); + Check ( mail_count[ TCTM_MAILBOX ] == 1 ); + FlushMail ( TCTM_MAILBOX ); - CASE("TC type ALL_INVALID"); + CASE( "TC type ALL_INVALID" ); - /* An invalid TC code: */ + /* An invalid TC code: */ - Send_TC (4, 4); + Send_TC ( 4, 4 ); - Check (telemetry_data.error_status == TC_ERROR); - Check (mail_count[TCTM_MAILBOX] == 0); - telemetry_data.error_status = 0; + Check ( telemetry_data.error_status == TC_ERROR ); + Check ( mail_count[ TCTM_MAILBOX ] == 0 ); + telemetry_data.error_status = 0; - CASE("TC type ONLY_EQUAL, fail"); + CASE( "TC type ONLY_EQUAL, fail" ); - Send_TC (ERROR_STATUS_CLEAR, ~ERROR_STATUS_CLEAR); + Send_TC ( ERROR_STATUS_CLEAR, ~ERROR_STATUS_CLEAR ); - Check (telemetry_data.error_status == TC_ERROR); - Check (mail_count[TCTM_MAILBOX] == 0); - telemetry_data.error_status = 0; + Check ( telemetry_data.error_status == TC_ERROR ); + Check ( mail_count[ TCTM_MAILBOX ] == 0 ); + telemetry_data.error_status = 0; - CASE ("TC type ON_OFF_TC, fail"); + CASE ( "TC type ON_OFF_TC, fail" ); - /* Neither ON_VALUE nor OFF_VALUE nor SELF_TEST. */ + /* Neither ON_VALUE nor OFF_VALUE nor SELF_TEST. */ - Send_TC (SWITCH_SU_3, 0x3F); + Send_TC ( SWITCH_SU_3, 0x3F ); - Check (telemetry_data.error_status == TC_ERROR); - Check (mail_count[TCTM_MAILBOX] == 0); - telemetry_data.error_status = 0; + Check ( telemetry_data.error_status == TC_ERROR ); + Check ( mail_count[ TCTM_MAILBOX ] == 0 ); + telemetry_data.error_status = 0; - CASE ("TC type ONLY_EVEN, fail (odd)"); + CASE ( "TC type ONLY_EVEN, fail (odd)" ); - Send_TC (SEND_STATUS_REGISTER, 5); + Send_TC ( SEND_STATUS_REGISTER, 5 ); - Check (TC_state == TC_handling_e); - Check (telemetry_data.error_status == TC_ERROR); - Check (mail_count[TCTM_MAILBOX] == 0); - telemetry_data.error_status = 0; + Check ( TC_state == TC_handling_e ); + Check ( telemetry_data.error_status == TC_ERROR ); + Check ( mail_count[ TCTM_MAILBOX ] == 0 ); + telemetry_data.error_status = 0; - CASE ("TC type ONLY_EVEN, fail (too large)"); + CASE ( "TC type ONLY_EVEN, fail (too large)" ); - Send_TC (SEND_STATUS_REGISTER, LAST_EVEN + 2); + Send_TC ( SEND_STATUS_REGISTER, LAST_EVEN + 2 ); - Check (TC_state == TC_handling_e); - Check (telemetry_data.error_status == TC_ERROR); - Check (mail_count[TCTM_MAILBOX] == 0); - telemetry_data.error_status = 0; + Check ( TC_state == TC_handling_e ); + Check ( telemetry_data.error_status == TC_ERROR ); + Check ( mail_count[ TCTM_MAILBOX ] == 0 ); + telemetry_data.error_status = 0; - /* Other tests of TC ISR: - TC in TC_state = register_TM_e: See TM_Tests. - */ + /* Other tests of TC ISR: + TC in TC_state = register_TM_e: See TM_Tests. + */ } -static void Handle_TC (int problem) +static void Handle_TC ( int problem ) /* Checks that the TC mailbox has a message, then invokes - * HandleTelecommand to handle (usually, execute) the message. - * The problem parameter shows in which analysis problem the - * HandleTelecommand should be included. - */ + HandleTelecommand to handle (usually, execute) the message. + The problem parameter shows in which analysis problem the + HandleTelecommand should be included. +*/ { - Check (mail_count[TCTM_MAILBOX] == 1); + Check ( mail_count[ TCTM_MAILBOX ] == 1 ); - FOR_PROBLEM(problem); - HandleTelecommand (); - END_PROBLEM; + FOR_PROBLEM( problem ); + HandleTelecommand (); + END_PROBLEM; - Check (mail_count[TCTM_MAILBOX] == 0); + Check ( mail_count[ TCTM_MAILBOX ] == 0 ); } static void Exec_TC ( - unsigned char address, unsigned char code, - int problem) + unsigned char address, unsigned char code, + int problem ) /* Invokes TC_InterruptService with a TC composed of the - * given address and code, provided with valid (even) parity, - * then invokes HandleTelecommand to execute the TC. - * The problem parameter shows in which analysis problem the - * HandleTelecommand should be included. - */ + given address and code, provided with valid (even) parity, + then invokes HandleTelecommand to execute the TC. + The problem parameter shows in which analysis problem the + HandleTelecommand should be included. +*/ { - Send_TC (address, code); - Handle_TC (problem); + Send_TC ( address, code ); + Handle_TC ( problem ); } static void Send_Patch_Code ( - uint16_t address, - unsigned char *checksum) + uint16_t address, + unsigned char *checksum ) /* Sends the multi-word TC to patch code memory at the given address, - * with some arbitary contents. Returns the checksum of the patch, - * for use in the final word of the TC, which is not sent here. - */ + with some arbitary contents. Returns the checksum of the patch, + for use in the final word of the TC, which is not sent here. +*/ { - uint_least8_t i; - unsigned char sum; + uint_least8_t i; + unsigned char sum; - /* Send the patch address: */ + /* Send the patch address: */ - Exec_TC (WRITE_CODE_MEMORY_MSB, (address >> 8) & 0xff, Prob4b); + Exec_TC ( WRITE_CODE_MEMORY_MSB, ( address >> 8 ) & 0xff, Prob4b ); - sum = (tc_word >> 8) ^ (tc_word & 0xff); + sum = ( tc_word >> 8 ) ^ ( tc_word & 0xff ); - Check_No_Errors (); - Check (TC_state == write_memory_e); + Check_No_Errors (); + Check ( TC_state == write_memory_e ); - Exec_TC (WRITE_CODE_MEMORY_LSB, address & 0xff, Prob4c); + Exec_TC ( WRITE_CODE_MEMORY_LSB, address & 0xff, Prob4c ); - sum ^= (tc_word >> 8) ^ (tc_word & 0xff); + sum ^= ( tc_word >> 8 ) ^ ( tc_word & 0xff ); - Check_No_Errors (); - Check (TC_state == memory_patch_e); + Check_No_Errors (); + Check ( TC_state == memory_patch_e ); - /* Send the patch contents, 16 words = 32 octets: */ + /* Send the patch contents, 16 words = 32 octets: */ - _Pragma("loopbound min 16 max 16") - for (i = 0; i < 16; i++) - { - Send_TC_Word (((uint_least16_t) i) << 6); - sum ^= (tc_word >> 8) ^ (tc_word & 0xff); - Handle_TC (Prob4d); - } + _Pragma( "loopbound min 16 max 16" ) + for ( i = 0; i < 16; i++ ) { + Send_TC_Word ( ( ( uint_least16_t ) i ) << 6 ); + sum ^= ( tc_word >> 8 ) ^ ( tc_word & 0xff ); + Handle_TC ( Prob4d ); + } - /* The last word remains to be sent. */ + /* The last word remains to be sent. */ - *checksum = sum; + *checksum = sum; } static void Send_Patch_Data ( - uint16_t address, - unsigned char *checksum) + uint16_t address, + unsigned char *checksum ) /* Sends the multi-word TC to patch data memory at the given address, - * with some arbitary contents. Returns the checksum of the patch, - * for use in the final word of the TC, which is not sent here. - */ + with some arbitary contents. Returns the checksum of the patch, + for use in the final word of the TC, which is not sent here. +*/ { - uint_least8_t i; - unsigned char sum; + uint_least8_t i; + unsigned char sum; - /* Send the patch address: */ + /* Send the patch address: */ - Exec_TC (WRITE_DATA_MEMORY_MSB, (address >> 8) & 0xff, Prob4b); + Exec_TC ( WRITE_DATA_MEMORY_MSB, ( address >> 8 ) & 0xff, Prob4b ); - sum = (tc_word >> 8) ^ (tc_word & 0xff); + sum = ( tc_word >> 8 ) ^ ( tc_word & 0xff ); - Check_No_Errors (); - Check (TC_state == write_memory_e); + Check_No_Errors (); + Check ( TC_state == write_memory_e ); - Exec_TC (WRITE_DATA_MEMORY_LSB, address & 0xff, Prob4c); + Exec_TC ( WRITE_DATA_MEMORY_LSB, address & 0xff, Prob4c ); - sum ^= (tc_word >> 8) ^ (tc_word & 0xff); + sum ^= ( tc_word >> 8 ) ^ ( tc_word & 0xff ); - Check_No_Errors (); - Check (TC_state == memory_patch_e); + Check_No_Errors (); + Check ( TC_state == memory_patch_e ); - /* Send the patch contents, 16 words = 32 octets: */ + /* Send the patch contents, 16 words = 32 octets: */ - _Pragma("loopbound min 16 max 16") - for (i = 0; i < 16; i++) - { - Send_TC_Word (((uint_least16_t) i) << 6); - sum ^= (tc_word >> 8) ^ (tc_word & 0xff); - Handle_TC (Prob4d); - } + _Pragma( "loopbound min 16 max 16" ) + for ( i = 0; i < 16; i++ ) { + Send_TC_Word ( ( ( uint_least16_t ) i ) << 6 ); + sum ^= ( tc_word >> 8 ) ^ ( tc_word & 0xff ); + Handle_TC ( Prob4d ); + } - /* The last word remains to be sent. */ + /* The last word remains to be sent. */ - *checksum = sum; + *checksum = sum; } -static void Read_Data_Memory (uint16_t address) +static void Read_Data_Memory ( uint16_t address ) /* Sends the TC to read 32 octets of data memory, starting at - * the given address, receives the corresponding TM block, and - * handles the TM_READY message to the TC Execution task. - */ + the given address, receives the corresponding TM block, and + handles the TM_READY message to the TC Execution task. +*/ { - uint_least8_t i; + uint_least8_t i; - Exec_TC (READ_DATA_MEMORY_MSB, (address >> 8) & 0xff, Prob4a); + Exec_TC ( READ_DATA_MEMORY_MSB, ( address >> 8 ) & 0xff, Prob4a ); - Check_No_Errors (); - Check (TC_state == read_memory_e); + Check_No_Errors (); + Check ( TC_state == read_memory_e ); - Exec_TC (READ_DATA_MEMORY_LSB, address & 0xff, Prob4a); + Exec_TC ( READ_DATA_MEMORY_LSB, address & 0xff, Prob4a ); - Check_No_Errors (); - Check (TC_state == memory_dump_e); + Check_No_Errors (); + Check ( TC_state == memory_dump_e ); - /* The 16 first words of data: */ + /* The 16 first words of data: */ - _Pragma("loopbound min 16 max 16") - for (i = 0; i < 16; i++) - { - Check (telemetry_pointer < telemetry_end_pointer); + _Pragma( "loopbound min 16 max 16" ) + for ( i = 0; i < 16; i++ ) { + Check ( telemetry_pointer < telemetry_end_pointer ); - /* The first TM IT, below, acknowledges the immediate TC - * response and transmits the first data word. - */ + /* The first TM IT, below, acknowledges the immediate TC + response and transmits the first data word. + */ - FOR_PROBLEM(Prob2a); - TM_InterruptService (); - END_PROBLEM; + FOR_PROBLEM( Prob2a ); + TM_InterruptService (); + END_PROBLEM; - Check (TC_state == memory_dump_e); - } + Check ( TC_state == memory_dump_e ); + } - /* The last word, with the checksum: */ + /* The last word, with the checksum: */ - Check (telemetry_pointer == telemetry_end_pointer); + Check ( telemetry_pointer == telemetry_end_pointer ); - /* The TM IT below acknowledges the last data word and - * transmits the very last word of the Read Data Memory - * sequence, containing the data checksum. - */ + /* The TM IT below acknowledges the last data word and + transmits the very last word of the Read Data Memory + sequence, containing the data checksum. + */ - FOR_PROBLEM(Prob2c); - TM_InterruptService (); - END_PROBLEM; + FOR_PROBLEM( Prob2c ); + TM_InterruptService (); + END_PROBLEM; - /* The TM_READY message: */ + /* The TM_READY message: */ - Handle_TC (Prob1); + Handle_TC ( Prob1 ); - Check_No_Errors (); - Check (TC_state == TC_handling_e); + Check_No_Errors (); + Check ( TC_state == TC_handling_e ); - /* There is a design error in TM_InterruptService: - * when the Read Data Memory sequence ends, with the - * transmission of the checksum word, the TM IT is - * left enabled. If the TC Execution task does not - * react quickly to the TM_READY message, and disable - * the TM IT before the transmission of the checksum - * word is completed, a new TM IT can invoke - * TM_InterruptService once again, sending the checksum - * word a second time, and perhaps a third time etc. - */ + /* There is a design error in TM_InterruptService: + when the Read Data Memory sequence ends, with the + transmission of the checksum word, the TM IT is + left enabled. If the TC Execution task does not + react quickly to the TM_READY message, and disable + the TM IT before the transmission of the checksum + word is completed, a new TM IT can invoke + TM_InterruptService once again, sending the checksum + word a second time, and perhaps a third time etc. + */ } -void Clear_Errors (void) +void Clear_Errors ( void ) /* Executes the ERROR_STATUS_CLEAR TC. */ { - Exec_TC (ERROR_STATUS_CLEAR, ERROR_STATUS_CLEAR, Prob4a); + Exec_TC ( ERROR_STATUS_CLEAR, ERROR_STATUS_CLEAR, Prob4a ); - Check_No_Errors (); - Check (TC_state == TC_handling_e); + Check_No_Errors (); + Check ( TC_state == TC_handling_e ); } -static void TC_Task_Tests (void) +static void TC_Task_Tests ( void ) /* Test of TelecommandExecutionTask. */ { - unsigned char chsum; + unsigned char chsum; -#if defined(TRACE_HARNESS) - printf ("\nTC_Task_Tests\n"); -#endif + #if defined(TRACE_HARNESS) + printf ( "\nTC_Task_Tests\n" ); + #endif - CASE("TC = ERROR_STATUS_CLEAR, ok"); + CASE( "TC = ERROR_STATUS_CLEAR, ok" ); - /* Flag an error manually: */ - telemetry_data.error_status = PARITY_ERROR; + /* Flag an error manually: */ + telemetry_data.error_status = PARITY_ERROR; - Send_TC (ERROR_STATUS_CLEAR, ERROR_STATUS_CLEAR); + Send_TC ( ERROR_STATUS_CLEAR, ERROR_STATUS_CLEAR ); - /* The parity-error flag is not yet reset, because */ - /* the TC was not yet executed: */ + /* The parity-error flag is not yet reset, because */ + /* the TC was not yet executed: */ - Check_Nonzero (telemetry_data.error_status & PARITY_ERROR); + Check_Nonzero ( telemetry_data.error_status & PARITY_ERROR ); - Handle_TC (Prob4a); + Handle_TC ( Prob4a ); - /* Now the parity-error flag is reset: */ + /* Now the parity-error flag is reset: */ - Check_No_Errors (); + Check_No_Errors (); - CASE("TC to set SU parameters"); + CASE( "TC to set SU parameters" ); - Exec_TC (SET_SU_1_PLASMA_1P_THRESHOLD, 23, Prob4a); - Exec_TC (SET_SU_2_PLASMA_1P_THRESHOLD, 26, Prob4a); - Exec_TC (SET_SU_3_PLASMA_1P_THRESHOLD, 32, Prob4a); - Exec_TC (SET_SU_4_PLASMA_1P_THRESHOLD, 102, Prob4a); + Exec_TC ( SET_SU_1_PLASMA_1P_THRESHOLD, 23, Prob4a ); + Exec_TC ( SET_SU_2_PLASMA_1P_THRESHOLD, 26, Prob4a ); + Exec_TC ( SET_SU_3_PLASMA_1P_THRESHOLD, 32, Prob4a ); + Exec_TC ( SET_SU_4_PLASMA_1P_THRESHOLD, 102, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_SU_1_PLASMA_1M_THRESHOLD, 205, Prob4a); - Exec_TC (SET_SU_2_PLASMA_1M_THRESHOLD, 123, Prob4a); - Exec_TC (SET_SU_3_PLASMA_1M_THRESHOLD, 99, Prob4a); - Exec_TC (SET_SU_4_PLASMA_1M_THRESHOLD, 1, Prob4a); + Exec_TC ( SET_SU_1_PLASMA_1M_THRESHOLD, 205, Prob4a ); + Exec_TC ( SET_SU_2_PLASMA_1M_THRESHOLD, 123, Prob4a ); + Exec_TC ( SET_SU_3_PLASMA_1M_THRESHOLD, 99, Prob4a ); + Exec_TC ( SET_SU_4_PLASMA_1M_THRESHOLD, 1, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_SU_1_PIEZO_THRESHOLD, 14, Prob4a); - Exec_TC (SET_SU_2_PIEZO_THRESHOLD, 54, Prob4a); - Exec_TC (SET_SU_3_PIEZO_THRESHOLD, 74, Prob4a); - Exec_TC (SET_SU_4_PIEZO_THRESHOLD, 104, Prob4a); + Exec_TC ( SET_SU_1_PIEZO_THRESHOLD, 14, Prob4a ); + Exec_TC ( SET_SU_2_PIEZO_THRESHOLD, 54, Prob4a ); + Exec_TC ( SET_SU_3_PIEZO_THRESHOLD, 74, Prob4a ); + Exec_TC ( SET_SU_4_PIEZO_THRESHOLD, 104, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_SU_1_PLASMA_1P_CLASS_LEVEL, 104, Prob4a); - Exec_TC (SET_SU_2_PLASMA_1P_CLASS_LEVEL, 204, Prob4a); - Exec_TC (SET_SU_3_PLASMA_1P_CLASS_LEVEL, 214, Prob4a); - Exec_TC (SET_SU_4_PLASMA_1P_CLASS_LEVEL, 234, Prob4a); + Exec_TC ( SET_SU_1_PLASMA_1P_CLASS_LEVEL, 104, Prob4a ); + Exec_TC ( SET_SU_2_PLASMA_1P_CLASS_LEVEL, 204, Prob4a ); + Exec_TC ( SET_SU_3_PLASMA_1P_CLASS_LEVEL, 214, Prob4a ); + Exec_TC ( SET_SU_4_PLASMA_1P_CLASS_LEVEL, 234, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_SU_1_PLASMA_1M_CLASS_LEVEL, 104, Prob4a); - Exec_TC (SET_SU_2_PLASMA_1M_CLASS_LEVEL, 88, Prob4a); - Exec_TC (SET_SU_3_PLASMA_1M_CLASS_LEVEL, 66, Prob4a); - Exec_TC (SET_SU_4_PLASMA_1M_CLASS_LEVEL, 33, Prob4a); + Exec_TC ( SET_SU_1_PLASMA_1M_CLASS_LEVEL, 104, Prob4a ); + Exec_TC ( SET_SU_2_PLASMA_1M_CLASS_LEVEL, 88, Prob4a ); + Exec_TC ( SET_SU_3_PLASMA_1M_CLASS_LEVEL, 66, Prob4a ); + Exec_TC ( SET_SU_4_PLASMA_1M_CLASS_LEVEL, 33, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_SU_1_PLASMA_2P_CLASS_LEVEL, 61, Prob4a); - Exec_TC (SET_SU_2_PLASMA_2P_CLASS_LEVEL, 21, Prob4a); - Exec_TC (SET_SU_3_PLASMA_2P_CLASS_LEVEL, 81, Prob4a); - Exec_TC (SET_SU_4_PLASMA_2P_CLASS_LEVEL, 11, Prob4a); + Exec_TC ( SET_SU_1_PLASMA_2P_CLASS_LEVEL, 61, Prob4a ); + Exec_TC ( SET_SU_2_PLASMA_2P_CLASS_LEVEL, 21, Prob4a ); + Exec_TC ( SET_SU_3_PLASMA_2P_CLASS_LEVEL, 81, Prob4a ); + Exec_TC ( SET_SU_4_PLASMA_2P_CLASS_LEVEL, 11, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_SU_1_PIEZO_1_CLASS_LEVEL, 14, Prob4a); - Exec_TC (SET_SU_2_PIEZO_1_CLASS_LEVEL, 24, Prob4a); - Exec_TC (SET_SU_3_PIEZO_1_CLASS_LEVEL, 33, Prob4a); - Exec_TC (SET_SU_4_PIEZO_1_CLASS_LEVEL, 77, Prob4a); + Exec_TC ( SET_SU_1_PIEZO_1_CLASS_LEVEL, 14, Prob4a ); + Exec_TC ( SET_SU_2_PIEZO_1_CLASS_LEVEL, 24, Prob4a ); + Exec_TC ( SET_SU_3_PIEZO_1_CLASS_LEVEL, 33, Prob4a ); + Exec_TC ( SET_SU_4_PIEZO_1_CLASS_LEVEL, 77, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_SU_1_PIEZO_2_CLASS_LEVEL, 14, Prob4a); - Exec_TC (SET_SU_2_PIEZO_2_CLASS_LEVEL, 14, Prob4a); - Exec_TC (SET_SU_3_PIEZO_2_CLASS_LEVEL, 14, Prob4a); - Exec_TC (SET_SU_4_PIEZO_2_CLASS_LEVEL, 14, Prob4a); + Exec_TC ( SET_SU_1_PIEZO_2_CLASS_LEVEL, 14, Prob4a ); + Exec_TC ( SET_SU_2_PIEZO_2_CLASS_LEVEL, 14, Prob4a ); + Exec_TC ( SET_SU_3_PIEZO_2_CLASS_LEVEL, 14, Prob4a ); + Exec_TC ( SET_SU_4_PIEZO_2_CLASS_LEVEL, 14, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_SU_1_PLASMA_1E_1I_MAX_TIME, 191, Prob4a); - Exec_TC (SET_SU_2_PLASMA_1E_1I_MAX_TIME, 171, Prob4a); - Exec_TC (SET_SU_3_PLASMA_1E_1I_MAX_TIME, 161, Prob4a); - Exec_TC (SET_SU_4_PLASMA_1E_1I_MAX_TIME, 151, Prob4a); + Exec_TC ( SET_SU_1_PLASMA_1E_1I_MAX_TIME, 191, Prob4a ); + Exec_TC ( SET_SU_2_PLASMA_1E_1I_MAX_TIME, 171, Prob4a ); + Exec_TC ( SET_SU_3_PLASMA_1E_1I_MAX_TIME, 161, Prob4a ); + Exec_TC ( SET_SU_4_PLASMA_1E_1I_MAX_TIME, 151, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_SU_1_PLASMA_1E_PZT_MIN_TIME, 11, Prob4a); - Exec_TC (SET_SU_2_PLASMA_1E_PZT_MIN_TIME, 22, Prob4a); - Exec_TC (SET_SU_3_PLASMA_1E_PZT_MIN_TIME, 33, Prob4a); - Exec_TC (SET_SU_4_PLASMA_1E_PZT_MIN_TIME, 44, Prob4a); + Exec_TC ( SET_SU_1_PLASMA_1E_PZT_MIN_TIME, 11, Prob4a ); + Exec_TC ( SET_SU_2_PLASMA_1E_PZT_MIN_TIME, 22, Prob4a ); + Exec_TC ( SET_SU_3_PLASMA_1E_PZT_MIN_TIME, 33, Prob4a ); + Exec_TC ( SET_SU_4_PLASMA_1E_PZT_MIN_TIME, 44, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_SU_1_PLASMA_1E_PZT_MAX_TIME, 111, Prob4a); - Exec_TC (SET_SU_2_PLASMA_1E_PZT_MAX_TIME, 122, Prob4a); - Exec_TC (SET_SU_3_PLASMA_1E_PZT_MAX_TIME, 133, Prob4a); - Exec_TC (SET_SU_4_PLASMA_1E_PZT_MAX_TIME, 144, Prob4a); + Exec_TC ( SET_SU_1_PLASMA_1E_PZT_MAX_TIME, 111, Prob4a ); + Exec_TC ( SET_SU_2_PLASMA_1E_PZT_MAX_TIME, 122, Prob4a ); + Exec_TC ( SET_SU_3_PLASMA_1E_PZT_MAX_TIME, 133, Prob4a ); + Exec_TC ( SET_SU_4_PLASMA_1E_PZT_MAX_TIME, 144, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_SU_1_PLASMA_1I_PZT_MIN_TIME, 11, Prob4a); - Exec_TC (SET_SU_2_PLASMA_1I_PZT_MIN_TIME, 10, Prob4a); - Exec_TC (SET_SU_3_PLASMA_1I_PZT_MIN_TIME, 9, Prob4a); - Exec_TC (SET_SU_4_PLASMA_1I_PZT_MIN_TIME, 8, Prob4a); + Exec_TC ( SET_SU_1_PLASMA_1I_PZT_MIN_TIME, 11, Prob4a ); + Exec_TC ( SET_SU_2_PLASMA_1I_PZT_MIN_TIME, 10, Prob4a ); + Exec_TC ( SET_SU_3_PLASMA_1I_PZT_MIN_TIME, 9, Prob4a ); + Exec_TC ( SET_SU_4_PLASMA_1I_PZT_MIN_TIME, 8, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_SU_1_PLASMA_1I_PZT_MAX_TIME, 211, Prob4a); - Exec_TC (SET_SU_2_PLASMA_1I_PZT_MAX_TIME, 210, Prob4a); - Exec_TC (SET_SU_3_PLASMA_1I_PZT_MAX_TIME, 209, Prob4a); - Exec_TC (SET_SU_4_PLASMA_1I_PZT_MAX_TIME, 208, Prob4a); + Exec_TC ( SET_SU_1_PLASMA_1I_PZT_MAX_TIME, 211, Prob4a ); + Exec_TC ( SET_SU_2_PLASMA_1I_PZT_MAX_TIME, 210, Prob4a ); + Exec_TC ( SET_SU_3_PLASMA_1I_PZT_MAX_TIME, 209, Prob4a ); + Exec_TC ( SET_SU_4_PLASMA_1I_PZT_MAX_TIME, 208, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - CASE("TC to set classification coefficients"); + CASE( "TC to set classification coefficients" ); - Exec_TC (SET_COEFFICIENT_1, 1, Prob4a); - Exec_TC (SET_COEFFICIENT_2, 2, Prob4a); - Exec_TC (SET_COEFFICIENT_3, 3, Prob4a); - Exec_TC (SET_COEFFICIENT_4, 4, Prob4a); - Exec_TC (SET_COEFFICIENT_5, 5, Prob4a); + Exec_TC ( SET_COEFFICIENT_1, 1, Prob4a ); + Exec_TC ( SET_COEFFICIENT_2, 2, Prob4a ); + Exec_TC ( SET_COEFFICIENT_3, 3, Prob4a ); + Exec_TC ( SET_COEFFICIENT_4, 4, Prob4a ); + Exec_TC ( SET_COEFFICIENT_5, 5, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - CASE("TC to patch code memory, call patch"); + CASE( "TC to patch code memory, call patch" ); - Send_Patch_Code (0x1100, &chsum); + Send_Patch_Code ( 0x1100, &chsum ); - chsum ^= 0x5A; /* Call patch function. */ + chsum ^= 0x5A; /* Call patch function. */ - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Send_TC_Word (0x5A00 | chsum); - Handle_TC (Prob4a); + Send_TC_Word ( 0x5A00 | chsum ); + Handle_TC ( Prob4a ); - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Check_No_Errors (); - Check (TC_state == TC_handling_e); + Check_No_Errors (); + Check ( TC_state == TC_handling_e ); - CASE("TC to patch code memory, no action"); + CASE( "TC to patch code memory, no action" ); - Send_Patch_Code (0x1300, &chsum); + Send_Patch_Code ( 0x1300, &chsum ); - chsum ^= 0x00; /* No action. */ + chsum ^= 0x00; /* No action. */ - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Send_TC_Word (0x0000 | chsum); - Handle_TC (Prob4a); + Send_TC_Word ( 0x0000 | chsum ); + Handle_TC ( Prob4a ); - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Check_No_Errors (); - Check (TC_state == TC_handling_e); + Check_No_Errors (); + Check ( TC_state == TC_handling_e ); - CASE("TC to patch code memory, soft reset"); + CASE( "TC to patch code memory, soft reset" ); - Send_Patch_Code (0x1400, &chsum); + Send_Patch_Code ( 0x1400, &chsum ); - chsum ^= 0x09; /* Sof Reset. */ + chsum ^= 0x09; /* Sof Reset. */ - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Send_TC_Word (0x0900 | chsum); - Handle_TC (Prob4a); + Send_TC_Word ( 0x0900 | chsum ); + Handle_TC ( Prob4a ); - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Check_No_Errors (); - Check (TC_state == TC_handling_e); + Check_No_Errors (); + Check ( TC_state == TC_handling_e ); - CASE("TC to patch code memory, warm reset"); + CASE( "TC to patch code memory, warm reset" ); - Send_Patch_Code (0x2100, &chsum); + Send_Patch_Code ( 0x2100, &chsum ); - chsum ^= 0x37; /* Soft Reset. */ + chsum ^= 0x37; /* Soft Reset. */ - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Send_TC_Word (0x3700 | chsum); - Handle_TC (Prob4a); + Send_TC_Word ( 0x3700 | chsum ); + Handle_TC ( Prob4a ); - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Check_No_Errors (); - Check (TC_state == TC_handling_e); + Check_No_Errors (); + Check ( TC_state == TC_handling_e ); - CASE("TC to patch code memory, invalid action"); + CASE( "TC to patch code memory, invalid action" ); - Send_Patch_Code (0x2400, &chsum); + Send_Patch_Code ( 0x2400, &chsum ); - chsum ^= 0x62; /* Invalid. */ + chsum ^= 0x62; /* Invalid. */ - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Send_TC_Word (0x6200 | chsum); - Handle_TC (Prob4a); + Send_TC_Word ( 0x6200 | chsum ); + Handle_TC ( Prob4a ); - Check (telemetry_data.error_status == TC_ERROR); + Check ( telemetry_data.error_status == TC_ERROR ); - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Clear_Errors (); + Clear_Errors (); - CASE("TC to patch code memory, invalid address"); + CASE( "TC to patch code memory, invalid address" ); - Send_Patch_Code (0x0fff, &chsum); + Send_Patch_Code ( 0x0fff, &chsum ); - chsum ^= 0x00; /* No action. */ + chsum ^= 0x00; /* No action. */ - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Send_TC_Word (0x0000 | chsum); - Handle_TC (Prob4a); + Send_TC_Word ( 0x0000 | chsum ); + Handle_TC ( Prob4a ); - Check (telemetry_data.error_status == TC_ERROR); + Check ( telemetry_data.error_status == TC_ERROR ); - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Clear_Errors (); + Clear_Errors (); - CASE("TC to patch code memory, checksum error"); + CASE( "TC to patch code memory, checksum error" ); - Send_Patch_Code (0x1200, &chsum); + Send_Patch_Code ( 0x1200, &chsum ); - chsum ^= 0x5A; /* Correct checksum. */ - chsum ^= 0xff; /* Wrong checksum. */ + chsum ^= 0x5A; /* Correct checksum. */ + chsum ^= 0xff; /* Wrong checksum. */ - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Send_TC_Word (0x5A00 | chsum); - Handle_TC (Prob4a); + Send_TC_Word ( 0x5A00 | chsum ); + Handle_TC ( Prob4a ); - Check_Nonzero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); - Check (TC_state == TC_handling_e); + Check_Nonzero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); + Check ( TC_state == TC_handling_e ); - Clear_Errors (); + Clear_Errors (); - CASE("TC to patch code, TC sequence error at first word"); + CASE( "TC to patch code, TC sequence error at first word" ); - Exec_TC (WRITE_CODE_MEMORY_LSB, 0x32, Prob4a); + Exec_TC ( WRITE_CODE_MEMORY_LSB, 0x32, Prob4a ); - Check (telemetry_data.error_status == TC_ERROR); + Check ( telemetry_data.error_status == TC_ERROR ); - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Clear_Errors (); + Clear_Errors (); - CASE("TC to patch code, TC sequence error at second word"); + CASE( "TC to patch code, TC sequence error at second word" ); - Exec_TC (WRITE_CODE_MEMORY_MSB, 0x32, Prob4a); + Exec_TC ( WRITE_CODE_MEMORY_MSB, 0x32, Prob4a ); - Check_No_Errors (); - Check (TC_state == write_memory_e); + Check_No_Errors (); + Check ( TC_state == write_memory_e ); - Exec_TC (CLEAR_WATCHDOG_FAILURES, CLEAR_WATCHDOG_FAILURES, Prob4a); + Exec_TC ( CLEAR_WATCHDOG_FAILURES, CLEAR_WATCHDOG_FAILURES, Prob4a ); - Check (telemetry_data.error_status == TC_ERROR); + Check ( telemetry_data.error_status == TC_ERROR ); - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Clear_Errors (); + Clear_Errors (); - CASE("TC to patch data memory"); + CASE( "TC to patch data memory" ); - Send_Patch_Data (0x2200, &chsum); + Send_Patch_Data ( 0x2200, &chsum ); - chsum ^= 0x11; /* Irrelevant for data patch. */ + chsum ^= 0x11; /* Irrelevant for data patch. */ - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Send_TC_Word (0x1100 | chsum); - Handle_TC (Prob4a); + Send_TC_Word ( 0x1100 | chsum ); + Handle_TC ( Prob4a ); - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Check_No_Errors (); - Check (TC_state == TC_handling_e); + Check_No_Errors (); + Check ( TC_state == TC_handling_e ); - CASE("TC to patch data memory, address error"); + CASE( "TC to patch data memory, address error" ); - Send_Patch_Data (0xfef0, &chsum); + Send_Patch_Data ( 0xfef0, &chsum ); - chsum ^= 0x11; /* Irrelevant for data patch. */ + chsum ^= 0x11; /* Irrelevant for data patch. */ - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Send_TC_Word (0x1100 | chsum); - Handle_TC (Prob4a); + Send_TC_Word ( 0x1100 | chsum ); + Handle_TC ( Prob4a ); - Check (telemetry_data.error_status == TC_ERROR); - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check ( telemetry_data.error_status == TC_ERROR ); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Clear_Errors (); + Clear_Errors (); - CASE("TC to patch data memory, TC sequence error at first word"); + CASE( "TC to patch data memory, TC sequence error at first word" ); - Exec_TC (WRITE_DATA_MEMORY_LSB, 0x32, Prob4a); + Exec_TC ( WRITE_DATA_MEMORY_LSB, 0x32, Prob4a ); - Check (telemetry_data.error_status == TC_ERROR); + Check ( telemetry_data.error_status == TC_ERROR ); - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Clear_Errors (); + Clear_Errors (); - CASE("TC to patch data memory, TC sequence error at second word"); + CASE( "TC to patch data memory, TC sequence error at second word" ); - Exec_TC (WRITE_DATA_MEMORY_MSB, 0x32, Prob4a); + Exec_TC ( WRITE_DATA_MEMORY_MSB, 0x32, Prob4a ); - Check_No_Errors (); - Check (TC_state == write_memory_e); + Check_No_Errors (); + Check ( TC_state == write_memory_e ); - Exec_TC (CLEAR_WATCHDOG_FAILURES, CLEAR_WATCHDOG_FAILURES, Prob4a); + Exec_TC ( CLEAR_WATCHDOG_FAILURES, CLEAR_WATCHDOG_FAILURES, Prob4a ); - Check (telemetry_data.error_status == TC_ERROR); + Check ( telemetry_data.error_status == TC_ERROR ); - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Clear_Errors (); + Clear_Errors (); - CASE("TC to patch data memory, checksum error"); + CASE( "TC to patch data memory, checksum error" ); - Send_Patch_Data (0x2300, &chsum); + Send_Patch_Data ( 0x2300, &chsum ); - chsum ^= 0x11; /* Correct checksum. */ - chsum ^= 0xff; /* Wrong checksum. */ + chsum ^= 0x11; /* Correct checksum. */ + chsum ^= 0xff; /* Wrong checksum. */ - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Send_TC_Word (0x1100 | chsum); - Handle_TC (Prob4a); + Send_TC_Word ( 0x1100 | chsum ); + Handle_TC ( Prob4a ); - Check_Nonzero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); - Check (TC_state == TC_handling_e); + Check_Nonzero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); + Check ( TC_state == TC_handling_e ); - Clear_Errors (); + Clear_Errors (); - CASE("TC to patch data memory, time-out on TC word reception"); + CASE( "TC to patch data memory, time-out on TC word reception" ); - Send_Patch_Data (0x2200, &chsum); + Send_Patch_Data ( 0x2200, &chsum ); - chsum ^= 0x11; /* Irrelevant for data patch. */ + chsum ^= 0x11; /* Irrelevant for data patch. */ - Check (TC_state == memory_patch_e); - Check_Zero (telemetry_data.mode_status & MEMORY_WRITE_ERROR); + Check ( TC_state == memory_patch_e ); + Check_Zero ( telemetry_data.mode_status & MEMORY_WRITE_ERROR ); - Check (mail_count[TCTM_MAILBOX] == 0); + Check ( mail_count[ TCTM_MAILBOX ] == 0 ); - /* Empty mailbox => WaitMail signals "time-out". */ + /* Empty mailbox => WaitMail signals "time-out". */ - FOR_PROBLEM(Prob4a); - HandleTelecommand (); - END_PROBLEM; + FOR_PROBLEM( Prob4a ); + HandleTelecommand (); + END_PROBLEM; - Check (TC_state == TC_handling_e); - Check (telemetry_data.error_status == TC_ERROR); + Check ( TC_state == TC_handling_e ); + Check ( telemetry_data.error_status == TC_ERROR ); - Clear_Errors (); + Clear_Errors (); - CASE("TC timeout during TC handling, normal"); + CASE( "TC timeout during TC handling, normal" ); - Check (mail_count[TCTM_MAILBOX] == 0); + Check ( mail_count[ TCTM_MAILBOX ] == 0 ); - /* Empty mailbox => WaitMail signals "time-out". */ + /* Empty mailbox => WaitMail signals "time-out". */ - FOR_PROBLEM(Prob4a); - HandleTelecommand (); - END_PROBLEM; + FOR_PROBLEM( Prob4a ); + HandleTelecommand (); + END_PROBLEM; - Check (TC_state == TC_handling_e); - Check_No_Errors (); + Check ( TC_state == TC_handling_e ); + Check_No_Errors (); - CASE("TC to read data memory"); + CASE( "TC to read data memory" ); - Read_Data_Memory (0x2041); + Read_Data_Memory ( 0x2041 ); - CASE("TC to read data memory, address error"); + CASE( "TC to read data memory, address error" ); - Exec_TC (READ_DATA_MEMORY_MSB, 0xfe, Prob4a); + Exec_TC ( READ_DATA_MEMORY_MSB, 0xfe, Prob4a ); - Check_No_Errors (); - Check (TC_state == read_memory_e); + Check_No_Errors (); + Check ( TC_state == read_memory_e ); - Exec_TC (READ_DATA_MEMORY_LSB, 0xf0, Prob4a); + Exec_TC ( READ_DATA_MEMORY_LSB, 0xf0, Prob4a ); - Check (telemetry_data.error_status == TC_ERROR); + Check ( telemetry_data.error_status == TC_ERROR ); - Clear_Errors (); + Clear_Errors (); - CASE("TC to read data memory, TC sequence error at first word"); + CASE( "TC to read data memory, TC sequence error at first word" ); - Exec_TC (READ_DATA_MEMORY_LSB, 0xfe, Prob4a); + Exec_TC ( READ_DATA_MEMORY_LSB, 0xfe, Prob4a ); - Check (telemetry_data.error_status == TC_ERROR); + Check ( telemetry_data.error_status == TC_ERROR ); - Clear_Errors (); + Clear_Errors (); - CASE("TC to read data memory, TC sequence error at second word"); + CASE( "TC to read data memory, TC sequence error at second word" ); - Exec_TC (READ_DATA_MEMORY_MSB, 0xab, Prob4a); + Exec_TC ( READ_DATA_MEMORY_MSB, 0xab, Prob4a ); - Check_No_Errors (); - Check (TC_state == read_memory_e); + Check_No_Errors (); + Check ( TC_state == read_memory_e ); - Exec_TC (CLEAR_WATCHDOG_FAILURES, CLEAR_WATCHDOG_FAILURES, Prob4a); + Exec_TC ( CLEAR_WATCHDOG_FAILURES, CLEAR_WATCHDOG_FAILURES, Prob4a ); - Check (telemetry_data.error_status == TC_ERROR); + Check ( telemetry_data.error_status == TC_ERROR ); - Clear_Errors (); + Clear_Errors (); - CASE("TC = CLEAR_WATCHDOG_FAILURES"); + CASE( "TC = CLEAR_WATCHDOG_FAILURES" ); - telemetry_data.watchdog_failures = 3; + telemetry_data.watchdog_failures = 3; - Exec_TC (CLEAR_WATCHDOG_FAILURES, CLEAR_WATCHDOG_FAILURES, Prob4a); + Exec_TC ( CLEAR_WATCHDOG_FAILURES, CLEAR_WATCHDOG_FAILURES, Prob4a ); - Check_No_Errors (); - Check_Zero (telemetry_data.watchdog_failures); + Check_No_Errors (); + Check_Zero ( telemetry_data.watchdog_failures ); - CASE("TC = CLEAR_CHECKSUM_FAILURES"); + CASE( "TC = CLEAR_CHECKSUM_FAILURES" ); - telemetry_data.checksum_failures = 9; + telemetry_data.checksum_failures = 9; - Exec_TC (CLEAR_CHECKSUM_FAILURES, CLEAR_CHECKSUM_FAILURES, Prob4a); + Exec_TC ( CLEAR_CHECKSUM_FAILURES, CLEAR_CHECKSUM_FAILURES, Prob4a ); - Check_No_Errors (); - Check_Zero (telemetry_data.checksum_failures); + Check_No_Errors (); + Check_Zero ( telemetry_data.checksum_failures ); - CASE("TC to set DEBIE time"); + CASE( "TC to set DEBIE time" ); - Exec_TC (SET_TIME_BYTE_3, 0x44, Prob4a); + Exec_TC ( SET_TIME_BYTE_3, 0x44, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_TIME_BYTE_2, 0x33, Prob4a); + Exec_TC ( SET_TIME_BYTE_2, 0x33, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_TIME_BYTE_1, 0x22, Prob4a); + Exec_TC ( SET_TIME_BYTE_1, 0x22, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_TIME_BYTE_0, 0x11, Prob4a); + Exec_TC ( SET_TIME_BYTE_0, 0x11, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Check (internal_time == 0x44332211); + Check ( internal_time == 0x44332211 ); - CASE("TC to set DEBIE time, sequence error at byte 2"); + CASE( "TC to set DEBIE time, sequence error at byte 2" ); - internal_time = 0x01122334; + internal_time = 0x01122334; - Exec_TC (SET_TIME_BYTE_3, 0x44, Prob4a); + Exec_TC ( SET_TIME_BYTE_3, 0x44, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_TIME_BYTE_1, 0x33, Prob4a); + Exec_TC ( SET_TIME_BYTE_1, 0x33, Prob4a ); - Check (telemetry_data.error_status == TC_ERROR); + Check ( telemetry_data.error_status == TC_ERROR ); - Check (internal_time == 0x44000000); + Check ( internal_time == 0x44000000 ); - Clear_Errors (); + Clear_Errors (); - CASE("TC to set DEBIE time, sequence error at byte 1"); + CASE( "TC to set DEBIE time, sequence error at byte 1" ); - internal_time = 0x01122334; + internal_time = 0x01122334; - Exec_TC (SET_TIME_BYTE_3, 0x44, Prob4a); + Exec_TC ( SET_TIME_BYTE_3, 0x44, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_TIME_BYTE_2, 0x33, Prob4a); + Exec_TC ( SET_TIME_BYTE_2, 0x33, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_TIME_BYTE_0, 0x22, Prob4a); + Exec_TC ( SET_TIME_BYTE_0, 0x22, Prob4a ); - Check (telemetry_data.error_status == TC_ERROR); + Check ( telemetry_data.error_status == TC_ERROR ); - Check (internal_time == 0x44330000); + Check ( internal_time == 0x44330000 ); - Clear_Errors (); + Clear_Errors (); - CASE("TC to set DEBIE time, sequence error at byte 0"); + CASE( "TC to set DEBIE time, sequence error at byte 0" ); - internal_time = 0x01122334; + internal_time = 0x01122334; - Exec_TC (SET_TIME_BYTE_3, 0x44, Prob4a); + Exec_TC ( SET_TIME_BYTE_3, 0x44, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_TIME_BYTE_2, 0x33, Prob4a); + Exec_TC ( SET_TIME_BYTE_2, 0x33, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_TIME_BYTE_1, 0x22, Prob4a); + Exec_TC ( SET_TIME_BYTE_1, 0x22, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Exec_TC (SET_TIME_BYTE_2, 0x11, Prob4a); + Exec_TC ( SET_TIME_BYTE_2, 0x11, Prob4a ); - Check (telemetry_data.error_status == TC_ERROR); + Check ( telemetry_data.error_status == TC_ERROR ); - Check (internal_time == 0x44332200); + Check ( internal_time == 0x44332200 ); - Clear_Errors (); + Clear_Errors (); - CASE("TC = SOFT_RESET"); + CASE( "TC = SOFT_RESET" ); - Exec_TC (SOFT_RESET, SOFT_RESET, Prob4a); + Exec_TC ( SOFT_RESET, SOFT_RESET, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - CASE("TC = STOP_ACQUISITION in STAND_BY, fail"); + CASE( "TC = STOP_ACQUISITION in STAND_BY, fail" ); - Check (GetMode() == STAND_BY); + Check ( GetMode() == STAND_BY ); - Exec_TC (STOP_ACQUISITION, STOP_ACQUISITION, Prob4a); + Exec_TC ( STOP_ACQUISITION, STOP_ACQUISITION, Prob4a ); - Check (telemetry_data.error_status == TC_ERROR); - Check (GetMode() == STAND_BY); + Check ( telemetry_data.error_status == TC_ERROR ); + Check ( GetMode() == STAND_BY ); - Clear_Errors (); + Clear_Errors (); - /* Telecommands tested elsewhere: + /* Telecommands tested elsewhere: - ERROR_STATUS_CLEAR See TC_ISR_Tests, TM_Tests, others. - SEND_STATUS_REGISTER See TM_Tests. - SEND_SCIENCE_DATA_FILE See TM_Tests, Acquisition_Tests. - START_ACQUISITION See Acquisition_Tests. - STOP_ACQUISITION See Acquisition_Tests. - SWITCH_SU_1/2/3/4 See Acquisition_Tests, SU_Self_Test_Tests. - TM_READY message See TM_Tests. - */ + ERROR_STATUS_CLEAR See TC_ISR_Tests, TM_Tests, others. + SEND_STATUS_REGISTER See TM_Tests. + SEND_SCIENCE_DATA_FILE See TM_Tests, Acquisition_Tests. + START_ACQUISITION See Acquisition_Tests. + STOP_ACQUISITION See Acquisition_Tests. + SWITCH_SU_1/2/3/4 See Acquisition_Tests, SU_Self_Test_Tests. + TM_READY message See TM_Tests. + */ } -void Monitor_Health (int problem) +void Monitor_Health ( int problem ) /* Executes HandleHealthMonitoring for a particular analysis problem. */ { - start_conversion_count = 0; - end_of_adc_count = 0; + start_conversion_count = 0; + end_of_adc_count = 0; - FOR_PROBLEM(problem); - HandleHealthMonitoring(); - END_PROBLEM; + FOR_PROBLEM( problem ); + HandleHealthMonitoring(); + END_PROBLEM; - Report_Start_Conversion_Count (problem); - Report_End_Of_ADC_Count (problem); + Report_Start_Conversion_Count ( problem ); + Report_End_Of_ADC_Count ( problem ); } -void Monitoring_Task_Tests (void) +void Monitoring_Task_Tests ( void ) /* Tests of the Health Monitoring task. */ { - int sec; - int tot_errors, max_errors = 20; + int sec; + int tot_errors, max_errors = 20; - /* Reset all cycles: */ + /* Reset all cycles: */ - health_mon_round = HEALTH_COUNT ; - temp_meas_count = TEMP_COUNT ; - voltage_meas_count = VOLTAGE_COUNT; - checksum_count = CHECK_COUNT ; + health_mon_round = HEALTH_COUNT ; + temp_meas_count = TEMP_COUNT ; + voltage_meas_count = VOLTAGE_COUNT; + checksum_count = CHECK_COUNT ; - Set_AD_Nominal (); - /* To avoid monitoring alarms. */ + Set_AD_Nominal (); + /* To avoid monitoring alarms. */ - CASE("Monitoring without errors or interrupting hits"); + CASE( "Monitoring without errors or interrupting hits" ); - /* A/D conversions ready on second poll: */ - Set_AD_Delay (2); + /* A/D conversions ready on second poll: */ + Set_AD_Delay ( 2 ); - Check (health_mon_round == HEALTH_COUNT ); - Check (temp_meas_count == TEMP_COUNT ); - Check (voltage_meas_count == VOLTAGE_COUNT); - Check (checksum_count == CHECK_COUNT ); + Check ( health_mon_round == HEALTH_COUNT ); + Check ( temp_meas_count == TEMP_COUNT ); + Check ( voltage_meas_count == VOLTAGE_COUNT ); + Check ( checksum_count == CHECK_COUNT ); - /* The first 9 seconds: */ + /* The first 9 seconds: */ - _Pragma("loopbound min 9 max 9") - for (sec = 1; sec <= 9; sec ++) - { - Monitor_Health (Prob6a); + _Pragma( "loopbound min 9 max 9" ) + for ( sec = 1; sec <= 9; sec ++ ) { + Monitor_Health ( Prob6a ); - Check (health_mon_round == HEALTH_COUNT - sec); - Check (temp_meas_count == TEMP_COUNT ); - Check (voltage_meas_count == VOLTAGE_COUNT); - Check (checksum_count == CHECK_COUNT - sec); - } + Check ( health_mon_round == HEALTH_COUNT - sec ); + Check ( temp_meas_count == TEMP_COUNT ); + Check ( voltage_meas_count == VOLTAGE_COUNT ); + Check ( checksum_count == CHECK_COUNT - sec ); + } - /* The 10th second: */ + /* The 10th second: */ - Monitor_Health (Prob6a); + Monitor_Health ( Prob6a ); - Check (health_mon_round == HEALTH_COUNT ); - Check (temp_meas_count == TEMP_COUNT - 1 ); - Check (voltage_meas_count == VOLTAGE_COUNT - 1 ); - Check (checksum_count == CHECK_COUNT - 10); + Check ( health_mon_round == HEALTH_COUNT ); + Check ( temp_meas_count == TEMP_COUNT - 1 ); + Check ( voltage_meas_count == VOLTAGE_COUNT - 1 ); + Check ( checksum_count == CHECK_COUNT - 10 ); - /* The remaining 170 seconds of the full period: */ + /* The remaining 170 seconds of the full period: */ - _Pragma("loopbound min 170 max 170") - for (sec = 11; sec <= 180; sec ++) - { - Monitor_Health (Prob6a); - } + _Pragma( "loopbound min 170 max 170" ) + for ( sec = 11; sec <= 180; sec ++ ) + Monitor_Health ( Prob6a ); - Check (health_mon_round == HEALTH_COUNT ); - Check (temp_meas_count == TEMP_COUNT ); - Check (voltage_meas_count == VOLTAGE_COUNT); - Check (checksum_count == CHECK_COUNT ); + Check ( health_mon_round == HEALTH_COUNT ); + Check ( temp_meas_count == TEMP_COUNT ); + Check ( voltage_meas_count == VOLTAGE_COUNT ); + Check ( checksum_count == CHECK_COUNT ); - Check_No_Errors (); + Check_No_Errors (); - CASE("Monitoring without errors, at most one interrupting hit"); + CASE( "Monitoring without errors, at most one interrupting hit" ); - total_adc_hits = 0; + total_adc_hits = 0; - _Pragma("loopbound min 180 max 180") - for (sec = 1; sec <= 180; sec ++) - { - max_adc_hits = 1; - Monitor_Health (Prob6b); - } + _Pragma( "loopbound min 180 max 180" ) + for ( sec = 1; sec <= 180; sec ++ ) { + max_adc_hits = 1; + Monitor_Health ( Prob6b ); + } -#if defined(TRACE_HARNESS) - printf ("Total hits %d\n", total_adc_hits); -#endif + #if defined(TRACE_HARNESS) + printf ( "Total hits %d\n", total_adc_hits ); + #endif - Check_Nonzero (total_adc_hits); + Check_Nonzero ( total_adc_hits ); - Check (health_mon_round == HEALTH_COUNT ); - Check (temp_meas_count == TEMP_COUNT ); - Check (voltage_meas_count == VOLTAGE_COUNT); - Check (checksum_count == CHECK_COUNT ); + Check ( health_mon_round == HEALTH_COUNT ); + Check ( temp_meas_count == TEMP_COUNT ); + Check ( voltage_meas_count == VOLTAGE_COUNT ); + Check ( checksum_count == CHECK_COUNT ); - Check_No_Errors (); + Check_No_Errors (); - CASE("Monitoring without errors, many interrupting hits"); + CASE( "Monitoring without errors, many interrupting hits" ); - total_adc_hits = 0; + total_adc_hits = 0; - _Pragma("loopbound min 170 max 170") - for (sec = 1; sec <= 180; sec ++) - { - max_adc_hits = HIT_BUDGET_DEFAULT; - Monitor_Health (Prob6c); - } + _Pragma( "loopbound min 180 max 180" ) + for ( sec = 1; sec <= 180; sec ++ ) { + max_adc_hits = HIT_BUDGET_DEFAULT; + Monitor_Health ( Prob6c ); + } -#if defined(TRACE_HARNESS) - printf ("Total hits %d\n", total_adc_hits); -#endif + #if defined(TRACE_HARNESS) + printf ( "Total hits %d\n", total_adc_hits ); + #endif - Check_Nonzero (total_adc_hits); + Check_Nonzero ( total_adc_hits ); - Check (health_mon_round == HEALTH_COUNT ); - Check (temp_meas_count == TEMP_COUNT ); - Check (voltage_meas_count == VOLTAGE_COUNT); - Check (checksum_count == CHECK_COUNT ); + Check ( health_mon_round == HEALTH_COUNT ); + Check ( temp_meas_count == TEMP_COUNT ); + Check ( voltage_meas_count == VOLTAGE_COUNT ); + Check ( checksum_count == CHECK_COUNT ); - Check_No_Errors (); + Check_No_Errors (); - CASE("Monitoring with SU errors, no interrupting hits"); + CASE( "Monitoring with SU errors, no interrupting hits" ); - Set_AD_Unlimited (); - max_adc_hits = 0; + Set_AD_Unlimited (); + max_adc_hits = 0; - tot_errors = 0; + tot_errors = 0; - _Pragma("loopbound min 106 max 106") - do - { - if (tot_errors == 4) check_current_errors = 5; + _Pragma( "loopbound min 106 max 106" ) + do { + if ( tot_errors == 4 ) check_current_errors = 5; - if (tot_errors == max_errors - 1) v_down_errors = 1; - /* The V_DOWN error has a dramatic effect, so - * we save it for last. - */ - - _Pragma("loopbound min 170 max 170") - for (sec = 1; sec <= 180; sec ++) - { - Monitor_Health (Prob6d); - } + if ( tot_errors == max_errors - 1 ) v_down_errors = 1; + /* The V_DOWN error has a dramatic effect, so + we save it for last. + */ - if (telemetry_data.error_status != 0) - { - tot_errors ++; + _Pragma( "loopbound min 180 max 180" ) + for ( sec = 1; sec <= 180; sec ++ ) + Monitor_Health ( Prob6d ); -#if defined(TRACE_HARNESS) - printf ("Monitoring (6d) error %d, error status %x\n", - tot_errors, telemetry_data.error_status); -#endif - Clear_Errors (); - } - } - while (tot_errors < max_errors); + if ( telemetry_data.error_status != 0 ) { + tot_errors ++; - Check_No_Errors (); + #if defined(TRACE_HARNESS) + printf ( "Monitoring (6d) error %d, error status %x\n", + tot_errors, telemetry_data.error_status ); + #endif + Clear_Errors (); + } + } while ( tot_errors < max_errors ); - CASE("Monitoring with any kind of error and interrupting hit"); + Check_No_Errors (); - Set_AD_Unlimited (); + CASE( "Monitoring with any kind of error and interrupting hit" ); - tot_errors = 0; + Set_AD_Unlimited (); - _Pragma("loopbound min 64 max 64") - do - { - if (tot_errors == 4) check_current_errors = 5; + tot_errors = 0; + + _Pragma( "loopbound min 64 max 64" ) + do { + if ( tot_errors == 4 ) check_current_errors = 5; - if (tot_errors == max_errors - 1) v_down_errors = 1; - /* The V_DOWN error has a dramatic effect, so - * we save it for last. - */ + if ( tot_errors == max_errors - 1 ) v_down_errors = 1; + /* The V_DOWN error has a dramatic effect, so + we save it for last. + */ - _Pragma("loopbound min 170 max 170") - for (sec = 1; sec <= 180; sec ++) - { - max_adc_hits = HIT_BUDGET_DEFAULT; - if (sec > 2*tot_errors) ad_random_failures = 2; - Monitor_Health (Prob6e); - } + _Pragma( "loopbound min 180 max 180" ) + for ( sec = 1; sec <= 180; sec ++ ) { + max_adc_hits = HIT_BUDGET_DEFAULT; + if ( sec > 2 * tot_errors ) ad_random_failures = 2; + Monitor_Health ( Prob6e ); + } - if (telemetry_data.error_status != 0) - { - tot_errors ++; + if ( telemetry_data.error_status != 0 ) { + tot_errors ++; -#if defined(TRACE_HARNESS) - printf ("Monitoring (6e) error %d, error status %x\n", - tot_errors, telemetry_data.error_status); -#endif - Clear_Errors (); - } - } - while (tot_errors < max_errors); + #if defined(TRACE_HARNESS) + printf ( "Monitoring (6e) error %d, error status %x\n", + tot_errors, telemetry_data.error_status ); + #endif + Clear_Errors (); + } + } while ( tot_errors < max_errors ); - Check_No_Errors (); + Check_No_Errors (); } -void TM_Tests (void) +void TM_Tests ( void ) /* Test of TM_InterruptService and telemetry functionality. */ { - int octets; - /* Number of octets sent and acknowledge by TM interrupt. */ + int octets; + /* Number of octets sent and acknowledge by TM interrupt. */ -#if defined(TRACE_HARNESS) - printf ("\nTM_ISR_Tests\n"); -#endif + #if defined(TRACE_HARNESS) + printf ( "\nTM_ISR_Tests\n" ); + #endif - CASE("One whole round of register TM"); + CASE( "One whole round of register TM" ); - Send_TC (SEND_STATUS_REGISTER, 0); + Send_TC ( SEND_STATUS_REGISTER, 0 ); - Check_No_Errors (); - Check (TC_state == register_TM_e); + Check_No_Errors (); + Check ( TC_state == register_TM_e ); - Handle_TC (Prob4a); + Handle_TC ( Prob4a ); - Check (TC_state == register_TM_e); + Check ( TC_state == register_TM_e ); - _Pragma("loopbound min 62 max 62") - for (octets = 0; octets < sizeof (telemetry_data_t); octets += 2) - { + _Pragma( "loopbound min 62 max 62" ) + for ( octets = 0; octets < sizeof ( telemetry_data_t ); octets += 2 ) { - if (telemetry_pointer != (unsigned char *) &telemetry_data.time) - { - FOR_PROBLEM(Prob2a); - TM_InterruptService (); - END_PROBLEM; - } - else - { - FOR_PROBLEM(Prob2b); - TM_InterruptService (); - END_PROBLEM; - } + if ( telemetry_pointer != ( unsigned char * ) &telemetry_data.time ) { + FOR_PROBLEM( Prob2a ); + TM_InterruptService (); + END_PROBLEM; + } else { + FOR_PROBLEM( Prob2b ); + TM_InterruptService (); + END_PROBLEM; + } - Check (TC_state == register_TM_e); - } + Check ( TC_state == register_TM_e ); + } - CASE("Partial register TM, stop by TC"); + CASE( "Partial register TM, stop by TC" ); - Send_TC (SEND_STATUS_REGISTER, 22); + Send_TC ( SEND_STATUS_REGISTER, 22 ); - Check_No_Errors (); - Check (TC_state == register_TM_e); + Check_No_Errors (); + Check ( TC_state == register_TM_e ); - Handle_TC (Prob4a); + Handle_TC ( Prob4a ); - Check (TC_state == register_TM_e); + Check ( TC_state == register_TM_e ); - _Pragma("loopbound min 20 max 20") - for (octets = 0; octets < 40; octets += 2) - { + _Pragma( "loopbound min 20 max 20" ) + for ( octets = 0; octets < 40; octets += 2 ) { - if (telemetry_pointer != (unsigned char *) &telemetry_data.time) - { - FOR_PROBLEM(Prob2a); - TM_InterruptService (); - END_PROBLEM; - } - else - { - FOR_PROBLEM(Prob2b); - TM_InterruptService (); - END_PROBLEM; - } + if ( telemetry_pointer != ( unsigned char * ) &telemetry_data.time ) { + FOR_PROBLEM( Prob2a ); + TM_InterruptService (); + END_PROBLEM; + } else { + FOR_PROBLEM( Prob2b ); + TM_InterruptService (); + END_PROBLEM; + } - Check (TC_state == register_TM_e); - } + Check ( TC_state == register_TM_e ); + } - Send_TC (ERROR_STATUS_CLEAR, ERROR_STATUS_CLEAR); + Send_TC ( ERROR_STATUS_CLEAR, ERROR_STATUS_CLEAR ); - Check (TC_state == TC_handling_e); + Check ( TC_state == TC_handling_e ); - Handle_TC (Prob4a); + Handle_TC ( Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - CASE("Science Data TM"); + CASE( "Science Data TM" ); - Send_TC (SEND_SCIENCE_DATA_FILE, SEND_SCIENCE_DATA_FILE); + Send_TC ( SEND_SCIENCE_DATA_FILE, SEND_SCIENCE_DATA_FILE ); - Check_No_Errors (); - Check (TC_state == SC_TM_e); + Check_No_Errors (); + Check ( TC_state == SC_TM_e ); - Handle_TC (Prob4a); + Handle_TC ( Prob4a ); - Check (TC_state == SC_TM_e); + Check ( TC_state == SC_TM_e ); - /* Absorb TM until a TM_READY message is sent to the TC task: */ + /* Absorb TM until a TM_READY message is sent to the TC task: */ - octets = 0; - _Pragma("loopbound min 22 max 22") - while (mail_count[TCTM_MAILBOX] == 0) - { - if (telemetry_pointer < telemetry_end_pointer) - { - FOR_PROBLEM(Prob2a); - TM_InterruptService (); - END_PROBLEM; - } - else - { - FOR_PROBLEM(Prob2c); - TM_InterruptService (); - END_PROBLEM; - } + octets = 0; - octets += 2; - Check (TC_state == SC_TM_e); - } + _Pragma( "loopbound min 22 max 22" ) + while ( mail_count[ TCTM_MAILBOX ] == 0 ) { + if ( telemetry_pointer < telemetry_end_pointer ) { + FOR_PROBLEM( Prob2a ); + TM_InterruptService (); + END_PROBLEM; + } else { + FOR_PROBLEM( Prob2c ); + TM_InterruptService (); + END_PROBLEM; + } -#if defined(TRACE_HARNESS) - printf ("Science TM octets sent %d\n", octets); -#endif + octets += 2; + Check ( TC_state == SC_TM_e ); + } - /* Handle the TM_READY message: */ + #if defined(TRACE_HARNESS) + printf ( "Science TM octets sent %d\n", octets ); + #endif - Handle_TC (Prob4a); + /* Handle the TM_READY message: */ - Check (TC_state == TC_handling_e); + Handle_TC ( Prob4a ); - /* TM tests elsewhere: - * End of memory-dump TM : See Read_Data_Memory and TC_Task_Tests. - * Science Data TM (also): See Acquisition_Tests. - */ + Check ( TC_state == TC_handling_e ); + + /* TM tests elsewhere: + End of memory-dump TM : See Read_Data_Memory and TC_Task_Tests. + Science Data TM (also): See Acquisition_Tests. + */ } -static void Trigger_Hit (int problem) +static void Trigger_Hit ( int problem ) /* Invoke HandleHitTrigger. - * The problem parameter defines the analysis problem for this test. - */ + The problem parameter defines the analysis problem for this test. +*/ { - Check (mail_count[ACQUISITION_MAILBOX] == 0); + Check ( mail_count[ ACQUISITION_MAILBOX ] == 0 ); -#if defined(TRACE_HARNESS) - printf ("Hit!\n"); -#endif + #if defined(TRACE_HARNESS) + printf ( "Hit!\n" ); + #endif - FOR_PROBLEM(problem); + FOR_PROBLEM( problem ); - HandleHitTrigger (); + HandleHitTrigger (); - END_PROBLEM; + END_PROBLEM; -#if defined(TRACE_HARNESS) - if (mail_count[ACQUISITION_MAILBOX] == 0) - printf ("- hit rejected\n"); - else - printf ("- hit accepted\n"); -#endif + #if defined(TRACE_HARNESS) + if ( mail_count[ ACQUISITION_MAILBOX ] == 0 ) + printf ( "- hit rejected\n" ); + else + printf ( "- hit accepted\n" ); + #endif } static void Trigger_SU_Hit ( - sensor_index_t SU, - int problem) + sensor_index_t SU, + int problem ) /* Invoke HandleHitTrigger with the given SU in trigger_source_0/1. - * The problem parameter defines the analysis problem for this test. - */ + The problem parameter defines the analysis problem for this test. +*/ { - Set_Trigger_SU (SU); - Trigger_Hit (problem); + Set_Trigger_SU ( SU ); + Trigger_Hit ( problem ); } static void Acquire_Hit ( - int hit_problem, - int acq_problem) + int hit_problem, + int acq_problem ) /* Invoke HandleHitTrigger followed by HandleAcquisition if the hit - * was accepted in the ISR. The problem parameters define the analysis - * problems for this test, separately for the Hit Trigger ISR and - * for the Acquisition task. - */ + was accepted in the ISR. The problem parameters define the analysis + problems for this test, separately for the Hit Trigger ISR and + for the Acquisition task. +*/ { - Trigger_Hit (hit_problem); + Trigger_Hit ( hit_problem ); - if (mail_count[ACQUISITION_MAILBOX] > 0) - { - FOR_PROBLEM(acq_problem); - HandleAcquisition (); - END_PROBLEM; - } + if ( mail_count[ ACQUISITION_MAILBOX ] > 0 ) { + FOR_PROBLEM( acq_problem ); + HandleAcquisition (); + END_PROBLEM; + } } -static void Hit_ISR_Tests (void) +static void Hit_ISR_Tests ( void ) /* Test of HandleHitTrigger. */ { - sensor_index_t su; + sensor_index_t su; -#if defined(TRACE_HARNESS) - printf ("\nHit_ISR_Tests\n"); -#endif + #if defined(TRACE_HARNESS) + printf ( "\nHit_ISR_Tests\n" ); + #endif - /* Reset the historical record: */ + /* Reset the historical record: */ - telemetry_data.hit_budget_exceedings = 0; + telemetry_data.hit_budget_exceedings = 0; - /* Test: */ + /* Test: */ - CASE("Hit Trigger, budget exhausted"); + CASE( "Hit Trigger, budget exhausted" ); - Check (telemetry_data.hit_budget_exceedings == 0); + Check ( telemetry_data.hit_budget_exceedings == 0 ); - hit_budget_left = 0; + hit_budget_left = 0; - /* Once: */ + /* Once: */ - Trigger_SU_Hit (0, Prob3a); + Trigger_SU_Hit ( 0, Prob3a ); - Check (mail_count[ACQUISITION_MAILBOX] == 0); + Check ( mail_count[ ACQUISITION_MAILBOX ] == 0 ); - Check (telemetry_data.hit_budget_exceedings == 1); + Check ( telemetry_data.hit_budget_exceedings == 1 ); - /* Once more: */ + /* Once more: */ - Trigger_SU_Hit (1, Prob3a); + Trigger_SU_Hit ( 1, Prob3a ); - Check (mail_count[ACQUISITION_MAILBOX] == 0); + Check ( mail_count[ ACQUISITION_MAILBOX ] == 0 ); - Check (telemetry_data.hit_budget_exceedings == 2); + Check ( telemetry_data.hit_budget_exceedings == 2 ); - CASE("Hit Trigger, budget exhausted for the 255th and 256th time"); + CASE( "Hit Trigger, budget exhausted for the 255th and 256th time" ); - telemetry_data.hit_budget_exceedings = 254; + telemetry_data.hit_budget_exceedings = 254; - hit_budget_left = 0; + hit_budget_left = 0; - /* 255th time: */ + /* 255th time: */ - Trigger_SU_Hit (3, Prob3a); + Trigger_SU_Hit ( 3, Prob3a ); - Check (mail_count[ACQUISITION_MAILBOX] == 0); + Check ( mail_count[ ACQUISITION_MAILBOX ] == 0 ); - Check (telemetry_data.hit_budget_exceedings == 255); + Check ( telemetry_data.hit_budget_exceedings == 255 ); - /* 256th time: */ + /* 256th time: */ - Trigger_SU_Hit (1, Prob3a); + Trigger_SU_Hit ( 1, Prob3a ); - Check (mail_count[ACQUISITION_MAILBOX] == 0); + Check ( mail_count[ ACQUISITION_MAILBOX ] == 0 ); - Check (telemetry_data.hit_budget_exceedings == 255); + Check ( telemetry_data.hit_budget_exceedings == 255 ); - CASE("Hit Trigger, budget left, no A/D errors"); + CASE( "Hit Trigger, budget left, no A/D errors" ); - hit_budget_left = 15; + hit_budget_left = 15; - Set_AD_Delay (2); - ad_conv_num = 0; - _Pragma("loopbound min 4 max 4") - for (su = 0; su < NUM_SU; su ++) - { - Trigger_SU_Hit (su, Prob3a); + Set_AD_Delay ( 2 ); + ad_conv_num = 0; + + _Pragma( "loopbound min 4 max 4" ) + for ( su = 0; su < NUM_SU; su ++ ) { + Trigger_SU_Hit ( su, Prob3a ); - Check (mail_count[ACQUISITION_MAILBOX] == 1); + Check ( mail_count[ ACQUISITION_MAILBOX ] == 1 ); - Check (mail_message[ACQUISITION_MAILBOX] == su + 1); + Check ( mail_message[ ACQUISITION_MAILBOX ] == su + 1 ); - FlushMail (ACQUISITION_MAILBOX); - } + FlushMail ( ACQUISITION_MAILBOX ); + } - Check (hit_budget_left == 15 - NUM_SU); + Check ( hit_budget_left == 15 - NUM_SU ); - CASE("Hit Trigger, budget left, no A/D errors, SU self test ok"); + CASE( "Hit Trigger, budget left, no A/D errors, SU self test ok" ); - _Pragma("loopbound min 4 max 4") - for (su = 0; su < NUM_SU; su++) - { - /* Right self test pulse: */ + _Pragma( "loopbound min 4 max 4" ) + for ( su = 0; su < NUM_SU; su++ ) { + /* Right self test pulse: */ - self_test_SU_number = su + 1; + self_test_SU_number = su + 1; - SU_state[su] = self_test_trigger_e; + SU_state[ su ] = self_test_trigger_e; - Trigger_SU_Hit (su, Prob3a); + Trigger_SU_Hit ( su, Prob3a ); - Check (mail_count[ACQUISITION_MAILBOX] == 1); + Check ( mail_count[ ACQUISITION_MAILBOX ] == 1 ); - Check (mail_message[ACQUISITION_MAILBOX] == self_test_SU_number); + Check ( mail_message[ ACQUISITION_MAILBOX ] == self_test_SU_number ); - Check (SU_state[su] == self_test_e); + Check ( SU_state[ su ] == self_test_e ); - FlushMail (ACQUISITION_MAILBOX); - } + FlushMail ( ACQUISITION_MAILBOX ); + } - CASE("Hit Trigger, budget left, no A/D errors, SU self test wrong"); + CASE( "Hit Trigger, budget left, no A/D errors, SU self test wrong" ); - _Pragma("loopbound min 4 max 4") - for (su = 0; su < NUM_SU; su++) - { - /* Wrong self test pulse: */ + _Pragma( "loopbound min 4 max 4" ) + for ( su = 0; su < NUM_SU; su++ ) { + /* Wrong self test pulse: */ - self_test_SU_number = su + 1; + self_test_SU_number = su + 1; - SU_state[su] = self_test_e; + SU_state[ su ] = self_test_e; - Trigger_SU_Hit (su, Prob3a); + Trigger_SU_Hit ( su, Prob3a ); - Check (mail_count[ACQUISITION_MAILBOX] == 1); + Check ( mail_count[ ACQUISITION_MAILBOX ] == 1 ); - Check ( - mail_message[ACQUISITION_MAILBOX] - == (self_test_SU_number | HIT_SELF_TEST_RESET)); + Check ( + mail_message[ ACQUISITION_MAILBOX ] + == ( self_test_SU_number | HIT_SELF_TEST_RESET ) ); - Check (SU_state[su] == self_test_e); + Check ( SU_state[ su ] == self_test_e ); - FlushMail (ACQUISITION_MAILBOX); - } + FlushMail ( ACQUISITION_MAILBOX ); + } - /* Reset the SU states: */ + /* Reset the SU states: */ - self_test_SU_number = NO_SU; + self_test_SU_number = NO_SU; - _Pragma("loopbound min 4 max 4") - for (su = 0; su < NUM_SU; su++) SU_state[su] = off_e; + _Pragma( "loopbound min 4 max 4" ) + for ( su = 0; su < NUM_SU; su++ ) SU_state[ su ] = off_e; - CASE("Hit Trigger, budget left, all A/D delays at limit but ok"); + CASE( "Hit Trigger, budget left, all A/D delays at limit but ok" ); - hit_budget_left = 15; + hit_budget_left = 15; - Set_AD_Delay (ADC_MAX_TRIES); + Set_AD_Delay ( ADC_MAX_TRIES ); - ad_conv_num = 0; + ad_conv_num = 0; - _Pragma("loopbound min 4 max 4") - for (su = 0; su < NUM_SU; su ++) - { - Trigger_SU_Hit (su, Prob3b); + _Pragma( "loopbound min 4 max 4" ) + for ( su = 0; su < NUM_SU; su ++ ) { + Trigger_SU_Hit ( su, Prob3b ); - Check (mail_count[ACQUISITION_MAILBOX] == 1); + Check ( mail_count[ ACQUISITION_MAILBOX ] == 1 ); - Check ( - mail_message[ACQUISITION_MAILBOX] - == ((su + 1) )); // | HIT_ADC_ERROR)); + Check ( + mail_message[ ACQUISITION_MAILBOX ] + == ( ( su + 1 ) ) ); // | HIT_ADC_ERROR)); - FlushMail (ACQUISITION_MAILBOX); - } + FlushMail ( ACQUISITION_MAILBOX ); + } - Check (hit_budget_left == 15 - NUM_SU); + Check ( hit_budget_left == 15 - NUM_SU ); - CASE("Hit Trigger, budget left, one A/D failure, others at limit"); + CASE( "Hit Trigger, budget left, one A/D failure, others at limit" ); - hit_budget_left = 15; + hit_budget_left = 15; - ad_conv_delay[0] = ADC_MAX_TRIES + 1; + ad_conv_delay[ 0 ] = ADC_MAX_TRIES + 1; - _Pragma("loopbound min 4 max 4") - for (su = 0; su < NUM_SU; su ++) - { - ad_conv_num = su; - /* Offset starting index to make a different channel fail. */ + _Pragma( "loopbound min 4 max 4" ) + for ( su = 0; su < NUM_SU; su ++ ) { + ad_conv_num = su; + /* Offset starting index to make a different channel fail. */ - Trigger_SU_Hit (su, Prob3b); + Trigger_SU_Hit ( su, Prob3b ); - Check (mail_count[ACQUISITION_MAILBOX] == 1); + Check ( mail_count[ ACQUISITION_MAILBOX ] == 1 ); - Check ( - mail_message[ACQUISITION_MAILBOX] - == ((su + 1) | HIT_ADC_ERROR)); + Check ( + mail_message[ ACQUISITION_MAILBOX ] + == ( ( su + 1 ) | HIT_ADC_ERROR ) ); - FlushMail (ACQUISITION_MAILBOX); - } + FlushMail ( ACQUISITION_MAILBOX ); + } - Check (hit_budget_left == 15 - NUM_SU); + Check ( hit_budget_left == 15 - NUM_SU ); - CASE("Hit Trigger, budget left, any number of A/D failures"); + CASE( "Hit Trigger, budget left, any number of A/D failures" ); - hit_budget_left = 80; + hit_budget_left = 80; - su = NUM_SU - 1; + su = NUM_SU - 1; - _Pragma("loopbound min 80 max 80") - while (hit_budget_left > 0) - { - Random_AD_Delay (); + _Pragma( "loopbound min 80 max 80" ) + while ( hit_budget_left > 0 ) { + Random_AD_Delay (); - Trigger_SU_Hit (su, Prob3c); + Trigger_SU_Hit ( su, Prob3c ); - Check (mail_count[ACQUISITION_MAILBOX] == 1); + Check ( mail_count[ ACQUISITION_MAILBOX ] == 1 ); - Check ( - (mail_message[ACQUISITION_MAILBOX] & SU_NUMBER_MASK) - == su + 1); + Check ( + ( mail_message[ ACQUISITION_MAILBOX ] & SU_NUMBER_MASK ) + == su + 1 ); - FlushMail (ACQUISITION_MAILBOX); + FlushMail ( ACQUISITION_MAILBOX ); - if (su > 0) su --; - else su = NUM_SU - 1; - } + if ( su > 0 ) su --; + else su = NUM_SU - 1; + } - /* More tests in SU_Self_Test_Tests. */ + /* More tests in SU_Self_Test_Tests. */ } -unsigned char switch_su_cmd[NUM_SU] = { - SWITCH_SU_1, - SWITCH_SU_2, - SWITCH_SU_3, - SWITCH_SU_4}; +unsigned char switch_su_cmd[ NUM_SU ] = { + SWITCH_SU_1, + SWITCH_SU_2, + SWITCH_SU_3, + SWITCH_SU_4 +}; /* The commands to switch Sensor Units ON or OFF. */ -void Report_Event_Histo (void) +void Report_Event_Histo ( void ) /* Report the collected event counts per SU and class. */ { - sensor_index_t sen; - int class; + sensor_index_t sen; + int class; -#if defined(TRACE_HARNESS) - for (sen = 0; sen < NUM_SU; sen ++) - for (class = 0; class <NUM_CLASSES; class ++) - { - printf ("Events from SU %d, class %d: %d\n", - sen, class, science_data.event_counter[sen][class]); - } -#endif + #if defined(TRACE_HARNESS) + _Pragma( "loopbound min 4 max 4" ) + for ( sen = 0; sen < NUM_SU; sen ++ ) + _Pragma( "loopbound min 10 max 10" ) + for ( class = 0; class < NUM_CLASSES; class ++ ) { + printf ( "Events from SU %d, class %d: %d\n", + sen, class, science_data.event_counter[ sen ][ class ] ); + } + #endif } -static void Acquisition_Tests (void) +static void Acquisition_Tests ( void ) /* Tests of AcquisitionTask. */ { - sensor_index_t sen; - unsigned int hits; - int octets; - - /* These tests are constructed as a "nominal operation" - * scenario, which incidentally tests the AcquisitionTask - * and the Hit Trigger ISR, as well as other functions. - * The scenario is: - * - * - TC to switch sensors ON - * - Run Monitoring task to drive the SU state transition. - * - TC to START ACQUISITION - * - Particle hits until the Science Data is full - * - The same number of particle hits with the Science Data full - * - Science Data TM - * - some particle hits during science TM - * - TC to enter STANDBY mode - * - TC to switch sensors OFF. - * - */ + sensor_index_t sen; + unsigned int hits; + int octets; - CASE("Turn Sensor Units ON"); + /* These tests are constructed as a "nominal operation" + scenario, which incidentally tests the AcquisitionTask + and the Hit Trigger ISR, as well as other functions. + The scenario is: - /* Send the SWITCH ON commands: */ + - TC to switch sensors ON + - Run Monitoring task to drive the SU state transition. + - TC to START ACQUISITION + - Particle hits until the Science Data is full + - The same number of particle hits with the Science Data full + - Science Data TM + - some particle hits during science TM + - TC to enter STANDBY mode + - TC to switch sensors OFF. - _Pragma("loopbound min 4 max 4") - for (sen = 0; sen < NUM_SU; sen ++) - { - Check (SU_state[sen] == off_e); + */ - Exec_TC (switch_su_cmd[sen], ON_VALUE, Prob4a); + CASE( "Turn Sensor Units ON" ); - Check_No_Errors (); - Check (SU_state[sen] == start_switching_e); - } + /* Send the SWITCH ON commands: */ - /* Prevent all errors in Monitoring: */ + _Pragma( "loopbound min 4 max 4" ) + for ( sen = 0; sen < NUM_SU; sen ++ ) { + Check ( SU_state[ sen ] == off_e ); - Set_AD_Nominal (); - max_adc_hits = 0; - ad_random_failures = 0; - check_current_errors = 0; - v_down_errors = 0; + Exec_TC ( switch_su_cmd[ sen ], ON_VALUE, Prob4a ); - /* Run Health Monitoring to drive the SUs ON: */ + Check_No_Errors (); + Check ( SU_state[ sen ] == start_switching_e ); + } - Monitor_Health (Prob6a); + /* Prevent all errors in Monitoring: */ - _Pragma("loopbound min 4 max 4") - for (sen = 0; sen < NUM_SU; sen ++) - Check (SU_state[sen] == switching_e); + Set_AD_Nominal (); + max_adc_hits = 0; + ad_random_failures = 0; + check_current_errors = 0; + v_down_errors = 0; - Monitor_Health (Prob6a); + /* Run Health Monitoring to drive the SUs ON: */ - _Pragma("loopbound min 4 max 4") - for (sen = 0; sen < NUM_SU; sen ++) - Check (SU_state[sen] == on_e); + Monitor_Health ( Prob6a ); - CASE("SWITCH_SU_ON when already ON, fail"); + _Pragma( "loopbound min 4 max 4" ) + for ( sen = 0; sen < NUM_SU; sen ++ ) + Check ( SU_state[ sen ] == switching_e ); - Exec_TC (SWITCH_SU_2, ON_VALUE, Prob4a); + Monitor_Health ( Prob6a ); - Check (telemetry_data.error_status == TC_ERROR); + _Pragma( "loopbound min 4 max 4" ) + for ( sen = 0; sen < NUM_SU; sen ++ ) + Check ( SU_state[ sen ] == on_e ); - Check (SU_state[1] == on_e); + CASE( "SWITCH_SU_ON when already ON, fail" ); - Clear_Errors (); + Exec_TC ( SWITCH_SU_2, ON_VALUE, Prob4a ); - CASE("Start Acquisition"); + Check ( telemetry_data.error_status == TC_ERROR ); - Check ((telemetry_data.mode_status & MODE_BITS_MASK) == STAND_BY); + Check ( SU_state[ 1 ] == on_e ); - Exec_TC (START_ACQUISITION, START_ACQUISITION, Prob4a); + Clear_Errors (); - Check_No_Errors (); + CASE( "Start Acquisition" ); - Check ((telemetry_data.mode_status & MODE_BITS_MASK) == ACQUISITION); + Check ( ( telemetry_data.mode_status & MODE_BITS_MASK ) == STAND_BY ); - _Pragma("loopbound min 4 max 4") - for (sen = 0; sen < NUM_SU; sen ++) - Check (SU_state[sen] == acquisition_e); + Exec_TC ( START_ACQUISITION, START_ACQUISITION, Prob4a ); - CASE("TC = SWITCH_SU in ACQUISITION, fail"); + Check_No_Errors (); - Exec_TC (SWITCH_SU_1, ON_VALUE, Prob4a); + Check ( ( telemetry_data.mode_status & MODE_BITS_MASK ) == ACQUISITION ); - Check (telemetry_data.error_status == TC_ERROR); + _Pragma( "loopbound min 4 max 4" ) + for ( sen = 0; sen < NUM_SU; sen ++ ) + Check ( SU_state[ sen ] == acquisition_e ); - Clear_Errors (); + CASE( "TC = SWITCH_SU in ACQUISITION, fail" ); - CASE("TC = START_ACQUISITION in ACQUISITION, fail"); + Exec_TC ( SWITCH_SU_1, ON_VALUE, Prob4a ); - Exec_TC (START_ACQUISITION, START_ACQUISITION, Prob4a); + Check ( telemetry_data.error_status == TC_ERROR ); - Check (telemetry_data.error_status == TC_ERROR); + Clear_Errors (); - Check (GetMode() == ACQUISITION); + CASE( "TC = START_ACQUISITION in ACQUISITION, fail" ); - Clear_Errors (); + Exec_TC ( START_ACQUISITION, START_ACQUISITION, Prob4a ); - CASE("Hits with Science Data not full"); + Check ( telemetry_data.error_status == TC_ERROR ); - Set_AD_Delay (2); + Check ( GetMode() == ACQUISITION ); - hits = 0; + Clear_Errors (); - _Pragma("loopbound min 2625 max 2625") - while (free_slot_index < max_events) - { - hits ++; - internal_time ++; - hit_budget_left = 10; + CASE( "Hits with Science Data not full" ); - Random_Event (); + Set_AD_Delay ( 2 ); - Acquire_Hit (Prob3a, Prob5a); - } + hits = 0; -#if defined(TRACE_HARNESS) - printf ("Science Data filled with %d events after %d hits.\n", - max_events, hits); -#endif - Report_Event_Histo (); + _Pragma( "loopbound min 2625 max 2625" ) + while ( free_slot_index < max_events ) { + hits ++; + internal_time ++; + hit_budget_left = 10; - CASE("Hits with Science Data full"); + Random_Event (); - _Pragma("loopbound min 2625 max 2625") - while (hits > 0) - { - hits --; - internal_time ++; - hit_budget_left = 10; + Acquire_Hit ( Prob3a, Prob5a ); + } - Random_Event (); + #if defined(TRACE_HARNESS) + printf ( "Science Data filled with %d events after %d hits.\n", + max_events, hits ); + #endif + Report_Event_Histo (); - Acquire_Hit (Prob3a, Prob5b); - } + CASE( "Hits with Science Data full" ); - Report_Event_Histo (); + _Pragma( "loopbound min 2625 max 2625" ) + while ( hits > 0 ) { + hits --; + internal_time ++; + hit_budget_left = 10; - CASE("Science Data TM, full Science Data, some hits during TM"); + Random_Event (); - Send_TC (SEND_SCIENCE_DATA_FILE, SEND_SCIENCE_DATA_FILE); + Acquire_Hit ( Prob3a, Prob5b ); + } - Check_No_Errors (); - Check (TC_state == SC_TM_e); + Report_Event_Histo (); - Handle_TC (Prob4a); + CASE( "Science Data TM, full Science Data, some hits during TM" ); - Check (TC_state == SC_TM_e); + Send_TC ( SEND_SCIENCE_DATA_FILE, SEND_SCIENCE_DATA_FILE ); - /* Absorb TM until a TM_READY message is sent to the TC task, - * and simulate some particle hits at the same time: - */ + Check_No_Errors (); + Check ( TC_state == SC_TM_e ); - hits = 0; - /* We will make MAX_QUEUE_LENGTH + 4 hits. */ + Handle_TC ( Prob4a ); - hit_budget_left = MAX_QUEUE_LENGTH + 2; - /* Ensure that some hits are rejected for budget exhaustion. */ + Check ( TC_state == SC_TM_e ); - Check_Zero (event_queue_length); + /* Absorb TM until a TM_READY message is sent to the TC task, + and simulate some particle hits at the same time: + */ - octets = 0; - _Pragma("loopbound min 17676 max 17676") - while (mail_count[TCTM_MAILBOX] == 0) - { - if (telemetry_pointer < telemetry_end_pointer) - { - FOR_PROBLEM(Prob2a); - TM_InterruptService (); - END_PROBLEM; - } - else - { - FOR_PROBLEM(Prob2c); - TM_InterruptService (); - END_PROBLEM; - } + hits = 0; + /* We will make MAX_QUEUE_LENGTH + 4 hits. */ - octets += 2; - Check (TC_state == SC_TM_e); + hit_budget_left = MAX_QUEUE_LENGTH + 2; + /* Ensure that some hits are rejected for budget exhaustion. */ - if (hits < MAX_QUEUE_LENGTH + 4) - { - /* Hit during Science Data TM: */ + Check_Zero ( event_queue_length ); - internal_time ++; - Random_Event (); - event_flag = ACCEPT_EVENT; + octets = 0; - Acquire_Hit (Prob3a, Prob5b); + _Pragma( "loopbound min 17676 max 17676" ) + while ( mail_count[ TCTM_MAILBOX ] == 0 ) { + if ( telemetry_pointer < telemetry_end_pointer ) { + FOR_PROBLEM( Prob2a ); + TM_InterruptService (); + END_PROBLEM; + } else { + FOR_PROBLEM( Prob2c ); + TM_InterruptService (); + END_PROBLEM; + } - hits ++; + octets += 2; + Check ( TC_state == SC_TM_e ); - if (hits <= MAX_QUEUE_LENGTH) - Check (event_queue_length == hits); - else - Check (event_queue_length == MAX_QUEUE_LENGTH); - } - } + if ( hits < MAX_QUEUE_LENGTH + 4 ) { + /* Hit during Science Data TM: */ -#if defined(TRACE_HARNESS) - printf ("Science TM octets sent %d\n", octets); -#endif + internal_time ++; + Random_Event (); + event_flag = ACCEPT_EVENT; - Check_Zero (hit_budget_left); + Acquire_Hit ( Prob3a, Prob5b ); - Check (hits == MAX_QUEUE_LENGTH + 4); + hits ++; - /* Handle the TM_READY message: */ + if ( hits <= MAX_QUEUE_LENGTH ) + Check ( event_queue_length == hits ); + else + Check ( event_queue_length == MAX_QUEUE_LENGTH ); + } + } - Handle_TC (Prob4a); + #if defined(TRACE_HARNESS) + printf ( "Science TM octets sent %d\n", octets ); + #endif - Check (TC_state == TC_handling_e); + Check_Zero ( hit_budget_left ); - /* Check that the queued events have been recorded: */ + Check ( hits == MAX_QUEUE_LENGTH + 4 ); - Check_Zero (event_queue_length); + /* Handle the TM_READY message: */ - Check (free_slot_index == MAX_QUEUE_LENGTH); + Handle_TC ( Prob4a ); - CASE("Switch to Self Test in Acquisition mode, fail"); + Check ( TC_state == TC_handling_e ); - Check (GetMode() == ACQUISITION); + /* Check that the queued events have been recorded: */ - Check_Zero (telemetry_data.error_status & TC_ERROR); + Check_Zero ( event_queue_length ); - Exec_TC (SWITCH_SU_2, SELF_TEST, Prob4a); + Check ( free_slot_index == MAX_QUEUE_LENGTH ); - Check_Nonzero (telemetry_data.error_status & TC_ERROR); + CASE( "Switch to Self Test in Acquisition mode, fail" ); - Exec_TC (ERROR_STATUS_CLEAR, ERROR_STATUS_CLEAR, Prob4a); + Check ( GetMode() == ACQUISITION ); - Check_Zero (telemetry_data.error_status & TC_ERROR); + Check_Zero ( telemetry_data.error_status & TC_ERROR ); - CASE("Stop acquisition"); + Exec_TC ( SWITCH_SU_2, SELF_TEST, Prob4a ); - Exec_TC (STOP_ACQUISITION, STOP_ACQUISITION, Prob4a); + Check_Nonzero ( telemetry_data.error_status & TC_ERROR ); - Check_No_Errors (); + Exec_TC ( ERROR_STATUS_CLEAR, ERROR_STATUS_CLEAR, Prob4a ); - Check ((telemetry_data.mode_status & MODE_BITS_MASK) == STAND_BY); + Check_Zero ( telemetry_data.error_status & TC_ERROR ); - _Pragma("loopbound min 4 max 4") - for (sen = 0; sen < NUM_SU; sen ++) - Check (SU_state[sen] == on_e); + CASE( "Stop acquisition" ); - CASE("Turn Sensor Units OFF"); + Exec_TC ( STOP_ACQUISITION, STOP_ACQUISITION, Prob4a ); - /* Send the SWITCH OFF commands: */ + Check_No_Errors (); - _Pragma("loopbound min 4 max 4") - for (sen = 0; sen < NUM_SU; sen ++) - { - Exec_TC (switch_su_cmd[sen], OFF_VALUE, Prob4a); + Check ( ( telemetry_data.mode_status & MODE_BITS_MASK ) == STAND_BY ); - Check_No_Errors (); - Check (SU_state[sen] == off_e); - } + _Pragma( "loopbound min 4 max 4" ) + for ( sen = 0; sen < NUM_SU; sen ++ ) + Check ( SU_state[ sen ] == on_e ); + + CASE( "Turn Sensor Units OFF" ); + + /* Send the SWITCH OFF commands: */ + + _Pragma( "loopbound min 4 max 4" ) + for ( sen = 0; sen < NUM_SU; sen ++ ) { + Exec_TC ( switch_su_cmd[ sen ], OFF_VALUE, Prob4a ); + + Check_No_Errors (); + Check ( SU_state[ sen ] == off_e ); + } } -void SU_Self_Test_Tests (void) +void SU_Self_Test_Tests ( void ) /* Tests of the "SU Self Test" function. */ { - sensor_index_t sen; + sensor_index_t sen; - sim_self_test = 1; + sim_self_test = 1; - CASE("Turn Sensor Units ON for Self Test"); + CASE( "Turn Sensor Units ON for Self Test" ); - /* Send the SWITCH ON commands: */ + /* Send the SWITCH ON commands: */ - _Pragma("loopbound min 4 max 4") - for (sen = 0; sen < NUM_SU; sen ++) - { - Check (SU_state[sen] == off_e); + _Pragma( "loopbound min 4 max 4" ) + for ( sen = 0; sen < NUM_SU; sen ++ ) { + Check ( SU_state[ sen ] == off_e ); - Exec_TC (switch_su_cmd[sen], ON_VALUE, Prob4a); + Exec_TC ( switch_su_cmd[ sen ], ON_VALUE, Prob4a ); - Check_No_Errors (); - Check (SU_state[sen] == start_switching_e); - } + Check_No_Errors (); + Check ( SU_state[ sen ] == start_switching_e ); + } - /* Prevent all errors in Monitoring: */ + /* Prevent all errors in Monitoring: */ - Set_AD_Nominal (); - max_adc_hits = 0; - ad_random_failures = 0; - check_current_errors = 0; - v_down_errors = 0; + Set_AD_Nominal (); + max_adc_hits = 0; + ad_random_failures = 0; + check_current_errors = 0; + v_down_errors = 0; - /* Run Health Monitoring to drive the SUs ON: */ + /* Run Health Monitoring to drive the SUs ON: */ - Monitor_Health (Prob6a); + Monitor_Health ( Prob6a ); - _Pragma("loopbound min 4 max 4") - for (sen = 0; sen < NUM_SU; sen ++) - Check (SU_state[sen] == switching_e); + _Pragma( "loopbound min 4 max 4" ) + for ( sen = 0; sen < NUM_SU; sen ++ ) + Check ( SU_state[ sen ] == switching_e ); - Monitor_Health (Prob6a); + Monitor_Health ( Prob6a ); - _Pragma("loopbound min 4 max 4") - for (sen = 0; sen < NUM_SU; sen ++) - Check (SU_state[sen] == on_e); + _Pragma( "loopbound min 4 max 4" ) + for ( sen = 0; sen < NUM_SU; sen ++ ) + Check ( SU_state[ sen ] == on_e ); - CASE("Switch SU2 to Self Test in Standby mode"); + CASE( "Switch SU2 to Self Test in Standby mode" ); - Check (GetMode() == STAND_BY); - Check_No_Errors (); + Check ( GetMode() == STAND_BY ); + Check_No_Errors (); - Exec_TC (SWITCH_SU_2, SELF_TEST, Prob4a); + Exec_TC ( SWITCH_SU_2, SELF_TEST, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Check (self_test_SU_number == 2); - Check (SU_state[1] == self_test_mon_e); + Check ( self_test_SU_number == 2 ); + Check ( SU_state[ 1 ] == self_test_mon_e ); - CASE ("Switch SU3 (also) to Self Test, fail"); + CASE ( "Switch SU3 (also) to Self Test, fail" ); - Exec_TC (SWITCH_SU_3, SELF_TEST, Prob4a); + Exec_TC ( SWITCH_SU_3, SELF_TEST, Prob4a ); - Check_Nonzero (telemetry_data.error_status & TC_ERROR); + Check_Nonzero ( telemetry_data.error_status & TC_ERROR ); - Exec_TC (ERROR_STATUS_CLEAR, ERROR_STATUS_CLEAR, Prob4a); + Exec_TC ( ERROR_STATUS_CLEAR, ERROR_STATUS_CLEAR, Prob4a ); - Check_Zero (telemetry_data.error_status & TC_ERROR); + Check_Zero ( telemetry_data.error_status & TC_ERROR ); - Check (self_test_SU_number == 2); + Check ( self_test_SU_number == 2 ); - Check_No_Errors (); + Check_No_Errors (); - CASE("Run Self Test for SU2"); + CASE( "Run Self Test for SU2" ); - /* Run Monitoring up to but not including round_7_e: */ + /* Run Monitoring up to but not including round_7_e: */ - _Pragma("loopbound min 8 max 8") - while (health_mon_round != round_7_e) - { - Monitor_Health (Prob6a); - } + _Pragma( "loopbound min 8 max 8" ) + while ( health_mon_round != round_7_e ) + Monitor_Health ( Prob6a ); - Check (self_test_SU_number == 2); - Check (SU_state[1] == self_test_mon_e); + Check ( self_test_SU_number == 2 ); + Check ( SU_state[ 1 ] == self_test_mon_e ); - /* Run round_7_e of Monitoring to start Self Test: */ + /* Run round_7_e of Monitoring to start Self Test: */ - Monitor_Health (Prob6a); + Monitor_Health ( Prob6a ); - Check (self_test_SU_number == 2); - Check (SU_state[1] == self_test_e); + Check ( self_test_SU_number == 2 ); + Check ( SU_state[ 1 ] == self_test_e ); - /* Run round_6_e of Monitoring to execute Self Test: */ + /* Run round_6_e of Monitoring to execute Self Test: */ - Check (health_mon_round == round_6_e); + Check ( health_mon_round == round_6_e ); - Monitor_Health (Prob6a); + Monitor_Health ( Prob6a ); - Check (self_test_SU_number == NO_SU); - Check (SU_state[1] == on_e); + Check ( self_test_SU_number == NO_SU ); + Check ( SU_state[ 1 ] == on_e ); - Check_No_Errors (); + Check_No_Errors (); - CASE("Run Self Test for SU2, fail"); + CASE( "Run Self Test for SU2, fail" ); - Check (GetMode() == STAND_BY); - Check_No_Errors (); + Check ( GetMode() == STAND_BY ); + Check_No_Errors (); - Exec_TC (SWITCH_SU_2, SELF_TEST, Prob4a); + Exec_TC ( SWITCH_SU_2, SELF_TEST, Prob4a ); - Check_No_Errors (); + Check_No_Errors (); - Check (self_test_SU_number == 2); - Check (SU_state[1] == self_test_mon_e); + Check ( self_test_SU_number == 2 ); + Check ( SU_state[ 1 ] == self_test_mon_e ); - sim_self_test = 0; - /* Force self-test to fail. */ + sim_self_test = 0; + /* Force self-test to fail. */ - /* Run Monitoring up to but not including round_7_e: */ + /* Run Monitoring up to but not including round_7_e: */ - _Pragma("loopbound min 8 max 8") - while (health_mon_round != round_7_e) - { - Monitor_Health (Prob6a); - } + _Pragma( "loopbound min 8 max 8" ) + while ( health_mon_round != round_7_e ) + Monitor_Health ( Prob6a ); - Check (self_test_SU_number == 2); - Check (SU_state[1] == self_test_mon_e); + Check ( self_test_SU_number == 2 ); + Check ( SU_state[ 1 ] == self_test_mon_e ); - /* Run round_7_e of Monitoring to start Self Test: */ + /* Run round_7_e of Monitoring to start Self Test: */ - Monitor_Health (Prob6a); + Monitor_Health ( Prob6a ); - Check (self_test_SU_number == 2); - Check (SU_state[1] == self_test_e); + Check ( self_test_SU_number == 2 ); + Check ( SU_state[ 1 ] == self_test_e ); - /* Run round_6_e of Monitoring to execute Self Test: */ + /* Run round_6_e of Monitoring to execute Self Test: */ - Check (health_mon_round == round_6_e); + Check ( health_mon_round == round_6_e ); - Monitor_Health (Prob6a); + Monitor_Health ( Prob6a ); - Check (self_test_SU_number == NO_SU); - Check (SU_state[1] == on_e); + Check ( self_test_SU_number == NO_SU ); + Check ( SU_state[ 1 ] == on_e ); - Check_Nonzero (telemetry_data.SU_status[1] & SELF_TEST_ERROR); - Check (telemetry_data.error_status == 0x20); + Check_Nonzero ( telemetry_data.SU_status[ 1 ] & SELF_TEST_ERROR ); + Check ( telemetry_data.error_status == 0x20 ); - Clear_Errors (); + Clear_Errors (); - CASE("Hit Trigger, SU Self Test, correct pulse"); + CASE( "Hit Trigger, SU Self Test, correct pulse" ); - hit_budget_left = 15; + hit_budget_left = 15; - Set_AD_Delay (2); - ad_conv_num = 0; + Set_AD_Delay ( 2 ); + ad_conv_num = 0; - _Pragma("loopbound min 4 max 4") - for (sen = 0; sen < NUM_SU; sen ++) - { - self_test_SU_number = sen + SU1; + _Pragma( "loopbound min 4 max 4" ) + for ( sen = 0; sen < NUM_SU; sen ++ ) { + self_test_SU_number = sen + SU1; - SU_state[sen] = self_test_trigger_e; + SU_state[ sen ] = self_test_trigger_e; - Trigger_SU_Hit (sen, Prob3a); + Trigger_SU_Hit ( sen, Prob3a ); - Check (SU_state[sen] == self_test_e); + Check ( SU_state[ sen ] == self_test_e ); - Check (mail_count[ACQUISITION_MAILBOX] == 1); + Check ( mail_count[ ACQUISITION_MAILBOX ] == 1 ); - Check (mail_message[ACQUISITION_MAILBOX] == sen + SU1); + Check ( mail_message[ ACQUISITION_MAILBOX ] == sen + SU1 ); - FlushMail (ACQUISITION_MAILBOX); - } + FlushMail ( ACQUISITION_MAILBOX ); + } - Check (hit_budget_left == 15 - NUM_SU); + Check ( hit_budget_left == 15 - NUM_SU ); - CASE("Hit Trigger, SU Self Test, incorrect pulse"); + CASE( "Hit Trigger, SU Self Test, incorrect pulse" ); - hit_budget_left = 15; + hit_budget_left = 15; - Set_AD_Delay (2); - ad_conv_num = 0; + Set_AD_Delay ( 2 ); + ad_conv_num = 0; - _Pragma("loopbound min 4 max 4") - for (sen = 0; sen < NUM_SU; sen ++) - { - self_test_SU_number = sen + SU1; + _Pragma( "loopbound min 4 max 4" ) + for ( sen = 0; sen < NUM_SU; sen ++ ) { + self_test_SU_number = sen + SU1; - SU_state[sen] = self_test_e; + SU_state[ sen ] = self_test_e; - Trigger_SU_Hit (sen, Prob3a); + Trigger_SU_Hit ( sen, Prob3a ); - Check (SU_state[sen] == self_test_e); + Check ( SU_state[ sen ] == self_test_e ); - Check (mail_count[ACQUISITION_MAILBOX] == 1); + Check ( mail_count[ ACQUISITION_MAILBOX ] == 1 ); - Check (mail_message[ACQUISITION_MAILBOX] == - ((sen + SU1) | HIT_SELF_TEST_RESET)); + Check ( mail_message[ ACQUISITION_MAILBOX ] == + ( ( sen + SU1 ) | HIT_SELF_TEST_RESET ) ); - FlushMail (ACQUISITION_MAILBOX); - } + FlushMail ( ACQUISITION_MAILBOX ); + } - Check (hit_budget_left == 15 - NUM_SU); + Check ( hit_budget_left == 15 - NUM_SU ); - CASE("Hit Trigger, SU Self Test, other pulse"); + CASE( "Hit Trigger, SU Self Test, other pulse" ); - hit_budget_left = 15; + hit_budget_left = 15; - Set_AD_Delay (2); - ad_conv_num = 0; + Set_AD_Delay ( 2 ); + ad_conv_num = 0; - _Pragma("loopbound min 4 max 4") - for (sen = 0; sen < NUM_SU; sen ++) - { - self_test_SU_number = sen + SU1; + _Pragma( "loopbound min 4 max 4" ) + for ( sen = 0; sen < NUM_SU; sen ++ ) { + self_test_SU_number = sen + SU1; - SU_state[sen] = on_e; + SU_state[ sen ] = on_e; - Trigger_SU_Hit (sen, Prob3a); + Trigger_SU_Hit ( sen, Prob3a ); - Check (SU_state[sen] == on_e); + Check ( SU_state[ sen ] == on_e ); - Check (mail_count[ACQUISITION_MAILBOX] == 1); + Check ( mail_count[ ACQUISITION_MAILBOX ] == 1 ); - Check (mail_message[ACQUISITION_MAILBOX] == sen + SU1); + Check ( mail_message[ ACQUISITION_MAILBOX ] == sen + SU1 ); - FlushMail (ACQUISITION_MAILBOX); - } + FlushMail ( ACQUISITION_MAILBOX ); + } - Check (hit_budget_left == 15 - NUM_SU); + Check ( hit_budget_left == 15 - NUM_SU ); - Check_No_Errors (); + Check_No_Errors (); - CASE("Turn Sensor Units OFF after Self Tests"); + CASE( "Turn Sensor Units OFF after Self Tests" ); - /* Send the SWITCH OFF commands: */ + /* Send the SWITCH OFF commands: */ - _Pragma("loopbound min 4 max 4") - for (sen = 0; sen < NUM_SU; sen ++) - { - Exec_TC (switch_su_cmd[sen], OFF_VALUE, Prob4a); + _Pragma( "loopbound min 4 max 4" ) + for ( sen = 0; sen < NUM_SU; sen ++ ) { + Exec_TC ( switch_su_cmd[ sen ], OFF_VALUE, Prob4a ); - Check_No_Errors (); - Check (SU_state[sen] == off_e); - } + Check_No_Errors (); + Check ( SU_state[ sen] == off_e ); + } } @@ -3696,7 +3642,7 @@ static unsigned int test_round = 0; /* Counts test repetitions. */ -void StartSystem(unsigned char task_number) +void StartSystem( unsigned char task_number ) /* ORIGINALLY: */ /* Purpose : Starts the system. */ /* Interface : input - none */ @@ -3707,64 +3653,62 @@ void StartSystem(unsigned char task_number) /* IN HARNESS: */ /* Executes the test scenario. */ { -#if defined(TRACE_HARNESS) - printf ("StartSystem %d\n", task_number); -#endif + #if defined(TRACE_HARNESS) + printf ( "StartSystem %d\n", task_number ); + #endif - /* Initialize the global data of the tasks: */ + /* Initialize the global data of the tasks: */ - InitHealthMonitoring (); + InitHealthMonitoring (); - /* Testing the ISRs and tasks: */ + /* Testing the ISRs and tasks: */ - _Pragma("loopbound min 1 max 1") - do - { - test_round ++; + _Pragma( "loopbound min 1 max 1" ) + do { + test_round ++; -#if defined(TRACE_HARNESS) - printf ("Test round %d\n", test_round); -#endif + #if defined(TRACE_HARNESS) + printf ( "Test round %d\n", test_round ); + #endif - TARGET_START_TEST; + TARGET_START_TEST; - TC_ISR_Tests (); + TC_ISR_Tests (); - Report_Checks (); + Report_Checks (); - TC_Task_Tests (); + TC_Task_Tests (); - Report_Checks (); + Report_Checks (); - Monitoring_Task_Tests (); + Monitoring_Task_Tests (); - Report_Checks (); + Report_Checks (); - TM_Tests (); + TM_Tests (); - Report_Checks (); + Report_Checks (); - Hit_ISR_Tests (); + Hit_ISR_Tests (); - Report_Checks (); + Report_Checks (); - Acquisition_Tests (); + Acquisition_Tests (); - Report_Checks (); + Report_Checks (); - SU_Self_Test_Tests (); + SU_Self_Test_Tests (); - Report_Checks (); + Report_Checks (); - /* Clear for next round: */ + /* Clear for next round: */ - checks = 0; - } - while (TARGET_REPEAT_TEST); + checks = 0; + } while ( TARGET_REPEAT_TEST ); -#if defined(TRACE_HARNESS) - printf ("Total mailbox overflows %d\n", mail_overflows); - exit (0); -#endif + #if defined(TRACE_HARNESS) + printf ( "Total mailbox overflows %d\n", mail_overflows ); + exit ( 0 ); + #endif } diff --git a/bench/parallel/DEBIE/code/harness/target_ad_conv.h b/bench/parallel/DEBIE/code/harness/target_ad_conv.h index 892bc3482a90981473da28e1eb7bc300b3909273..bb20cac5205fa8da66003c9f25c796a428a14687 100644 --- a/bench/parallel/DEBIE/code/harness/target_ad_conv.h +++ b/bench/parallel/DEBIE/code/harness/target_ad_conv.h @@ -1,26 +1,26 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : target_ad_conv.h - * - * Macros, functions, types and constants for controlling AD converter. - * - * This version uses the harness functions for I/O and kernel simulation. - * - * Based on the SSF DHI file ad_conv.h, revision 1.6, Tue Jun 01 12:35:44 1999. - * - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : target_ad_conv.h + + Macros, functions, types and constants for controlling AD converter. + + This version uses the harness functions for I/O and kernel simulation. + + Based on the SSF DHI file ad_conv.h, revision 1.6, Tue Jun 01 12:35:44 1999. + + + - * -------------------------------------------------------------------------- +*/ #ifndef TARGET_AD_CONV_H @@ -30,11 +30,11 @@ /* AD converter control functions, simulated in harness.c */ -extern void Update_ADC_Channel_Reg (unsigned char channel); -extern void Start_Conversion (void); -extern unsigned char End_Of_ADC (void); -extern unsigned char Get_Result (void); -extern void Set_DAC_Output (unsigned char level); +extern void Update_ADC_Channel_Reg ( unsigned char channel ); +extern void Start_Conversion ( void ); +extern unsigned char End_Of_ADC ( void ); +extern unsigned char Get_Result ( void ); +extern void Set_DAC_Output ( unsigned char level ); /* AD converter control macros */ diff --git a/bench/parallel/DEBIE/code/harness/target_dpu_ctrl.h b/bench/parallel/DEBIE/code/harness/target_dpu_ctrl.h index c858aad984777f607cd62a1b99e649f1392daf46..ef4782b4d37f4adc38ba4fdadbe13178454bab0a 100644 --- a/bench/parallel/DEBIE/code/harness/target_dpu_ctrl.h +++ b/bench/parallel/DEBIE/code/harness/target_dpu_ctrl.h @@ -1,35 +1,35 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : target_dpu_ctrl.h - * - * Operations and macros for low-level control of the Data Processing - * Unit, the 80C32 computer on which the DEBIE DPU software runs. - * This includes accessing data and code memories by address; boot - * and reset operations; watchdog handling; memory patch and test. - * - * This version uses the harness functions for I/O and kernel simulation. - * - * Based on the SSF DHI file dpu_ctrl.h, rev 1.23, Fri May 28 14:59:30 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : target_dpu_ctrl.h + + Operations and macros for low-level control of the Data Processing + Unit, the 80C32 computer on which the DEBIE DPU software runs. + This includes accessing data and code memories by address; boot + and reset operations; watchdog handling; memory patch and test. + + This version uses the harness functions for I/O and kernel simulation. + + Based on the SSF DHI file dpu_ctrl.h, rev 1.23, Fri May 28 14:59:30 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TARGET_DPU_CTRL_H #define TARGET_DPU_CTRL_H #include "keyword.h" -extern unsigned char Event_Flag (void); +extern unsigned char Event_Flag ( void ); #define EVENT_FLAG Event_Flag() /* Event storage condition signal. */ @@ -37,9 +37,9 @@ extern unsigned char Event_Flag (void); /* Access simulated memory */ -extern void Set_Data_Byte (data_address_t addr, unsigned char value); -extern unsigned char Get_Data_Byte (data_address_t addr); -extern unsigned char Get_Code_Byte (code_address_t addr); +extern void Set_Data_Byte ( data_address_t addr, unsigned char value ); +extern unsigned char Get_Data_Byte ( data_address_t addr ); +extern unsigned char Get_Code_Byte ( code_address_t addr ); /* Functions and macros to access external memory by numerical address. */ @@ -59,7 +59,7 @@ extern unsigned char Get_Code_Byte (code_address_t addr); /* macro used in healthmonitoring */ -extern unsigned char Check_Current (unsigned char bits); +extern unsigned char Check_Current ( unsigned char bits ); #define CHECK_CURRENT(BIT_NUMBERS) Check_Current (BIT_NUMBERS) /* Checks whether given bit in the HV Status Register is HIGH or LOW. */ diff --git a/bench/parallel/DEBIE/code/harness/target_isr_ctrl.h b/bench/parallel/DEBIE/code/harness/target_isr_ctrl.h index 18b37fd80c3b7a0abd40be23c86e15547915bec0..9dac8eb7eab8f42fb687e7cda2adfe0115010c8a 100644 --- a/bench/parallel/DEBIE/code/harness/target_isr_ctrl.h +++ b/bench/parallel/DEBIE/code/harness/target_isr_ctrl.h @@ -1,26 +1,26 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : target_isr_ctrl.h - * - * Macros and operations to control and handle interrupts. - * - * This version uses the harness functions for I/O and kernel simulation. - * - * Based on the SSF DHI file isr_ctrl.h, rev 1.16, Sun Jul 25 15:02:08 1999. - * - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : target_isr_ctrl.h + + Macros and operations to control and handle interrupts. + + This version uses the harness functions for I/O and kernel simulation. + + Based on the SSF DHI file isr_ctrl.h, rev 1.16, Sun Jul 25 15:02:08 1999. + + + - * -------------------------------------------------------------------------- +*/ #ifndef TARGET_ISR_CTRL_H @@ -29,9 +29,9 @@ /* Simulation of hit trigger. */ -extern void Enable_Hit_Trigger (void); -extern void Disable_Hit_Trigger (void); -extern unsigned char Hit_Trigger_Flag (void); +extern void Enable_Hit_Trigger ( void ); +extern void Disable_Hit_Trigger ( void ); +extern unsigned char Hit_Trigger_Flag ( void ); /* Macros for access to hit trigger. */ @@ -52,9 +52,9 @@ extern unsigned char Hit_Trigger_Flag (void); /* Simulation of Telecommand Timer */ -extern unsigned char TC_Timer_Overflow_Flag (void); -extern void Clear_TC_Timer_Overflow_Flag (void); -extern void Set_TC_Timer_Overflow_Flag (void); +extern unsigned char TC_Timer_Overflow_Flag ( void ); +extern void Clear_TC_Timer_Overflow_Flag ( void ); +extern void Set_TC_Timer_Overflow_Flag ( void ); /* Macros for Telecommand Timer */ diff --git a/bench/parallel/DEBIE/code/harness/target_reg52.h b/bench/parallel/DEBIE/code/harness/target_reg52.h index 8aa18b05e060a445c4d8d449c5cd42cf188184e1..dc069e5ad1f10c74e81ae70e4bb23ad4b44c0ea7 100644 --- a/bench/parallel/DEBIE/code/harness/target_reg52.h +++ b/bench/parallel/DEBIE/code/harness/target_reg52.h @@ -1,28 +1,28 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : target_reg52.h - * - * Definitions for 80C32 Special Function Registers to be used - * in portable parts of the DEBIE DPU software. - * - * This "null" (DNI) version declares these Special Function Registers - * as global "unsigned char" variables. - * - * Created for the DEBIE-I WCET benchmark program. Not based directly - * on any SSF sources. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : target_reg52.h + + Definitions for 80C32 Special Function Registers to be used + in portable parts of the DEBIE DPU software. + + This "null" (DNI) version declares these Special Function Registers + as global "unsigned char" variables. + + Created for the DEBIE-I WCET benchmark program. Not based directly + on any SSF sources. + + - * -------------------------------------------------------------------------- +*/ #ifndef TARGET_REG52_H diff --git a/bench/parallel/DEBIE/code/harness/target_su_ctrl.h b/bench/parallel/DEBIE/code/harness/target_su_ctrl.h index 7086cb3c7d57fdea9cff863079ac42038d70cc14..a4b5bf08a21738866bd3a683c019cde74f05d5b3 100644 --- a/bench/parallel/DEBIE/code/harness/target_su_ctrl.h +++ b/bench/parallel/DEBIE/code/harness/target_su_ctrl.h @@ -1,25 +1,25 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : target_su_ctrl.h - * - * Macros, functions, constants and types for controlling Sensor Units. - * - * This version uses the harness functions for I/O and kernel simulation. - * - * Based on the SSF DHI file su_ctrl.h, rev 1.28, Tue Sep 14 14:51:26 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : target_su_ctrl.h + + Macros, functions, constants and types for controlling Sensor Units. + + This version uses the harness functions for I/O and kernel simulation. + + Based on the SSF DHI file su_ctrl.h, rev 1.28, Tue Sep 14 14:51:26 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TARGET_SU_CTRL_H @@ -27,10 +27,10 @@ /* Simulation of counter access */ -extern unsigned char Get_MSB_Counter (void); -extern unsigned char Get_LSB1_Counter (void); -extern unsigned char Get_LSB2_Counter (void); -extern unsigned char Rise_Time_Counter (void); +extern unsigned char Get_MSB_Counter ( void ); +extern unsigned char Get_LSB1_Counter ( void ); +extern unsigned char Get_LSB2_Counter ( void ); +extern unsigned char Rise_Time_Counter ( void ); /* Counter access macros */ @@ -43,9 +43,9 @@ extern unsigned char Rise_Time_Counter (void); /* Simulation of trigger signal */ -extern unsigned char Trigger_Source_0 (void); -extern unsigned char Trigger_Source_1 (void); -extern unsigned char V_Down (void); +extern unsigned char Trigger_Source_0 ( void ); +extern unsigned char Trigger_Source_1 ( void ); +extern unsigned char V_Down ( void ); /* Macros to access trigger signals */ @@ -55,8 +55,8 @@ extern unsigned char V_Down (void); /* Simulation of SU Self Test functions */ -extern void Set_SU_Self_Test_Ch (unsigned char value); -extern void Set_Test_Pulse_Level (unsigned char level); +extern void Set_SU_Self_Test_Ch ( unsigned char value ); +extern void Set_Test_Pulse_Level ( unsigned char level ); #define SET_SU_SELF_TEST_CH(value) Set_SU_Self_Test_Ch (value) #define SET_TEST_PULSE_LEVEL(level) Set_Test_Pulse_Level(level) diff --git a/bench/parallel/DEBIE/code/harness/target_ttc_ctrl.h b/bench/parallel/DEBIE/code/harness/target_ttc_ctrl.h index d1389cb75f994dbddb9019cab9c14d77a80010dd..385677205772e34831b393427de2aa8f83f9bf4d 100644 --- a/bench/parallel/DEBIE/code/harness/target_ttc_ctrl.h +++ b/bench/parallel/DEBIE/code/harness/target_ttc_ctrl.h @@ -1,26 +1,26 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : target_ttc_ctrl.h - * - * Macros and function prototypes for handling the Telecommand - * and Telemetry interface. - * - * This version uses the harness functions for I/O and kernel simulation. - * - * Based on the SSF DHI file ttc_ctrl.h, rev 1.11, Sun May 16 09:20:10 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : target_ttc_ctrl.h + + Macros and function prototypes for handling the Telecommand + and Telemetry interface. + + This version uses the harness functions for I/O and kernel simulation. + + Based on the SSF DHI file ttc_ctrl.h, rev 1.11, Sun May 16 09:20:10 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TARGET_TTC_CTRL_H @@ -28,10 +28,10 @@ /* TC/TM interface functions, simulated */ -extern unsigned char Read_TC_MSB (void); -extern unsigned char Read_TC_LSB (void); -extern void Write_TM_LSB (unsigned char value); -extern void Write_TM_MSB (unsigned char value); +extern unsigned char Read_TC_MSB ( void ); +extern unsigned char Read_TC_LSB ( void ); +extern void Write_TM_LSB ( unsigned char value ); +extern void Write_TM_MSB ( unsigned char value ); /* TC and TM register handling */ @@ -61,7 +61,7 @@ extern void Write_TM_MSB (unsigned char value); #define INIT_TC_TIMER_MSB {} #define INIT_TC_TIMER_LSB {} -/* TC timer initialization macros */ +/* TC timer initialization macros */ #define START_TC_TIMER {} #define STOP_TC_TIMER {} diff --git a/bench/parallel/DEBIE/code/health.c b/bench/parallel/DEBIE/code/health.c index d0e40c1d96c52b05beeb8dfcc628c49d9f7473f2..3f837275db1b9830f142674f921cc2481217ec63 100644 --- a/bench/parallel/DEBIE/code/health.c +++ b/bench/parallel/DEBIE/code/health.c @@ -1,23 +1,23 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : health.c - * - * Monitoring DEBIE DPU and system health. - * - * Based on the SSF file health.c, rev 1.74, Fri Oct 15 20:18:02 1999. - * - *- * ----------------------------------------------------------------------- + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : health.c + + Monitoring DEBIE DPU and system health. + + Based on the SSF file health.c, rev 1.74, Fri Oct 15 20:18:02 1999. + + - * ----------------------------------------------------------------------- */ #include "ad_conv.h" @@ -108,13 +108,13 @@ /* Used in SU self test. */ typedef struct { - channel_t ADC_channel; - uint_least8_t ADC_max_tries; - uint_least8_t conversion_max_tries; - unsigned int unsigned_ADC; - signed int signed_ADC; - unsigned char AD_execution_result; - sensor_number_t sensor_unit; + channel_t ADC_channel; + uint_least8_t ADC_max_tries; + uint_least8_t conversion_max_tries; + unsigned int unsigned_ADC; + signed int signed_ADC; + unsigned char AD_execution_result; + sensor_number_t sensor_unit; } ADC_parameters_t; /* This struct is used to hold parameters for Reading AD channels. */ /* */ @@ -137,7 +137,7 @@ typedef struct { typedef enum { - su1_e,su2_e,su3_e,su4_e + su1_e, su2_e, su3_e, su4_e } SU_index_t; @@ -163,8 +163,8 @@ unsigned char EXTERNAL self_test_flag = SELF_TEST_DONE; /* enumerations */ typedef enum { - channel_0_e, channel_1_e, channel_2_e, channel_3_e, channel_4_e, - channel_5_e, channel_6_e + channel_0_e, channel_1_e, channel_2_e, channel_3_e, channel_4_e, + channel_5_e, channel_6_e } AD_channel_t; @@ -182,51 +182,51 @@ dpu_time_t EXTERNAL internal_time; /* Function prototypes. */ -void DelayAwhile (unsigned short duration); -void Read_AD_Channel (ADC_parameters_t EXTERNAL * ADC_results); -void DAC_SelfTest(unsigned char DAC_output, - ADC_parameters_t EXTERNAL * ADC_test_parameters) ; -void Monitor(uint_least8_t health_mon_round); -void UpdateTime(void); -void MeasureTemperature(sensor_index_t SU_index); -void HighVoltageCurrent(sensor_index_t SU_index); -void LowVoltageCurrent(void); -void MeasureVoltage(uint_least8_t channel_selector); -void InitSystem(void); -void CalculateChecksum(uint_least8_t checksum_count); -void UpdatePeriodCounter(uint_least8_t EXTERNAL * counter, - uint_least8_t full_counter_value); -void Convert_AD (ADC_parameters_t EXTERNAL * ADC_parameters); -void TemperatureFailure(sensor_index_t SU_index); -void VoltageFailure(channel_t ADC_channel); - -void SelfTest_SU(sensor_index_t self_test_SU_index); -void Monitor_DPU_Voltage(void); -void Monitor_SU_Voltage(sensor_index_t self_test_SU_index); +void DelayAwhile ( unsigned short duration ); +void Read_AD_Channel ( ADC_parameters_t EXTERNAL *ADC_results ); +void DAC_SelfTest( unsigned char DAC_output, + ADC_parameters_t EXTERNAL *ADC_test_parameters ) ; +void Monitor( uint_least8_t health_mon_round ); +void UpdateTime( void ); +void MeasureTemperature( sensor_index_t SU_index ); +void HighVoltageCurrent( sensor_index_t SU_index ); +void LowVoltageCurrent( void ); +void MeasureVoltage( uint_least8_t channel_selector ); +void InitSystem( void ); +void CalculateChecksum( uint_least8_t checksum_count ); +void UpdatePeriodCounter( uint_least8_t EXTERNAL *counter, + uint_least8_t full_counter_value ); +void Convert_AD ( ADC_parameters_t EXTERNAL *ADC_parameters ); +void TemperatureFailure( sensor_index_t SU_index ); +void VoltageFailure( channel_t ADC_channel ); + +void SelfTest_SU( sensor_index_t self_test_SU_index ); +void Monitor_DPU_Voltage( void ); +void Monitor_SU_Voltage( sensor_index_t self_test_SU_index ); unsigned char ExceedsLimit( - unsigned char value, - unsigned char lower_limit, - unsigned char upper_limit); -void RestoreSettings(sensor_index_t self_test_SU_index); -void SelfTestChannel(sensor_index_t self_test_SU_index); + unsigned char value, + unsigned char lower_limit, + unsigned char upper_limit ); +void RestoreSettings( sensor_index_t self_test_SU_index ); +void SelfTestChannel( sensor_index_t self_test_SU_index ); void ExecuteChannelTest( - sensor_index_t self_test_SU_index, - unsigned char test_channel, - unsigned char test_pulse_start_level); + sensor_index_t self_test_SU_index, + unsigned char test_channel, + unsigned char test_pulse_start_level ); /* Other function prototypes. */ void Set_SU_TriggerLevels ( - sensor_number_t sensor_unit, - SU_settings_t EXTERNAL *settings); + sensor_number_t sensor_unit, + SU_settings_t EXTERNAL *settings ); /*****************************************************************************/ /* Boot and DPU self test */ /*****************************************************************************/ -void Clear_RTX_Errors(void) +void Clear_RTX_Errors( void ) /* Purpose : Clears RTX error registers in telemetry */ /* Interface : input - */ /* output - telemetry_data, rtx error registers */ @@ -234,17 +234,17 @@ void Clear_RTX_Errors(void) /* Postconditions : RTX error registers are cleared. */ /* Algorithm : See below, self explanatory. */ { - telemetry_data.isr_send_message_error = 0xFF; - telemetry_data.os_send_message_error = 0xFF; - telemetry_data.os_create_task_error = 0xFF; - telemetry_data.os_wait_error = 0xFF; - telemetry_data.os_attach_interrupt_error = 0xFF; - telemetry_data.os_enable_isr_error = 0xFF; - telemetry_data.os_disable_isr_error = 0xFF; + telemetry_data.isr_send_message_error = 0xFF; + telemetry_data.os_send_message_error = 0xFF; + telemetry_data.os_create_task_error = 0xFF; + telemetry_data.os_wait_error = 0xFF; + telemetry_data.os_attach_interrupt_error = 0xFF; + telemetry_data.os_enable_isr_error = 0xFF; + telemetry_data.os_disable_isr_error = 0xFF; } -void SetSoftwareError(unsigned char error) COMPACT_DATA REENTRANT_FUNC +void SetSoftwareError( unsigned char error ) COMPACT_DATA REENTRANT_FUNC /* Purpose : This function will be called always when */ /* bit(s) in the software error status */ /* register are set. */ @@ -252,9 +252,9 @@ void SetSoftwareError(unsigned char error) COMPACT_DATA REENTRANT_FUNC /* - measurement_error, which specifies what */ /* bits are set in software error status. */ /* Value is as follows, */ -/* */ +/* */ /* MEASUREMENT_ERROR */ -/* */ +/* */ /* outputs - software error status register */ /* subroutines - none */ /* Preconditions : none */ @@ -263,11 +263,11 @@ void SetSoftwareError(unsigned char error) COMPACT_DATA REENTRANT_FUNC /* - Write to software error status register */ /* - Enable interrupts */ { - DISABLE_INTERRUPT_MASTER; + DISABLE_INTERRUPT_MASTER; - telemetry_data.software_error |= error; + telemetry_data.software_error |= error; - ENABLE_INTERRUPT_MASTER; + ENABLE_INTERRUPT_MASTER; } void ClearSoftwareError() @@ -279,15 +279,15 @@ void ClearSoftwareError() /* subroutines - none */ /* Preconditions : none */ /* Postconditions : none */ -/* Algorithm : */ +/* Algorithm : */ /* - Write to SoftwareErrorStatuRegister */ { - telemetry_data.software_error = 0; + telemetry_data.software_error = 0; } -void SetModeStatusError(unsigned char mode_status_error) - COMPACT_DATA REENTRANT_FUNC +void SetModeStatusError( unsigned char mode_status_error ) +COMPACT_DATA REENTRANT_FUNC /* Purpose : This function will be called always when */ /* error bit(s) in the mode status register are set. */ /* Interface : inputs - mode status register */ @@ -295,13 +295,13 @@ void SetModeStatusError(unsigned char mode_status_error) /* bit(s) are to be set in */ /* mode status register. Value is one of */ /* the following, */ -/* */ +/* */ /* SUPPLY_ERROR */ /* DATA_MEMORY_ERROR */ /* PROGRAM_MEMORY_ERROR */ /* MEMORY_WRITE_ERROR */ /* ADC_ERROR */ -/* */ +/* */ /* outputs - mode status register */ /* subroutines - none */ /* Preconditions : none */ @@ -310,21 +310,21 @@ void SetModeStatusError(unsigned char mode_status_error) /* - Write to Mode Status register */ /* - Enable interrupts */ { - DISABLE_INTERRUPT_MASTER; + DISABLE_INTERRUPT_MASTER; - telemetry_data.mode_status |= (mode_status_error & (~MODE_BITS_MASK)); - /* The mode bits are secured against unintended modification by */ - /* clearing those bits in 'mode_status_error' before "or":ing */ - /* its value to 'telemetry_data.mode_status'. */ + telemetry_data.mode_status |= ( mode_status_error & ( ~MODE_BITS_MASK ) ); + /* The mode bits are secured against unintended modification by */ + /* clearing those bits in 'mode_status_error' before "or":ing */ + /* its value to 'telemetry_data.mode_status'. */ - ENABLE_INTERRUPT_MASTER; + ENABLE_INTERRUPT_MASTER; } -void ClearModeStatusError(void) +void ClearModeStatusError( void ) /* Purpose : This function will be called always when all */ /* error bits in the mode status register are cleared. */ /* Interface : inputs - mode status register */ -/* */ +/* */ /* outputs - mode status register */ /* subroutines - none */ /* Preconditions : none */ @@ -333,15 +333,15 @@ void ClearModeStatusError(void) /* - Write to Mode Status register */ /* - Enable interrupts */ { - DISABLE_INTERRUPT_MASTER; + DISABLE_INTERRUPT_MASTER; - telemetry_data.mode_status &= MODE_BITS_MASK; - /* Error bits in the mode status register are cleared. */ + telemetry_data.mode_status &= MODE_BITS_MASK; + /* Error bits in the mode status register are cleared. */ - ENABLE_INTERRUPT_MASTER; + ENABLE_INTERRUPT_MASTER; } -void SetMode(DEBIE_mode_t mode) COMPACT_DATA REENTRANT_FUNC +void SetMode( DEBIE_mode_t mode ) COMPACT_DATA REENTRANT_FUNC /* Purpose : This function will be called always when */ /* mode in the mode status register is set. */ /* Interface : inputs - mode status register */ @@ -351,7 +351,7 @@ void SetMode(DEBIE_mode_t mode) COMPACT_DATA REENTRANT_FUNC /* DPU self test */ /* stand by */ /* acquisition */ -/* */ +/* */ /* outputs - mode status register */ /* subroutines - none */ /* Preconditions : none */ @@ -361,13 +361,13 @@ void SetMode(DEBIE_mode_t mode) COMPACT_DATA REENTRANT_FUNC /* - Enable interrupts */ { - DISABLE_INTERRUPT_MASTER; + DISABLE_INTERRUPT_MASTER; - telemetry_data.mode_status = (telemetry_data.mode_status & ~MODE_BITS_MASK) - | (mode & MODE_BITS_MASK); - /* First mode status bits are cleared, and then the given mode is set. */ + telemetry_data.mode_status = ( telemetry_data.mode_status & ~MODE_BITS_MASK ) + | ( mode & MODE_BITS_MASK ); + /* First mode status bits are cleared, and then the given mode is set. */ - ENABLE_INTERRUPT_MASTER; + ENABLE_INTERRUPT_MASTER; } DEBIE_mode_t GetMode() @@ -375,7 +375,7 @@ DEBIE_mode_t GetMode() /* mode in the mode status register is checked. */ /* Interface : */ /* inputs - mode status register */ -/* */ +/* */ /* outputs - mode status register */ /* - Mode bits, which specify the mode */ /* stored in the ModeStatus register. */ @@ -383,26 +383,26 @@ DEBIE_mode_t GetMode() /* DPU self test */ /* stand by */ /* acquisition */ -/* */ +/* */ /* subroutines - none */ /* Preconditions : none */ /* Postconditions : none */ -/* Algorithm : */ +/* Algorithm : */ /* - Read Mode Status register */ { - return(telemetry_data.mode_status & MODE_BITS_MASK); - /* Return the value of the two least significant bits in */ - /* mode status register and return this value. */ + return ( telemetry_data.mode_status & MODE_BITS_MASK ); + /* Return the value of the two least significant bits in */ + /* mode status register and return this value. */ } -void Clear_SU_Error(void) +void Clear_SU_Error( void ) /* Purpose : This function will be called always when all */ /* error bits in the SU# status register are cleared. */ /* Interface : inputs - SU# status register */ -/* */ +/* */ /* outputs - SU# status register */ /* subroutines - none */ /* Preconditions : none */ @@ -411,25 +411,24 @@ void Clear_SU_Error(void) /* - Write to Mode Status register */ /* - Enable interrupts */ { - sensor_index_t EXTERNAL i; + sensor_index_t EXTERNAL i; - DISABLE_INTERRUPT_MASTER; - _Pragma("loopbound min 4 max 4") - for (i = 0; i < NUM_SU; i++) - { - telemetry_data.SU_status[i] &= SUPPLY_VOLTAGE_MASK; - /* Error bits in the SU# status register are cleared. */ - } + DISABLE_INTERRUPT_MASTER; + _Pragma( "loopbound min 4 max 4" ) + for ( i = 0; i < NUM_SU; i++ ) { + telemetry_data.SU_status[ i ] &= SUPPLY_VOLTAGE_MASK; + /* Error bits in the SU# status register are cleared. */ + } - ENABLE_INTERRUPT_MASTER; + ENABLE_INTERRUPT_MASTER; } -void Set_SU_Error(sensor_index_t SU_index, unsigned char SU_error) +void Set_SU_Error( sensor_index_t SU_index, unsigned char SU_error ) /* Purpose : This function will be called always when */ /* error bit(s) in the SU# status register are set. */ /* Interface : inputs - SU# status register */ -/* - 'SU_index' (0-3) */ +/* - 'SU_index' (0-3) */ /* - 'SU_error' is one of the following: */ /* */ /* LV_SUPPLY_ERROR */ @@ -448,32 +447,32 @@ void Set_SU_Error(sensor_index_t SU_index, unsigned char SU_error) /* - Enable interrupts */ { - DISABLE_INTERRUPT_MASTER; - - telemetry_data.SU_status[SU_index] |= - (SU_error &(~SUPPLY_VOLTAGE_MASK)); - /* Error bits in the SU# status register are cleared. */ - /* The voltage status bits in the SU# status register */ - /* are secured against unintended modification by */ - /* clearing those bits in 'SU_error' before */ - /* "or":ing its value to */ - /* 'telemetry_data.SU_status'. */ - - SetErrorStatus(ERROR_STATUS_OFFSET << SU_index); - /* SU# error is set in the error status register, if */ - /* anyone of the error bits in the SU# status register */ - /* is set. */ - /* Because this subroutine enables itself the interrupts, */ - /* the call of it must be the last operation in the */ - /* interrupt blocked area ! */ - - ENABLE_INTERRUPT_MASTER; + DISABLE_INTERRUPT_MASTER; + + telemetry_data.SU_status[ SU_index ] |= + ( SU_error & ( ~SUPPLY_VOLTAGE_MASK ) ); + /* Error bits in the SU# status register are cleared. */ + /* The voltage status bits in the SU# status register */ + /* are secured against unintended modification by */ + /* clearing those bits in 'SU_error' before */ + /* "or":ing its value to */ + /* 'telemetry_data.SU_status'. */ + + SetErrorStatus( ERROR_STATUS_OFFSET << SU_index ); + /* SU# error is set in the error status register, if */ + /* anyone of the error bits in the SU# status register */ + /* is set. */ + /* Because this subroutine enables itself the interrupts, */ + /* the call of it must be the last operation in the */ + /* interrupt blocked area ! */ + + ENABLE_INTERRUPT_MASTER; } void Set_SU_TriggerLevels ( - sensor_number_t sensor_unit, - SU_settings_t EXTERNAL *settings) + sensor_number_t sensor_unit, + SU_settings_t EXTERNAL *settings ) /* Purpose : Set all trigger-levels of one SU. */ /* Interface : inputs - SU number in 'sensor_unit'. */ /* - Triggering levels in 'settings'. */ @@ -485,26 +484,26 @@ void Set_SU_TriggerLevels ( /* - set trigger level for Plasma 1- */ /* - set trigger level for Piezos. */ { - trigger_set_t EXTERNAL trigger; - /* Holds parameters for SetTriggerLevel. */ + trigger_set_t EXTERNAL trigger; + /* Holds parameters for SetTriggerLevel. */ - trigger.sensor_unit = sensor_unit; + trigger.sensor_unit = sensor_unit; - trigger.level = settings -> plasma_1_plus_threshold; - trigger.channel = PLASMA_1_PLUS; - SetTriggerLevel (&trigger); + trigger.level = settings -> plasma_1_plus_threshold; + trigger.channel = PLASMA_1_PLUS; + SetTriggerLevel ( &trigger ); - trigger.level = settings -> plasma_1_minus_threshold; - trigger.channel = PLASMA_1_MINUS; - SetTriggerLevel (&trigger); + trigger.level = settings -> plasma_1_minus_threshold; + trigger.channel = PLASMA_1_MINUS; + SetTriggerLevel ( &trigger ); - trigger.level = settings -> piezo_threshold; - trigger.channel = PZT_1_2; - SetTriggerLevel (&trigger); + trigger.level = settings -> piezo_threshold; + trigger.channel = PZT_1_2; + SetTriggerLevel ( &trigger ); } -void SetErrorStatus(unsigned char error_source) +void SetErrorStatus( unsigned char error_source ) /* Purpose : This function will be called always when */ /* error bit(s) in the error status register are set. */ /* Exceptionally TC_ERROR will be set with a separate */ @@ -531,18 +530,18 @@ void SetErrorStatus(unsigned char error_source) /* - Enable interrupts */ { - DISABLE_INTERRUPT_MASTER; + DISABLE_INTERRUPT_MASTER; - telemetry_data.error_status |= (error_source &(~TC_ERROR)); - /* Error bits in the error status register are set. */ - /* The TC_ERROR bit in the error status register */ - /* is secured against unintended modification by */ - /* clearing that bit in 'error_source' before */ - /* "or":ing its value to */ - /* 'telemetry_data.error_status'. */ + telemetry_data.error_status |= ( error_source & ( ~TC_ERROR ) ); + /* Error bits in the error status register are set. */ + /* The TC_ERROR bit in the error status register */ + /* is secured against unintended modification by */ + /* clearing that bit in 'error_source' before */ + /* "or":ing its value to */ + /* 'telemetry_data.error_status'. */ - ENABLE_INTERRUPT_MASTER; + ENABLE_INTERRUPT_MASTER; } @@ -555,17 +554,17 @@ void ClearErrorStatus() /* subroutines - none */ /* Preconditions : none */ /* Postconditions : none */ -/* Algorithm : */ +/* Algorithm : */ /* - Write to error status register */ { - telemetry_data.error_status = 0; - /* Error bits in the error status register are */ - /* cleared. */ + telemetry_data.error_status = 0; + /* Error bits in the error status register are */ + /* cleared. */ } -void DPU_SelfTest (void) +void DPU_SelfTest ( void ) /* Purpose : Executes the DPU voltage self test. */ /* Interface : inputs - none */ /* */ @@ -576,10 +575,10 @@ void DPU_SelfTest (void) /* Algorithm : - Chosen supply voltages are measured and monitored with */ /* Monitor_DPU_Voltage */ { - Monitor_DPU_Voltage(); + Monitor_DPU_Voltage(); } -void Boot(void) +void Boot( void ) /* Purpose : Executes Boot sequence */ /* Interface : inputs - failed_code_address */ /* - failed_data_address */ @@ -605,168 +604,160 @@ void Boot(void) /* Algorithm : see below. */ { - EXTERNAL unsigned char execution_result; - /* Execution result for SetSensorUnitOff function. */ + EXTERNAL unsigned char execution_result; + /* Execution result for SetSensorUnitOff function. */ - EXTERNAL unsigned char * DIRECT_INTERNAL fill_pointer; - /* Used for data structure initialization */ + EXTERNAL unsigned char *DIRECT_INTERNAL fill_pointer; + /* Used for data structure initialization */ - DIRECT_INTERNAL reset_class_t reset_class; - /* What kind of reset caused this boot ? */ + DIRECT_INTERNAL reset_class_t reset_class; + /* What kind of reset caused this boot ? */ - DIRECT_INTERNAL unsigned int i; - /* Loop variable */ + DIRECT_INTERNAL unsigned int i; + /* Loop variable */ - SU_ctrl_register |= 0x0F; - SET_DATA_BYTE(SU_CONTROL,SU_ctrl_register); - /* Set all Peak detector reset signals to high */ + SU_ctrl_register |= 0x0F; + SET_DATA_BYTE( SU_CONTROL, SU_ctrl_register ); + /* Set all Peak detector reset signals to high */ - max_events = MAX_EVENTS; + max_events = MAX_EVENTS; - ResetDelayCounters(); + ResetDelayCounters(); - SetSensorUnitOff(su1_e, &execution_result); - /* Set Sensor Unit 1 to Off state */ + SetSensorUnitOff( su1_e, &execution_result ); + /* Set Sensor Unit 1 to Off state */ - SetSensorUnitOff(su2_e, &execution_result); - /* Set Sensor Unit 2 to Off state */ + SetSensorUnitOff( su2_e, &execution_result ); + /* Set Sensor Unit 2 to Off state */ - SetSensorUnitOff(su3_e, &execution_result); - /* Set Sensor Unit 3 to Off state */ + SetSensorUnitOff( su3_e, &execution_result ); + /* Set Sensor Unit 3 to Off state */ - SetSensorUnitOff(su4_e, &execution_result); - /* Set Sensor Unit 4 to Off state */ + SetSensorUnitOff( su4_e, &execution_result ); + /* Set Sensor Unit 4 to Off state */ - ADC_channel_register |= 0x80; - UPDATE_ADC_CHANNEL_REG; - /* ADC interleave calibration is not used. */ + ADC_channel_register |= 0x80; + UPDATE_ADC_CHANNEL_REG; + /* ADC interleave calibration is not used. */ - reset_class = GetResetClass(); - /* Find out what caused the reset. */ + reset_class = GetResetClass(); + /* Find out what caused the reset. */ - if (reset_class != warm_reset_e) - { - /* We are running the PROM code unpatched, either */ - /* from PROM or from SRAM. */ + if ( reset_class != warm_reset_e ) { + /* We are running the PROM code unpatched, either */ + /* from PROM or from SRAM. */ - reference_checksum = INITIAL_CHECKSUM_VALUE; - /* 'reference_checksum' is used as a reference when */ - /* the integrity of the code is checked by */ - /* HealthMonitoringTask. It is set to its initial */ - /* value here, after program code is copied from */ - /* PROM to RAM. */ - } + reference_checksum = INITIAL_CHECKSUM_VALUE; + /* 'reference_checksum' is used as a reference when */ + /* the integrity of the code is checked by */ + /* HealthMonitoringTask. It is set to its initial */ + /* value here, after program code is copied from */ + /* PROM to RAM. */ + } - if (reset_class == power_up_reset_e) - { - /* Data RAM was tested and is therefore garbage. */ - /* Init TM data registers and Science Data File. */ + if ( reset_class == power_up_reset_e ) { + /* Data RAM was tested and is therefore garbage. */ + /* Init TM data registers and Science Data File. */ - internal_time = 0; + internal_time = 0; - fill_pointer = (EXTERNAL unsigned char * DIRECT_INTERNAL)&telemetry_data; + fill_pointer = ( EXTERNAL unsigned char *DIRECT_INTERNAL )&telemetry_data; - _Pragma("loopbound min 124 max 124") - for (i=0; i < sizeof(telemetry_data); i++) - { - *fill_pointer = 0; - fill_pointer++; - } + _Pragma( "loopbound min 124 max 124" ) + for ( i = 0; i < sizeof( telemetry_data ); i++ ) { + *fill_pointer = 0; + fill_pointer++; + } - ResetEventQueueLength(); - /* Empty event queue. */ + ResetEventQueueLength(); + /* Empty event queue. */ - ClearEvents(); - /* Clears the event counters, quality numbers */ - /* and free_slot_index of the event records in */ - /* the science data memory. */ + ClearEvents(); + /* Clears the event counters, quality numbers */ + /* and free_slot_index of the event records in */ + /* the science data memory. */ - InitClassification(); - /* Initializes thresholds, classification levels and */ - /* min/max times related to classification. */ + InitClassification(); + /* Initializes thresholds, classification levels and */ + /* min/max times related to classification. */ - Clear_RTX_Errors(); - /* RTX error indicating registers are initialized. */ + Clear_RTX_Errors(); + /* RTX error indicating registers are initialized. */ - } + } - else if (reset_class == watchdog_reset_e) - { + else + if ( reset_class == watchdog_reset_e ) { /* Record watchdog failure in telemetry. */ telemetry_data.error_status |= WATCHDOG_ERROR; - if (telemetry_data.watchdog_failures < 255) - { - telemetry_data.watchdog_failures++; - } - } + if ( telemetry_data.watchdog_failures < 255 ) + telemetry_data.watchdog_failures++; + } - else if (reset_class == checksum_reset_e) - { - /* Record checksum failure in telemetry. */ + else + if ( reset_class == checksum_reset_e ) { + /* Record checksum failure in telemetry. */ - telemetry_data.error_status |= CHECKSUM_ERROR; + telemetry_data.error_status |= CHECKSUM_ERROR; - if (telemetry_data.checksum_failures < 255) - { - telemetry_data.checksum_failures++; + if ( telemetry_data.checksum_failures < 255 ) + telemetry_data.checksum_failures++; } - } - - else - { - /* Soft or Warm reset. */ - /* Preserve most of telemetry_data; clear some parts. */ - - ClearErrorStatus(); - Clear_SU_Error(); - Clear_RTX_Errors(); - ClearSoftwareError(); - telemetry_data.mode_status &= MODE_BITS_MASK; - telemetry_data.watchdog_failures = 0; - telemetry_data.checksum_failures = 0; - telemetry_data.TC_word = 0; - /* Clear error status bits, error status counters */ - /* and Command Status register. */ - - ResetEventQueueLength(); - /* Empty event queue. */ - ClearEvents(); - /* Clears the event counters, quality numbers */ - /* and free_slot_index of the event records in */ - /* the science data memory. */ - - InitClassification(); - /* Initializes thresholds, classification levels and */ - /* min/max times related to classification. */ - - self_test_SU_number = NO_SU; - /* Self test SU number indicating parameter */ - /* is set to its default value. */ - } + else { + /* Soft or Warm reset. */ + /* Preserve most of telemetry_data; clear some parts. */ + + ClearErrorStatus(); + Clear_SU_Error(); + Clear_RTX_Errors(); + ClearSoftwareError(); + telemetry_data.mode_status &= MODE_BITS_MASK; + telemetry_data.watchdog_failures = 0; + telemetry_data.checksum_failures = 0; + telemetry_data.TC_word = 0; + /* Clear error status bits, error status counters */ + /* and Command Status register. */ + + ResetEventQueueLength(); + /* Empty event queue. */ + + ClearEvents(); + /* Clears the event counters, quality numbers */ + /* and free_slot_index of the event records in */ + /* the science data memory. */ + + InitClassification(); + /* Initializes thresholds, classification levels and */ + /* min/max times related to classification. */ + + self_test_SU_number = NO_SU; + /* Self test SU number indicating parameter */ + /* is set to its default value. */ + } - telemetry_data.mode_status = - (telemetry_data.mode_status & ~MODE_BITS_MASK) | DPU_SELF_TEST; - /* Enter DPU self test mode. */ + telemetry_data.mode_status = + ( telemetry_data.mode_status & ~MODE_BITS_MASK ) | DPU_SELF_TEST; + /* Enter DPU self test mode. */ - /* Software version information is stored in the telemetry data. */ - telemetry_data.SW_version = SW_VERSION; + /* Software version information is stored in the telemetry data. */ + telemetry_data.SW_version = SW_VERSION; - SignalMemoryErrors(); - /* Copy results of RAM tests to telemetry_data. */ + SignalMemoryErrors(); + /* Copy results of RAM tests to telemetry_data. */ - SetTestPulseLevel(DEFAULT_TEST_PULSE_LEVEL); - /* Initializes test pulse level. */ + SetTestPulseLevel( DEFAULT_TEST_PULSE_LEVEL ); + /* Initializes test pulse level. */ - Set_SU_TriggerLevels (SU_1, &telemetry_data.sensor_unit_1); - Set_SU_TriggerLevels (SU_2, &telemetry_data.sensor_unit_2); - Set_SU_TriggerLevels (SU_3, &telemetry_data.sensor_unit_3); - Set_SU_TriggerLevels (SU_4, &telemetry_data.sensor_unit_4); + Set_SU_TriggerLevels ( SU_1, &telemetry_data.sensor_unit_1 ); + Set_SU_TriggerLevels ( SU_2, &telemetry_data.sensor_unit_2 ); + Set_SU_TriggerLevels ( SU_3, &telemetry_data.sensor_unit_3 ); + Set_SU_TriggerLevels ( SU_4, &telemetry_data.sensor_unit_4 ); } @@ -781,7 +772,7 @@ uint_least8_t EXTERNAL health_mon_round = HEALTH_COUNT; /* which altogether equal 10 secs. */ -void _Pragma("entrypoint") InitHealthMonitoring (void) +void _Pragma( "entrypoint" ) InitHealthMonitoring ( void ) /* Purpose : Initialize the health monitoring for DEBIE. */ /* Interface : inputs - none */ /* */ @@ -798,18 +789,18 @@ void _Pragma("entrypoint") InitHealthMonitoring (void) /* - Executes DPU_SelfTest() */ /* - Enter stand_by mode */ { - InitSystem(); - /* Initializes the system. */ + InitSystem(); + /* Initializes the system. */ - DPU_SelfTest(); - /* Execute the DPU self test. */ + DPU_SelfTest(); + /* Execute the DPU self test. */ - SetMode(STAND_BY); - /* Switch to Standby mode */ + SetMode( STAND_BY ); + /* Switch to Standby mode */ } -void _Pragma("entrypoint") HandleHealthMonitoring (void) +void _Pragma( "entrypoint" ) HandleHealthMonitoring ( void ) /* Purpose : One round of health monitoring for DEBIE. */ /* Interface : inputs - telemetry_data */ /* */ @@ -830,28 +821,28 @@ void _Pragma("entrypoint") HandleHealthMonitoring (void) /* health monitoring counter */ /* - Executes WaitInterval() */ { - Update_SU_State (0); - Update_SU_State (1); - Update_SU_State (2); - Update_SU_State (3); + Update_SU_State ( 0 ); + Update_SU_State ( 1 ); + Update_SU_State ( 2 ); + Update_SU_State ( 3 ); - UpdateTime(); - /* Update telemetry registers. */ + UpdateTime(); + /* Update telemetry registers. */ - Monitor(health_mon_round); - /* Execute current Health Monitoring Round. */ + Monitor( health_mon_round ); + /* Execute current Health Monitoring Round. */ - UpdatePeriodCounter(&health_mon_round, HEALTH_COUNT); - /* Decrease or reset health monitor loop counter depending on its */ - /* current and limiting values. */ + UpdatePeriodCounter( &health_mon_round, HEALTH_COUNT ); + /* Decrease or reset health monitor loop counter depending on its */ + /* current and limiting values. */ - WaitInterval(HM_INTERVAL); - /* Wait for next activation */ + WaitInterval( HM_INTERVAL ); + /* Wait for next activation */ } -void HealthMonitoringTask(void) TASK(HEALTH_MONITORING_TASK) - PRIORITY(HEALTH_MONITORING_PR) +void HealthMonitoringTask( void ) TASK( HEALTH_MONITORING_TASK ) +PRIORITY( HEALTH_MONITORING_PR ) /* Purpose : Takes care of health monitoring for DEBIE. */ /* Interface : inputs - telemetry_data */ /* */ @@ -869,17 +860,15 @@ void HealthMonitoringTask(void) TASK(HEALTH_MONITORING_TASK) /* - loop forever: */ /* - HandleHealthMonitoring */ { - InitHealthMonitoring (); + InitHealthMonitoring (); - _Pragma("loopbound min 0 max 0") - while(1) - { - HandleHealthMonitoring (); - } + _Pragma( "loopbound min 0 max 0" ) + while ( 1 ) + HandleHealthMonitoring (); } -void Monitor(uint_least8_t health_mon_round) +void Monitor( uint_least8_t health_mon_round ) /* Purpose : Monitors DEBIE's vital signs */ /* Interface : inputs - Health Monitoring Round count */ /* outputs - none */ @@ -956,175 +945,169 @@ void Monitor(uint_least8_t health_mon_round) /* <-----------------------------------< Health Monitoring loop: M */ /* V = 18*M = 180 secs */ { - CalculateChecksum(checksum_count); - /* A 1/60th part of the memory checksum is calculated. */ + CalculateChecksum( checksum_count ); + /* A 1/60th part of the memory checksum is calculated. */ - UpdatePeriodCounter(&checksum_count, CHECK_COUNT); - /* Decrease or reset checksum counter */ - /* depending on its current and limiting values. */ + UpdatePeriodCounter( &checksum_count, CHECK_COUNT ); + /* Decrease or reset checksum counter */ + /* depending on its current and limiting values. */ - switch (health_mon_round) - { - case round_0_e: + switch ( health_mon_round ) { + case round_0_e: - HighVoltageCurrent((sensor_index_t)health_mon_round); - /* Overcurrent indicating bits related to sensor unit 1 in HV */ - /* status register are checked. */ + HighVoltageCurrent( ( sensor_index_t )health_mon_round ); + /* Overcurrent indicating bits related to sensor unit 1 in HV */ + /* status register are checked. */ - UpdatePeriodCounter(&temp_meas_count, TEMP_COUNT); - UpdatePeriodCounter(&voltage_meas_count, VOLTAGE_COUNT); - /* Decrease or reset temperature, checksum and voltage counters */ - /* depending on their current and limiting values. */ + UpdatePeriodCounter( &temp_meas_count, TEMP_COUNT ); + UpdatePeriodCounter( &voltage_meas_count, VOLTAGE_COUNT ); + /* Decrease or reset temperature, checksum and voltage counters */ + /* depending on their current and limiting values. */ - hit_budget_left = hit_budget; - /* Health Monitoring period ends and new hit budget can be started. */ + hit_budget_left = hit_budget; + /* Health Monitoring period ends and new hit budget can be started. */ - if (HIT_TRIGGER_FLAG == 0) - { - /* Hit budget was exceeded during this ending Health Monitoring */ - /* period. */ + if ( HIT_TRIGGER_FLAG == 0 ) { + /* Hit budget was exceeded during this ending Health Monitoring */ + /* period. */ - ResetPeakDetector(SU_1); - ResetPeakDetector(SU_2); - ResetPeakDetector(SU_3); - ResetPeakDetector(SU_4); - /* Reset all Peak detectors */ + ResetPeakDetector( SU_1 ); + ResetPeakDetector( SU_2 ); + ResetPeakDetector( SU_3 ); + ResetPeakDetector( SU_4 ); + /* Reset all Peak detectors */ - WaitTimeout(COUNTER_RESET_MIN_DELAY); + WaitTimeout( COUNTER_RESET_MIN_DELAY ); - ENABLE_HIT_TRIGGER; - /* Allows a later falling edge on T2EX to cause */ - /* a Hit Trigger interrupt (i.e. to set EXF2). */ + ENABLE_HIT_TRIGGER; + /* Allows a later falling edge on T2EX to cause */ + /* a Hit Trigger interrupt (i.e. to set EXF2). */ - ResetDelayCounters(); - /* Resets the SU logic that generates Hit Triggers. */ - /* Brings T2EX to a high level, making a new falling */ - /* edge possible. */ - /* This statement must come after the above "enable", */ - /* since T2EX edges are not remembered by the HW from */ - /* before the "enable", unlike normal interrupt enable */ - /* and disable masking. */ - } + ResetDelayCounters(); + /* Resets the SU logic that generates Hit Triggers. */ + /* Brings T2EX to a high level, making a new falling */ + /* edge possible. */ + /* This statement must come after the above "enable", */ + /* since T2EX edges are not remembered by the HW from */ + /* before the "enable", unlike normal interrupt enable */ + /* and disable masking. */ + } - break; + break; - case round_1_e: + case round_1_e: - HighVoltageCurrent((sensor_index_t)health_mon_round); - /* Overcurrent indicating bits related to sensor unit 2 in HV */ - /* status register are checked. */ + HighVoltageCurrent( ( sensor_index_t )health_mon_round ); + /* Overcurrent indicating bits related to sensor unit 2 in HV */ + /* status register are checked. */ - break; + break; - case round_2_e: + case round_2_e: - HighVoltageCurrent((sensor_index_t)health_mon_round); - /* Overcurrent indicating bits related to sensor unit 3 in HV */ - /* status register are checked. */ + HighVoltageCurrent( ( sensor_index_t )health_mon_round ); + /* Overcurrent indicating bits related to sensor unit 3 in HV */ + /* status register are checked. */ - break; + break; - case round_3_e: + case round_3_e: - HighVoltageCurrent((sensor_index_t)health_mon_round); - /* Overcurrent indicating bits related to sensor unit 4 in HV */ - /* status register are checked. */ + HighVoltageCurrent( ( sensor_index_t )health_mon_round ); + /* Overcurrent indicating bits related to sensor unit 4 in HV */ + /* status register are checked. */ - break; + break; - case round_4_e: + case round_4_e: - LowVoltageCurrent(); - /* 'V_DOWN' indicator bit is checked. */ + LowVoltageCurrent(); + /* 'V_DOWN' indicator bit is checked. */ - break; + break; - case round_5_e: + case round_5_e: - if (voltage_meas_count < 7) + if ( voltage_meas_count < 7 ) - { - /* Seven Secondary voltage channels are measured starting when */ - /* 'voltage_meas_count' reaches a value of 6. Last measurement is*/ - /* executed on voltage_meas_count value 0. */ + { + /* Seven Secondary voltage channels are measured starting when */ + /* 'voltage_meas_count' reaches a value of 6. Last measurement is*/ + /* executed on voltage_meas_count value 0. */ - MeasureVoltage(voltage_meas_count); - } + MeasureVoltage( voltage_meas_count ); + } - break; + break; - case round_6_e: + case round_6_e: - if ((self_test_SU_number != NO_SU) && - (SU_state[self_test_SU_number - SU1] == self_test_e)) - { - /* SU self test sequence continues */ + if ( ( self_test_SU_number != NO_SU ) && + ( SU_state[ self_test_SU_number - SU1 ] == self_test_e ) ) { + /* SU self test sequence continues */ - SelfTestChannel(self_test_SU_number - SU1); - /* SU channels are monitored in this round. */ + SelfTestChannel( self_test_SU_number - SU1 ); + /* SU channels are monitored in this round. */ - self_test_SU_number = NO_SU; - /* SU self test sequence ends here */ - } + self_test_SU_number = NO_SU; + /* SU self test sequence ends here */ + } - break; + break; - case round_7_e: + case round_7_e: - if (self_test_SU_number != NO_SU) - { - /* SU self test sequence has started */ + if ( self_test_SU_number != NO_SU ) { + /* SU self test sequence has started */ - self_test_flag = SELF_TEST_RUNNING; - /* Indication of a started test. */ + self_test_flag = SELF_TEST_RUNNING; + /* Indication of a started test. */ - SelfTest_SU(self_test_SU_number - SU1); - /* Supply voltages and SU temperatures are monitored in this round. */ + SelfTest_SU( self_test_SU_number - SU1 ); + /* Supply voltages and SU temperatures are monitored in this round. */ - if (self_test_SU_number != NO_SU) - { - SU_state[self_test_SU_number - SU1] = self_test_e; - } + if ( self_test_SU_number != NO_SU ) + SU_state[ self_test_SU_number - SU1 ] = self_test_e; - } + } - break; + break; - case round_8_e: + case round_8_e: - SET_WD_RESET_HIGH; + SET_WD_RESET_HIGH; - /* The Watch Dog time out signal state is reset HIGH state, as it is*/ - /* falling edge active. */ + /* The Watch Dog time out signal state is reset HIGH state, as it is*/ + /* falling edge active. */ - break; + break; - case round_9_e: + case round_9_e: - if (temp_meas_count < NUM_SU) + if ( temp_meas_count < NUM_SU ) - { - /* Two channels of one sensor unit are measured when */ - /* 'temp_meas_count' reaches 3 -> 2 -> 1 -> 0. I.e. measuring */ - /* begins after 10 secs and is finished after 50 secs. */ + { + /* Two channels of one sensor unit are measured when */ + /* 'temp_meas_count' reaches 3 -> 2 -> 1 -> 0. I.e. measuring */ + /* begins after 10 secs and is finished after 50 secs. */ - MeasureTemperature((sensor_index_t)temp_meas_count); - } + MeasureTemperature( ( sensor_index_t )temp_meas_count ); + } - SET_WD_RESET_LOW; + SET_WD_RESET_LOW; - /* The Watch Dog timer is reset by setting WD_RESET bit low at I/O */ - /* port 1. This is done here with 10 sec interval. The watch dog */ - /* time-out is 12.1 secs. */ - break; - } + /* The Watch Dog timer is reset by setting WD_RESET bit low at I/O */ + /* port 1. This is done here with 10 sec interval. The watch dog */ + /* time-out is 12.1 secs. */ + break; + } } -void UpdateTime(void) +void UpdateTime( void ) /* Purpose : advances time in the telemetry */ /* Interface : inputs - telemetry_data.time */ /* outputs - telemetry_data.time */ @@ -1137,19 +1120,19 @@ void UpdateTime(void) /* is implicitely wrapped-around on overflow. */ { - DISABLE_INTERRUPT_MASTER; - /* Disable all interrupts. */ + DISABLE_INTERRUPT_MASTER; + /* Disable all interrupts. */ - internal_time ++; - /* Increment internal time. */ + internal_time ++; + /* Increment internal time. */ - ENABLE_INTERRUPT_MASTER; - /* Enable all interrupts. */ + ENABLE_INTERRUPT_MASTER; + /* Enable all interrupts. */ } -void MeasureTemperature(sensor_index_t SU_index) +void MeasureTemperature( sensor_index_t SU_index ) /* Purpose : Measures and monitors SU temperatures */ /* Interface : inputs - SU_index, sensor unit index (0 - 3) */ /* telemetry_data */ @@ -1184,97 +1167,97 @@ void MeasureTemperature(sensor_index_t SU_index) /* function is called. */ { - ADC_parameters_t EXTERNAL AD_temperature_parameters; - /* This struct is used to hold parameters for Reading AD channels. */ + ADC_parameters_t EXTERNAL AD_temperature_parameters; + /* This struct is used to hold parameters for Reading AD channels. */ - unsigned char temp_limit_value; + unsigned char temp_limit_value; - uint_least8_t EXTERNAL j; - /* This variable is used in for-loop. */ + uint_least8_t EXTERNAL j; + /* This variable is used in for-loop. */ - _Pragma("loopbound min 2 max 2") - for (j=0; j < NUM_TEMP; j++) + _Pragma( "loopbound min 2 max 2" ) + for ( j = 0; j < NUM_TEMP; j++ ) - { - AD_temperature_parameters.ADC_channel = - 5 + (SU_index&1)*8 + (SU_index&2)*12 + j; - /* Select the channel to be measured. */ + { + AD_temperature_parameters.ADC_channel = + 5 + ( SU_index & 1 ) * 8 + ( SU_index & 2 ) * 12 + j; + /* Select the channel to be measured. */ - AD_temperature_parameters.ADC_max_tries = ADC_TEMPERATURE_MAX_TRIES; - /* When temperatures are measured this variable defines the maximum */ - /* amount of tries to be used in reading and handling an AD channel in */ - /* 'Read_AD_Channel()'. */ + AD_temperature_parameters.ADC_max_tries = ADC_TEMPERATURE_MAX_TRIES; + /* When temperatures are measured this variable defines the maximum */ + /* amount of tries to be used in reading and handling an AD channel in */ + /* 'Read_AD_Channel()'. */ - AD_temperature_parameters.conversion_max_tries = - CONVERSION_TEMPERATURE_MAX_TRIES; - /* When temperatures are measured this variable defines the maximum */ - /* amount of tries to be used when End Of Conversion indication is */ - /* waited in function 'Convert_AD()'. */ + AD_temperature_parameters.conversion_max_tries = + CONVERSION_TEMPERATURE_MAX_TRIES; + /* When temperatures are measured this variable defines the maximum */ + /* amount of tries to be used when End Of Conversion indication is */ + /* waited in function 'Convert_AD()'. */ - Read_AD_Channel(&AD_temperature_parameters); - /* Get ADC temperature measurement result. */ + Read_AD_Channel( &AD_temperature_parameters ); + /* Get ADC temperature measurement result. */ - if (AD_temperature_parameters.unsigned_ADC & 0x8000) + if ( AD_temperature_parameters.unsigned_ADC & 0x8000 ) - { - /* Temperature is stored in the telemetry. */ + { + /* Temperature is stored in the telemetry. */ - telemetry_data.SU_temperature[SU_index][j] = - (unsigned char)((AD_temperature_parameters.unsigned_ADC - & 0x7FFF) >> 7); - /* Store bits 7 .. 14 */ - } + telemetry_data.SU_temperature[ SU_index ][ j ] = + ( unsigned char )( ( AD_temperature_parameters.unsigned_ADC + & 0x7FFF ) >> 7 ); + /* Store bits 7 .. 14 */ + } - else + else - { + { - telemetry_data.SU_temperature[SU_index][j] = 0; - /* Temperature too small -> store zero */ + telemetry_data.SU_temperature[ SU_index ][ j ] = 0; + /* Temperature too small -> store zero */ - } + } - temp_limit_value = ( j==0 ? MAX_TEMP_1 : MAX_TEMP_2 ); + temp_limit_value = ( j == 0 ? MAX_TEMP_1 : MAX_TEMP_2 ); - if (telemetry_data.SU_temperature[SU_index][j] > temp_limit_value) + if ( telemetry_data.SU_temperature[ SU_index ][ j ] > temp_limit_value ) - { - /* Temperature has exeeded a predefined limit */ + { + /* Temperature has exeeded a predefined limit */ - TemperatureFailure(SU_index); - /* Given SU is switched off, error and SU status registers are */ - /* updated in telemetry. */ + TemperatureFailure( SU_index ); + /* Given SU is switched off, error and SU status registers are */ + /* updated in telemetry. */ - } + } - if (AD_temperature_parameters.AD_execution_result != RESULT_OK) + if ( AD_temperature_parameters.AD_execution_result != RESULT_OK ) - { - /* An anomaly has occurred during the measurement. */ + { + /* An anomaly has occurred during the measurement. */ - SetSoftwareError(MEASUREMENT_ERROR); - /* Set measurement error indication bit in */ - /* software error status register. */ + SetSoftwareError( MEASUREMENT_ERROR ); + /* Set measurement error indication bit in */ + /* software error status register. */ - TemperatureFailure(SU_index); - /* Given SU is switched off and error and SU status registers are */ - /* updated in telemetry. */ + TemperatureFailure( SU_index ); + /* Given SU is switched off and error and SU status registers are */ + /* updated in telemetry. */ - } + } - } + } } -void HighVoltageCurrent(sensor_index_t SU_index) +void HighVoltageCurrent( sensor_index_t SU_index ) /* Purpose : Monitors overcurrent indicating bits in the HV Status */ /* register for a given sensor unit. */ /* Interface : inputs - SU_index, sensor unit index (0 - 3) */ @@ -1294,30 +1277,30 @@ void HighVoltageCurrent(sensor_index_t SU_index) /* Bits in the Error Status and SU_Status Registers are */ /* set. */ { - unsigned char EXTERNAL SU_current_mask[] = {3,12,48,192}; - /* This array holds parameters for checking the HV status register. */ + unsigned char EXTERNAL SU_current_mask[ ] = {3, 12, 48, 192}; + /* This array holds parameters for checking the HV status register. */ - unsigned char EXTERNAL valid_value[] = {1,4,16,64}; - /* This array holds comparison parameters for checking the HV status */ - /* register. */ + unsigned char EXTERNAL valid_value[ ] = {1, 4, 16, 64}; + /* This array holds comparison parameters for checking the HV status */ + /* register. */ - if (CHECK_CURRENT(SU_current_mask[SU_index]) != - valid_value[SU_index]) + if ( CHECK_CURRENT( SU_current_mask[ SU_index ] ) != + valid_value[ SU_index ] ) - { - /* Overcurrent is detected. */ + { + /* Overcurrent is detected. */ - SetErrorStatus(ERROR_STATUS_OFFSET << SU_index); - /* Set high corresponding bit for the SU in Error Status Register. */ + SetErrorStatus( ERROR_STATUS_OFFSET << SU_index ); + /* Set high corresponding bit for the SU in Error Status Register. */ - Set_SU_Error(SU_index, HV_SUPPLY_ERROR); - /* Set high HV supply error indicating bit in the SU_Status register*/ + Set_SU_Error( SU_index, HV_SUPPLY_ERROR ); + /* Set high HV supply error indicating bit in the SU_Status register*/ - } + } } -void LowVoltageCurrent(void) +void LowVoltageCurrent( void ) /* Purpose : Monitors low voltage currents in Sensor Units. */ /* Interface : inputs - telemetry_data */ /* V_DOWN bit */ @@ -1336,38 +1319,38 @@ void LowVoltageCurrent(void) /* mode Status Register are set. */ { - sensor_index_t EXTERNAL i; - /* This variable is used in a for-loop. */ + sensor_index_t EXTERNAL i; + /* This variable is used in a for-loop. */ - unsigned char EXTERNAL exec_result; - /* This variable is used by SetSensorUnitOff() function. */ + unsigned char EXTERNAL exec_result; + /* This variable is used by SetSensorUnitOff() function. */ - if (V_DOWN == LOW) + if ( V_DOWN == LOW ) - { - /* An error is detected, output current is limited. */ + { + /* An error is detected, output current is limited. */ - _Pragma("loopbound min 4 max 4") - for (i = 0; i < NUM_SU; i++) + _Pragma( "loopbound min 4 max 4" ) + for ( i = 0; i < NUM_SU; i++ ) - { - /* Switch off all Sensor Units. */ + { + /* Switch off all Sensor Units. */ - SetSensorUnitOff(i,&exec_result); - /* Switch off given sensor unit. */ + SetSensorUnitOff( i, &exec_result ); + /* Switch off given sensor unit. */ - Set_SU_Error(i,LV_SUPPLY_ERROR); - /* Set high LV supply error indicating bit in the SU_Status */ - /* register. */ - } + Set_SU_Error( i, LV_SUPPLY_ERROR ); + /* Set high LV supply error indicating bit in the SU_Status */ + /* register. */ + } - SetErrorStatus(OVERALL_SU_ERROR); - /* Set all SU error status bits in 'error status register' at telemetry.*/ + SetErrorStatus( OVERALL_SU_ERROR ); + /* Set all SU error status bits in 'error status register' at telemetry.*/ - } + } } -void MeasureVoltage(uint_least8_t channel_selector) +void MeasureVoltage( uint_least8_t channel_selector ) /* Purpose : Measure secondary Sensor Unit voltages. */ /* Interface : inputs - Channel selector, values 0 - 6 */ /* outputs - telemetry_data.mode_status */ @@ -1392,127 +1375,125 @@ void MeasureVoltage(uint_least8_t channel_selector) /* in telemetry_data. */ { - ADC_parameters_t EXTERNAL AD_voltage_parameters; - /* This struct is used to hold parameters for Reading AD channels. */ - - unsigned char EXTERNAL voltage_channel[] = { - 0x10,0x11,0x12,0x13,0x54,0x55,0x56}; - /* This array holds parameters for setting the ADC channel for the */ - /* measurement. */ - - AD_voltage_parameters.ADC_channel = voltage_channel[channel_selector]; - /* Select the channel to be measured: */ - /* channel_selector -> ADC channel */ - /* 0 -> 0x10 */ - /* 1 -> 0x11 */ - /* 2 -> 0x12 */ - /* 3 -> 0x13 */ - /* 4 -> 0x54 */ - /* 5 -> 0x55 */ - /* 6 -> 0x56 */ - - AD_voltage_parameters.ADC_max_tries = ADC_VOLTAGE_MAX_TRIES; - /* When voltages are measured this variable defines the maximum */ - /* amount of tries to be used in reading and handling an AD channel in */ - /* 'Read_AD_Channel()'. */ - - AD_voltage_parameters.conversion_max_tries = - CONVERSION_VOLTAGE_MAX_TRIES; - /* When voltages are measured this variable defines the maximum */ - /* amount of tries to be used when End Of Conversion indication is */ - /* waited in function 'Convert_AD()'. */ - - Read_AD_Channel(&AD_voltage_parameters); - /* Voltage channel is read. */ - - if (AD_voltage_parameters.AD_execution_result != RESULT_OK) - { - /* An anomaly has occurred during the measurement. */ - - SetSoftwareError(MEASUREMENT_ERROR); - /* Set measurement error indication bit in */ - /* software error status register. */ - - } - - else - { - - switch (channel_selector) - { - /* Measurement result bits 8..15 from channels involving positive */ - /* voltages are written to telemetry. */ + ADC_parameters_t EXTERNAL AD_voltage_parameters; + /* This struct is used to hold parameters for Reading AD channels. */ - case channel_0_e: + unsigned char EXTERNAL voltage_channel[ ] = { + 0x10, 0x11, 0x12, 0x13, 0x54, 0x55, 0x56 + }; + /* This array holds parameters for setting the ADC channel for the */ + /* measurement. */ - telemetry_data.sensor_unit_1.plus_5_voltage = - AD_voltage_parameters.unsigned_ADC >> 8; + AD_voltage_parameters.ADC_channel = voltage_channel[ channel_selector ]; + /* Select the channel to be measured: */ + /* channel_selector -> ADC channel */ + /* 0 -> 0x10 */ + /* 1 -> 0x11 */ + /* 2 -> 0x12 */ + /* 3 -> 0x13 */ + /* 4 -> 0x54 */ + /* 5 -> 0x55 */ + /* 6 -> 0x56 */ - telemetry_data.sensor_unit_2.plus_5_voltage = - AD_voltage_parameters.unsigned_ADC >> 8; + AD_voltage_parameters.ADC_max_tries = ADC_VOLTAGE_MAX_TRIES; + /* When voltages are measured this variable defines the maximum */ + /* amount of tries to be used in reading and handling an AD channel in */ + /* 'Read_AD_Channel()'. */ - break; + AD_voltage_parameters.conversion_max_tries = + CONVERSION_VOLTAGE_MAX_TRIES; + /* When voltages are measured this variable defines the maximum */ + /* amount of tries to be used when End Of Conversion indication is */ + /* waited in function 'Convert_AD()'. */ - case channel_1_e: + Read_AD_Channel( &AD_voltage_parameters ); + /* Voltage channel is read. */ - telemetry_data.sensor_unit_3.plus_5_voltage = - AD_voltage_parameters.unsigned_ADC >> 8; + if ( AD_voltage_parameters.AD_execution_result != RESULT_OK ) { + /* An anomaly has occurred during the measurement. */ - telemetry_data.sensor_unit_4.plus_5_voltage = - AD_voltage_parameters.unsigned_ADC >> 8; + SetSoftwareError( MEASUREMENT_ERROR ); + /* Set measurement error indication bit in */ + /* software error status register. */ - break; + } - case channel_2_e: + else { - telemetry_data.SU_plus_50 = AD_voltage_parameters.unsigned_ADC >> 8; + switch ( channel_selector ) { + /* Measurement result bits 8..15 from channels involving positive */ + /* voltages are written to telemetry. */ - break; + case channel_0_e: - case channel_3_e: + telemetry_data.sensor_unit_1.plus_5_voltage = + AD_voltage_parameters.unsigned_ADC >> 8; - telemetry_data.DPU_plus_5_digital = - AD_voltage_parameters.unsigned_ADC >> 8; + telemetry_data.sensor_unit_2.plus_5_voltage = + AD_voltage_parameters.unsigned_ADC >> 8; - break; + break; + case channel_1_e: - /* Measurement result bits 8..15 from channels involving negative */ - /* voltages are written to telemetry. */ - /* Note that even here, the "unsigned" or "raw" conversion result is */ - /* used; this is a requirement. */ + telemetry_data.sensor_unit_3.plus_5_voltage = + AD_voltage_parameters.unsigned_ADC >> 8; - case channel_4_e: + telemetry_data.sensor_unit_4.plus_5_voltage = + AD_voltage_parameters.unsigned_ADC >> 8; - telemetry_data.sensor_unit_1.minus_5_voltage = - AD_voltage_parameters.unsigned_ADC >> 8; + break; - telemetry_data.sensor_unit_2.minus_5_voltage = - AD_voltage_parameters.unsigned_ADC >> 8; + case channel_2_e: - break; + telemetry_data.SU_plus_50 = AD_voltage_parameters.unsigned_ADC >> 8; - case channel_5_e: + break; - telemetry_data.sensor_unit_3.minus_5_voltage = - AD_voltage_parameters.unsigned_ADC >> 8; + case channel_3_e: - telemetry_data.sensor_unit_4.minus_5_voltage = - AD_voltage_parameters.unsigned_ADC >> 8; + telemetry_data.DPU_plus_5_digital = + AD_voltage_parameters.unsigned_ADC >> 8; - break; + break; - case channel_6_e: - telemetry_data.SU_minus_50 = - AD_voltage_parameters.unsigned_ADC >> 8; + /* Measurement result bits 8..15 from channels involving negative */ + /* voltages are written to telemetry. */ + /* Note that even here, the "unsigned" or "raw" conversion result is */ + /* used; this is a requirement. */ - break; - } - } + case channel_4_e: + + telemetry_data.sensor_unit_1.minus_5_voltage = + AD_voltage_parameters.unsigned_ADC >> 8; + + telemetry_data.sensor_unit_2.minus_5_voltage = + AD_voltage_parameters.unsigned_ADC >> 8; + + break; + + case channel_5_e: + + telemetry_data.sensor_unit_3.minus_5_voltage = + AD_voltage_parameters.unsigned_ADC >> 8; + + telemetry_data.sensor_unit_4.minus_5_voltage = + AD_voltage_parameters.unsigned_ADC >> 8; + + break; + + case channel_6_e: + + telemetry_data.SU_minus_50 = + AD_voltage_parameters.unsigned_ADC >> 8; + + break; + } + } } -void InitSystem(void) +void InitSystem( void ) /* Purpose : Initialize system after RTX system is started. */ /* Interface : inputs - none */ /* outputs - none */ @@ -1528,33 +1509,33 @@ void InitSystem(void) /* - Activate the Acquisition task. */ /* - Activate Hit Trigger Interrupt Service task. */ { - task_info_t EXTERNAL new_task; - /* Parameters for creating new task */ + task_info_t EXTERNAL new_task; + /* Parameters for creating new task */ - SetTimeSlice(SYSTEM_INTERVAL); - /* Set system clock interval */ + SetTimeSlice( SYSTEM_INTERVAL ); + /* Set system clock interval */ - WaitInterval(BOOT_WAIT_INTERVAL); - /* Wait for automatic A/D converter calibration */ + WaitInterval( BOOT_WAIT_INTERVAL ); + /* Wait for automatic A/D converter calibration */ - new_task.rtx_task_number = TC_TM_INTERFACE_TASK; - new_task.task_main_function = TC_task; - CreateTask(&new_task); - /* Activate the Telecommand Execution task */ + new_task.rtx_task_number = TC_TM_INTERFACE_TASK; + new_task.task_main_function = TC_task; + CreateTask( &new_task ); + /* Activate the Telecommand Execution task */ - new_task.rtx_task_number = ACQUISITION_TASK; - new_task.task_main_function = acq_task; - CreateTask(&new_task); - /* Activate the Acquisition task */ + new_task.rtx_task_number = ACQUISITION_TASK; + new_task.task_main_function = acq_task; + CreateTask( &new_task ); + /* Activate the Acquisition task */ - new_task.rtx_task_number = HIT_TRIGGER_ISR_TASK; - new_task.task_main_function = hit_task; - CreateTask(&new_task); - /* Activate Hit Trigger Interrupt Service task */ + new_task.rtx_task_number = HIT_TRIGGER_ISR_TASK; + new_task.task_main_function = hit_task; + CreateTask( &new_task ); + /* Activate Hit Trigger Interrupt Service task */ } -void CalculateChecksum(uint_least8_t checksum_count) +void CalculateChecksum( uint_least8_t checksum_count ) /* Purpose : Calculates memory checksum. */ /* Interface : inputs - 'checksum_count' gives the current */ /* checksum loop cycle value, */ @@ -1592,85 +1573,81 @@ void CalculateChecksum(uint_least8_t checksum_count) /* i.e. on 'checksum_count' = 59, 'code_not_patched' */ /* is set and 'code_checksum' is initialised. */ { - code_address_t EXTERNAL i; - /* This variable is used in a for-loop. */ + code_address_t EXTERNAL i; + /* This variable is used in a for-loop. */ - code_address_t EXTERNAL check_start; - /* This variable is used for determining the start address of a given */ - /* check. */ + code_address_t EXTERNAL check_start; + /* This variable is used for determining the start address of a given */ + /* check. */ - code_address_t EXTERNAL check_end; - /* This variable is used for determining the end address of a given check.*/ + code_address_t EXTERNAL check_end; + /* This variable is used for determining the end address of a given check.*/ - check_start = checksum_count * CHECK_SIZE; + check_start = checksum_count * CHECK_SIZE; - if (checksum_count == MAX_CHECKSUM_COUNT) + if ( checksum_count == MAX_CHECKSUM_COUNT ) - { - /* This piece ends at the top memory address. */ - check_end = CODE_MEMORY_END; - } + { + /* This piece ends at the top memory address. */ + check_end = CODE_MEMORY_END; + } - else + else - { - check_end = check_start + (CHECK_SIZE - 1); - } + check_end = check_start + ( CHECK_SIZE - 1 ); - if (checksum_count == MAX_CHECKSUM_COUNT) - { + if ( checksum_count == MAX_CHECKSUM_COUNT ) { - code_checksum = 0; - /* This global variable is used to store the result from each XOR */ - /* calculation during a code memory checksum round. It is cleared */ - /* here at the beginning of a new cycle and checked at the end of */ - /* each cycle against 'reference_checksum'. */ + code_checksum = 0; + /* This global variable is used to store the result from each XOR */ + /* calculation during a code memory checksum round. It is cleared */ + /* here at the beginning of a new cycle and checked at the end of */ + /* each cycle against 'reference_checksum'. */ - code_not_patched = 1; - /* This global variable shows whether code is patched during a code */ - /* memory checksum cycle. It is set here at the beginning of a new */ - /* cycle and checked at the end of each cycle whether it has been */ - /* cleared as an indication of an executed code patching. */ - } + code_not_patched = 1; + /* This global variable shows whether code is patched during a code */ + /* memory checksum cycle. It is set here at the beginning of a new */ + /* cycle and checked at the end of each cycle whether it has been */ + /* cleared as an indication of an executed code patching. */ + } - _Pragma("loopbound min 495 max 547") - for (i = check_start; i <= check_end; i++) - { - /* It is assumed that 'CODE_MEMORY_END' < 2^16 - 1 */ - /* Otherwise variable 'i' can never have a value */ - /* larger than 'check_end' and this loop will never */ - /* stop. */ + _Pragma( "loopbound min 547 max 547" ) + for ( i = check_start; i <= check_end; i++ ) - code_checksum ^= GET_CODE_BYTE(i); - /* XOR is counted for code memory byte under check. */ - } + { + /* It is assumed that 'CODE_MEMORY_END' < 2^16 - 1 */ + /* Otherwise variable 'i' can never have a value */ + /* larger than 'check_end' and this loop will never */ + /* stop. */ - if ( (checksum_count == MIN_CHECKSUM_COUNT) - && (code_checksum != reference_checksum) ) - { - /* Checksum mismatch due to a memory error or */ - /* code memory patch. */ + code_checksum ^= GET_CODE_BYTE( i ); + /* XOR is counted for code memory byte under check. */ + } - if (code_not_patched) - { - /* An anomaly has been detected in the code memory */ - /* area. Code has not been patched during this code */ - /* memory checksum cycle. */ - - Reboot (checksum_reset_e); - /* Soft reset is executed, as global variable */ - /* 'code_not_patched' enables it. Note that */ - /* Reboot() does not return here. */ - } - } + if ( ( checksum_count == MIN_CHECKSUM_COUNT ) + && ( code_checksum != reference_checksum ) ) { + /* Checksum mismatch due to a memory error or */ + /* code memory patch. */ + + if ( code_not_patched ) { + /* An anomaly has been detected in the code memory */ + /* area. Code has not been patched during this code */ + /* memory checksum cycle. */ + + Reboot ( checksum_reset_e ); + /* Soft reset is executed, as global variable */ + /* 'code_not_patched' enables it. Note that */ + /* Reboot() does not return here. */ + } + } } void UpdatePeriodCounter( - uint_least8_t EXTERNAL * counter, - uint_least8_t full_counter_value) + uint_least8_t EXTERNAL *counter, + uint_least8_t full_counter_value ) /* Purpose : Advances counters */ /* Interface : inputs - address to counter variable */ /* outputs - none */ @@ -1681,23 +1658,22 @@ void UpdatePeriodCounter( /* decreased. */ /* - Else it set to its initialization value. */ { - if (*counter) - - { - (*counter)--; - /* Decrease temperature measurement counter. */ - } - - else - { - *counter = full_counter_value; - /* Reset temperature measurement counter. */ - } + if ( *counter ) + + { + ( *counter )--; + /* Decrease temperature measurement counter. */ + } + + else { + *counter = full_counter_value; + /* Reset temperature measurement counter. */ + } } -void Convert_AD (ADC_parameters_t EXTERNAL * ADC_parameters) +void Convert_AD ( ADC_parameters_t EXTERNAL *ADC_parameters ) /* Purpose : Conversion is executed on a selected AD channel */ /* Interface : inputs - Address of a struct for storing the ADC */ /* results. */ @@ -1715,73 +1691,72 @@ void Convert_AD (ADC_parameters_t EXTERNAL * ADC_parameters) /* results are gained, instead a zero is stored with an */ /* indication of this occurred anomaly. */ { - unsigned char DIRECT_INTERNAL conversion_count; + unsigned char DIRECT_INTERNAL conversion_count; - /* Counts the amount of end of conversion polls. */ + /* Counts the amount of end of conversion polls. */ - unsigned char DIRECT_INTERNAL msb, lsb; - /* MSB and LSB of the conversion result */ + unsigned char DIRECT_INTERNAL msb, lsb; + /* MSB and LSB of the conversion result */ - unsigned int DIRECT_INTERNAL word; - /*This variable is used to combine MSB and LSB bytes into one word. */ + unsigned int DIRECT_INTERNAL word; + /*This variable is used to combine MSB and LSB bytes into one word. */ - START_CONVERSION; + START_CONVERSION; - conversion_count = 0; + conversion_count = 0; - _Pragma("loopbound min 0 max 5") - while(conversion_count < ADC_parameters -> conversion_max_tries - && (END_OF_ADC != CONVERSION_ACTIVE)) - { - /* Previous conversion is still active. */ - conversion_count++; - } + _Pragma( "loopbound min 0 max 5" ) + while ( conversion_count < ADC_parameters -> conversion_max_tries + && ( END_OF_ADC != CONVERSION_ACTIVE ) ) { + /* Previous conversion is still active. */ + conversion_count++; + } - /* There is a slight chance for the following occurrence: */ - /* Conversion has ended after max_tries has been reached but before the */ - /* following condition loop is entered. As a result measurement is failed */ - /* even if conversion has ended in time. The effect is dimished if the */ - /* max_tries is a large value i.e. end of conversion has been waited long */ - /* enough. */ + /* There is a slight chance for the following occurrence: */ + /* Conversion has ended after max_tries has been reached but before the */ + /* following condition loop is entered. As a result measurement is failed */ + /* even if conversion has ended in time. The effect is dimished if the */ + /* max_tries is a large value i.e. end of conversion has been waited long */ + /* enough. */ - if (conversion_count < ADC_parameters -> conversion_max_tries ) + if ( conversion_count < ADC_parameters -> conversion_max_tries ) - { - /* Conversion has ended. Read AD result. */ + { + /* Conversion has ended. Read AD result. */ - msb = GET_RESULT; - lsb = GET_RESULT; + msb = GET_RESULT; + lsb = GET_RESULT; - word = (unsigned int)msb*256+lsb; - /* Combine MSB and LSB as type 'unsigned int' in the given struct. */ + word = ( unsigned int )msb * 256 + lsb; + /* Combine MSB and LSB as type 'unsigned int' in the given struct. */ - ADC_parameters -> signed_ADC = (signed short int)(word^0x8000); - /* Store result as of type 'signed int'. */ + ADC_parameters -> signed_ADC = ( signed short int )( word ^ 0x8000 ); + /* Store result as of type 'signed int'. */ - ADC_parameters -> unsigned_ADC = word; - /* Store result as of type 'unsigned int'. */ + ADC_parameters -> unsigned_ADC = word; + /* Store result as of type 'unsigned int'. */ - ADC_parameters -> AD_execution_result = RESULT_OK; - /* Store indication of an succesful measurement. */ + ADC_parameters -> AD_execution_result = RESULT_OK; + /* Store indication of an succesful measurement. */ - } + } - else + else - { + { - /* Conversion has not ended in time. No results gained, store zero. */ - ADC_parameters -> unsigned_ADC = 0; - ADC_parameters -> signed_ADC = 0; + /* Conversion has not ended in time. No results gained, store zero. */ + ADC_parameters -> unsigned_ADC = 0; + ADC_parameters -> signed_ADC = 0; - /* Store indication of an unsuccesful measurement. */ - ADC_parameters -> AD_execution_result = CONVERSION_ACTIVE; + /* Store indication of an unsuccesful measurement. */ + ADC_parameters -> AD_execution_result = CONVERSION_ACTIVE; - } + } } -void VoltageFailure(channel_t ADC_channel) +void VoltageFailure( channel_t ADC_channel ) /* Purpose : Takes care of resulting actions in case of a failed */ /* measurement. */ /* Interface : inputs - 'ADC_channel' related to the failed */ @@ -1800,7 +1775,7 @@ void VoltageFailure(channel_t ADC_channel) /* measurement. The following actions are taken. */ /* - Find out which sensor units are related to failed */ /* measurement and store indications of these target */ -/* SUs in the 'SU_action[]' array. */ +/* SUs in the 'SU_action[ ]' array. */ /* - If channel number indicates that the DPU voltage */ /* measurement has failed, set high DPU +5V measurement*/ /* error indicating bit in the mode_status register. */ @@ -1813,109 +1788,110 @@ void VoltageFailure(channel_t ADC_channel) /* LV supply error indicating bit in the SU_Status */ /* register for the related SU(s). */ { - unsigned char EXTERNAL i; - /* This variable is used in a for-loop. */ + unsigned char EXTERNAL i; + /* This variable is used in a for-loop. */ - unsigned char EXTERNAL SU_action[NUM_SU] = {LOW, LOW, LOW, LOW}; - /* This array stores actions targeted at a SU judging by the given */ - /* ADC information. */ + unsigned char EXTERNAL SU_action[ NUM_SU ] = {LOW, LOW, LOW, LOW}; + /* This array stores actions targeted at a SU judging by the given */ + /* ADC information. */ - /* Voltage measurement has failed, actions are taken accordingly. */ + /* Voltage measurement has failed, actions are taken accordingly. */ - if (ADC_channel == 0x10 || ADC_channel == 0x54) + if ( ADC_channel == 0x10 || ADC_channel == 0x54 ) - { - /* Measurement of channels related to sensor units 1 and 2 have */ - /* failed. */ + { + /* Measurement of channels related to sensor units 1 and 2 have */ + /* failed. */ - SU_action[su1_e] = HIGH; - SU_action[su2_e] = HIGH; + SU_action[ su1_e ] = HIGH; + SU_action[ su2_e ] = HIGH; - /* Select sensor units 1 and 2 as targets in the 'SU_action' array. */ + /* Select sensor units 1 and 2 as targets in the 'SU_action' array. */ - SetModeStatusError(SUPPLY_ERROR); - /* Set Supply Error. */ + SetModeStatusError( SUPPLY_ERROR ); + /* Set Supply Error. */ - } + } - else if (ADC_channel == 0x11 || ADC_channel == 0x55) + else + if ( ADC_channel == 0x11 || ADC_channel == 0x55 ) - { + { /* Measurement of channels related to sensor units 3 and 4 have */ /* failed. */ - SU_action[su3_e] = HIGH; - SU_action[su4_e] = HIGH; + SU_action[ su3_e ] = HIGH; + SU_action[ su4_e ] = HIGH; /* Select sensor units 3 and 4 as targets in the 'SU_action' array. */ - } + } - else if (ADC_channel == 0x12 || ADC_channel == 0x56) + else + if ( ADC_channel == 0x12 || ADC_channel == 0x56 ) - { - /* Measurement of channels related to all sensor units have */ - /* failed. */ + { + /* Measurement of channels related to all sensor units have */ + /* failed. */ - SU_action[su1_e] = HIGH; - SU_action[su2_e] = HIGH; - SU_action[su3_e] = HIGH; - SU_action[su4_e] = HIGH; + SU_action[ su1_e ] = HIGH; + SU_action[ su2_e ] = HIGH; + SU_action[ su3_e ] = HIGH; + SU_action[ su4_e ] = HIGH; - /* Select all sensor units as targets in the 'SU_action' array. */ - } + /* Select all sensor units as targets in the 'SU_action' array. */ + } - else if (ADC_channel == 0x13) + else + if ( ADC_channel == 0x13 ) - { - /* Measurement of a channel related to DPU voltage has failed. */ + { + /* Measurement of a channel related to DPU voltage has failed. */ - SetModeStatusError(SUPPLY_ERROR); - /* Set high DPU +5V supply error indicating bit in the */ - /* mode status register. */ + SetModeStatusError( SUPPLY_ERROR ); + /* Set high DPU +5V supply error indicating bit in the */ + /* mode status register. */ - } + } - _Pragma("loopbound min 4 max 4") - for (i = 0; i < NUM_SU; i++) + _Pragma( "loopbound min 4 max 4" ) + for ( i = 0; i < NUM_SU; i++ ) - { - /* Set error indications related to selected Sensor Units. */ + { + /* Set error indications related to selected Sensor Units. */ - if (SU_action[i]) + if ( SU_action[ i ] ) - { - SetErrorStatus (ERROR_STATUS_OFFSET << i); - /* Set Error status bit of the related SU in error status */ - /* register. */ - - if (ADC_channel == 0x12 - || ADC_channel == 0x56) - { - Set_SU_Error (i, HV_SUPPLY_ERROR); - /* Set high HV supply error indicating bit in the */ - /* SU_Status register. */ - } - - if (ADC_channel == 0x10 - || ADC_channel == 0x11 - || ADC_channel == 0x54 - || ADC_channel == 0x55) - { - Set_SU_Error (i, LV_SUPPLY_ERROR); - /* Set high LV supply error indicating bit in the */ - /* SU_Status register. */ - } + { + SetErrorStatus ( ERROR_STATUS_OFFSET << i ); + /* Set Error status bit of the related SU in error status */ + /* register. */ + + if ( ADC_channel == 0x12 + || ADC_channel == 0x56 ) { + Set_SU_Error ( i, HV_SUPPLY_ERROR ); + /* Set high HV supply error indicating bit in the */ + /* SU_Status register. */ + } + if ( ADC_channel == 0x10 + || ADC_channel == 0x11 + || ADC_channel == 0x54 + || ADC_channel == 0x55 ) { + Set_SU_Error ( i, LV_SUPPLY_ERROR ); + /* Set high LV supply error indicating bit in the */ + /* SU_Status register. */ } - } + } + + } } -void TemperatureFailure(sensor_index_t SU_index) +void TemperatureFailure( sensor_index_t SU_index ) /* Purpose : Takes care of resulting actions in case of a failed */ /* measurement. */ /* Interface : inputs - 'SU_index' which contains sensor unit */ @@ -1939,20 +1915,20 @@ void TemperatureFailure(sensor_index_t SU_index) /* SU_Status register. */ { - unsigned char EXTERNAL exec_result; - /* This variable is used by SetSensorUnitOff() function. */ + unsigned char EXTERNAL exec_result; + /* This variable is used by SetSensorUnitOff() function. */ - /* Temperature measurement has failed, actions are taken accordingly. */ + /* Temperature measurement has failed, actions are taken accordingly. */ - SetSensorUnitOff(SU_index,&exec_result); - /* Switch off given sensor unit. */ + SetSensorUnitOff( SU_index, &exec_result ); + /* Switch off given sensor unit. */ - SetErrorStatus(ERROR_STATUS_OFFSET << SU_index); - /* Set Error status bit of the related SU in error status register. */ + SetErrorStatus( ERROR_STATUS_OFFSET << SU_index ); + /* Set Error status bit of the related SU in error status register. */ - Set_SU_Error(SU_index, TEMPERATURE_ERROR); - /* Set high temperature error indicating bit in the SU_Status */ - /* register. */ + Set_SU_Error( SU_index, TEMPERATURE_ERROR ); + /* Set high temperature error indicating bit in the SU_Status */ + /* register. */ } @@ -1966,7 +1942,7 @@ void TemperatureFailure(sensor_index_t SU_index) /*****************************************************************************/ -void DelayAwhile (unsigned short duration) +void DelayAwhile ( unsigned short duration ) /* Purpose : Delay for a (brief) duration. */ /* Interface : inputs - delay duration, in ShortDelay() units. */ /* outputs - none. */ @@ -1976,24 +1952,22 @@ void DelayAwhile (unsigned short duration) /* Algorithm : Call ShortDelay() as many times as necessary to delay */ /* for at least the desired duration. */ { - _Pragma("loopbound min 1 max 3") - while (duration > MAX_SHORT_DELAY) - { - ShortDelay (MAX_SHORT_DELAY); - duration = duration - MAX_SHORT_DELAY; - /* Since ShortDelay() has a positive constant delay term, the */ - /* actual total delay will be a little larger than 'duration'. */ - } - - if (duration > 0) - { - /* Some delay left after the loop above. */ - ShortDelay ((unsigned char) duration); - } + _Pragma( "loopbound min 1 max 1" ) + while ( duration > MAX_SHORT_DELAY ) { + ShortDelay ( MAX_SHORT_DELAY ); + duration = duration - MAX_SHORT_DELAY; + /* Since ShortDelay() has a positive constant delay term, the */ + /* actual total delay will be a little larger than 'duration'. */ + } + + if ( duration > 0 ) { + /* Some delay left after the loop above. */ + ShortDelay ( ( unsigned char ) duration ); + } } -void Read_AD_Channel (ADC_parameters_t EXTERNAL * ADC_parameters) +void Read_AD_Channel ( ADC_parameters_t EXTERNAL *ADC_parameters ) /* Purpose : Reading an ADC channel */ /* Interface : inputs - Address of a struct which contains */ /* parameters for this function. */ @@ -2028,80 +2002,78 @@ void Read_AD_Channel (ADC_parameters_t EXTERNAL * ADC_parameters) /* occurred anomaly. */ /* End of loop */ { - unsigned char EXTERNAL tries_left; - /* Number of attempts remaining to try conversion without */ - /* interference from a particle hit. */ + unsigned char EXTERNAL tries_left; + /* Number of attempts remaining to try conversion without */ + /* interference from a particle hit. */ - unsigned short EXTERNAL delay_limit; - /* Delay between channel selection and start of conversion in */ - /* ShortDelay() units. */ + unsigned short EXTERNAL delay_limit; + /* Delay between channel selection and start of conversion in */ + /* ShortDelay() units. */ - delay_limit = DELAY_LIMIT(2000); - /* Set delay limit to 2ms. */ + delay_limit = DELAY_LIMIT( 2000 ); + /* Set delay limit to 2ms. */ - tries_left = ADC_parameters -> ADC_max_tries; - /* Limits the number of conversion attempts repeated because */ - /* of particle hit interrupts. Assumed to be at least 1. */ + tries_left = ADC_parameters -> ADC_max_tries; + /* Limits the number of conversion attempts repeated because */ + /* of particle hit interrupts. Assumed to be at least 1. */ - _Pragma("loopbound min 1 max 8") - while (tries_left > 0) - { - confirm_hit_result = 0; - /* Clear interrupt indicating flag. */ + _Pragma( "loopbound min 1 max 8" ) + while ( tries_left > 0 ) { + confirm_hit_result = 0; + /* Clear interrupt indicating flag. */ - ADC_channel_register = (ADC_channel_register & 0x80) | - ADC_parameters -> ADC_channel; - UPDATE_ADC_CHANNEL_REG; - /* AD Channel register is set. */ + ADC_channel_register = ( ADC_channel_register & 0x80 ) | + ADC_parameters -> ADC_channel; + UPDATE_ADC_CHANNEL_REG; + /* AD Channel register is set. */ - START_CONVERSION; - /* Initiate dummy cycle to set AD mode to unipolar or bipolar. */ + START_CONVERSION; + /* Initiate dummy cycle to set AD mode to unipolar or bipolar. */ - DelayAwhile (delay_limit); - /* Wait for analog signal and MUX to settle. */ + DelayAwhile ( delay_limit ); + /* Wait for analog signal and MUX to settle. */ - Convert_AD(ADC_parameters); - /* Start conversion and measurement. */ + Convert_AD( ADC_parameters ); + /* Start conversion and measurement. */ - tries_left--; - /* Repeat while-loop until the max number of tries. */ + tries_left--; + /* Repeat while-loop until the max number of tries. */ - if (confirm_hit_result == 0) - { - /* Conversion has NOT been interrupted by a hit trigger interrupt. */ - /* Exit from the while-loop. */ + if ( confirm_hit_result == 0 ) { + /* Conversion has NOT been interrupted by a hit trigger interrupt. */ + /* Exit from the while-loop. */ - tries_left = 0; - } - } + tries_left = 0; + } + } - if (confirm_hit_result != 0) + if ( confirm_hit_result != 0 ) - { - /* Conversion has been interrupted by a hit trigger interrupt. Discard */ - /* corrupted results. */ + { + /* Conversion has been interrupted by a hit trigger interrupt. Discard */ + /* corrupted results. */ - ADC_parameters -> unsigned_ADC = 0; - ADC_parameters -> signed_ADC = 0; + ADC_parameters -> unsigned_ADC = 0; + ADC_parameters -> signed_ADC = 0; - ADC_parameters -> AD_execution_result = HIT_OCCURRED; - /* Store indication of an unsuccessful measurement. */ + ADC_parameters -> AD_execution_result = HIT_OCCURRED; + /* Store indication of an unsuccessful measurement. */ - } + } - else if (ADC_parameters -> AD_execution_result == CONVERSION_ACTIVE - && confirm_hit_result == 0) - { - SetModeStatusError(ADC_ERROR); + else + if ( ADC_parameters -> AD_execution_result == CONVERSION_ACTIVE + && confirm_hit_result == 0 ) { + SetModeStatusError( ADC_ERROR ); /* ADC error indication is set because a time-out has */ /* occurred during AD conversion and no hit trigger interrupt */ /* has occurred. */ - } + } - /* Either RESULT_OK or CONVERSION_ACTIVE indications are already */ - /* stored in the 'ADC_parameters -> AD_execution_result' field */ - /* as a result from conversion in the Convert() function. */ + /* Either RESULT_OK or CONVERSION_ACTIVE indications are already */ + /* stored in the 'ADC_parameters -> AD_execution_result' field */ + /* as a result from conversion in the Convert() function. */ } @@ -2112,8 +2084,8 @@ void Read_AD_Channel (ADC_parameters_t EXTERNAL * ADC_parameters) -void DAC_SelfTest(unsigned char DAC_output, - ADC_parameters_t EXTERNAL * ADC_test_parameters) +void DAC_SelfTest( unsigned char DAC_output, + ADC_parameters_t EXTERNAL *ADC_test_parameters ) /* Purpose : To test the analog signal chain in the circuitry. */ /* Interface : inputs - Test data 'DAC_Output */ /* - struct 'ADC_test_parameters' */ @@ -2134,32 +2106,32 @@ void DAC_SelfTest(unsigned char DAC_output, /* register. */ { - SET_DAC_OUTPUT(DAC_output); - /*test data is written to DAC output */ + SET_DAC_OUTPUT( DAC_output ); + /*test data is written to DAC output */ - Read_AD_Channel(ADC_test_parameters); - /* Start reading the channel. */ + Read_AD_Channel( ADC_test_parameters ); + /* Start reading the channel. */ - if (ADC_test_parameters -> AD_execution_result != RESULT_OK) + if ( ADC_test_parameters -> AD_execution_result != RESULT_OK ) - { - /* An anomaly has occurred during the measurement. */ + { + /* An anomaly has occurred during the measurement. */ - Set_SU_Error(ADC_test_parameters -> sensor_unit - SU1, - SELF_TEST_ERROR); - /* Self self test error indication bit in mode status register. */ - /* Offset in numbering is taken into account by transforming */ - /* 'sensor_unit' (value 1-4) to a sensor unit index (value 0-3) */ + Set_SU_Error( ADC_test_parameters -> sensor_unit - SU1, + SELF_TEST_ERROR ); + /* Self self test error indication bit in mode status register. */ + /* Offset in numbering is taken into account by transforming */ + /* 'sensor_unit' (value 1-4) to a sensor unit index (value 0-3) */ - SetSoftwareError(MEASUREMENT_ERROR); - /* Set measurement error indication bit in */ - /* software error status register. */ + SetSoftwareError( MEASUREMENT_ERROR ); + /* Set measurement error indication bit in */ + /* software error status register. */ - } + } } -void Monitor_DPU_Voltage(void) +void Monitor_DPU_Voltage( void ) /* Purpose : Monitors DPU voltages */ /* Interface : inputs - telemetry_data, DPU voltages */ /* outputs - telemetry_data.mode_status */ @@ -2173,44 +2145,38 @@ void Monitor_DPU_Voltage(void) /* - Channels are checked one by one and in case of an error*/ /* corresponding error bit is set. */ { - MeasureVoltage(DPU_5V_SELECTOR); - MeasureVoltage(SU_1_2_P5V_SELECTOR); - MeasureVoltage(SU_1_2_M5V_SELECTOR); - - /* Result of voltage measurement from SU_1/2 +5V is compared against */ - /* limits. */ - - if (ExceedsLimit(telemetry_data.sensor_unit_1.plus_5_voltage, - SU_P5V_ANA_LOWER_LIMIT, - SU_P5V_ANA_UPPER_LIMIT)) - { - SetModeStatusError(SUPPLY_ERROR); - } - - /* Result of voltage measurement from SU_1/2 -5V is compared against */ - /* limits. */ - - if (ExceedsLimit(telemetry_data.sensor_unit_1.minus_5_voltage, - SU_M5V_ANA_LOWER_LIMIT, - SU_M5V_ANA_UPPER_LIMIT)) - { - SetModeStatusError(SUPPLY_ERROR); - } - - /* Result of voltage measurement from DIG +5V is compared against */ - /* limits. */ - - if (ExceedsLimit(telemetry_data.DPU_plus_5_digital, - DPU_P5V_DIG_LOWER_LIMIT, - DPU_P5V_DIG_UPPER_LIMIT)) - { - SetModeStatusError(SUPPLY_ERROR); - } + MeasureVoltage( DPU_5V_SELECTOR ); + MeasureVoltage( SU_1_2_P5V_SELECTOR ); + MeasureVoltage( SU_1_2_M5V_SELECTOR ); + + /* Result of voltage measurement from SU_1/2 +5V is compared against */ + /* limits. */ + + if ( ExceedsLimit( telemetry_data.sensor_unit_1.plus_5_voltage, + SU_P5V_ANA_LOWER_LIMIT, + SU_P5V_ANA_UPPER_LIMIT ) ) + SetModeStatusError( SUPPLY_ERROR ); + + /* Result of voltage measurement from SU_1/2 -5V is compared against */ + /* limits. */ + + if ( ExceedsLimit( telemetry_data.sensor_unit_1.minus_5_voltage, + SU_M5V_ANA_LOWER_LIMIT, + SU_M5V_ANA_UPPER_LIMIT ) ) + SetModeStatusError( SUPPLY_ERROR ); + + /* Result of voltage measurement from DIG +5V is compared against */ + /* limits. */ + + if ( ExceedsLimit( telemetry_data.DPU_plus_5_digital, + DPU_P5V_DIG_LOWER_LIMIT, + DPU_P5V_DIG_UPPER_LIMIT ) ) + SetModeStatusError( SUPPLY_ERROR ); } -void Monitor_SU_Voltage(sensor_index_t self_test_SU_index) +void Monitor_SU_Voltage( sensor_index_t self_test_SU_index ) /* Purpose : Monitors SU voltages */ /* Interface : inputs - self_test_SU_index */ /* telemetry_data, sensor voltages */ @@ -2223,82 +2189,69 @@ void Monitor_SU_Voltage(sensor_index_t self_test_SU_index) /* - Channels are checked one by one and in case of an error*/ /* corresponding error bit is set. */ { - switch (self_test_SU_index) - { - case su1_e: - case su2_e: - - /* Result of voltage measurement from SU_1/2 +5V is compared against */ - /* limits. */ - - if (ExceedsLimit(telemetry_data.sensor_unit_1.plus_5_voltage, - SU_P5V_ANA_LOWER_LIMIT, - SU_P5V_ANA_UPPER_LIMIT)) - { - Set_SU_Error(self_test_SU_index, LV_LIMIT_ERROR); - } - - /* Result of voltage measurement from SU_1/2 -5V is compared against */ - /* limits. */ - - if (ExceedsLimit(telemetry_data.sensor_unit_1.minus_5_voltage, - SU_M5V_ANA_LOWER_LIMIT, - SU_M5V_ANA_UPPER_LIMIT)) - { - Set_SU_Error(self_test_SU_index, LV_LIMIT_ERROR); - } - - break; - - - case su3_e: - case su4_e: - - /* Result of voltage measurement from SU_3/4 +5V is compared against */ - /* limits. */ - - if (ExceedsLimit(telemetry_data.sensor_unit_3.plus_5_voltage, - SU_P5V_ANA_LOWER_LIMIT, - SU_P5V_ANA_UPPER_LIMIT)) - { - Set_SU_Error(self_test_SU_index, LV_LIMIT_ERROR); - } - - /* Result of voltage measurement from SU_3/4 -5V is compared against */ - /* limits. */ - - if (ExceedsLimit(telemetry_data.sensor_unit_3.minus_5_voltage, - SU_M5V_ANA_LOWER_LIMIT, - SU_M5V_ANA_UPPER_LIMIT)) - { - Set_SU_Error(self_test_SU_index, LV_LIMIT_ERROR); - } - - break; - } - - /* Result of voltage measurement from SU +50V is compared against */ - /* limits. */ - - if (ExceedsLimit(telemetry_data.SU_plus_50, - SU_P50V_LOWER_LIMIT, - SU_P50V_UPPER_LIMIT)) - { - Set_SU_Error(self_test_SU_index, HV_LIMIT_ERROR); - } - - /* Result of voltage measurement from SU -50V is compared against */ - /* limits. */ - - if (ExceedsLimit(telemetry_data.SU_minus_50, - SU_M50V_LOWER_LIMIT, - SU_M50V_UPPER_LIMIT)) - { - Set_SU_Error(self_test_SU_index, HV_LIMIT_ERROR); - } + switch ( self_test_SU_index ) { + case su1_e: + case su2_e: + + /* Result of voltage measurement from SU_1/2 +5V is compared against */ + /* limits. */ + + if ( ExceedsLimit( telemetry_data.sensor_unit_1.plus_5_voltage, + SU_P5V_ANA_LOWER_LIMIT, + SU_P5V_ANA_UPPER_LIMIT ) ) + Set_SU_Error( self_test_SU_index, LV_LIMIT_ERROR ); + + /* Result of voltage measurement from SU_1/2 -5V is compared against */ + /* limits. */ + + if ( ExceedsLimit( telemetry_data.sensor_unit_1.minus_5_voltage, + SU_M5V_ANA_LOWER_LIMIT, + SU_M5V_ANA_UPPER_LIMIT ) ) + Set_SU_Error( self_test_SU_index, LV_LIMIT_ERROR ); + + break; + + + case su3_e: + case su4_e: + + /* Result of voltage measurement from SU_3/4 +5V is compared against */ + /* limits. */ + + if ( ExceedsLimit( telemetry_data.sensor_unit_3.plus_5_voltage, + SU_P5V_ANA_LOWER_LIMIT, + SU_P5V_ANA_UPPER_LIMIT ) ) + Set_SU_Error( self_test_SU_index, LV_LIMIT_ERROR ); + + /* Result of voltage measurement from SU_3/4 -5V is compared against */ + /* limits. */ + + if ( ExceedsLimit( telemetry_data.sensor_unit_3.minus_5_voltage, + SU_M5V_ANA_LOWER_LIMIT, + SU_M5V_ANA_UPPER_LIMIT ) ) + Set_SU_Error( self_test_SU_index, LV_LIMIT_ERROR ); + + break; + } + + /* Result of voltage measurement from SU +50V is compared against */ + /* limits. */ + + if ( ExceedsLimit( telemetry_data.SU_plus_50, + SU_P50V_LOWER_LIMIT, + SU_P50V_UPPER_LIMIT ) ) + Set_SU_Error( self_test_SU_index, HV_LIMIT_ERROR ); + + /* Result of voltage measurement from SU -50V is compared against */ + /* limits. */ + + if ( ExceedsLimit( telemetry_data.SU_minus_50, + SU_M50V_LOWER_LIMIT, + SU_M50V_UPPER_LIMIT ) ) + Set_SU_Error( self_test_SU_index, HV_LIMIT_ERROR ); } -void SelfTest_SU(sensor_index_t self_test_SU_index) +void SelfTest_SU( sensor_index_t self_test_SU_index ) /* Purpose : Execute SU self tests */ /* Interface : inputs - self_test_SU_index */ /* outputs - none */ @@ -2314,34 +2267,33 @@ void SelfTest_SU(sensor_index_t self_test_SU_index) /* an error corresponding error bit is set. */ /* - SU Temperatures and HV Status Register is checked. */ { - uint_least8_t EXTERNAL i; - /* Used in a for loop */ - - LowVoltageCurrent(); - /* V_DOWN is checked. */ - - HighVoltageCurrent(self_test_SU_index); - /* HV Status register is checked. */ - - /* SU voltages are measured */ - _Pragma("loopbound min 7 max 7") - for (i = channel_0_e; i <= channel_6_e; i++) - { - MeasureVoltage(i); - /* All voltage channels are measured. */ - } - - Monitor_SU_Voltage(self_test_SU_index); - /* Voltage measurement results are monitored against limits. */ - - MeasureTemperature(self_test_SU_index); - /* SU temperatures are measured and monitored. */ + uint_least8_t EXTERNAL i; + /* Used in a for loop */ + + LowVoltageCurrent(); + /* V_DOWN is checked. */ + + HighVoltageCurrent( self_test_SU_index ); + /* HV Status register is checked. */ + + /* SU voltages are measured */ + _Pragma( "loopbound min 7 max 7" ) + for ( i = channel_0_e; i <= channel_6_e; i++ ) { + MeasureVoltage( i ); + /* All voltage channels are measured. */ + } + + Monitor_SU_Voltage( self_test_SU_index ); + /* Voltage measurement results are monitored against limits. */ + + MeasureTemperature( self_test_SU_index ); + /* SU temperatures are measured and monitored. */ } unsigned char ExceedsLimit( - unsigned char value, - unsigned char lower_limit, - unsigned char upper_limit) + unsigned char value, + unsigned char lower_limit, + unsigned char upper_limit ) /* Purpose : Tests given value against given limits. */ /* Interface : inputs - value */ /* lower_limit */ @@ -2352,11 +2304,11 @@ unsigned char ExceedsLimit( /* Postconditions : Given value is tested. */ /* Algorithm : See below, self explanatory. */ { - return (value < lower_limit || value > upper_limit); + return ( value < lower_limit || value > upper_limit ); } -void SelfTestChannel(sensor_index_t self_test_SU_index) +void SelfTestChannel( sensor_index_t self_test_SU_index ) /* Purpose : Starts channel tests */ /* Interface : inputs - self_test_SU_index */ /* outputs - none */ @@ -2380,93 +2332,93 @@ void SelfTestChannel(sensor_index_t self_test_SU_index) /* the test. SU state for the SU under test is restored */ /* to ON. */ { - trigger_set_t EXTERNAL test_threshold; - - DISABLE_HIT_TRIGGER; - - /* Initial parameters for SetTriggerLevel function. */ - test_threshold.sensor_unit = self_test_SU_number; - test_threshold.level = MAX_PLASMA_SELF_TEST_THRESHOLD; - test_threshold.channel = PLASMA_1_PLUS; - SetTriggerLevel(&test_threshold); - test_threshold.channel = PLASMA_1_MINUS; - SetTriggerLevel(&test_threshold); - test_threshold.channel = PLASMA_2_PLUS; - SetTriggerLevel(&test_threshold); - - test_threshold.level = MAX_PIEZO_SELF_TEST_THRESHOLD; - test_threshold.channel = PZT_1_2; - SetTriggerLevel(&test_threshold); - - - /* Set initial test pulse value to 0. Test pulse value is also zeroed */ - /* before returning from ExecuteChannelTest procedure also. */ - SetTestPulseLevel(0); - - /* Test threshold level is set before each channel test for every channel*/ - /* and value is set back to the maximum threshold level before returning */ - /* from the following ExecuteChannelTest procedure calls. */ - - test_threshold.channel = PLASMA_1_PLUS; - test_threshold.level = HIGH_PLASMA_1_PLUS_SELF_TEST_THRESHOLD; - SetTriggerLevel(&test_threshold); - ExecuteChannelTest(self_test_SU_index, PLASMA_1_PLUS, PLASMA_1_PLUS_HIGH); - - test_threshold.channel = PLASMA_1_MINUS; - test_threshold.level = HIGH_PLASMA_SELF_TEST_THRESHOLD; - SetTriggerLevel(&test_threshold); - ExecuteChannelTest(self_test_SU_index, PLASMA_1_MINUS, PLASMA_1_MINUS_HIGH); - - ExecuteChannelTest(self_test_SU_index, PLASMA_2_PLUS, PLASMA_2_PLUS_HIGH); - - test_threshold.channel = PZT_1_2; - test_threshold.level = HIGH_PIEZO_SELF_TEST_THRESHOLD; - SetTriggerLevel(&test_threshold); - ExecuteChannelTest(self_test_SU_index, PZT_1, PZT_1_HIGH); - - test_threshold.channel = PZT_1_2; - test_threshold.level = HIGH_PIEZO_SELF_TEST_THRESHOLD; - SetTriggerLevel(&test_threshold); - ExecuteChannelTest(self_test_SU_index, PZT_2, PZT_2_HIGH); - - test_threshold.channel = PLASMA_1_PLUS; - test_threshold.level = LOW_PLASMA_SELF_TEST_THRESHOLD; - SetTriggerLevel(&test_threshold); - ExecuteChannelTest(self_test_SU_index, PLASMA_1_PLUS, PLASMA_1_PLUS_LOW); - - test_threshold.channel = PLASMA_1_MINUS; - test_threshold.level = LOW_PLASMA_SELF_TEST_THRESHOLD; - SetTriggerLevel(&test_threshold); - ExecuteChannelTest(self_test_SU_index, PLASMA_1_MINUS, PLASMA_1_MINUS_LOW); - - ExecuteChannelTest(self_test_SU_index, PLASMA_2_PLUS, PLASMA_2_PLUS_LOW); - - test_threshold.channel = PZT_1_2; - test_threshold.level = LOW_PIEZO_SELF_TEST_THRESHOLD; - SetTriggerLevel(&test_threshold); - ExecuteChannelTest(self_test_SU_index, PZT_1, PZT_1_LOW); - - test_threshold.channel = PZT_1_2; - test_threshold.level = LOW_PIEZO_SELF_TEST_THRESHOLD; - SetTriggerLevel(&test_threshold); - ExecuteChannelTest(self_test_SU_index, PZT_2, PZT_2_LOW); - - ENABLE_HIT_TRIGGER; - - SET_HIT_TRIGGER_ISR_FLAG; - /* A pseudo trigger is generated in order to reset peak */ - /* detector and delay counter in AcquisitionTask. */ - /* No event is recorded i.e. event processing is disabled */ - /* because SU state is 'self_test_e'. */ - - RestoreSettings(self_test_SU_index); + trigger_set_t EXTERNAL test_threshold; + + DISABLE_HIT_TRIGGER; + + /* Initial parameters for SetTriggerLevel function. */ + test_threshold.sensor_unit = self_test_SU_number; + test_threshold.level = MAX_PLASMA_SELF_TEST_THRESHOLD; + test_threshold.channel = PLASMA_1_PLUS; + SetTriggerLevel( &test_threshold ); + test_threshold.channel = PLASMA_1_MINUS; + SetTriggerLevel( &test_threshold ); + test_threshold.channel = PLASMA_2_PLUS; + SetTriggerLevel( &test_threshold ); + + test_threshold.level = MAX_PIEZO_SELF_TEST_THRESHOLD; + test_threshold.channel = PZT_1_2; + SetTriggerLevel( &test_threshold ); + + + /* Set initial test pulse value to 0. Test pulse value is also zeroed */ + /* before returning from ExecuteChannelTest procedure also. */ + SetTestPulseLevel( 0 ); + + /* Test threshold level is set before each channel test for every channel*/ + /* and value is set back to the maximum threshold level before returning */ + /* from the following ExecuteChannelTest procedure calls. */ + + test_threshold.channel = PLASMA_1_PLUS; + test_threshold.level = HIGH_PLASMA_1_PLUS_SELF_TEST_THRESHOLD; + SetTriggerLevel( &test_threshold ); + ExecuteChannelTest( self_test_SU_index, PLASMA_1_PLUS, PLASMA_1_PLUS_HIGH ); + + test_threshold.channel = PLASMA_1_MINUS; + test_threshold.level = HIGH_PLASMA_SELF_TEST_THRESHOLD; + SetTriggerLevel( &test_threshold ); + ExecuteChannelTest( self_test_SU_index, PLASMA_1_MINUS, PLASMA_1_MINUS_HIGH ); + + ExecuteChannelTest( self_test_SU_index, PLASMA_2_PLUS, PLASMA_2_PLUS_HIGH ); + + test_threshold.channel = PZT_1_2; + test_threshold.level = HIGH_PIEZO_SELF_TEST_THRESHOLD; + SetTriggerLevel( &test_threshold ); + ExecuteChannelTest( self_test_SU_index, PZT_1, PZT_1_HIGH ); + + test_threshold.channel = PZT_1_2; + test_threshold.level = HIGH_PIEZO_SELF_TEST_THRESHOLD; + SetTriggerLevel( &test_threshold ); + ExecuteChannelTest( self_test_SU_index, PZT_2, PZT_2_HIGH ); + + test_threshold.channel = PLASMA_1_PLUS; + test_threshold.level = LOW_PLASMA_SELF_TEST_THRESHOLD; + SetTriggerLevel( &test_threshold ); + ExecuteChannelTest( self_test_SU_index, PLASMA_1_PLUS, PLASMA_1_PLUS_LOW ); + + test_threshold.channel = PLASMA_1_MINUS; + test_threshold.level = LOW_PLASMA_SELF_TEST_THRESHOLD; + SetTriggerLevel( &test_threshold ); + ExecuteChannelTest( self_test_SU_index, PLASMA_1_MINUS, PLASMA_1_MINUS_LOW ); + + ExecuteChannelTest( self_test_SU_index, PLASMA_2_PLUS, PLASMA_2_PLUS_LOW ); + + test_threshold.channel = PZT_1_2; + test_threshold.level = LOW_PIEZO_SELF_TEST_THRESHOLD; + SetTriggerLevel( &test_threshold ); + ExecuteChannelTest( self_test_SU_index, PZT_1, PZT_1_LOW ); + + test_threshold.channel = PZT_1_2; + test_threshold.level = LOW_PIEZO_SELF_TEST_THRESHOLD; + SetTriggerLevel( &test_threshold ); + ExecuteChannelTest( self_test_SU_index, PZT_2, PZT_2_LOW ); + + ENABLE_HIT_TRIGGER; + + SET_HIT_TRIGGER_ISR_FLAG; + /* A pseudo trigger is generated in order to reset peak */ + /* detector and delay counter in AcquisitionTask. */ + /* No event is recorded i.e. event processing is disabled */ + /* because SU state is 'self_test_e'. */ + + RestoreSettings( self_test_SU_index ); } void ExecuteChannelTest( - sensor_index_t self_test_SU_index, - unsigned char test_channel, - unsigned char test_pulse_level) + sensor_index_t self_test_SU_index, + unsigned char test_channel, + unsigned char test_pulse_level ) /* Purpose : Execute SU self tests */ /* Interface : inputs - self_test_SU_index, test_channel */ /* outputs - telemetry_data.SU# Status */ @@ -2492,142 +2444,133 @@ void ExecuteChannelTest( /* set SELF_TEST_ERROR indication in SU status register */ /* and restore SU state to 'self_test_e'. */ { - unsigned short EXTERNAL delay_limit; - trigger_set_t EXTERNAL test_threshold; + unsigned short EXTERNAL delay_limit; + trigger_set_t EXTERNAL test_threshold; - if (test_channel == PLASMA_1_PLUS || + if ( test_channel == PLASMA_1_PLUS || test_channel == PLASMA_1_MINUS || - test_channel == PLASMA_2_PLUS) - { - SelectSelfTestChannel(test_channel); + test_channel == PLASMA_2_PLUS ) { + SelectSelfTestChannel( test_channel ); - EnableAnalogSwitch(self_test_SU_index); + EnableAnalogSwitch( self_test_SU_index ); - WaitTimeout(1); + WaitTimeout( 1 ); - ResetPeakDetector(self_test_SU_index + SU1); + ResetPeakDetector( self_test_SU_index + SU1 ); - WaitTimeout(1); + WaitTimeout( 1 ); - ResetPeakDetector(self_test_SU_index + SU1); + ResetPeakDetector( self_test_SU_index + SU1 ); - WaitTimeout(1); + WaitTimeout( 1 ); - CLEAR_HIT_TRIGGER_ISR_FLAG; + CLEAR_HIT_TRIGGER_ISR_FLAG; - ResetDelayCounters(); + ResetDelayCounters(); - SU_state[self_test_SU_index] = self_test_trigger_e; - /* Enable hit trigger processing for this self test pulse. */ + SU_state[ self_test_SU_index ] = self_test_trigger_e; + /* Enable hit trigger processing for this self test pulse. */ - ENABLE_HIT_TRIGGER; + ENABLE_HIT_TRIGGER; - SetTestPulseLevel(test_pulse_level); + SetTestPulseLevel( test_pulse_level ); - /* Set at least 1ms test pulse */ - delay_limit = DELAY_LIMIT(1000); - DelayAwhile(delay_limit); + /* Set at least 1ms test pulse */ + delay_limit = DELAY_LIMIT( 1000 ); + DelayAwhile( delay_limit ); - /* For plasma 1i channel triggering must take place in 1ms after */ - /* rising edge. */ - if (test_channel == PLASMA_1_MINUS && - SU_state[self_test_SU_index] == self_test_trigger_e) - { - /* Self test trigger pulse did not cause an interrupt. */ - Set_SU_Error(self_test_SU_index, SELF_TEST_ERROR); + /* For plasma 1i channel triggering must take place in 1ms after */ + /* rising edge. */ + if ( test_channel == PLASMA_1_MINUS && + SU_state[ self_test_SU_index ] == self_test_trigger_e ) { + /* Self test trigger pulse did not cause an interrupt. */ + Set_SU_Error( self_test_SU_index, SELF_TEST_ERROR ); - SU_state[self_test_SU_index] = self_test_e; - /* Triggering of a self test pulse is disabled by restoring */ - /* the self_test_e state. */ - } + SU_state[ self_test_SU_index ] = self_test_e; + /* Triggering of a self test pulse is disabled by restoring */ + /* the self_test_e state. */ + } - /* Test pulse is always at least 3ms (=1ms+2ms) */ - delay_limit = DELAY_LIMIT(2000); - DelayAwhile(delay_limit); + /* Test pulse is always at least 3ms (=1ms+2ms) */ + delay_limit = DELAY_LIMIT( 2000 ); + DelayAwhile( delay_limit ); - SetTestPulseLevel(0); + SetTestPulseLevel( 0 ); - if (test_channel == PLASMA_2_PLUS) - { - SET_HIT_TRIGGER_ISR_FLAG; - } + if ( test_channel == PLASMA_2_PLUS ) + SET_HIT_TRIGGER_ISR_FLAG; - /* If channel is plasma 1e or 2e then wait at least 1ms after */ - /* falling edge. */ - if (test_channel != PLASMA_1_MINUS) - { - delay_limit = DELAY_LIMIT(1000); - /* Set at least 1ms test pulse */ - DelayAwhile(delay_limit); - } + /* If channel is plasma 1e or 2e then wait at least 1ms after */ + /* falling edge. */ + if ( test_channel != PLASMA_1_MINUS ) { + delay_limit = DELAY_LIMIT( 1000 ); + /* Set at least 1ms test pulse */ + DelayAwhile( delay_limit ); + } - DISABLE_HIT_TRIGGER; + DISABLE_HIT_TRIGGER; - if (test_channel != PLASMA_2_PLUS) - { - test_threshold.sensor_unit = self_test_SU_index + SU1; - test_threshold.channel = test_channel; - test_threshold.level = MAX_PLASMA_SELF_TEST_THRESHOLD; - SetTriggerLevel(&test_threshold); - } + if ( test_channel != PLASMA_2_PLUS ) { + test_threshold.sensor_unit = self_test_SU_index + SU1; + test_threshold.channel = test_channel; + test_threshold.level = MAX_PLASMA_SELF_TEST_THRESHOLD; + SetTriggerLevel( &test_threshold ); + } - DisableAnalogSwitch(self_test_SU_index); - } - else - { - SelectSelfTestChannel(test_channel); + DisableAnalogSwitch( self_test_SU_index ); + } else { + SelectSelfTestChannel( test_channel ); - SetTestPulseLevel(test_pulse_level); + SetTestPulseLevel( test_pulse_level ); - WaitTimeout(1); + WaitTimeout( 1 ); - ResetPeakDetector(self_test_SU_index + SU1); + ResetPeakDetector( self_test_SU_index + SU1 ); - WaitTimeout(1); + WaitTimeout( 1 ); - ResetPeakDetector(self_test_SU_index + SU1); + ResetPeakDetector( self_test_SU_index + SU1 ); - WaitTimeout(1); + WaitTimeout( 1 ); - CLEAR_HIT_TRIGGER_ISR_FLAG; + CLEAR_HIT_TRIGGER_ISR_FLAG; - ResetDelayCounters(); + ResetDelayCounters(); - SU_state[self_test_SU_index] = self_test_trigger_e; - /* Enable hit trigger processing for this self test pulse. */ + SU_state[ self_test_SU_index ] = self_test_trigger_e; + /* Enable hit trigger processing for this self test pulse. */ - ENABLE_HIT_TRIGGER; + ENABLE_HIT_TRIGGER; - EnableAnalogSwitch(self_test_SU_index); + EnableAnalogSwitch( self_test_SU_index ); - /* Set at least 1ms test pulse */ - delay_limit = DELAY_LIMIT(1000); - DelayAwhile(delay_limit); + /* Set at least 1ms test pulse */ + delay_limit = DELAY_LIMIT( 1000 ); + DelayAwhile( delay_limit ); - DISABLE_HIT_TRIGGER; + DISABLE_HIT_TRIGGER; - SetTestPulseLevel(0); + SetTestPulseLevel( 0 ); - DisableAnalogSwitch(self_test_SU_index); + DisableAnalogSwitch( self_test_SU_index ); - test_threshold.sensor_unit = self_test_SU_index + SU1; - test_threshold.level = MAX_PIEZO_SELF_TEST_THRESHOLD; - test_threshold.channel = PZT_1_2; - SetTriggerLevel(&test_threshold); - } + test_threshold.sensor_unit = self_test_SU_index + SU1; + test_threshold.level = MAX_PIEZO_SELF_TEST_THRESHOLD; + test_threshold.channel = PZT_1_2; + SetTriggerLevel( &test_threshold ); + } - if (SU_state[self_test_SU_index] == self_test_trigger_e) - { - /* Self test trigger pulse did not cause an interrupt. */ - Set_SU_Error(self_test_SU_index, SELF_TEST_ERROR); + if ( SU_state[ self_test_SU_index ] == self_test_trigger_e ) { + /* Self test trigger pulse did not cause an interrupt. */ + Set_SU_Error( self_test_SU_index, SELF_TEST_ERROR ); - SU_state[self_test_SU_index] = self_test_e; - /* Triggering of a self test pulse is disabled by restoring */ - /* the self_test_e state. */ - } + SU_state[ self_test_SU_index ] = self_test_e; + /* Triggering of a self test pulse is disabled by restoring */ + /* the self_test_e state. */ + } } -void RestoreSettings(sensor_index_t self_test_SU_index) +void RestoreSettings( sensor_index_t self_test_SU_index ) /* Purpose : Restores settings after SU self tests. */ /* Interface : inputs - self_test_SU_index, */ /* telemetry_data, SU threshold levels */ @@ -2644,50 +2587,50 @@ void RestoreSettings(sensor_index_t self_test_SU_index) /* SetTriggerLevel. */ /* - SU state is restored to ON with Switch_SU_State. */ { - SU_settings_t EXTERNAL *const PROGRAM setting_map_c[] = { - &telemetry_data.sensor_unit_1, - &telemetry_data.sensor_unit_2, - &telemetry_data.sensor_unit_3, - &telemetry_data.sensor_unit_4 - }; - /* Pointers to Sensor Unit configuration data in telemetry */ - /* data area. */ - - SU_settings_t EXTERNAL * INDIRECT_INTERNAL SU_setting; - /* Pointer to configuration data of the Sensor Unit being */ - /* Self Tested. */ - - sensor_unit_t EXTERNAL SU_switch; - trigger_set_t EXTERNAL threshold; - /* Parameters for subroutines. */ - - SU_setting = setting_map_c[self_test_SU_index]; - - threshold.sensor_unit = self_test_SU_number; - - threshold.level = - SU_setting -> plasma_1_plus_threshold; - threshold.channel = PLASMA_1_PLUS; - SetTriggerLevel(&threshold); - /* Restore Plasma 1 Plus trigger threshold. */ - - threshold.level = - SU_setting -> plasma_1_minus_threshold; - threshold.channel = PLASMA_1_MINUS; - SetTriggerLevel(&threshold); - /* Restore Plasma 1 Minus trigger threshold. */ - - threshold.level = - SU_setting -> piezo_threshold; - threshold.channel = PZT_1_2; - SetTriggerLevel(&threshold); - /* Restore Piezo trigger threshold. */ - - SU_switch.SU_number = self_test_SU_number; - SU_switch.SU_state = on_e; - SU_switch.expected_source_state = self_test_e; - Switch_SU_State(&SU_switch); - /* Switch SU State back to On. */ + SU_settings_t EXTERNAL *const PROGRAM setting_map_c[ ] = { + &telemetry_data.sensor_unit_1, + &telemetry_data.sensor_unit_2, + &telemetry_data.sensor_unit_3, + &telemetry_data.sensor_unit_4 + }; + /* Pointers to Sensor Unit configuration data in telemetry */ + /* data area. */ + + SU_settings_t EXTERNAL *INDIRECT_INTERNAL SU_setting; + /* Pointer to configuration data of the Sensor Unit being */ + /* Self Tested. */ + + sensor_unit_t EXTERNAL SU_switch; + trigger_set_t EXTERNAL threshold; + /* Parameters for subroutines. */ + + SU_setting = setting_map_c[ self_test_SU_index ]; + + threshold.sensor_unit = self_test_SU_number; + + threshold.level = + SU_setting -> plasma_1_plus_threshold; + threshold.channel = PLASMA_1_PLUS; + SetTriggerLevel( &threshold ); + /* Restore Plasma 1 Plus trigger threshold. */ + + threshold.level = + SU_setting -> plasma_1_minus_threshold; + threshold.channel = PLASMA_1_MINUS; + SetTriggerLevel( &threshold ); + /* Restore Plasma 1 Minus trigger threshold. */ + + threshold.level = + SU_setting -> piezo_threshold; + threshold.channel = PZT_1_2; + SetTriggerLevel( &threshold ); + /* Restore Piezo trigger threshold. */ + + SU_switch.SU_number = self_test_SU_number; + SU_switch.SU_state = on_e; + SU_switch.expected_source_state = self_test_e; + Switch_SU_State( &SU_switch ); + /* Switch SU State back to On. */ } diff --git a/bench/parallel/DEBIE/code/health.h b/bench/parallel/DEBIE/code/health.h index 1ed299747239941dfca8d142f86da31a07e3ed4f..22460e836cd880658d46fea352e055256e73d1f0 100644 --- a/bench/parallel/DEBIE/code/health.h +++ b/bench/parallel/DEBIE/code/health.h @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : health.h - * - * Prototypes etc. for the Health module. - * - * Based on the SSF file health.h, revision 1.12, Wed Oct 13 19:50:12 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : health.h + + Prototypes etc. for the Health module. + + Based on the SSF file health.h, revision 1.12, Wed Oct 13 19:50:12 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef HEALTH_H #define HEALTH_H @@ -32,7 +32,7 @@ #define RESULT_OK 1 #define CONVERSION_ACTIVE 0 -#define HIT_OCCURRED 2 +#define HIT_OCCURRED 2 #define CONVERSION_STARTED 1 @@ -48,7 +48,7 @@ #define VOLTAGE_COUNT 17 /* Voltage Measurement loop count. */ - + #define TEMP_COUNT 5 /* Temperature measurement loop count. Its value must equal or greater than */ /* NUM_SU, because its value defines the SU whos temperatures are to be */ @@ -63,7 +63,7 @@ #define CHECK_SIZE 547 /* Checksum is counted for code memory 547 bytes per check round. */ - + #define CODE_MEMORY_END 0x7FFF /* The last code memory address to be checked in function */ /* 'CalculateChecksum'. */ @@ -71,14 +71,14 @@ /* than 2^16 - 1. Otherwise it will affect a 'for' */ /* loop in 'CalculateChecksum' function in a way */ /* that makes this loop infinite. */ - + #define MAX_CHECKSUM_COUNT 59 #define MIN_CHECKSUM_COUNT 0 /* Limiting values used in function 'CalculateChecksum'. */ typedef enum { - round_0_e, round_1_e, round_2_e, round_3_e, round_4_e, - round_5_e, round_6_e, round_7_e, round_8_e, round_9_e + round_0_e, round_1_e, round_2_e, round_3_e, round_4_e, + round_5_e, round_6_e, round_7_e, round_8_e, round_9_e } round_t; extern uint_least8_t EXTERNAL health_mon_round; @@ -87,32 +87,32 @@ extern uint_least8_t EXTERNAL voltage_meas_count; extern uint_least8_t EXTERNAL checksum_count; extern unsigned char EXTERNAL code_checksum; -extern EXTERNAL unsigned char confirm_hit_result; +extern EXTERNAL unsigned char confirm_hit_result; extern EXTERNAL dpu_time_t internal_time; -extern void SetSoftwareError (unsigned char error) - COMPACT_DATA REENTRANT_FUNC; -extern void ClearSoftwareError (void); -extern void SetModeStatusError (unsigned char mode_status_error) - COMPACT_DATA REENTRANT_FUNC; -extern void ClearModeStatusError(void); +extern void SetSoftwareError ( unsigned char error ) +COMPACT_DATA REENTRANT_FUNC; +extern void ClearSoftwareError ( void ); +extern void SetModeStatusError ( unsigned char mode_status_error ) +COMPACT_DATA REENTRANT_FUNC; +extern void ClearModeStatusError( void ); -extern void SetMode (DEBIE_mode_t mode) - COMPACT_DATA REENTRANT_FUNC; -extern DEBIE_mode_t GetMode(void); -extern void Clear_SU_Error(void); -extern void Set_SU_Error(sensor_index_t SU_index, unsigned char SU_error); -extern void SetErrorStatus(unsigned char error_source); -extern void ClearErrorStatus(void); -extern void Clear_RTX_Errors(void); +extern void SetMode ( DEBIE_mode_t mode ) +COMPACT_DATA REENTRANT_FUNC; +extern DEBIE_mode_t GetMode( void ); +extern void Clear_SU_Error( void ); +extern void Set_SU_Error( sensor_index_t SU_index, unsigned char SU_error ); +extern void SetErrorStatus( unsigned char error_source ); +extern void ClearErrorStatus( void ); +extern void Clear_RTX_Errors( void ); -extern void Boot (void); +extern void Boot ( void ); /* Task functions, for testing: */ -extern void InitHealthMonitoring (void); -extern void HandleHealthMonitoring (void); +extern void InitHealthMonitoring ( void ); +extern void HandleHealthMonitoring ( void ); #endif diff --git a/bench/parallel/DEBIE/code/hw_if.c b/bench/parallel/DEBIE/code/hw_if.c index 54b24fb983452bee4a18e1382ddd91e469cd7620..3614e171197b2b9b85bf1733e2cdfc914be94381 100644 --- a/bench/parallel/DEBIE/code/hw_if.c +++ b/bench/parallel/DEBIE/code/hw_if.c @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : hw_if.c - * - * Initialization and test of hardware. - * - * Based on the SSF file hw_if.c, rev 1.34, Sun Jul 25 15:47:56 1999. - * - *----------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : hw_if.c + + Initialization and test of hardware. + + Based on the SSF file hw_if.c, rev 1.34, Sun Jul 25 15:47:56 1999. + + ----------------------------------------------------------------------------- +*/ #include "dpu_ctrl.h" #include "su_ctrl.h" @@ -41,7 +41,7 @@ unsigned char EXTERNAL SU_ctrl_register = 0; unsigned char EXTERNAL SU_self_test_channel = 0; /* These variables store values of these write-only registers. */ -unsigned char EXTERNAL LOCATION(0xFF00) forbidden_area[256]; +unsigned char EXTERNAL LOCATION( 0xFF00 ) forbidden_area[ 256 ]; /* Last 256 bytes of the external data memory are reserved for */ /* memory mapped registers. No variables are allowed in that area. */ @@ -78,24 +78,24 @@ unsigned char EXTERNAL code_not_patched; /* patched, set to 1 when next checksum calculation */ /* period is started. */ -unsigned char EXTERNAL analog_switch_bit[NUM_SU] = {0x10, 0x20, 0x40, 0x80}; +unsigned char EXTERNAL analog_switch_bit[ NUM_SU ] = {0x10, 0x20, 0x40, 0x80}; /* This array stores the value to be used when analog switch bit */ /* corresponding to a given SU is set. */ /* Function prototypes. */ -void CopyProgramCode(void); -code_address_t InitCode_RAM (reset_class_t reset_class); +void CopyProgramCode( void ); +code_address_t InitCode_RAM ( reset_class_t reset_class ); void InitData_RAM ( - reset_class_t reset_class, - code_address_t code_address); + reset_class_t reset_class, + code_address_t code_address ); /*****************************************************************************/ /* dpu_ctrl.h */ /*****************************************************************************/ unsigned short int Check_RAM ( - data_address_t start_address, - data_address_t end_address) + data_address_t start_address, + data_address_t end_address ) /* Purpose : Check the working of an area of external RAM. */ /* Interface : inputs - range of memory addresses. */ /* outputs - first failed address. */ @@ -121,73 +121,66 @@ unsigned short int Check_RAM ( /* it is called before the C start-up system initialises data. */ { - /* Note that the local variables of this function should all be */ - /* located in the internal data memory. Otherwise they may be */ - /* altered unexpectedly as a side effect of testing memory. */ - - data_address_t INDIRECT_INTERNAL start; - /* The starting address for TestMemSeq and TestMemData. */ - - uint_least16_t INDIRECT_INTERNAL range; - /* The remaining range (ending address - starting address). */ - - uint_least8_t INDIRECT_INTERNAL bytes; - /* The number of bytes to check, for TestMemSeq/Data. */ - - uint_least8_t INDIRECT_INTERNAL bytes_left; - /* The number of bytes left, returned from TestMemSeq/Data. */ - - start = start_address; - - if (TestMemBits(start) != 0) - { - /* Failure in data bus, probably. */ - return start; - } - - _Pragma("loopbound min 0 max 0") - while (start <= end_address) - { - range = end_address - start; - /* Number of bytes to check, less one. */ - - if (range < 255) - { - /* One call of TestMemSeq/Data covers the remaining range. */ - bytes = (uint_least8_t)(range + 1); - } - else - { - /* One call cannot cover the remaining range. */ - /* Cover as much as possible for one call. */ - bytes = 255; - } - - bytes_left = TestMemSeq (start, bytes); - - if (bytes_left == 0) - { - /* TestMemSeq succeeded. Try TestMemData. */ - bytes_left = TestMemData (start, bytes); - } - - if (bytes_left > 0) - { - /* Memory error. Return failing address. */ - return (bytes - bytes_left) + start; - } - - start = start + bytes; - /* Next address to check, or end_address+1 if all done. */ - /* Wrap-around cannot happen since end_address < 0xFFFF. */ - } - - /* Memory is OK. */ - return NO_RAM_FAILURE; + /* Note that the local variables of this function should all be */ + /* located in the internal data memory. Otherwise they may be */ + /* altered unexpectedly as a side effect of testing memory. */ + + data_address_t INDIRECT_INTERNAL start; + /* The starting address for TestMemSeq and TestMemData. */ + + uint_least16_t INDIRECT_INTERNAL range; + /* The remaining range (ending address - starting address). */ + + uint_least8_t INDIRECT_INTERNAL bytes; + /* The number of bytes to check, for TestMemSeq/Data. */ + + uint_least8_t INDIRECT_INTERNAL bytes_left; + /* The number of bytes left, returned from TestMemSeq/Data. */ + + start = start_address; + + if ( TestMemBits( start ) != 0 ) { + /* Failure in data bus, probably. */ + return start; + } + + _Pragma( "loopbound min 0 max 0" ) + while ( start <= end_address ) { + range = end_address - start; + /* Number of bytes to check, less one. */ + + if ( range < 255 ) { + /* One call of TestMemSeq/Data covers the remaining range. */ + bytes = ( uint_least8_t )( range + 1 ); + } else { + /* One call cannot cover the remaining range. */ + /* Cover as much as possible for one call. */ + bytes = 255; + } + + bytes_left = TestMemSeq ( start, bytes ); + + if ( bytes_left == 0 ) { + /* TestMemSeq succeeded. Try TestMemData. */ + bytes_left = TestMemData ( start, bytes ); + } + + if ( bytes_left > 0 ) { + /* Memory error. Return failing address. */ + return ( bytes - bytes_left ) + start; + } + + start = start + bytes; + /* Next address to check, or end_address+1 if all done. */ + /* Wrap-around cannot happen since end_address < 0xFFFF. */ + } + + /* Memory is OK. */ + return NO_RAM_FAILURE; } -void Init_DPU (reset_class_t reset_class) +void Init_DPU ( reset_class_t reset_class ) /* Purpose : DEBIE-specific DPU and I/O initialisation at reset. */ /* Interface : inputs - reset class */ /* outputs - s_w_reset */ @@ -209,83 +202,79 @@ void Init_DPU (reset_class_t reset_class) /* it is called before the C start-up system initialises data. */ { - /* Note: be careful with use of external Data RAM in this function. */ - /* If InitData_RAM tests the RAM, it will destroy the contents. */ + /* Note: be careful with use of external Data RAM in this function. */ + /* If InitData_RAM tests the RAM, it will destroy the contents. */ - volatile reset_class_t INDIRECT_INTERNAL safe_reset_class; - /* Copy of reset_class in internal RAM, safe from RAM test. */ + volatile reset_class_t INDIRECT_INTERNAL safe_reset_class; + /* Copy of reset_class in internal RAM, safe from RAM test. */ - code_address_t INDIRECT_INTERNAL code_address; - /* Result of InitCode_RAM. */ + code_address_t INDIRECT_INTERNAL code_address; + /* Result of InitCode_RAM. */ - safe_reset_class = reset_class; - /* Copy to internal RAM. */ + safe_reset_class = reset_class; + /* Copy to internal RAM. */ - SET_WD_RESET_LOW; + SET_WD_RESET_LOW; - /* The Watch Dog timer is reset by setting WD_RESET bit low at I/O */ - /* port 1. */ + /* The Watch Dog timer is reset by setting WD_RESET bit low at I/O */ + /* port 1. */ - SET_INTERRUPT_PRIORITIES; - /* Define the high/low priority of each interrupt. */ + SET_INTERRUPT_PRIORITIES; + /* Define the high/low priority of each interrupt. */ - SET_INT_TYPE1_EDGE; - /* The interrupt control type 1 bit is set to 'falling edge' state. */ + SET_INT_TYPE1_EDGE; + /* The interrupt control type 1 bit is set to 'falling edge' state. */ - SET_INT_TYPE0_EDGE; - /* The interrupt control type 1 bit is set to 'falling edge' state. */ + SET_INT_TYPE0_EDGE; + /* The interrupt control type 1 bit is set to 'falling edge' state. */ - STOP_TC_TIMER; - SET_TC_TIMER_MODE; - DISABLE_TC_TIMER_ISR; - SET_TC_TIMER_OVERFLOW_FLAG; - /* Prepare TC timer. */ + STOP_TC_TIMER; + SET_TC_TIMER_MODE; + DISABLE_TC_TIMER_ISR; + SET_TC_TIMER_OVERFLOW_FLAG; + /* Prepare TC timer. */ - CLEAR_TC_INTERRUPT_FLAG; - CLEAR_TM_INTERRUPT_FLAG; - CLEAR_HIT_TRIGGER_ISR_FLAG; - /* Clear pending interrupts. */ + CLEAR_TC_INTERRUPT_FLAG; + CLEAR_TM_INTERRUPT_FLAG; + CLEAR_HIT_TRIGGER_ISR_FLAG; + /* Clear pending interrupts. */ - /* RAM tests and code copying: */ + /* RAM tests and code copying: */ - code_address = InitCode_RAM (safe_reset_class); + code_address = InitCode_RAM ( safe_reset_class ); - InitData_RAM (safe_reset_class, code_address); + InitData_RAM ( safe_reset_class, code_address ); - /* Record RAM test results in external data as follows. */ - /* They will be safe now, since RAM test is over. */ - /* Note, InitData_RAM already set failed_data_address, */ - /* and InitCode_RAM selected the memory mode; here we */ - /* just record the selection in memory_mode. */ - /* The failed_code/data_addresses are not yet set in */ - /* telemetry_data, since the latter will be cleared in */ - /* a later step of the boot sequence. */ + /* Record RAM test results in external data as follows. */ + /* They will be safe now, since RAM test is over. */ + /* Note, InitData_RAM already set failed_data_address, */ + /* and InitCode_RAM selected the memory mode; here we */ + /* just record the selection in memory_mode. */ + /* The failed_code/data_addresses are not yet set in */ + /* telemetry_data, since the latter will be cleared in */ + /* a later step of the boot sequence. */ - s_w_reset = safe_reset_class; - code_not_patched = 1; - failed_code_address = code_address; + s_w_reset = safe_reset_class; + code_not_patched = 1; + failed_code_address = code_address; - if (code_address == NO_RAM_FAILURE) - { - memory_mode = SRAM_e; - } - else - { - memory_mode = PROM_e; - } + if ( code_address == NO_RAM_FAILURE ) + memory_mode = SRAM_e; + else + memory_mode = PROM_e; - #ifdef USE_ALWAYS_PROM - memory_mode = PROM_e; - #endif + #ifdef USE_ALWAYS_PROM + memory_mode = PROM_e; + #endif - SET_WD_RESET_HIGH; - /* The Watch Dog time out signal state is reset HIGH state, as it is*/ - /* falling edge active. */ + SET_WD_RESET_HIGH; + /* The Watch Dog time out signal state is reset HIGH state, as it is*/ + /* falling edge active. */ } -code_address_t InitCode_RAM (reset_class_t reset_class) +code_address_t InitCode_RAM ( reset_class_t reset_class ) /* Purpose : Initialise Program Memory at reset. */ /* Interface : inputs - reset class */ /* - failed_code_address (if Warm Reset) */ @@ -317,54 +306,49 @@ code_address_t InitCode_RAM (reset_class_t reset_class) /* it is called before the C start-up system initialises data. */ { - code_address_t INDIRECT_INTERNAL code_address; - /* Value returned by Check_RAM, now or earlier. */ - - if (reset_class == warm_reset_e) - { - /* Warm Reset: Do not copy PROM code to RAM. */ - /* Use result of memory test from earlier (non-warm) reset. */ - - code_address = failed_code_address; - } - else - { - /* HW Reset, Soft Reset or Checksum Reset. */ - - code_address = Check_RAM ( BEGIN_SRAM1, END_SRAM1 ); - /* TBC that this does not rely on data RAM constants. */ - - if (code_address == NO_RAM_FAILURE) - { - #ifndef USE_ALWAYS_PROM - CopyProgramCode(); - #endif - /* Code RAM is good. Copy code to it. */ - /* Later in the boot sequence, the reference checksum */ - /* must be reset to its initial value, to erase its */ - /* memory of any code patches, or to initialise it in */ - /* case of a power-up reset or test of data RAM. */ - } - } + code_address_t INDIRECT_INTERNAL code_address; + /* Value returned by Check_RAM, now or earlier. */ + + if ( reset_class == warm_reset_e ) { + /* Warm Reset: Do not copy PROM code to RAM. */ + /* Use result of memory test from earlier (non-warm) reset. */ - if (code_address == NO_RAM_FAILURE) - { + code_address = failed_code_address; + } else { + /* HW Reset, Soft Reset or Checksum Reset. */ + + code_address = Check_RAM ( BEGIN_SRAM1, END_SRAM1 ); + /* TBC that this does not rely on data RAM constants. */ + + if ( code_address == NO_RAM_FAILURE ) { #ifndef USE_ALWAYS_PROM - SET_MEM_CONF_SRAM; + CopyProgramCode(); #endif - /* Code RAM is good. Run program from it. */ - /* For a Warm Reset, the Code RAM may contain patches */ - /* relative to the PROM code, and the reference */ - /* checksum should also retain a memory of them. */ - } - - return code_address; + /* Code RAM is good. Copy code to it. */ + /* Later in the boot sequence, the reference checksum */ + /* must be reset to its initial value, to erase its */ + /* memory of any code patches, or to initialise it in */ + /* case of a power-up reset or test of data RAM. */ + } + } + + if ( code_address == NO_RAM_FAILURE ) { + #ifndef USE_ALWAYS_PROM + SET_MEM_CONF_SRAM; + #endif + /* Code RAM is good. Run program from it. */ + /* For a Warm Reset, the Code RAM may contain patches */ + /* relative to the PROM code, and the reference */ + /* checksum should also retain a memory of them. */ + } + + return code_address; } void InitData_RAM ( - reset_class_t reset_class, - code_address_t code_address) + reset_class_t reset_class, + code_address_t code_address ) /* Purpose : Initialise Data Memory at reset. */ /* Interface : inputs - reset class */ /* - failed code address (in some cases) */ @@ -387,28 +371,24 @@ void InitData_RAM ( /* it is called before the C start-up system initialises data. */ { - if (reset_class == power_up_reset_e) - { - if (code_address == NO_RAM_FAILURE) - { - /* The Code RAM is good, so we have a fresh lower-half */ - /* of the Data RAM to check, as well as the upper-half. */ - - failed_data_address = Check_RAM (BEGIN_DATA_RAM, END_SRAM3); - } - else - { - /* The Code RAM is bad, and is still mapped to the */ - /* lower-half of the Data space. Check only the upper */ - /* half of the data space. */ - - failed_data_address = Check_RAM (BEGIN_SRAM3, END_SRAM3); - } - } + if ( reset_class == power_up_reset_e ) { + if ( code_address == NO_RAM_FAILURE ) { + /* The Code RAM is good, so we have a fresh lower-half */ + /* of the Data RAM to check, as well as the upper-half. */ + + failed_data_address = Check_RAM ( BEGIN_DATA_RAM, END_SRAM3 ); + } else { + /* The Code RAM is bad, and is still mapped to the */ + /* lower-half of the Data space. Check only the upper */ + /* half of the data space. */ + + failed_data_address = Check_RAM ( BEGIN_SRAM3, END_SRAM3 ); + } + } } -void CopyProgramCode(void) +void CopyProgramCode( void ) /* Purpose : Copies program code from PROM to SRAM */ /* Interface : -inputs: PROM */ /* -outputs: SRAM1 */ @@ -422,19 +402,18 @@ void CopyProgramCode(void) /* it is called before the C start-up system initialises data. */ { - code_address_t i; - INDIRECT_INTERNAL unsigned char code_byte; - - _Pragma("loopbound min 28672 max 28672") - for (i = PROGRAM_COPY_START; i < PROGRAM_COPY_END; i++) - { - code_byte = GET_CODE_BYTE(i); - SET_DATA_BYTE((data_address_t)i, code_byte); - } + code_address_t i; + INDIRECT_INTERNAL unsigned char code_byte; + + _Pragma( "loopbound min 28672 max 28672" ) + for ( i = PROGRAM_COPY_START; i < PROGRAM_COPY_END; i++ ) { + code_byte = GET_CODE_BYTE( i ); + SET_DATA_BYTE( ( data_address_t )i, code_byte ); + } } -reset_class_t GetResetClass(void) +reset_class_t GetResetClass( void ) /* Purpose : Reset class is returned. */ /* Interface : - inputs: s_w_reset, type of the occurred reset. */ /* - outputs: s_w_reset */ @@ -444,15 +423,15 @@ reset_class_t GetResetClass(void) /* Algorithm : value of s_w_reset is returned and s_w_reset is set to */ /* error value. */ { - register reset_class_t occurred_reset; + register reset_class_t occurred_reset; - occurred_reset = s_w_reset; - s_w_reset = error_e; - return occurred_reset; + occurred_reset = s_w_reset; + s_w_reset = error_e; + return occurred_reset; } -void SignalMemoryErrors (void) +void SignalMemoryErrors ( void ) /* Purpose : Copy results of RAM test to telemetry_data. */ /* Interface : - inputs: failed_code_address, failed_data_address */ /* - outputs: telemetry_data fields: */ @@ -468,31 +447,25 @@ void SignalMemoryErrors (void) /* Note that the TM addresses are zero for "no failure". */ /* Algorithm : see below. */ { - if (failed_code_address == NO_RAM_FAILURE) - { - telemetry_data.mode_status &= ~PROGRAM_MEMORY_ERROR; - telemetry_data.failed_code_address = 0x0000; - } - else - { - telemetry_data.mode_status |= PROGRAM_MEMORY_ERROR; - telemetry_data.failed_code_address = failed_code_address; - } - - if (failed_data_address == NO_RAM_FAILURE) - { - telemetry_data.mode_status &= ~DATA_MEMORY_ERROR; - telemetry_data.failed_data_address = 0x0000; - } - else - { - telemetry_data.mode_status |= DATA_MEMORY_ERROR; - telemetry_data.failed_data_address = failed_data_address; - } + if ( failed_code_address == NO_RAM_FAILURE ) { + telemetry_data.mode_status &= ~PROGRAM_MEMORY_ERROR; + telemetry_data.failed_code_address = 0x0000; + } else { + telemetry_data.mode_status |= PROGRAM_MEMORY_ERROR; + telemetry_data.failed_code_address = failed_code_address; + } + + if ( failed_data_address == NO_RAM_FAILURE ) { + telemetry_data.mode_status &= ~DATA_MEMORY_ERROR; + telemetry_data.failed_data_address = 0x0000; + } else { + telemetry_data.mode_status |= DATA_MEMORY_ERROR; + telemetry_data.failed_data_address = failed_data_address; + } } -void SetMemoryConfiguration (memory_configuration_t memory) +void SetMemoryConfiguration ( memory_configuration_t memory ) /* Purpose : External program memory is selected to be either PROM or */ /* SRAM1. */ /* Interface : Port 1 is used. */ @@ -505,20 +478,19 @@ void SetMemoryConfiguration (memory_configuration_t memory) /* I/O port 1. */ { - switch (memory) - { - case PROM_e: - SET_MEM_CONF_PROM; - break; - case SRAM_e: - SET_MEM_CONF_SRAM; - break; - } - memory_mode = memory; + switch ( memory ) { + case PROM_e: + SET_MEM_CONF_PROM; + break; + case SRAM_e: + SET_MEM_CONF_SRAM; + break; + } + memory_mode = memory; } -void PatchCode(memory_patch_variables_t EXTERNAL *patch_variables) +void PatchCode( memory_patch_variables_t EXTERNAL *patch_variables ) /* Purpose : Code memory patching. */ /* Interface : Following parameters are given: Address from where to */ /* copy, address where to copy and the amount of bytes to */ @@ -532,94 +504,93 @@ void PatchCode(memory_patch_variables_t EXTERNAL *patch_variables) { - fptr_t patch_function; - /* Function pointer to the patched memory area. */ + fptr_t patch_function; + /* Function pointer to the patched memory area. */ - unsigned char INDIRECT_INTERNAL old_checksum; - /* Checksum calculated from the old contents of the pachted memory. */ + unsigned char INDIRECT_INTERNAL old_checksum; + /* Checksum calculated from the old contents of the pachted memory. */ - unsigned char INDIRECT_INTERNAL new_checksum; - /* Checksum calculated from the new conrents of the patched memory. */ + unsigned char INDIRECT_INTERNAL new_checksum; + /* Checksum calculated from the new conrents of the patched memory. */ - unsigned char INDIRECT_INTERNAL patch_value; - /* New value of a patched code memory byte. */ + unsigned char INDIRECT_INTERNAL patch_value; + /* New value of a patched code memory byte. */ - unsigned char EXTERNAL temp_configuration; - /* Original memory configuration. */ + unsigned char EXTERNAL temp_configuration; + /* Original memory configuration. */ - uint_least8_t INDIRECT_INTERNAL i; - /* Loop variable. */ + uint_least8_t INDIRECT_INTERNAL i; + /* Loop variable. */ - temp_configuration = GetMemoryConfiguration(); - /* State of the current memory configuration is stored. */ + temp_configuration = GetMemoryConfiguration(); + /* State of the current memory configuration is stored. */ - DISABLE_INTERRUPT_MASTER; - /* Disable all interrupts. */ + DISABLE_INTERRUPT_MASTER; + /* Disable all interrupts. */ - SetMemoryConfiguration (PROM_e); - /* Enable code patching. */ + SetMemoryConfiguration ( PROM_e ); + /* Enable code patching. */ - new_checksum = 0; - old_checksum = 0; + new_checksum = 0; + old_checksum = 0; - /* Memory block is copied from SRAM3 to SRAM1. */ + /* Memory block is copied from SRAM3 to SRAM1. */ - _Pragma("loopbound min 32 max 32") - for (i=0 ; i < patch_variables -> data_amount ; i++) - { - old_checksum ^= GET_DATA_BYTE(patch_variables -> destination + i); - patch_value = *(patch_variables -> source + i); - new_checksum ^= patch_value; + _Pragma( "loopbound min 32 max 32" ) + for ( i = 0 ; i < patch_variables -> data_amount ; i++ ) { + old_checksum ^= GET_DATA_BYTE( patch_variables -> destination + i ); + patch_value = *( patch_variables -> source + i ); + new_checksum ^= patch_value; - SET_DATA_BYTE(patch_variables -> destination + i, patch_value); - } + SET_DATA_BYTE( patch_variables -> destination + i, patch_value ); + } - reference_checksum ^= (old_checksum ^ new_checksum); + reference_checksum ^= ( old_checksum ^ new_checksum ); - SetMemoryConfiguration (temp_configuration); - /* The initial memory configuration is restored. */ + SetMemoryConfiguration ( temp_configuration ); + /* The initial memory configuration is restored. */ - switch (patch_variables -> execution_command) - { - case 0: - /* Continue normally. */ + switch ( patch_variables -> execution_command ) { + case 0: + /* Continue normally. */ - break; + break; - case 0x09: - /* Execute soft reset. */ + case 0x09: + /* Execute soft reset. */ - Reboot (soft_reset_e); - /* Function does not return. */ - break; + Reboot ( soft_reset_e ); + /* Function does not return. */ + break; - case 0x37: - /* Execute warm reset. */ + case 0x37: + /* Execute warm reset. */ - Reboot (warm_reset_e); - /* Function deos not return. */ - break; + Reboot ( warm_reset_e ); + /* Function deos not return. */ + break; - case 0x5A: - /* Jump to the patched memory. */ + case 0x5A: + /* Jump to the patched memory. */ - patch_function = (fptr_t)(patch_variables -> destination); + patch_function = ( fptr_t )( patch_variables -> destination ); - CALL_PATCH(patch_function); - /* Called code may or may not return. */ + CALL_PATCH( patch_function ); + /* Called code may or may not return. */ - /* TC_state is selected upon return. */ + /* TC_state is selected upon return. */ - break; - } - ENABLE_INTERRUPT_MASTER; - /* Enable all 'enabled' interrupts. */ + break; + } + ENABLE_INTERRUPT_MASTER; + /* Enable all 'enabled' interrupts. */ } -memory_configuration_t GetMemoryConfiguration(void) COMPACT_DATA REENTRANT_FUNC +memory_configuration_t GetMemoryConfiguration( void ) COMPACT_DATA +REENTRANT_FUNC /* Purpose : Information about selected program memory is acquired */ /* and returned. */ /* Interface : input: memory_mode */ @@ -629,9 +600,9 @@ memory_configuration_t GetMemoryConfiguration(void) COMPACT_DATA REENTRANT_FUNC /* stored in a variable. */ { - return memory_mode; - /*Information about current memory configuration is stored in a global */ - /*variable, which is returned. */ + return memory_mode; + /*Information about current memory configuration is stored in a global */ + /*variable, which is returned. */ } @@ -642,8 +613,8 @@ memory_configuration_t GetMemoryConfiguration(void) COMPACT_DATA REENTRANT_FUNC /* Sensor Unit power control */ void Switch_SU_On ( - sensor_number_t SU_Number, - unsigned char EXTERNAL *execution_result) COMPACT_DATA REENTRANT_FUNC + sensor_number_t SU_Number, + unsigned char EXTERNAL *execution_result ) COMPACT_DATA REENTRANT_FUNC /* Purpose : Given Sensor Unit is switched on. */ /* Interface : Execution result is stored in a variable. */ /* Preconditions : SU_Number should be 1,2,3 or 4 */ @@ -651,9 +622,9 @@ void Switch_SU_On ( /* Algorithm : The respective bit is set high in the SU on/off control */ /* register with XBYTE. */ { - switch (SU_Number) -{ - case SU_1: + switch ( SU_Number ) + { + case SU_1: SU_ctrl_register |= 0x10; *execution_result = SU_1_ON; @@ -661,7 +632,7 @@ void Switch_SU_On ( /* preserves other bits. */ break; - case SU_2: + case SU_2: SU_ctrl_register |= 0x20; *execution_result = SU_2_ON; @@ -669,7 +640,7 @@ void Switch_SU_On ( /* preserves other bits. */ break; - case SU_3: + case SU_3: SU_ctrl_register |= 0x40; *execution_result = SU_3_ON; @@ -677,7 +648,7 @@ void Switch_SU_On ( /* preserves other bits. */ break; - case SU_4: + case SU_4: SU_ctrl_register |= 0x80; *execution_result = SU_4_ON; @@ -685,32 +656,32 @@ void Switch_SU_On ( /* preserves other bits. */ break; - default: - *execution_result = SU_NOT_ACTIVATED; - /*Incorrect SU number has caused an error. */ - break; - } + default: + *execution_result = SU_NOT_ACTIVATED; + /*Incorrect SU number has caused an error. */ + break; + } - SET_DATA_BYTE(SU_CONTROL,SU_ctrl_register); + SET_DATA_BYTE( SU_CONTROL, SU_ctrl_register ); - telemetry_data.SU_status[SU_Number - SU_1] |= SU_ONOFF_MASK; - /* SU_status register is updated to indicate that SU is switched on. */ - /* Other bits in this register are preserved. */ + telemetry_data.SU_status[ SU_Number - SU_1 ] |= SU_ONOFF_MASK; + /* SU_status register is updated to indicate that SU is switched on. */ + /* Other bits in this register are preserved. */ } void Switch_SU_Off ( - sensor_number_t SU_Number, - unsigned char EXTERNAL *execution_result) COMPACT_DATA REENTRANT_FUNC + sensor_number_t SU_Number, + unsigned char EXTERNAL *execution_result ) COMPACT_DATA REENTRANT_FUNC /* Purpose : Given Sensor Unit is switced off. */ /* Interface : Execution result is stored in a variable. */ /* Preconditions : SU_Number should be 1,2,3 or 4. */ /* Postconditions : Given Sensor Unit is switced off. */ /* Algorithm : The respective bit is set low with XBYTE. */ { - switch (SU_Number) -{ - case SU_1: + switch ( SU_Number ) + { + case SU_1: SU_ctrl_register &= ~0x10; *execution_result = SU_1_OFF; @@ -718,7 +689,7 @@ void Switch_SU_Off ( /* preserves other bits. */ break; - case SU_2: + case SU_2: SU_ctrl_register &= ~0x20; *execution_result = SU_2_OFF; @@ -726,7 +697,7 @@ void Switch_SU_Off ( /* preserves other bits. */ break; - case SU_3: + case SU_3: SU_ctrl_register &= ~0x40; *execution_result = SU_3_OFF; @@ -734,7 +705,7 @@ void Switch_SU_Off ( /* preserves other bits. */ break; - case SU_4: + case SU_4: SU_ctrl_register &= ~0x80; *execution_result = SU_4_OFF; @@ -742,21 +713,21 @@ void Switch_SU_Off ( /* preserves other bits. */ break; - default: - *execution_result = SU_NOT_DEACTIVATED; - /*Incorrect SU number has caused an error. */ - break; - } + default: + *execution_result = SU_NOT_DEACTIVATED; + /*Incorrect SU number has caused an error. */ + break; + } - SET_DATA_BYTE(SU_CONTROL,SU_ctrl_register); + SET_DATA_BYTE( SU_CONTROL, SU_ctrl_register ); - telemetry_data.SU_status[SU_Number - SU_1] &= (~SU_ONOFF_MASK); - /* SU_status register is updated to indicate that SU is switched off. */ - /* Other bits in this register are preserved. */ + telemetry_data.SU_status[ SU_Number - SU_1 ] &= ( ~SU_ONOFF_MASK ); + /* SU_status register is updated to indicate that SU is switched off. */ + /* Other bits in this register are preserved. */ } -void EnableAnalogSwitch(sensor_index_t self_test_SU_index) +void EnableAnalogSwitch( sensor_index_t self_test_SU_index ) /* Purpose : The analog switch output is enabled in the */ /* self test channel register. */ /* Interface : inputs - self_test_SU_index */ @@ -768,13 +739,13 @@ void EnableAnalogSwitch(sensor_index_t self_test_SU_index) /* Algorithm : - The respective bit is set in the SU_self_test_channel */ /* variable and written to HW. */ { - SU_self_test_channel |= analog_switch_bit[self_test_SU_index]; - /* The respective bit is set in the variable, preserve other bits. */ + SU_self_test_channel |= analog_switch_bit[ self_test_SU_index ]; + /* The respective bit is set in the variable, preserve other bits. */ - SET_SU_SELF_TEST_CH(SU_self_test_channel); + SET_SU_SELF_TEST_CH( SU_self_test_channel ); } -void DisableAnalogSwitch(sensor_index_t self_test_SU_index) +void DisableAnalogSwitch( sensor_index_t self_test_SU_index ) /* Purpose : The analog switch output is disabled in the */ /* self test channel register. */ /* Interface : inputs - self_test_SU_index */ @@ -786,13 +757,13 @@ void DisableAnalogSwitch(sensor_index_t self_test_SU_index) /* Algorithm : - The respective bit is reset in the SU_self_test_channel*/ /* variable and written to HW. */ { - SU_self_test_channel &= ~analog_switch_bit[self_test_SU_index]; - /* The respective bit is set in the variable, preserve other bits. */ + SU_self_test_channel &= ~analog_switch_bit[ self_test_SU_index ]; + /* The respective bit is set in the variable, preserve other bits. */ - SET_SU_SELF_TEST_CH(SU_self_test_channel); + SET_SU_SELF_TEST_CH( SU_self_test_channel ); } -void SelectSelfTestChannel(unsigned char channel) +void SelectSelfTestChannel( unsigned char channel ) /* Purpose : A self test channel is selected in the */ /* self test channel register. */ /* Interface : inputs - channel */ @@ -804,47 +775,47 @@ void SelectSelfTestChannel(unsigned char channel) /* Algorithm : - The respective bit is set in the self test channel */ /* register and written to HW. */ { - unsigned char EXTERNAL channel_selector_value[NUM_CH]; - /* This array stores the selector bit states related to a given channel. */ + unsigned char EXTERNAL channel_selector_value[ NUM_CH ]; + /* This array stores the selector bit states related to a given channel. */ - channel_selector_value[PLASMA_1_PLUS] = 0x00; - channel_selector_value[PLASMA_1_MINUS] = 0x01; - channel_selector_value[PZT_1] = 0x02; - channel_selector_value[PZT_2] = 0x03; - channel_selector_value[PLASMA_2_PLUS] = 0x04; + channel_selector_value[ PLASMA_1_PLUS ] = 0x00; + channel_selector_value[ PLASMA_1_MINUS ] = 0x01; + channel_selector_value[ PZT_1 ] = 0x02; + channel_selector_value[ PZT_2 ] = 0x03; + channel_selector_value[ PLASMA_2_PLUS ] = 0x04; - SU_self_test_channel = - (SU_self_test_channel & 0xF8) | channel_selector_value[channel]; - /* Set chosen bits preserve others. */ + SU_self_test_channel = + ( SU_self_test_channel & 0xF8 ) | channel_selector_value[ channel ]; + /* Set chosen bits preserve others. */ - SET_SU_SELF_TEST_CH(SU_self_test_channel); + SET_SU_SELF_TEST_CH( SU_self_test_channel ); } -void ReadDelayCounters (delays_t EXTERNAL *delay) +void ReadDelayCounters ( delays_t EXTERNAL *delay ) /* Purpose : Read delay counters. */ /* Interface : Results are stored into a given struct. */ /* Preconditions : */ /* Postconditions : Counters are read. */ /* Algorithm : MSB and LSB are combined to form an 16 bit int. */ { - unsigned char msb, lsb; + unsigned char msb, lsb; - msb = GET_MSB_COUNTER & 0x0F; - /* Correct set of four bits are selected in the MSB. */ - lsb = GET_LSB1_COUNTER; + msb = GET_MSB_COUNTER & 0x0F; + /* Correct set of four bits are selected in the MSB. */ + lsb = GET_LSB1_COUNTER; - delay -> FromPlasma1Plus = (msb << 8) | lsb; + delay -> FromPlasma1Plus = ( msb << 8 ) | lsb; - msb = GET_MSB_COUNTER >> 4; - /* Correct set of four bits are selected in the MSB. */ - lsb = GET_LSB2_COUNTER; + msb = GET_MSB_COUNTER >> 4; + /* Correct set of four bits are selected in the MSB. */ + lsb = GET_LSB2_COUNTER; - delay -> FromPlasma1Minus = (msb << 8) | lsb; + delay -> FromPlasma1Minus = ( msb << 8 ) | lsb; } -unsigned char ReadRiseTimeCounter(void) COMPACT_DATA REENTRANT_FUNC +unsigned char ReadRiseTimeCounter( void ) COMPACT_DATA REENTRANT_FUNC /* Purpose : Plasma1+ rise time counter is read from the specified */ /* address. */ /* Interface : Result is returned as an unsigned char. */ @@ -853,11 +824,11 @@ unsigned char ReadRiseTimeCounter(void) COMPACT_DATA REENTRANT_FUNC /* Algorithm : Counter is read with XBYTE. */ { - return GET_DATA_BYTE(RISE_TIME_COUNTER); + return GET_DATA_BYTE( RISE_TIME_COUNTER ); } -void ResetDelayCounters(void) COMPACT_DATA REENTRANT_FUNC +void ResetDelayCounters( void ) COMPACT_DATA REENTRANT_FUNC /* Purpose : Delay counters are reset. */ /* Interface : Port 1 is used. */ /* Preconditions : Resetting takes place after acquisition. */ @@ -866,16 +837,16 @@ void ResetDelayCounters(void) COMPACT_DATA REENTRANT_FUNC /* first and then high. */ { - SET_COUNTER_RESET(LOW); - /* Counters are reset by setting CNTR_RS bit to low in port 1 */ + SET_COUNTER_RESET( LOW ); + /* Counters are reset by setting CNTR_RS bit to low in port 1 */ - SET_COUNTER_RESET(HIGH); - /* The bit is set back to high */ + SET_COUNTER_RESET( HIGH ); + /* The bit is set back to high */ } -void SetTriggerLevel(trigger_set_t EXTERNAL *setting) - COMPACT_DATA REENTRANT_FUNC +void SetTriggerLevel( trigger_set_t EXTERNAL *setting ) +COMPACT_DATA REENTRANT_FUNC /* Purpose : Given trigger level is set. */ /* Interface : Execution result is stored in a variable. */ /* Preconditions : SU_Number should be 1-4 and channel number 1-5 levels */ @@ -895,84 +866,75 @@ void SetTriggerLevel(trigger_set_t EXTERNAL *setting) { - setting -> execution_result = TRIGGER_SET_OK; + setting -> execution_result = TRIGGER_SET_OK; - switch (setting -> sensor_unit) - /*sensor unit is selected*/ - { - case SU_1: - { - setting -> base = SU_1_TRIGGER_BASE; - break; + switch ( setting -> sensor_unit ) + /*sensor unit is selected*/ + { + case SU_1: { + setting -> base = SU_1_TRIGGER_BASE; + break; } - case SU_2: - { - setting -> base = SU_2_TRIGGER_BASE; - break; + case SU_2: { + setting -> base = SU_2_TRIGGER_BASE; + break; } - case SU_3: - { - setting -> base = SU_3_TRIGGER_BASE; - break; + case SU_3: { + setting -> base = SU_3_TRIGGER_BASE; + break; } - case SU_4: - { - setting -> base = SU_4_TRIGGER_BASE; - break; + case SU_4: { + setting -> base = SU_4_TRIGGER_BASE; + break; } - default: - { - setting -> execution_result = SU_NOT_SELECTED; - /*Sensor Unit number is invalid. */ - break; + default: { + setting -> execution_result = SU_NOT_SELECTED; + /*Sensor Unit number is invalid. */ + break; } - } + } - if (setting -> execution_result != SU_NOT_SELECTED) - { - switch (setting -> channel) + if ( setting -> execution_result != SU_NOT_SELECTED ) + { + switch ( setting -> channel ) /*channel is selected*/ - { - case PLASMA_1_PLUS: - { - SET_DATA_BYTE(setting -> base + 0, setting -> level); - break; - } - case PLASMA_1_MINUS: - { - SET_DATA_BYTE(setting -> base + 1, setting -> level); - break; - } - case PZT_1_2: - { - SET_DATA_BYTE(setting -> base + 2, setting -> level); - break; - } - default: - { - setting -> execution_result = CHANNEL_NOT_SELECTED; - /*Given channel parameter is invalid. */ - break; - } - } - } + { + case PLASMA_1_PLUS: { + SET_DATA_BYTE( setting -> base + 0, setting -> level ); + break; + } + case PLASMA_1_MINUS: { + SET_DATA_BYTE( setting -> base + 1, setting -> level ); + break; + } + case PZT_1_2: { + SET_DATA_BYTE( setting -> base + 2, setting -> level ); + break; + } + default: { + setting -> execution_result = CHANNEL_NOT_SELECTED; + /*Given channel parameter is invalid. */ + break; + } + } + } } -void SetTestPulseLevel(unsigned char level) COMPACT_DATA REENTRANT_FUNC +void SetTestPulseLevel( unsigned char level ) COMPACT_DATA REENTRANT_FUNC /* Purpose : Testpulse level is set. */ /* Interface : input: - Desired test pulse level. */ /* Preconditions : none. */ /* Postconditions : Level is set. */ /* Algorithm : Level is written into memory-mapped port address. */ { - SET_TEST_PULSE_LEVEL(level); + SET_TEST_PULSE_LEVEL( level ); } -void GetVoltageStatus(voltage_status_t EXTERNAL *v_status) - COMPACT_DATA REENTRANT_FUNC +void GetVoltageStatus( voltage_status_t EXTERNAL *v_status ) +COMPACT_DATA REENTRANT_FUNC /* Purpose : Voltage status data is gained. */ /* Interface : Port 1 is used. */ /* Preconditions : */ @@ -980,11 +942,11 @@ void GetVoltageStatus(voltage_status_t EXTERNAL *v_status) /* Algorithm : HV status register is read into a struct with XBYTE. */ /* V_DOWN bit is read from port 1. */ { - v_status -> V_down_bit = V_DOWN; - v_status -> HV_status = GET_DATA_BYTE(HV_STATUS); + v_status -> V_down_bit = V_DOWN; + v_status -> HV_status = GET_DATA_BYTE( HV_STATUS ); } -void ResetPeakDetector(sensor_number_t unit) +void ResetPeakDetector( sensor_number_t unit ) /* Purpose : Peak detector is reset. */ /* Interface : -'Sensor unit on/off control register' is used */ /* Preconditions : Resetting takes place after acquisition. */ @@ -1003,20 +965,20 @@ void ResetPeakDetector(sensor_number_t unit) { - DISABLE_INTERRUPT_MASTER; - /* Disable all interrupts */ + DISABLE_INTERRUPT_MASTER; + /* Disable all interrupts */ - SignalPeakDetectorReset( - SU_ctrl_register & ~(1 << (unit - SU_1)), - SU_ctrl_register); - /* Generate reset pulse. */ + SignalPeakDetectorReset( + SU_ctrl_register & ~( 1 << ( unit - SU_1 ) ), + SU_ctrl_register ); + /* Generate reset pulse. */ - ENABLE_INTERRUPT_MASTER; + ENABLE_INTERRUPT_MASTER; } void SelectStartSwitchLevel( - unsigned char test_channel, - sensor_index_t self_test_SU_index) + unsigned char test_channel, + sensor_index_t self_test_SU_index ) /* Purpose : Select analog switch output level. */ /* Interface : inputs - self_test_SU_index, test_channel */ /* outputs - none */ @@ -1028,24 +990,22 @@ void SelectStartSwitchLevel( /* Algorithm : - Wanted level is selected. */ { - if (test_channel == PLASMA_1_PLUS || test_channel == PLASMA_2_PLUS) - { - /* Channel triggered by falling edge. */ - EnableAnalogSwitch(self_test_SU_index); - /* Set analog switch output level for the given channel. */ - } - - else - { - /* Rest of the channels triggered by rising edge. */ - DisableAnalogSwitch(self_test_SU_index); - /* Set analog switch output level for the given channel. */ - } + if ( test_channel == PLASMA_1_PLUS || test_channel == PLASMA_2_PLUS ) { + /* Channel triggered by falling edge. */ + EnableAnalogSwitch( self_test_SU_index ); + /* Set analog switch output level for the given channel. */ + } + + else { + /* Rest of the channels triggered by rising edge. */ + DisableAnalogSwitch( self_test_SU_index ); + /* Set analog switch output level for the given channel. */ + } } void SelectTriggerSwitchLevel( - unsigned char test_channel, - sensor_index_t self_test_SU_index) + unsigned char test_channel, + sensor_index_t self_test_SU_index ) /* Purpose : Select analog switch output level. */ /* Interface : inputs - self_test_SU_index, test_channel */ /* outputs - none */ @@ -1058,33 +1018,31 @@ void SelectTriggerSwitchLevel( /* - SW triggering is needed with channel PLASMA_2_PLUS. */ { - if (test_channel == PLASMA_1_PLUS) - { - /* Channel triggered by falling edge. */ + if ( test_channel == PLASMA_1_PLUS ) { + /* Channel triggered by falling edge. */ - DisableAnalogSwitch(self_test_SU_index); - /* Set analog switch output level for the given channel. */ - } + DisableAnalogSwitch( self_test_SU_index ); + /* Set analog switch output level for the given channel. */ + } - else if (test_channel == PLASMA_2_PLUS) - { - /* Channel triggered by falling edge. SW trigger needed. */ + else + if ( test_channel == PLASMA_2_PLUS ) { + /* Channel triggered by falling edge. SW trigger needed. */ - DisableAnalogSwitch(self_test_SU_index); - /* Set analog switch output level for the given channel. */ + DisableAnalogSwitch( self_test_SU_index ); + /* Set analog switch output level for the given channel. */ - SET_SU_SELF_TEST_CH(SU_self_test_channel); + SET_SU_SELF_TEST_CH( SU_self_test_channel ); - SET_HIT_TRIGGER_ISR_FLAG; - /* SW trigger required. */ - } + SET_HIT_TRIGGER_ISR_FLAG; + /* SW trigger required. */ + } - else - { - /* Rest of the channels triggered by rising edge. */ + else { + /* Rest of the channels triggered by rising edge. */ - EnableAnalogSwitch(self_test_SU_index); - /* Set analog switch output level for the given channel. */ - } + EnableAnalogSwitch( self_test_SU_index ); + /* Set analog switch output level for the given channel. */ + } } diff --git a/bench/parallel/DEBIE/code/isr_ctrl.h b/bench/parallel/DEBIE/code/isr_ctrl.h index 81f2f8748ec823e3dcdf0db5b22fc393572fc6c5..c359bbec2b5e438cd13580218a7a94e6daa9b8e6 100644 --- a/bench/parallel/DEBIE/code/isr_ctrl.h +++ b/bench/parallel/DEBIE/code/isr_ctrl.h @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : isr_ctrl.h - * - * Macros and operations to control and handle interrupts. - * - * Based on the SSF DHI file isr_ctrl.h, rev 1.16, Sun Jul 25 15:02:08 1999. - * - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : isr_ctrl.h + + Macros and operations to control and handle interrupts. + + Based on the SSF DHI file isr_ctrl.h, rev 1.16, Sun Jul 25 15:02:08 1999. + + + - * -------------------------------------------------------------------------- +*/ #ifndef ISR_CTRL_H @@ -28,16 +28,17 @@ /* Function prototypes */ -extern void AttachInterrupt(unsigned char ISR_VectorNumber); +extern void AttachInterrupt( unsigned char ISR_VectorNumber ); -extern void EnableInterrupt(unsigned char ISR_VectorNumber); +extern void EnableInterrupt( unsigned char ISR_VectorNumber ); -extern void DisableInterrupt(unsigned char ISR_VectorNumber); +extern void DisableInterrupt( unsigned char ISR_VectorNumber ); -extern signed char SetInterruptMask(unsigned char ISR_MaskNumber); +extern signed char SetInterruptMask( unsigned char ISR_MaskNumber ); -extern signed char ResetInterruptMask(unsigned char ISR_MaskNumber); +extern signed char ResetInterruptMask( unsigned char ISR_MaskNumber ); -extern void WaitInterrupt (unsigned char ISR_VectorNumber, unsigned char timer); +extern void WaitInterrupt ( unsigned char ISR_VectorNumber, + unsigned char timer ); #endif diff --git a/bench/parallel/DEBIE/code/kernobj.h b/bench/parallel/DEBIE/code/kernobj.h index aef45daf5b5264663323091d82e86d70a6386f01..2569bb9fcc4610cf110480f1c12e1dc638bc8bb3 100644 --- a/bench/parallel/DEBIE/code/kernobj.h +++ b/bench/parallel/DEBIE/code/kernobj.h @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : kernobj.h - * - * Definitions for the interface to the real-time kernel. - * - * Based on the SSF file kernobj.h, revision 1.3, Thu Sep 09 16:01:56 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : kernobj.h + + Definitions for the interface to the real-time kernel. + + Based on the SSF file kernobj.h, revision 1.3, Thu Sep 09 16:01:56 1999. + + - * -------------------------------------------------------------------------- +*/ /* Definitions of kernel objects (eg. task and mailbox numbers) */ diff --git a/bench/parallel/DEBIE/code/measure.c b/bench/parallel/DEBIE/code/measure.c index df55622695a89caf20d64ccb4d14da58446ca7d7..45c1b8149da9e85be2c67d7fb7293ef76bb0e8cb 100644 --- a/bench/parallel/DEBIE/code/measure.c +++ b/bench/parallel/DEBIE/code/measure.c @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : measure.c - * - * Event Measurement module. - * - * Based on the SSF file measure.c, rev 1.51, Wed Oct 13 19:48:50 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : measure.c + + Event Measurement module. + + Based on the SSF file measure.c, rev 1.51, Wed Oct 13 19:48:50 1999. + + - * -------------------------------------------------------------------------- +*/ #include "keyword.h" #include "kernobj.h" @@ -48,12 +48,12 @@ unsigned char EXTERNAL test_channel; SU_test_level_t EXTERNAL test_level; /* Test level being used in SU Self Test. */ -SU_state_t EXTERNAL SU_state[NUM_SU] = {off_e, off_e, off_e, off_e}; +SU_state_t EXTERNAL SU_state[ NUM_SU ] = {off_e, off_e, off_e, off_e}; /*This array contains information about the state of a given Sensor Unit. */ /*Default value is 'off'. */ -EXTERNAL unsigned short int ADC_result[NUM_CH]; +EXTERNAL unsigned short int ADC_result[ NUM_CH ]; /*Used to temporarily store AD conversion results. */ EXTERNAL unsigned char confirm_hit_result; @@ -63,10 +63,10 @@ uint_least8_t EXTERNAL hit_budget = HIT_BUDGET_DEFAULT; uint_least8_t EXTERNAL hit_budget_left = HIT_BUDGET_DEFAULT; #ifdef REG52_DEFINED - #pragma REGISTERBANK(1) +#pragma REGISTERBANK(1) #endif -void _Pragma("entrypoint") InitHitTriggerTask (void) +void _Pragma( "entrypoint" ) InitHitTriggerTask ( void ) /* Purpose : Initialize the global state of Hit Trigger handling */ /* Interface : inputs - none */ @@ -78,13 +78,13 @@ void _Pragma("entrypoint") InitHitTriggerTask (void) /* - enable Hit Trigger interrupt */ { - AttachInterrupt(HIT_TRIGGER_ISR_SOURCE); - /*Now 'HitTriggerTask()' will listen for Hit trigger interrupt. */ + AttachInterrupt( HIT_TRIGGER_ISR_SOURCE ); + /*Now 'HitTriggerTask()' will listen for Hit trigger interrupt. */ - ENABLE_HIT_TRIGGER; + ENABLE_HIT_TRIGGER; } -void _Pragma("entrypoint") HandleHitTrigger (void) +void _Pragma( "entrypoint" ) HandleHitTrigger ( void ) /* Purpose : Wait for and handle one Hit Trigger interrupt */ /* Interface : inputs - Five analog outputs from Peak Detectors */ @@ -100,200 +100,188 @@ void _Pragma("entrypoint") HandleHitTrigger (void) /* task mailbox. */ { - unsigned char EXTERNAL initial_delay; - /* Delay before the first AD channel is selected in */ - /* ShortDelay() units. */ + unsigned char EXTERNAL initial_delay; + /* Delay before the first AD channel is selected in */ + /* ShortDelay() units. */ - unsigned char EXTERNAL delay_limit; - /* Delay between channel selection and start of conversion in */ - /* ShortDelay() units. */ + unsigned char EXTERNAL delay_limit; + /* Delay between channel selection and start of conversion in */ + /* ShortDelay() units. */ - INDIRECT_INTERNAL sensor_number_t trigger; - /*Used to store Sensor Unit number, which has beem hit. */ + INDIRECT_INTERNAL sensor_number_t trigger; + /*Used to store Sensor Unit number, which has beem hit. */ - INDIRECT_INTERNAL channel_t CH_base; - /* First ADC channel number for the relevant Sensor Unit. */ + INDIRECT_INTERNAL channel_t CH_base; + /* First ADC channel number for the relevant Sensor Unit. */ - DIRECT_INTERNAL uint_least8_t i; - /* Used in a for -loop, which reads the peak sensor outputs. */ + DIRECT_INTERNAL uint_least8_t i; + /* Used in a for -loop, which reads the peak sensor outputs. */ - DIRECT_INTERNAL unsigned char lsb, msb; - /*These variables are used to combine two bytes into one word. */ + DIRECT_INTERNAL unsigned char lsb, msb; + /*These variables are used to combine two bytes into one word. */ - DIRECT_INTERNAL uint_least8_t conversion_try_count; - /*This variable stores the number of failed conversion starts. */ + DIRECT_INTERNAL uint_least8_t conversion_try_count; + /*This variable stores the number of failed conversion starts. */ - initial_delay = (uint_least8_t) (DELAY_LIMIT(100)); - /* Initial delay before converting first channel. */ + initial_delay = ( uint_least8_t ) ( DELAY_LIMIT( 100 ) ); + /* Initial delay before converting first channel. */ - delay_limit = (uint_least8_t) (DELAY_LIMIT(100)); - /* The signal settling delay is 100 microseconds. */ + delay_limit = ( uint_least8_t ) ( DELAY_LIMIT( 100 ) ); + /* The signal settling delay is 100 microseconds. */ - WaitInterrupt (HIT_TRIGGER_ISR_SOURCE, 255); - /* Interrupt arrival is awaited. */ - /* Execution result is not handled. */ + WaitInterrupt ( HIT_TRIGGER_ISR_SOURCE, 255 ); + /* Interrupt arrival is awaited. */ + /* Execution result is not handled. */ - CLEAR_HIT_TRIGGER_ISR_FLAG; - /* Acknowledge the interrupt. */ - /* This bit must be cleared by software. */ + CLEAR_HIT_TRIGGER_ISR_FLAG; + /* Acknowledge the interrupt. */ + /* This bit must be cleared by software. */ - if (hit_budget_left == 0) - { - /* Too many hit triggers during one Health Monitoring period. */ + if ( hit_budget_left == 0 ) { + /* Too many hit triggers during one Health Monitoring period. */ - if (telemetry_data.hit_budget_exceedings < 255) - { - telemetry_data.hit_budget_exceedings++; - } + if ( telemetry_data.hit_budget_exceedings < 255 ) + telemetry_data.hit_budget_exceedings++; - DISABLE_HIT_TRIGGER; - /* No more hit triggers will be handled before next Health */ - /* Monitoring period starts (or DEBIE is reset). */ - } - else - { - /* Some hit budget left; this hit will be handled. */ + DISABLE_HIT_TRIGGER; + /* No more hit triggers will be handled before next Health */ + /* Monitoring period starts (or DEBIE is reset). */ + } else { + /* Some hit budget left; this hit will be handled. */ - hit_budget_left--; + hit_budget_left--; - confirm_hit_result = 1; - /*This variable indicates a hit with a high value. */ + confirm_hit_result = 1; + /*This variable indicates a hit with a high value. */ - ADC_channel_register &= BP_DOWN; - UPDATE_ADC_CHANNEL_REG; - /*AD converter is set to unipolar mode */ + ADC_channel_register &= BP_DOWN; + UPDATE_ADC_CHANNEL_REG; + /*AD converter is set to unipolar mode */ - START_CONVERSION; - /*Dummy cycle to set unipolar mode. */ + START_CONVERSION; + /*Dummy cycle to set unipolar mode. */ - conversion_try_count = 0; + conversion_try_count = 0; - _Pragma("loopbound min 0 max 25") - while ( conversion_try_count < ADC_MAX_TRIES - && END_OF_ADC != CONVERSION_ACTIVE ) - { - conversion_try_count++; - /*Conversion try counter is increased. If this counter exeeds the*/ - /*maximum number of conversion start tries the conversion will be*/ - /*dropped. */ - } + _Pragma( "loopbound min 0 max 25" ) + while ( conversion_try_count < ADC_MAX_TRIES + && END_OF_ADC != CONVERSION_ACTIVE ) { + conversion_try_count++; + /*Conversion try counter is increased. If this counter exeeds the*/ + /*maximum number of conversion start tries the conversion will be*/ + /*dropped. */ + } + + if ( self_test_SU_number != NO_SU ) { + /* Some Sensor Unit is being Self Tested. */ + trigger = self_test_SU_number; - if (self_test_SU_number != NO_SU) - { - /* Some Sensor Unit is being Self Tested. */ - trigger = self_test_SU_number; - - if (SU_state[self_test_SU_number - SU1] == self_test_e) - { - /* Some Sensor Unit is being Self Tested but this is */ - /* not the right self test pulse. */ - - trigger |= HIT_SELF_TEST_RESET ; - /* Self test pulse is incorrect and an indication */ - /* of this is stored in to 'trigger' variable. */ - /* The AcquisitionTask will adjust its operation */ - /* based on this indication result. */ - } - - else if (SU_state[self_test_SU_number - SU1] == self_test_trigger_e) - { - /* Some Sensor Unit is being Self Tested and this is the correct. */ - /* self test pulse. */ - - SU_state[self_test_SU_number - SU1] = self_test_e; - /* Indication of a succesfully received self test pulse */ - } + if ( SU_state[ self_test_SU_number - SU1 ] == self_test_e ) { + /* Some Sensor Unit is being Self Tested but this is */ + /* not the right self test pulse. */ + + trigger |= HIT_SELF_TEST_RESET ; + /* Self test pulse is incorrect and an indication */ + /* of this is stored in to 'trigger' variable. */ + /* The AcquisitionTask will adjust its operation */ + /* based on this indication result. */ } else - { - /* There is no Sensor Unit Self Test in progress. */ - - trigger = ((int)TRIGGER_SOURCE_0 - + 2 - * (int)TRIGGER_SOURCE_1) - + SU1; - /* Sensor Unit which caused the hit trigger is resolved. */ - } + if ( SU_state[ self_test_SU_number - SU1 ] == self_test_trigger_e ) { + /* Some Sensor Unit is being Self Tested and this is the correct. */ + /* self test pulse. */ - CH_base = - ((int)(trigger - SU_1)&2) * 12 + ((int)(trigger - SU_1)&1) * 8; - /* First channel address for the given SU is calculated. */ + SU_state[ self_test_SU_number - SU1 ] = self_test_e; + /* Indication of a succesfully received self test pulse */ + } + } - ShortDelay(initial_delay); - /* Delay before converting first channel. */ + else { + /* There is no Sensor Unit Self Test in progress. */ - ADC_channel_register = - (ADC_channel_register & 0xC0) | CH_base; - UPDATE_ADC_CHANNEL_REG; - /* First channel is selected. */ + trigger = ( ( int )TRIGGER_SOURCE_0 + + 2 + * ( int )TRIGGER_SOURCE_1 ) + + SU1; + /* Sensor Unit which caused the hit trigger is resolved. */ + } - ShortDelay(delay_limit); - /* Delay of 100 microseconds (+ function call overhead). */ + CH_base = + ( ( int )( trigger - SU_1 ) & 2 ) * 12 + ( ( int )( trigger - SU_1 ) & 1 ) * 8; + /* First channel address for the given SU is calculated. */ + ShortDelay( initial_delay ); + /* Delay before converting first channel. */ - _Pragma("loopbound min 5 max 5") - for (i = 0; i < NUM_CH; i++) - { + ADC_channel_register = + ( ADC_channel_register & 0xC0 ) | CH_base; + UPDATE_ADC_CHANNEL_REG; + /* First channel is selected. */ - ShortDelay(delay_limit); - /* Delay of 100 microseconds (+ function call overhead). */ + ShortDelay( delay_limit ); + /* Delay of 100 microseconds (+ function call overhead). */ - START_CONVERSION; - /* AD conversion for the selected channel is started. */ - ADC_channel_register = - (ADC_channel_register & 0xC0) | (CH_base + i + 1); - UPDATE_ADC_CHANNEL_REG; - /* Next channel is selected. */ + _Pragma( "loopbound min 5 max 5" ) + for ( i = 0; i < NUM_CH; i++ ) { - conversion_try_count = 0; + ShortDelay( delay_limit ); + /* Delay of 100 microseconds (+ function call overhead). */ - _Pragma("loopbound min 0 max 25") - while ( conversion_try_count < ADC_MAX_TRIES - && END_OF_ADC != CONVERSION_ACTIVE ) - { - conversion_try_count++; - /*Conversion try counter is increased. If this counter exeeds */ - /*the maximum number of conversion start tries the conversion */ - /*will be dropped. */ - } + START_CONVERSION; + /* AD conversion for the selected channel is started. */ - if (conversion_try_count < ADC_MAX_TRIES) - { - msb = GET_RESULT; - /*Most significant byte is read from ADC result address. */ + ADC_channel_register = + ( ADC_channel_register & 0xC0 ) | ( CH_base + i + 1 ); + UPDATE_ADC_CHANNEL_REG; + /* Next channel is selected. */ + + conversion_try_count = 0; + + _Pragma( "loopbound min 0 max 25" ) + while ( conversion_try_count < ADC_MAX_TRIES + && END_OF_ADC != CONVERSION_ACTIVE ) { + conversion_try_count++; + /*Conversion try counter is increased. If this counter exeeds */ + /*the maximum number of conversion start tries the conversion */ + /*will be dropped. */ + } - lsb = GET_RESULT; - /*Least significant byte is read from ADC result address. */ + if ( conversion_try_count < ADC_MAX_TRIES ) { + msb = GET_RESULT; + /*Most significant byte is read from ADC result address. */ - ADC_result[i] = - ((unsigned int)msb << 8) | (unsigned int)lsb; - /*Msb and lsb are combined into one word. */ - } + lsb = GET_RESULT; + /*Least significant byte is read from ADC result address. */ - else - { - trigger |= HIT_ADC_ERROR; - /*Conversion has failed and an indication of this is stored in*/ - /*to 'trigger' variable by setting the Most Significant Bit */ - /*(MSB) high. The AcquisitionTask will adjust its operation */ - /*based on this indication result. */ + ADC_result[ i ] = + ( ( unsigned int )msb << 8 ) | ( unsigned int )lsb; + /*Msb and lsb are combined into one word. */ + } - ADC_result[i] = 0; - } + else { + trigger |= HIT_ADC_ERROR; + /*Conversion has failed and an indication of this is stored in*/ + /*to 'trigger' variable by setting the Most Significant Bit */ + /*(MSB) high. The AcquisitionTask will adjust its operation */ + /*based on this indication result. */ + ADC_result[ i ] = 0; } - SendTaskMail(ACQUISITION_MAILBOX,trigger, 0); - /*The number of the Sensor unit that has caused the hit trigger */ - /*interrupt is sent to a mailbox for the acquisition task. */ + } - } /* end if (hit budget left) */ + SendTaskMail( ACQUISITION_MAILBOX, trigger, 0 ); + /*The number of the Sensor unit that has caused the hit trigger */ + /*interrupt is sent to a mailbox for the acquisition task. */ + + } /* end if (hit budget left) */ } -void HitTriggerTask(void) TASK(HIT_TRIGGER_ISR_TASK) PRIORITY(HIT_TRIGGER_PR) +void HitTriggerTask( void ) TASK( HIT_TRIGGER_ISR_TASK ) PRIORITY( + HIT_TRIGGER_PR ) /* Purpose : Handles the Hit Trigger interrupts */ /* Interface : inputs - Five analog outputs from Peak Detectors */ @@ -307,18 +295,16 @@ void HitTriggerTask(void) TASK(HIT_TRIGGER_ISR_TASK) PRIORITY(HIT_TRIGGER_PR) /* - HandleHitTrigger */ { - InitHitTriggerTask (); + InitHitTriggerTask (); - _Pragma("loopbound min 0 max 0") - while(1) - { - HandleHitTrigger (); - } + _Pragma( "loopbound min 0 max 0" ) + while ( 1 ) + HandleHitTrigger (); } #ifdef REG52_DEFINED - #pragma REGISTERBANK(0) +#pragma REGISTERBANK(0) #endif @@ -331,7 +317,7 @@ static EXTERNAL uint16_t trigger_unit; /* Number of the triggering Sensor Unit. */ -void _Pragma("entrypoint") InitAcquisitionTask (void) +void _Pragma( "entrypoint" ) InitAcquisitionTask ( void ) /* Purpose : Initialize the global state of the Acquisition task. */ /* Interface : inputs - none */ /* outputs - ACQ_mail static fields. */ @@ -339,14 +325,14 @@ void _Pragma("entrypoint") InitAcquisitionTask (void) /* Postconditions : AcqusitionTask is operational. */ /* Algorithm : - initialize task variables */ { - /* ACQ_mail struct fields are set. */ - ACQ_mail.mailbox_number = ACQUISITION_MAILBOX; - ACQ_mail.message = &trigger_unit; - ACQ_mail.timeout = 0; + /* ACQ_mail struct fields are set. */ + ACQ_mail.mailbox_number = ACQUISITION_MAILBOX; + ACQ_mail.message = &trigger_unit; + ACQ_mail.timeout = 0; } -void _Pragma("entrypoint") HandleAcquisition (void) +void _Pragma( "entrypoint" ) HandleAcquisition ( void ) /* Purpose : Acquires the data for one hit event. */ /* Interface : inputs - Acquisition task mailbox */ @@ -371,155 +357,149 @@ void _Pragma("entrypoint") HandleAcquisition (void) /* - call RecordEvent() */ { - EXTERNAL unsigned char * EXTERNAL checksum_pointer; - unsigned char EXTERNAL event_checksum; - uint_least8_t EXTERNAL i; - /* These variables are used when checksum is computed for a given event */ - /* before storing it to Science data area. */ + EXTERNAL unsigned char *EXTERNAL checksum_pointer; + unsigned char EXTERNAL event_checksum; + uint_least8_t EXTERNAL i; + /* These variables are used when checksum is computed for a given event */ + /* before storing it to Science data area. */ - event_record_t EXTERNAL *event; - /* Pointer to the new event record. */ + event_record_t EXTERNAL *event; + /* Pointer to the new event record. */ - EXTERNAL delays_t delay_counters; - /*This is a struct which stores the Delay Counter time data. */ + EXTERNAL delays_t delay_counters; + /*This is a struct which stores the Delay Counter time data. */ - DIRECT_INTERNAL signed int time_delay; - /*This variable is used to store the delay from plasma 1+ to plasma 1-. */ + DIRECT_INTERNAL signed int time_delay; + /*This variable is used to store the delay from plasma 1+ to plasma 1-. */ - SU_state_t EXTERNAL state = off_e; - /* Used to store sensor unit state. */ + SU_state_t EXTERNAL state = off_e; + /* Used to store sensor unit state. */ - WaitMail(&ACQ_mail); + WaitMail( &ACQ_mail ); - if (trigger_unit & HIT_ADC_ERROR) - { - /* There has been an error in AD conversion */ - /* in Hit trigger processing. */ - SetModeStatusError(ADC_ERROR); - } + if ( trigger_unit & HIT_ADC_ERROR ) { + /* There has been an error in AD conversion */ + /* in Hit trigger processing. */ + SetModeStatusError( ADC_ERROR ); + } - if(trigger_unit == SU_1 || trigger_unit == SU_2 || - trigger_unit == SU_3 || trigger_unit == SU_4) + if ( trigger_unit == SU_1 || trigger_unit == SU_2 || + trigger_unit == SU_3 || trigger_unit == SU_4 ) - { - state = SU_state[trigger_unit - SU_1]; + { + state = SU_state[ trigger_unit - SU_1 ]; - if ((state == self_test_e || state == acquisition_e) - && (EVENT_FLAG == ACCEPT_EVENT)) - { - event = GetFreeRecord(); - /* Get pointer to the new event record. */ + if ( ( state == self_test_e || state == acquisition_e ) + && ( EVENT_FLAG == ACCEPT_EVENT ) ) { + event = GetFreeRecord(); + /* Get pointer to the new event record. */ - /*Number of the Sensor Unit, which has been hit, is stored into */ - /*Event Record. */ - event -> SU_number = (unsigned char)(trigger_unit & 0xFF); + /*Number of the Sensor Unit, which has been hit, is stored into */ + /*Event Record. */ + event -> SU_number = ( unsigned char )( trigger_unit & 0xFF ); - /*Contents of a temporary buffer is stored into Event Record. */ - COPY (event -> plasma_1_plus ,ADC_result[0]); - COPY (event -> plasma_1_minus,ADC_result[1]); - COPY (event -> piezo_1 ,ADC_result[2]); - COPY (event -> piezo_2 ,ADC_result[3]); - COPY (event -> plasma_2_plus ,ADC_result[4]); + /*Contents of a temporary buffer is stored into Event Record. */ + COPY ( event -> plasma_1_plus, ADC_result[ 0 ] ); + COPY ( event -> plasma_1_minus, ADC_result[ 1 ] ); + COPY ( event -> piezo_1, ADC_result[ 2 ] ); + COPY ( event -> piezo_2, ADC_result[ 3 ] ); + COPY ( event -> plasma_2_plus, ADC_result[ 4 ] ); - /*Rise time counter is read in to Event Record. */ - event -> rise_time = ReadRiseTimeCounter(); + /*Rise time counter is read in to Event Record. */ + event -> rise_time = ReadRiseTimeCounter(); - /*Delay counters are read in to a struct. */ - ReadDelayCounters(&delay_counters); + /*Delay counters are read in to a struct. */ + ReadDelayCounters( &delay_counters ); - /*Delay from plasma 1+ to PZT 1/2 is stored into Event Record. */ - COPY (event -> delay_2,delay_counters.FromPlasma1Plus); + /*Delay from plasma 1+ to PZT 1/2 is stored into Event Record. */ + COPY ( event -> delay_2, delay_counters.FromPlasma1Plus ); - /*Delay from plasma 1- to PZT 1/2 is stored into Event Record. */ - COPY (event -> delay_3,delay_counters.FromPlasma1Minus); + /*Delay from plasma 1- to PZT 1/2 is stored into Event Record. */ + COPY ( event -> delay_3, delay_counters.FromPlasma1Minus ); - /*Delay from plasma 1+ to plasma 1- is calculated and stored into*/ - /*Event Record. */ + /*Delay from plasma 1+ to plasma 1- is calculated and stored into*/ + /*Event Record. */ - time_delay = delay_counters.FromPlasma1Plus + time_delay = delay_counters.FromPlasma1Plus - delay_counters.FromPlasma1Minus; - if(time_delay > 127) - { - event -> delay_1 = 127; - /*If the delay from plasma 1+ to plasma 1- is positive and */ - /*doesn't fit into signed char 'event_record.delay_1', then */ - /*the largest value for the signed char is stored instead. */ - } - - else if(time_delay < -128) - { - event -> delay_1 = -128; - /*If the delay from plasma 1+ to plasma 1- is negative and */ - /*doesn't fit into signed char 'event_record.delay_1', then */ - /*the smallest value for the signed char is stored instead. */ - } - - else - { - event -> delay_1 = time_delay; - /*Delay from plasma 1+ to plasma 1- is calculated and stored */ - /*into Event Record. */ - } - - /*Measurement time is stored into Event Record. */ - COPY (event -> hit_time, internal_time); - - /*Unit temperatures are stored into Event Record. */ - - event -> SU_temperature_1 = - telemetry_data.SU_temperature[trigger_unit - SU1][0]; - - event -> SU_temperature_2 = - telemetry_data.SU_temperature[trigger_unit - SU1][1]; - - ClassifyEvent(event); - /* New event is classified. */ - - checksum_pointer = (EXTERNAL unsigned char *)event; - event_checksum = 0; - - _Pragma("loopbound min 27 max 27") - for (i = 1; i < sizeof(event_record_t); i++) - { - event_checksum ^= *checksum_pointer; - checksum_pointer++; - } - - event -> checksum = event_checksum; - - /* After the event record is filled up, it is stored into science*/ - /* data. */ - RecordEvent(); + if ( time_delay > 127 ) { + event -> delay_1 = 127; + /*If the delay from plasma 1+ to plasma 1- is positive and */ + /*doesn't fit into signed char 'event_record.delay_1', then */ + /*the largest value for the signed char is stored instead. */ } - } - else - { - /*The received mail contained an invalid Sensor unit number. */ - } + else + if ( time_delay < -128 ) { + event -> delay_1 = -128; + /*If the delay from plasma 1+ to plasma 1- is negative and */ + /*doesn't fit into signed char 'event_record.delay_1', then */ + /*the smallest value for the signed char is stored instead. */ + } + + else { + event -> delay_1 = time_delay; + /*Delay from plasma 1+ to plasma 1- is calculated and stored */ + /*into Event Record. */ + } + + /*Measurement time is stored into Event Record. */ + COPY ( event -> hit_time, internal_time ); + + /*Unit temperatures are stored into Event Record. */ + + event -> SU_temperature_1 = + telemetry_data.SU_temperature[ trigger_unit - SU1 ][ 0 ]; + + event -> SU_temperature_2 = + telemetry_data.SU_temperature[ trigger_unit - SU1 ][ 1 ]; + + ClassifyEvent( event ); + /* New event is classified. */ + + checksum_pointer = ( EXTERNAL unsigned char * )event; + event_checksum = 0; + + _Pragma( "loopbound min 27 max 27" ) + for ( i = 1; i < sizeof( event_record_t ); i++ ) { + event_checksum ^= *checksum_pointer; + checksum_pointer++; + } + + event -> checksum = event_checksum; + + /* After the event record is filled up, it is stored into science*/ + /* data. */ + RecordEvent(); + } + } - trigger_unit &= SU_NUMBER_MASK; - /* Delete possible error bits. */ + else { + /*The received mail contained an invalid Sensor unit number. */ + } - WaitTimeout(PEAK_RESET_MIN_DELAY); + trigger_unit &= SU_NUMBER_MASK; + /* Delete possible error bits. */ - ResetPeakDetector(trigger_unit); - /*Peak detector for this Sensor Unit is resetted. */ + WaitTimeout( PEAK_RESET_MIN_DELAY ); - WaitTimeout(PEAK_RESET_MIN_DELAY); + ResetPeakDetector( trigger_unit ); + /*Peak detector for this Sensor Unit is resetted. */ - ResetPeakDetector(trigger_unit); - /*Peak detector for this Sensor Unit is resetted again. */ + WaitTimeout( PEAK_RESET_MIN_DELAY ); - WaitTimeout(COUNTER_RESET_MIN_DELAY); + ResetPeakDetector( trigger_unit ); + /*Peak detector for this Sensor Unit is resetted again. */ - ResetDelayCounters(); - /*The Delay Counters are resetted. */ + WaitTimeout( COUNTER_RESET_MIN_DELAY ); + + ResetDelayCounters(); + /*The Delay Counters are resetted. */ } -void AcquisitionTask(void) TASK(ACQUISITION_TASK) PRIORITY(ACQUISITION_PR) +void AcquisitionTask( void ) TASK( ACQUISITION_TASK ) PRIORITY( ACQUISITION_PR ) /* Purpose : Implements the Acquisition task. */ /* Interface : inputs - Acquisition task mailbox */ /* - Mail from Hit Trigger interrupt service */ @@ -532,22 +512,20 @@ void AcquisitionTask(void) TASK(ACQUISITION_TASK) PRIORITY(ACQUISITION_PR) /* - loop forever: */ /* - HandleAcquisition */ { - InitAcquisitionTask (); + InitAcquisitionTask (); - _Pragma("loopbound min 0 max 0") - while(1) - { - HandleAcquisition (); - } + _Pragma( "loopbound min 0 max 0" ) + while ( 1 ) + HandleAcquisition (); } /*Assign pointers to tasks*/ -void (* EXTERNAL hit_task)(void) = HitTriggerTask; -void (* EXTERNAL acq_task)(void) = AcquisitionTask; +void ( * EXTERNAL hit_task )( void ) = HitTriggerTask; +void ( * EXTERNAL acq_task )( void ) = AcquisitionTask; -void Switch_SU_State(sensor_unit_t EXTERNAL *SU_setting) - COMPACT_DATA REENTRANT_FUNC +void Switch_SU_State( sensor_unit_t EXTERNAL *SU_setting ) +COMPACT_DATA REENTRANT_FUNC /* Purpose : Used when only the SU_state variable must be modified. */ /* Interface : inputs - SU_state */ /* - An Address of 'sensor_unit_t' type of a */ @@ -564,47 +542,47 @@ void Switch_SU_State(sensor_unit_t EXTERNAL *SU_setting) /* - Else state variable value is changed and an indication */ /* of this is recorded. */ { - if (SU_state[(SU_setting -> SU_number) - SU_1] != - SU_setting -> expected_source_state) - { - /* The original SU state is wrong. */ - - SU_setting -> execution_result = SU_STATE_TRANSITION_FAILED; - } - - else if (SU_setting -> SU_state == self_test_mon_e && - self_test_SU_number != NO_SU) - { + if ( SU_state[ ( SU_setting -> SU_number ) - SU_1 ] != + SU_setting -> expected_source_state ) + { + /* The original SU state is wrong. */ + + SU_setting -> execution_result = SU_STATE_TRANSITION_FAILED; + } + + else + if ( SU_setting -> SU_state == self_test_mon_e && + self_test_SU_number != NO_SU ) + { /* There is a self test sequence running already */ SU_setting -> execution_result = SU_STATE_TRANSITION_FAILED; - } + } - else - { + else + { /* The original SU state is correct. */ - if (SU_setting -> SU_state == self_test_mon_e) - { - self_test_SU_number = SU_setting -> SU_number; - /* Number of the SU under self test is recorded. */ + if ( SU_setting -> SU_state == self_test_mon_e ) { + self_test_SU_number = SU_setting -> SU_number; + /* Number of the SU under self test is recorded. */ } - else if (SU_setting -> SU_number == self_test_SU_number) - { - self_test_SU_number = NO_SU; - /* Reset self test state i.e. no self test is running. */ - } + else + if ( SU_setting -> SU_number == self_test_SU_number ) { + self_test_SU_number = NO_SU; + /* Reset self test state i.e. no self test is running. */ + } - SU_state[(SU_setting -> SU_number) - SU_1] = SU_setting -> SU_state; + SU_state[ ( SU_setting -> SU_number ) - SU_1 ] = SU_setting -> SU_state; SU_setting->execution_result = SU_STATE_TRANSITION_OK; - } + } } void Start_SU_SwitchingOn( - sensor_index_t SU, - unsigned char EXTERNAL *exec_result) COMPACT_DATA REENTRANT_FUNC + sensor_index_t SU, + unsigned char EXTERNAL *exec_result ) COMPACT_DATA REENTRANT_FUNC /* Purpose : Transition to SU state on. */ /* Interface : inputs - Sensor_index number */ /* - An Address of 'exec_result' variable */ @@ -625,51 +603,49 @@ void Start_SU_SwitchingOn( /* indication of this transition is recorded. */ /* - Enable interrupts */ { - *exec_result = SU_STATE_TRANSITION_OK; - /* Default value, may be changed below. */ + *exec_result = SU_STATE_TRANSITION_OK; + /* Default value, may be changed below. */ - if (SU_state[SU] != off_e) - { - /* The original SU state is wrong. */ + if ( SU_state[ SU ] != off_e ) + { + /* The original SU state is wrong. */ - *exec_result = SU_STATE_TRANSITION_FAILED; - } + *exec_result = SU_STATE_TRANSITION_FAILED; + } - else - { - /* The original SU state is correct. */ + else + { + /* The original SU state is correct. */ - DISABLE_INTERRUPT_MASTER; + DISABLE_INTERRUPT_MASTER; - /* SU state is still off_e, because there is only one task */ - /* which can switch SU state from off_e to any other state. */ + /* SU state is still off_e, because there is only one task */ + /* which can switch SU state from off_e to any other state. */ - Switch_SU_On( - SU + SU_1, - exec_result); + Switch_SU_On( + SU + SU_1, + exec_result ); - if (*exec_result == SU + SU_1) - { - /* Transition succeeds. */ + if ( *exec_result == SU + SU_1 ) { + /* Transition succeeds. */ - SU_state[SU] = start_switching_e; - } + SU_state[ SU ] = start_switching_e; + } - else - { - /* Transition fails. */ + else { + /* Transition fails. */ - *exec_result = SU_STATE_TRANSITION_FAILED; - } + *exec_result = SU_STATE_TRANSITION_FAILED; + } - ENABLE_INTERRUPT_MASTER; - } + ENABLE_INTERRUPT_MASTER; + } } void SetSensorUnitOff( - sensor_index_t SU, - unsigned char EXTERNAL *exec_result) COMPACT_DATA REENTRANT_FUNC + sensor_index_t SU, + unsigned char EXTERNAL *exec_result ) COMPACT_DATA REENTRANT_FUNC /* Purpose : Transition to SU state off. */ /* Interface : inputs - Sensor_index number */ /* - An Address of 'exec_result' variable */ @@ -691,39 +667,40 @@ void SetSensorUnitOff( /* - Indication of this is recorded to 'exec_result'. */ /* - Enable interrupts */ { - static sensor_unit_t EXTERNAL SU_setting; - /* Holds parameters for "Switch_SU_State" operation */ - /* Must be in external memory, because the parameter to the function */ - /* is pointer to external memory */ + static sensor_unit_t EXTERNAL SU_setting; + /* Holds parameters for "Switch_SU_State" operation */ + /* Must be in external memory, because the parameter to the function */ + /* is pointer to external memory */ - DISABLE_INTERRUPT_MASTER; + DISABLE_INTERRUPT_MASTER; - Switch_SU_Off( - SU + SU_1, - exec_result); + Switch_SU_Off( + SU + SU_1, + exec_result ); - if (*exec_result == SU + SU_1) - { - /* Transition succeeds. */ + if ( *exec_result == SU + SU_1 ) + { + /* Transition succeeds. */ - SU_setting.SU_number = SU + SU_1; - SU_setting.expected_source_state = SU_state[SU]; - SU_setting.SU_state = off_e; - Switch_SU_State (&SU_setting); - *exec_result = SU_STATE_TRANSITION_OK; - } + SU_setting.SU_number = SU + SU_1; + SU_setting.expected_source_state = SU_state[ SU ]; + SU_setting.SU_state = off_e; + Switch_SU_State ( &SU_setting ); + *exec_result = SU_STATE_TRANSITION_OK; + } - else - { - /* Transition fails. */ + else + { + /* Transition fails. */ - *exec_result = SU_STATE_TRANSITION_FAILED; - } + *exec_result = SU_STATE_TRANSITION_FAILED; + } - ENABLE_INTERRUPT_MASTER; + ENABLE_INTERRUPT_MASTER; } -SU_state_t ReadSensorUnit(unsigned char SU_number) COMPACT_DATA REENTRANT_FUNC +SU_state_t ReadSensorUnit( unsigned char SU_number ) COMPACT_DATA +REENTRANT_FUNC /* Purpose : To find out whether given Sensor Unit is switched on or */ /* off. */ /* Interface : */ @@ -731,11 +708,11 @@ SU_state_t ReadSensorUnit(unsigned char SU_number) COMPACT_DATA REENTRANT_FUNC /* Postconditions : Value of state variable is returned. */ /* Algorithm : Value of state variable (on_e or off_e) is returned. */ { - return SU_state[SU_number - 1]; + return SU_state[ SU_number - 1 ]; } -void Update_SU_State(sensor_index_t SU_index) COMPACT_DATA REENTRANT_FUNC +void Update_SU_State( sensor_index_t SU_index ) COMPACT_DATA REENTRANT_FUNC /* Purpose : Sensor unit state is updated. */ /* Interface : inputs - SU_state */ /* - SU_index number */ @@ -749,27 +726,26 @@ void Update_SU_State(sensor_index_t SU_index) COMPACT_DATA REENTRANT_FUNC /* the present one. */ /* - Enable interrups */ { - DISABLE_INTERRUPT_MASTER; + DISABLE_INTERRUPT_MASTER; - if (SU_state[SU_index] == start_switching_e) - { - SU_state[SU_index] = switching_e; - } + if ( SU_state[ SU_index ] == start_switching_e ) + SU_state[ SU_index ] = switching_e; - else if (SU_state[SU_index] == switching_e) - { - ResetPeakDetector(SU_index + SU_1); + else + if ( SU_state[ SU_index ] == switching_e ) + { + ResetPeakDetector( SU_index + SU_1 ); /*Peak detector for this Sensor Unit is resetted. */ - WaitTimeout(PEAK_RESET_MIN_DELAY); + WaitTimeout( PEAK_RESET_MIN_DELAY ); - ResetPeakDetector(SU_index + SU_1); + ResetPeakDetector( SU_index + SU_1 ); /*Peak detector for this Sensor Unit is resetted again. */ - SU_state[SU_index] = on_e; - } + SU_state[ SU_index ] = on_e; + } - ENABLE_INTERRUPT_MASTER; + ENABLE_INTERRUPT_MASTER; } diff --git a/bench/parallel/DEBIE/code/measure.h b/bench/parallel/DEBIE/code/measure.h index 8454062cf3476627f00106989ef5dcc4f8a641e0..bfe46d7467a706c7059cfdbe5be7ce013d3ecaa8 100644 --- a/bench/parallel/DEBIE/code/measure.h +++ b/bench/parallel/DEBIE/code/measure.h @@ -1,25 +1,25 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : measure.h - * - * Prototypes etc. for the Measure module. - * - * Based on the SSF file measure.h, rev 1.14, Mon Aug 16 17:29:40 1999 . - * - *- * -------------------------------------------------------------------------- - */ - + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : measure.h + + Prototypes etc. for the Measure module. + + Based on the SSF file measure.h, rev 1.14, Mon Aug 16 17:29:40 1999 . + + - * -------------------------------------------------------------------------- +*/ + #ifndef MEASURE_H #define MEASURE_H @@ -29,7 +29,7 @@ #include "kernobj.h" #include "su_ctrl.h" -/*Maximum number of conversion start tries allowed in the HitTriggerTask*/ +/*Maximum number of conversion start tries allowed in the HitTriggerTask*/ #define ADC_MAX_TRIES 25 #define HIT_BUDGET_DEFAULT 20 @@ -43,7 +43,7 @@ /* Delay counter reset min delay: 1 * 10 ms. */ /* NOTE that specifications would allow delay */ /* of 1ms, but minimum delay that is possible */ -/* to be generated with RTX is one tick = 10ms */ +/* to be generated with RTX is one tick = 10ms */ #define SELF_TEST_DELAY 4 /* This delay equals the length of 4 system cycles. */ @@ -60,32 +60,32 @@ /*type definitions*/ typedef enum { - off_e, /* SU off state - power is Off. */ - start_switching_e, /* Transition to On state is starting. */ - switching_e, /* Transition to On state is started. */ - on_e, /* SU on state - power is On. */ - self_test_mon_e, /* Selt Test, Voltage and Temperature monitoring */ - self_test_e, /* Selt Test, test pulse setup. */ - self_test_trigger_e, /* Self test, test pulse handling */ - acquisition_e /* Power is On and Hit Events are accepted. */ + off_e, /* SU off state - power is Off. */ + start_switching_e, /* Transition to On state is starting. */ + switching_e, /* Transition to On state is started. */ + on_e, /* SU on state - power is On. */ + self_test_mon_e, /* Selt Test, Voltage and Temperature monitoring */ + self_test_e, /* Selt Test, test pulse setup. */ + self_test_trigger_e, /* Self test, test pulse handling */ + acquisition_e /* Power is On and Hit Events are accepted. */ } SU_state_t; - /* From these only off_e, on_e and self_test_e are actual SU states */ - /* defined in the User Requirements. Those and 'acquisition_e' are */ - /* the main states between which the SU state transitions are made. */ +/* From these only off_e, on_e and self_test_e are actual SU states */ +/* defined in the User Requirements. Those and 'acquisition_e' are */ +/* the main states between which the SU state transitions are made. */ typedef struct { - sensor_number_t SU_number; /* Sensor Unit number */ - SU_state_t SU_state; /* Sensor unit states can be either On */ - /* or Off. */ - SU_state_t expected_source_state; /* Excpected source state of the SU */ - /* state transition. */ - unsigned char execution_result; /* This variable is used to indicate */ - /* execution results. */ + sensor_number_t SU_number; /* Sensor Unit number */ + SU_state_t SU_state; /* Sensor unit states can be either On */ + /* or Off. */ + SU_state_t expected_source_state; /* Excpected source state of the SU */ + /* state transition. */ + unsigned char execution_result; /* This variable is used to indicate */ + /* execution results. */ } sensor_unit_t; -extern SU_state_t EXTERNAL SU_state[4]; +extern SU_state_t EXTERNAL SU_state[ 4 ]; extern sensor_number_t EXTERNAL self_test_SU_number; @@ -96,36 +96,36 @@ extern uint_least8_t EXTERNAL hit_budget_left; /*function prototypes*/ -extern void Switch_SU_State(sensor_unit_t EXTERNAL *SU_setting) - COMPACT_DATA REENTRANT_FUNC; +extern void Switch_SU_State( sensor_unit_t EXTERNAL *SU_setting ) +COMPACT_DATA REENTRANT_FUNC; extern void Start_SU_SwitchingOn( - sensor_index_t SU, - unsigned char EXTERNAL *exec_result) - COMPACT_DATA REENTRANT_FUNC; + sensor_index_t SU, + unsigned char EXTERNAL *exec_result ) +COMPACT_DATA REENTRANT_FUNC; extern void SetSensorUnitOff( - sensor_index_t SU, - unsigned char EXTERNAL *exec_result) - COMPACT_DATA REENTRANT_FUNC; + sensor_index_t SU, + unsigned char EXTERNAL *exec_result ) +COMPACT_DATA REENTRANT_FUNC; -extern SU_state_t ReadSensorUnit(unsigned char SU_number) - COMPACT_DATA REENTRANT_FUNC; +extern SU_state_t ReadSensorUnit( unsigned char SU_number ) +COMPACT_DATA REENTRANT_FUNC; -extern void Update_SU_State(sensor_index_t SU_index) - COMPACT_DATA REENTRANT_FUNC; +extern void Update_SU_State( sensor_index_t SU_index ) +COMPACT_DATA REENTRANT_FUNC; /*pointers to tasks*/ -extern void (* EXTERNAL hit_task)(void); -extern void (* EXTERNAL acq_task)(void); +extern void ( * EXTERNAL hit_task )( void ); +extern void ( * EXTERNAL acq_task )( void ); /* Task functions, for testing: */ -extern void InitHitTriggerTask (void); -extern void HandleHitTrigger (void); -extern void InitAcquisitionTask (void); -extern void HandleAcquisition (void); +extern void InitHitTriggerTask ( void ); +extern void HandleHitTrigger ( void ); +extern void InitAcquisitionTask ( void ); +extern void HandleAcquisition ( void ); #endif diff --git a/bench/parallel/DEBIE/code/msg_ctrl.h b/bench/parallel/DEBIE/code/msg_ctrl.h index 5dfb7a61fd0d5d3b9ac3f471bf7501c71bcb7a7f..d7898b149c0e8ceab26d2b76a8ee4226b66d3eb3 100644 --- a/bench/parallel/DEBIE/code/msg_ctrl.h +++ b/bench/parallel/DEBIE/code/msg_ctrl.h @@ -1,25 +1,25 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DNI (DEBIE Null Interface) - * Module : msg_ctrl.h - * - * Macros and operations for sending messages between tasks and - * from interrupt handlers to tasks. - * - * Based on the SSF DHI file msg_ctrl.h, rev 1.11, Mon May 17 22:50:44 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DNI (DEBIE Null Interface) + Module : msg_ctrl.h + + Macros and operations for sending messages between tasks and + from interrupt handlers to tasks. + + Based on the SSF DHI file msg_ctrl.h, rev 1.11, Mon May 17 22:50:44 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef MSG_CTRL_H @@ -27,7 +27,7 @@ #include "keyword.h" - + #define MSG_RECEIVED 1 /* The value of execution_result in incoming_mail_t that */ /* signifies that a mail message has been received. */ @@ -40,22 +40,22 @@ typedef struct { - unsigned char mailbox_number; - unsigned char timeout; - uint16_t EXTERNAL *message; - signed char execution_result; /* This variable is used to indicate */ - /* execution results. */ - - signed char wait_result; /* Result from a RTX operation. */ - - unsigned char event_selector; /* The value of this variable defines the */ - /* execution of the wait-task. */ -}incoming_mail_t ; + unsigned char mailbox_number; + unsigned char timeout; + uint16_t EXTERNAL *message; + signed char execution_result; /* This variable is used to indicate */ + /* execution results. */ + + signed char wait_result; /* Result from a RTX operation. */ + + unsigned char event_selector; /* The value of this variable defines the */ + /* execution of the wait-task. */ +} incoming_mail_t ; /* Function prototypes */ -extern void WaitMail(incoming_mail_t EXTERNAL *message) - COMPACT REENTRANT_FUNC; +extern void WaitMail( incoming_mail_t EXTERNAL *message ) +COMPACT REENTRANT_FUNC; #endif diff --git a/bench/parallel/DEBIE/code/reg52.h b/bench/parallel/DEBIE/code/reg52.h index 6350ad251d71fd6ac72e83052d0df4d777fbef58..c57220b4c65428ea8c964df10199687d6550fe66 100644 --- a/bench/parallel/DEBIE/code/reg52.h +++ b/bench/parallel/DEBIE/code/reg52.h @@ -1,25 +1,25 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : reg52.h - * - * Definitions for 80C32 Special Function Registers to be used - * in portable parts of the DEBIE DPU software. - * - * Created for the DEBIE-I WCET benchmark program. Not based directly - * on any SSF sources. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : reg52.h + + Definitions for 80C32 Special Function Registers to be used + in portable parts of the DEBIE DPU software. + + Created for the DEBIE-I WCET benchmark program. Not based directly + on any SSF sources. + + - * -------------------------------------------------------------------------- +*/ #ifndef REG52_H diff --git a/bench/parallel/DEBIE/code/su_ctrl.h b/bench/parallel/DEBIE/code/su_ctrl.h index 293e0b7a128369e0226004c62c8a56ccefc25b36..03f08070b8ef9197407a2c2febfe9cf8b4dfc455 100644 --- a/bench/parallel/DEBIE/code/su_ctrl.h +++ b/bench/parallel/DEBIE/code/su_ctrl.h @@ -1,23 +1,23 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : su_ctrl.h - * - * Macros, functions, constants and types for controlling Sensor Units. - * - * Based on the SSF DHI file su_ctrl.h, rev 1.28, Tue Sep 14 14:51:26 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : su_ctrl.h + + Macros, functions, constants and types for controlling Sensor Units. + + Based on the SSF DHI file su_ctrl.h, rev 1.28, Tue Sep 14 14:51:26 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef SU_CTRL_H @@ -39,17 +39,17 @@ #define PZT_1_2 5 -#define SU_1 1 +#define SU_1 1 #define SU_2 2 #define SU_3 3 #define SU_4 4 -#define SU_1_ON 1 +#define SU_1_ON 1 #define SU_2_ON 2 #define SU_3_ON 3 #define SU_4_ON 4 -#define SU_1_OFF 1 +#define SU_1_OFF 1 #define SU_2_OFF 2 #define SU_3_OFF 3 #define SU_4_OFF 4 @@ -83,7 +83,7 @@ #define CHANNEL_NOT_SELECTED 5 #define SU_NOT_SELECTED 6 -#define TRIGGER_SET_OK 1 +#define TRIGGER_SET_OK 1 #define DEFAULT_THRESHOLD 0x0D /* Default Trigger threshold is mid-scale value. */ @@ -147,22 +147,22 @@ typedef uint_least8_t channel_t; /* The number of an A/D channel. */ typedef struct { - unsigned short int FromPlasma1Plus; - unsigned short int FromPlasma1Minus; -}delays_t ; + unsigned short int FromPlasma1Plus; + unsigned short int FromPlasma1Minus; +} delays_t ; typedef struct { - sensor_number_t sensor_unit; - channel_t channel; - unsigned char level; - unsigned char execution_result; - unsigned int base; -}trigger_set_t ; + sensor_number_t sensor_unit; + channel_t channel; + unsigned char level; + unsigned char execution_result; + unsigned int base; +} trigger_set_t ; typedef struct { - unsigned char V_down_bit; - unsigned char HV_status; -}voltage_status_t ; + unsigned char V_down_bit; + unsigned char HV_status; +} voltage_status_t ; extern unsigned char EXTERNAL SU_ctrl_register; @@ -174,49 +174,49 @@ extern unsigned char EXTERNAL SU_ctrl_register; /* Delay and rise time counters */ -extern void ReadDelayCounters (delays_t EXTERNAL *delay); -extern unsigned char ReadRiseTimeCounter(void) COMPACT REENTRANT_FUNC; -extern void ResetDelayCounters(void) COMPACT REENTRANT_FUNC; -extern void ResetPeakDetector(sensor_number_t unit); +extern void ReadDelayCounters ( delays_t EXTERNAL *delay ); +extern unsigned char ReadRiseTimeCounter( void ) COMPACT REENTRANT_FUNC; +extern void ResetDelayCounters( void ) COMPACT REENTRANT_FUNC; +extern void ResetPeakDetector( sensor_number_t unit ); extern void SignalPeakDetectorReset( - unsigned char low_reset_value, - unsigned char high_reset_value); + unsigned char low_reset_value, + unsigned char high_reset_value ); /* Trigger levels */ -extern void SetTriggerLevel(trigger_set_t EXTERNAL *setting) - COMPACT REENTRANT_FUNC; +extern void SetTriggerLevel( trigger_set_t EXTERNAL *setting ) +COMPACT REENTRANT_FUNC; /* Test pulse level */ -extern void SetTestPulseLevel(unsigned char level) - COMPACT REENTRANT_FUNC; +extern void SetTestPulseLevel( unsigned char level ) +COMPACT REENTRANT_FUNC; -extern void GetVoltageStatus(voltage_status_t EXTERNAL *v_status) - COMPACT REENTRANT_FUNC; +extern void GetVoltageStatus( voltage_status_t EXTERNAL *v_status ) +COMPACT REENTRANT_FUNC; /* Sensor Unit power control */ extern void Switch_SU_On ( - sensor_number_t SU_Number, - unsigned char EXTERNAL *execution_result) - COMPACT REENTRANT_FUNC; + sensor_number_t SU_Number, + unsigned char EXTERNAL *execution_result ) +COMPACT REENTRANT_FUNC; extern void Switch_SU_Off ( - sensor_number_t SU_Number, - unsigned char EXTERNAL *execution_result) - COMPACT REENTRANT_FUNC; + sensor_number_t SU_Number, + unsigned char EXTERNAL *execution_result ) +COMPACT REENTRANT_FUNC; /* Sensor Unit calibration */ -extern void EnableAnalogSwitch(sensor_index_t self_test_SU_index); -extern void DisableAnalogSwitch(sensor_index_t self_test_SU_index); -extern void SelectSelfTestChannel(unsigned char channel); +extern void EnableAnalogSwitch( sensor_index_t self_test_SU_index ); +extern void DisableAnalogSwitch( sensor_index_t self_test_SU_index ); +extern void SelectSelfTestChannel( unsigned char channel ); extern void SelectTriggerSwitchLevel( - unsigned char test_channel, - sensor_index_t self_test_SU_index); + unsigned char test_channel, + sensor_index_t self_test_SU_index ); extern void SelectStartSwitchLevel( - unsigned char test_channel, - sensor_index_t self_test_SU_index); + unsigned char test_channel, + sensor_index_t self_test_SU_index ); #endif diff --git a/bench/parallel/DEBIE/code/taskctrl.h b/bench/parallel/DEBIE/code/taskctrl.h index 4baf1f37b0544a4618b4fa7d08a607ff37bb209f..c47372aa4302a9a9e3e0ebd83866d2198bf9c3dd 100644 --- a/bench/parallel/DEBIE/code/taskctrl.h +++ b/bench/parallel/DEBIE/code/taskctrl.h @@ -1,27 +1,27 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DNI (DEBIE Null Interface) - * Module : taskctrl.h - * - * Macros and function prototypes for operations dealing with the - * kernel, task switching, message passing. The contents of this - * DNI version of this header file are identical to the DHI version. - * The DNI/DHI difference is in the bodies of the operations. - * - * Based on the SSF DHI file taskctrl.h, revision 1.11, Mon May 17 22:51:12 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DNI (DEBIE Null Interface) + Module : taskctrl.h + + Macros and function prototypes for operations dealing with the + kernel, task switching, message passing. The contents of this + DNI version of this header file are identical to the DHI version. + The DNI/DHI difference is in the bodies of the operations. + + Based on the SSF DHI file taskctrl.h, revision 1.11, Mon May 17 22:51:12 1999. + + - * -------------------------------------------------------------------------- +*/ /* Type definitions */ @@ -29,7 +29,7 @@ #define TASKCTRL_H #include "keyword.h" - + #define MACHINE_CYCLE 1.085 /* The machine (processor) cycle time, in microseconds. */ @@ -45,32 +45,32 @@ typedef struct { - unsigned char rtx_task_number; - void (*task_main_function)(void); + unsigned char rtx_task_number; + void ( *task_main_function )( void ); } task_info_t; /* Function prototypes */ -extern void ShortDelay (uint_least8_t delay_loops); +extern void ShortDelay ( uint_least8_t delay_loops ); -extern void CreateTask(task_info_t EXTERNAL *new_task); +extern void CreateTask( task_info_t EXTERNAL *new_task ); -extern void WaitInterval(unsigned char time); +extern void WaitInterval( unsigned char time ); -extern void WaitTimeout(unsigned char time) COMPACT REENTRANT_FUNC; +extern void WaitTimeout( unsigned char time ) COMPACT REENTRANT_FUNC; -extern void SetTimeSlice(unsigned int time_slice); +extern void SetTimeSlice( unsigned int time_slice ); -extern void StartSystem(unsigned char task_number); +extern void StartSystem( unsigned char task_number ); extern void SendTaskMail ( - unsigned char mailbox, - uint16_t message, - unsigned char timeout); + unsigned char mailbox, + uint16_t message, + unsigned char timeout ); extern unsigned char isr_send_message ( - unsigned char mailbox, - uint16_t message); + unsigned char mailbox, + uint16_t message ); #define OK 8 #define NOT_OK 9 diff --git a/bench/parallel/DEBIE/code/tc_hand.c b/bench/parallel/DEBIE/code/tc_hand.c index 6ff8bbfd592f53eace8be2bc39919c5a3ba49537..fdb61130d9c7f819a6b3c7cb396fdab5a977bae0 100644 --- a/bench/parallel/DEBIE/code/tc_hand.c +++ b/bench/parallel/DEBIE/code/tc_hand.c @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : tc_hand.c - * - * Telecommand module. - * - * Based on the SSF file tc_hand.c, rev 1.66, Thu Sep 09 13:29:18 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : tc_hand.c + + Telecommand module. + + Based on the SSF file tc_hand.c, rev 1.66, Thu Sep 09 13:29:18 1999. + + - * -------------------------------------------------------------------------- +*/ #include "keyword.h" #include "kernobj.h" @@ -68,24 +68,24 @@ /* Array */ -SU_settings_t EXTERNAL * EXTERNAL SU_config[] = { - &telemetry_data.sensor_unit_1, - &telemetry_data.sensor_unit_2, - &telemetry_data.sensor_unit_3, - &telemetry_data.sensor_unit_4 - }; +SU_settings_t EXTERNAL *EXTERNAL SU_config[ ] = { + &telemetry_data.sensor_unit_1, + &telemetry_data.sensor_unit_2, + &telemetry_data.sensor_unit_3, + &telemetry_data.sensor_unit_4 +}; /* Type definitions */ typedef struct { - uint16_t TC_word; /* Received telecommand word */ - unsigned char TC_address; /* Telecommand address */ - unsigned char TC_code; /* Telecommand code */ - } telecommand_t; + uint16_t TC_word; /* Received telecommand word */ + unsigned char TC_address; /* Telecommand address */ + unsigned char TC_code; /* Telecommand code */ +} telecommand_t; typedef enum { - code_e, data_e - } memory_type_t; + code_e, data_e +} memory_type_t; /* Global variables */ @@ -96,7 +96,7 @@ unsigned char EXTERNAL TC_timeout = 0; /* Time out for next telecommand, zero means no timeout */ -unsigned char EXTERNAL TC_look_up[128]; +unsigned char EXTERNAL TC_look_up[ 128 ]; /* Look-up table for all possible 128 TC address values */ TC_state_t EXTERNAL TC_state; @@ -105,7 +105,7 @@ TC_state_t EXTERNAL TC_state; memory_type_t EXTERNAL memory_type; /* Selection of memory write target (code/data) */ -unsigned char EXTERNAL memory_transfer_buffer[MEM_BUFFER_SIZE]; +unsigned char EXTERNAL memory_transfer_buffer[ MEM_BUFFER_SIZE ]; /* Buffer for memory read and write telecommands */ unsigned char EXTERNAL address_MSB; @@ -121,7 +121,7 @@ unsigned char EXTERNAL write_checksum; /* Checksum for memory write blocks. */ -void InitTC_LookUp(void) +void InitTC_LookUp( void ) /* Purpose : Initializes the TC look-up table */ /* Interface : inputs - none */ /* outputs - TC_lool_up */ @@ -131,118 +131,118 @@ void InitTC_LookUp(void) /* - set each element corresponding valid TC address */ /* to proper value */ { - DIRECT_INTERNAL uint_least8_t i; - /* Loop variable */ - - - _Pragma("loopbound min 128 max 128") - for(i=0; i<128; i++) TC_look_up[i] = ALL_INVALID; - - TC_look_up[START_ACQUISITION] = ONLY_EQUAL; - TC_look_up[STOP_ACQUISITION] = ONLY_EQUAL; - - TC_look_up[ERROR_STATUS_CLEAR] = ONLY_EQUAL; - - TC_look_up[SEND_STATUS_REGISTER] = ONLY_EVEN; - TC_look_up[SEND_SCIENCE_DATA_FILE] = ONLY_EQUAL; - - TC_look_up[SET_TIME_BYTE_0] = ALL_VALID; - TC_look_up[SET_TIME_BYTE_1] = ALL_VALID; - TC_look_up[SET_TIME_BYTE_2] = ALL_VALID; - TC_look_up[SET_TIME_BYTE_3] = ALL_VALID; - - TC_look_up[SOFT_RESET] = ONLY_EQUAL; - - TC_look_up[CLEAR_WATCHDOG_FAILURES] = ONLY_EQUAL; - TC_look_up[CLEAR_CHECKSUM_FAILURES] = ONLY_EQUAL; - - TC_look_up[WRITE_CODE_MEMORY_MSB] = ALL_VALID; - TC_look_up[WRITE_CODE_MEMORY_LSB] = ALL_VALID; - TC_look_up[WRITE_DATA_MEMORY_MSB] = ALL_VALID; - TC_look_up[WRITE_DATA_MEMORY_LSB] = ALL_VALID; - TC_look_up[READ_DATA_MEMORY_MSB] = ALL_VALID; - TC_look_up[READ_DATA_MEMORY_LSB] = ALL_VALID; - - TC_look_up[SWITCH_SU_1] = ON_OFF_TC; - TC_look_up[SWITCH_SU_2] = ON_OFF_TC; - TC_look_up[SWITCH_SU_3] = ON_OFF_TC; - TC_look_up[SWITCH_SU_4] = ON_OFF_TC; - - TC_look_up[SET_SU_1_PLASMA_1P_THRESHOLD] = ALL_VALID; - TC_look_up[SET_SU_2_PLASMA_1P_THRESHOLD] = ALL_VALID; - TC_look_up[SET_SU_3_PLASMA_1P_THRESHOLD] = ALL_VALID; - TC_look_up[SET_SU_4_PLASMA_1P_THRESHOLD] = ALL_VALID; - - TC_look_up[SET_SU_1_PLASMA_1M_THRESHOLD] = ALL_VALID; - TC_look_up[SET_SU_2_PLASMA_1M_THRESHOLD] = ALL_VALID; - TC_look_up[SET_SU_3_PLASMA_1M_THRESHOLD] = ALL_VALID; - TC_look_up[SET_SU_4_PLASMA_1M_THRESHOLD] = ALL_VALID; - - TC_look_up[SET_SU_1_PIEZO_THRESHOLD] = ALL_VALID; - TC_look_up[SET_SU_2_PIEZO_THRESHOLD] = ALL_VALID; - TC_look_up[SET_SU_3_PIEZO_THRESHOLD] = ALL_VALID; - TC_look_up[SET_SU_4_PIEZO_THRESHOLD] = ALL_VALID; - - TC_look_up[SET_SU_1_PLASMA_1P_CLASS_LEVEL] = ALL_VALID; - TC_look_up[SET_SU_2_PLASMA_1P_CLASS_LEVEL] = ALL_VALID; - TC_look_up[SET_SU_3_PLASMA_1P_CLASS_LEVEL] = ALL_VALID; - TC_look_up[SET_SU_4_PLASMA_1P_CLASS_LEVEL] = ALL_VALID; - - TC_look_up[SET_SU_1_PLASMA_1M_CLASS_LEVEL] = ALL_VALID; - TC_look_up[SET_SU_2_PLASMA_1M_CLASS_LEVEL] = ALL_VALID; - TC_look_up[SET_SU_3_PLASMA_1M_CLASS_LEVEL] = ALL_VALID; - TC_look_up[SET_SU_4_PLASMA_1M_CLASS_LEVEL] = ALL_VALID; - - TC_look_up[SET_SU_1_PLASMA_2P_CLASS_LEVEL] = ALL_VALID; - TC_look_up[SET_SU_2_PLASMA_2P_CLASS_LEVEL] = ALL_VALID; - TC_look_up[SET_SU_3_PLASMA_2P_CLASS_LEVEL] = ALL_VALID; - TC_look_up[SET_SU_4_PLASMA_2P_CLASS_LEVEL] = ALL_VALID; - - TC_look_up[SET_SU_1_PIEZO_1_CLASS_LEVEL] = ALL_VALID; - TC_look_up[SET_SU_2_PIEZO_1_CLASS_LEVEL] = ALL_VALID; - TC_look_up[SET_SU_3_PIEZO_1_CLASS_LEVEL] = ALL_VALID; - TC_look_up[SET_SU_4_PIEZO_1_CLASS_LEVEL] = ALL_VALID; - - TC_look_up[SET_SU_1_PIEZO_2_CLASS_LEVEL] = ALL_VALID; - TC_look_up[SET_SU_2_PIEZO_2_CLASS_LEVEL] = ALL_VALID; - TC_look_up[SET_SU_3_PIEZO_2_CLASS_LEVEL] = ALL_VALID; - TC_look_up[SET_SU_4_PIEZO_2_CLASS_LEVEL] = ALL_VALID; - - TC_look_up[SET_SU_1_PLASMA_1E_1I_MAX_TIME] = ALL_VALID; - TC_look_up[SET_SU_2_PLASMA_1E_1I_MAX_TIME] = ALL_VALID; - TC_look_up[SET_SU_3_PLASMA_1E_1I_MAX_TIME] = ALL_VALID; - TC_look_up[SET_SU_4_PLASMA_1E_1I_MAX_TIME] = ALL_VALID; - - TC_look_up[SET_SU_1_PLASMA_1E_PZT_MIN_TIME] = ALL_VALID; - TC_look_up[SET_SU_2_PLASMA_1E_PZT_MIN_TIME] = ALL_VALID; - TC_look_up[SET_SU_3_PLASMA_1E_PZT_MIN_TIME] = ALL_VALID; - TC_look_up[SET_SU_4_PLASMA_1E_PZT_MIN_TIME] = ALL_VALID; - - TC_look_up[SET_SU_1_PLASMA_1E_PZT_MAX_TIME] = ALL_VALID; - TC_look_up[SET_SU_2_PLASMA_1E_PZT_MAX_TIME] = ALL_VALID; - TC_look_up[SET_SU_3_PLASMA_1E_PZT_MAX_TIME] = ALL_VALID; - TC_look_up[SET_SU_4_PLASMA_1E_PZT_MAX_TIME] = ALL_VALID; - - TC_look_up[SET_SU_1_PLASMA_1I_PZT_MIN_TIME] = ALL_VALID; - TC_look_up[SET_SU_2_PLASMA_1I_PZT_MIN_TIME] = ALL_VALID; - TC_look_up[SET_SU_3_PLASMA_1I_PZT_MIN_TIME] = ALL_VALID; - TC_look_up[SET_SU_4_PLASMA_1I_PZT_MIN_TIME] = ALL_VALID; - - TC_look_up[SET_SU_1_PLASMA_1I_PZT_MAX_TIME] = ALL_VALID; - TC_look_up[SET_SU_2_PLASMA_1I_PZT_MAX_TIME] = ALL_VALID; - TC_look_up[SET_SU_3_PLASMA_1I_PZT_MAX_TIME] = ALL_VALID; - TC_look_up[SET_SU_4_PLASMA_1I_PZT_MAX_TIME] = ALL_VALID; - - TC_look_up[SET_COEFFICIENT_1] = ALL_VALID; - TC_look_up[SET_COEFFICIENT_2] = ALL_VALID; - TC_look_up[SET_COEFFICIENT_3] = ALL_VALID; - TC_look_up[SET_COEFFICIENT_4] = ALL_VALID; - TC_look_up[SET_COEFFICIENT_5] = ALL_VALID; + DIRECT_INTERNAL uint_least8_t i; + /* Loop variable */ + + + _Pragma( "loopbound min 128 max 128" ) + for ( i = 0; i < 128; i++ ) TC_look_up[ i ] = ALL_INVALID; + + TC_look_up[ START_ACQUISITION ] = ONLY_EQUAL; + TC_look_up[ STOP_ACQUISITION ] = ONLY_EQUAL; + + TC_look_up[ ERROR_STATUS_CLEAR ] = ONLY_EQUAL; + + TC_look_up[ SEND_STATUS_REGISTER ] = ONLY_EVEN; + TC_look_up[ SEND_SCIENCE_DATA_FILE ] = ONLY_EQUAL; + + TC_look_up[ SET_TIME_BYTE_0 ] = ALL_VALID; + TC_look_up[ SET_TIME_BYTE_1 ] = ALL_VALID; + TC_look_up[ SET_TIME_BYTE_2 ] = ALL_VALID; + TC_look_up[ SET_TIME_BYTE_3 ] = ALL_VALID; + + TC_look_up[ SOFT_RESET ] = ONLY_EQUAL; + + TC_look_up[ CLEAR_WATCHDOG_FAILURES ] = ONLY_EQUAL; + TC_look_up[ CLEAR_CHECKSUM_FAILURES ] = ONLY_EQUAL; + + TC_look_up[ WRITE_CODE_MEMORY_MSB ] = ALL_VALID; + TC_look_up[ WRITE_CODE_MEMORY_LSB ] = ALL_VALID; + TC_look_up[ WRITE_DATA_MEMORY_MSB ] = ALL_VALID; + TC_look_up[ WRITE_DATA_MEMORY_LSB ] = ALL_VALID; + TC_look_up[ READ_DATA_MEMORY_MSB ] = ALL_VALID; + TC_look_up[ READ_DATA_MEMORY_LSB ] = ALL_VALID; + + TC_look_up[ SWITCH_SU_1 ] = ON_OFF_TC; + TC_look_up[ SWITCH_SU_2 ] = ON_OFF_TC; + TC_look_up[ SWITCH_SU_3 ] = ON_OFF_TC; + TC_look_up[ SWITCH_SU_4 ] = ON_OFF_TC; + + TC_look_up[ SET_SU_1_PLASMA_1P_THRESHOLD ] = ALL_VALID; + TC_look_up[ SET_SU_2_PLASMA_1P_THRESHOLD ] = ALL_VALID; + TC_look_up[ SET_SU_3_PLASMA_1P_THRESHOLD ] = ALL_VALID; + TC_look_up[ SET_SU_4_PLASMA_1P_THRESHOLD ] = ALL_VALID; + + TC_look_up[ SET_SU_1_PLASMA_1M_THRESHOLD ] = ALL_VALID; + TC_look_up[ SET_SU_2_PLASMA_1M_THRESHOLD ] = ALL_VALID; + TC_look_up[ SET_SU_3_PLASMA_1M_THRESHOLD ] = ALL_VALID; + TC_look_up[ SET_SU_4_PLASMA_1M_THRESHOLD ] = ALL_VALID; + + TC_look_up[ SET_SU_1_PIEZO_THRESHOLD ] = ALL_VALID; + TC_look_up[ SET_SU_2_PIEZO_THRESHOLD ] = ALL_VALID; + TC_look_up[ SET_SU_3_PIEZO_THRESHOLD ] = ALL_VALID; + TC_look_up[ SET_SU_4_PIEZO_THRESHOLD ] = ALL_VALID; + + TC_look_up[ SET_SU_1_PLASMA_1P_CLASS_LEVEL ] = ALL_VALID; + TC_look_up[ SET_SU_2_PLASMA_1P_CLASS_LEVEL ] = ALL_VALID; + TC_look_up[ SET_SU_3_PLASMA_1P_CLASS_LEVEL ] = ALL_VALID; + TC_look_up[ SET_SU_4_PLASMA_1P_CLASS_LEVEL ] = ALL_VALID; + + TC_look_up[ SET_SU_1_PLASMA_1M_CLASS_LEVEL ] = ALL_VALID; + TC_look_up[ SET_SU_2_PLASMA_1M_CLASS_LEVEL ] = ALL_VALID; + TC_look_up[ SET_SU_3_PLASMA_1M_CLASS_LEVEL ] = ALL_VALID; + TC_look_up[ SET_SU_4_PLASMA_1M_CLASS_LEVEL ] = ALL_VALID; + + TC_look_up[ SET_SU_1_PLASMA_2P_CLASS_LEVEL ] = ALL_VALID; + TC_look_up[ SET_SU_2_PLASMA_2P_CLASS_LEVEL ] = ALL_VALID; + TC_look_up[ SET_SU_3_PLASMA_2P_CLASS_LEVEL ] = ALL_VALID; + TC_look_up[ SET_SU_4_PLASMA_2P_CLASS_LEVEL ] = ALL_VALID; + + TC_look_up[ SET_SU_1_PIEZO_1_CLASS_LEVEL ] = ALL_VALID; + TC_look_up[ SET_SU_2_PIEZO_1_CLASS_LEVEL ] = ALL_VALID; + TC_look_up[ SET_SU_3_PIEZO_1_CLASS_LEVEL ] = ALL_VALID; + TC_look_up[ SET_SU_4_PIEZO_1_CLASS_LEVEL ] = ALL_VALID; + + TC_look_up[ SET_SU_1_PIEZO_2_CLASS_LEVEL ] = ALL_VALID; + TC_look_up[ SET_SU_2_PIEZO_2_CLASS_LEVEL ] = ALL_VALID; + TC_look_up[ SET_SU_3_PIEZO_2_CLASS_LEVEL ] = ALL_VALID; + TC_look_up[ SET_SU_4_PIEZO_2_CLASS_LEVEL ] = ALL_VALID; + + TC_look_up[ SET_SU_1_PLASMA_1E_1I_MAX_TIME ] = ALL_VALID; + TC_look_up[ SET_SU_2_PLASMA_1E_1I_MAX_TIME ] = ALL_VALID; + TC_look_up[ SET_SU_3_PLASMA_1E_1I_MAX_TIME ] = ALL_VALID; + TC_look_up[ SET_SU_4_PLASMA_1E_1I_MAX_TIME ] = ALL_VALID; + + TC_look_up[ SET_SU_1_PLASMA_1E_PZT_MIN_TIME ] = ALL_VALID; + TC_look_up[ SET_SU_2_PLASMA_1E_PZT_MIN_TIME ] = ALL_VALID; + TC_look_up[ SET_SU_3_PLASMA_1E_PZT_MIN_TIME ] = ALL_VALID; + TC_look_up[ SET_SU_4_PLASMA_1E_PZT_MIN_TIME ] = ALL_VALID; + + TC_look_up[ SET_SU_1_PLASMA_1E_PZT_MAX_TIME ] = ALL_VALID; + TC_look_up[ SET_SU_2_PLASMA_1E_PZT_MAX_TIME ] = ALL_VALID; + TC_look_up[ SET_SU_3_PLASMA_1E_PZT_MAX_TIME ] = ALL_VALID; + TC_look_up[ SET_SU_4_PLASMA_1E_PZT_MAX_TIME ] = ALL_VALID; + + TC_look_up[ SET_SU_1_PLASMA_1I_PZT_MIN_TIME ] = ALL_VALID; + TC_look_up[ SET_SU_2_PLASMA_1I_PZT_MIN_TIME ] = ALL_VALID; + TC_look_up[ SET_SU_3_PLASMA_1I_PZT_MIN_TIME ] = ALL_VALID; + TC_look_up[ SET_SU_4_PLASMA_1I_PZT_MIN_TIME ] = ALL_VALID; + + TC_look_up[ SET_SU_1_PLASMA_1I_PZT_MAX_TIME ] = ALL_VALID; + TC_look_up[ SET_SU_2_PLASMA_1I_PZT_MAX_TIME ] = ALL_VALID; + TC_look_up[ SET_SU_3_PLASMA_1I_PZT_MAX_TIME ] = ALL_VALID; + TC_look_up[ SET_SU_4_PLASMA_1I_PZT_MAX_TIME ] = ALL_VALID; + + TC_look_up[ SET_COEFFICIENT_1 ] = ALL_VALID; + TC_look_up[ SET_COEFFICIENT_2 ] = ALL_VALID; + TC_look_up[ SET_COEFFICIENT_3 ] = ALL_VALID; + TC_look_up[ SET_COEFFICIENT_4 ] = ALL_VALID; + TC_look_up[ SET_COEFFICIENT_5 ] = ALL_VALID; } -void TC_InterruptService (void) INTERRUPT(TC_ISR_SOURCE) USED_REG_BANK(2) +void TC_InterruptService ( void ) INTERRUPT( TC_ISR_SOURCE ) USED_REG_BANK( 2 ) /* Purpose : Handles the TC interrupt */ /* Interface : inputs - TC MSB and LSB hardware registers */ /* TC_look_up table giving valid TC addresses */ @@ -280,306 +280,279 @@ void TC_InterruptService (void) INTERRUPT(TC_ISR_SOURCE) USED_REG_BANK(2) /* - Disable TC responses */ { - DIRECT_INTERNAL unsigned char TC_address; - DIRECT_INTERNAL unsigned char TC_code; - DIRECT_INTERNAL uint16_t TC_word; - /* Telecommand and it's parts */ + DIRECT_INTERNAL unsigned char TC_address; + DIRECT_INTERNAL unsigned char TC_code; + DIRECT_INTERNAL uint16_t TC_word; + /* Telecommand and it's parts */ - DIRECT_INTERNAL unsigned char par8, par4, par2, par1; - /* Parity calculation results */ + DIRECT_INTERNAL unsigned char par8, par4, par2, par1; + /* Parity calculation results */ - DIRECT_INTERNAL unsigned char tmp_error_status; - /* Temporary result of TC validity check */ + DIRECT_INTERNAL unsigned char tmp_error_status; + /* Temporary result of TC validity check */ - if (!TC_TIMER_OVERFLOW_FLAG) - { - /* TC is rejected. */ + if ( !TC_TIMER_OVERFLOW_FLAG ) { + /* TC is rejected. */ - telemetry_data.error_status |= TC_ERROR; - /* Set TC Error bit. */ + telemetry_data.error_status |= TC_ERROR; + /* Set TC Error bit. */ - return; - /* Abort ISR. */ - } + return; + /* Abort ISR. */ + } - if ((TC_state == SC_TM_e) || (TC_state == memory_dump_e)) - { - return; - /* Abort ISR. */ - } + if ( ( TC_state == SC_TM_e ) || ( TC_state == memory_dump_e ) ) { + return; + /* Abort ISR. */ + } - STOP_TC_TIMER; - INIT_TC_TIMER_MSB; - INIT_TC_TIMER_LSB; - CLEAR_TC_TIMER_OVERFLOW_FLAG; - START_TC_TIMER; + STOP_TC_TIMER; + INIT_TC_TIMER_MSB; + INIT_TC_TIMER_LSB; + CLEAR_TC_TIMER_OVERFLOW_FLAG; + START_TC_TIMER; - TC_address = READ_TC_MSB; - TC_code = READ_TC_LSB; - TC_word = TC_address * 256 + TC_code; - /* Get TC Address, TC Code and TC Word */ + TC_address = READ_TC_MSB; + TC_code = READ_TC_LSB; + TC_word = TC_address * 256 + TC_code; + /* Get TC Address, TC Code and TC Word */ - if (TC_state == memory_patch_e) - { - Send_ISR_Mail(0, TC_word); - return; - /* This is not a normal telecommand, but word containing two bytes */ - /* of memory block to be written to data or code memory. */ - } + if ( TC_state == memory_patch_e ) { + Send_ISR_Mail( 0, TC_word ); + return; + /* This is not a normal telecommand, but word containing two bytes */ + /* of memory block to be written to data or code memory. */ + } - if (TC_state == register_TM_e) - { - TC_state = TC_handling_e; - /* Register TM state is aborted */ + if ( TC_state == register_TM_e ) { + TC_state = TC_handling_e; + /* Register TM state is aborted */ - ResetInterruptMask(TM_ISR_MASK); - /* Disable TM interrupt mask. Note that DisableInterrupt */ - /* cannot be called from the C51 ISR. */ - } + ResetInterruptMask( TM_ISR_MASK ); + /* Disable TM interrupt mask. Note that DisableInterrupt */ + /* cannot be called from the C51 ISR. */ + } - par8 = TC_address ^ TC_code; - par4 = (par8 & 0x0F) ^ (par8 >> 4); - par2 = (par4 & 0x03) ^ (par4 >> 2); - par1 = (par2 & 0x01) ^ (par2 >> 1); - /* Calculate parity */ + par8 = TC_address ^ TC_code; + par4 = ( par8 & 0x0F ) ^ ( par8 >> 4 ); + par2 = ( par4 & 0x03 ) ^ ( par4 >> 2 ); + par1 = ( par2 & 0x01 ) ^ ( par2 >> 1 ); + /* Calculate parity */ - TC_address >>= 1; + TC_address >>= 1; - tmp_error_status = 0; + tmp_error_status = 0; - if (par1) - { - /* Parity error. */ + if ( par1 ) { + /* Parity error. */ - tmp_error_status |= PARITY_ERROR; - } + tmp_error_status |= PARITY_ERROR; + } - else - { + else { - switch (TC_look_up[TC_address]) - { - case ALL_INVALID: - /* Invalid TC Address */ - tmp_error_status |= TC_ERROR; - break; + switch ( TC_look_up[ TC_address ] ) { + case ALL_INVALID: + /* Invalid TC Address */ + tmp_error_status |= TC_ERROR; + break; - case ALL_VALID: - /* All TC Codes are valid */ - Send_ISR_Mail(0, TC_word); - break; + case ALL_VALID: + /* All TC Codes are valid */ + Send_ISR_Mail( 0, TC_word ); + break; - case ONLY_EQUAL: - /* TC Code should be equal to TC Address */ - if (TC_address != TC_code) - { - tmp_error_status |= TC_ERROR; - } + case ONLY_EQUAL: + /* TC Code should be equal to TC Address */ + if ( TC_address != TC_code ) + tmp_error_status |= TC_ERROR; - else - { - Send_ISR_Mail(0, TC_word); - } - break; + else + Send_ISR_Mail( 0, TC_word ); + break; - case ON_OFF_TC: - /* TC_Code must have ON , OFF or SELF_TEST value */ - if ((TC_code != ON_VALUE) && (TC_code != OFF_VALUE) && - (TC_code != SELF_TEST)) - { - tmp_error_status |= TC_ERROR; - } + case ON_OFF_TC: + /* TC_Code must have ON , OFF or SELF_TEST value */ + if ( ( TC_code != ON_VALUE ) && ( TC_code != OFF_VALUE ) && + ( TC_code != SELF_TEST ) ) + tmp_error_status |= TC_ERROR; - else - { - Send_ISR_Mail(0, TC_word); - } - break; + else + Send_ISR_Mail( 0, TC_word ); + break; - case ONLY_EVEN: - /* TC_Code must be even and not too big */ - if ((TC_code & 1) || (TC_code > LAST_EVEN)) - { - tmp_error_status |= TC_ERROR; - } + case ONLY_EVEN: + /* TC_Code must be even and not too big */ + if ( ( TC_code & 1 ) || ( TC_code > LAST_EVEN ) ) + tmp_error_status |= TC_ERROR; - else - { - Send_ISR_Mail(0, TC_word); - } - break; - } - } + else + Send_ISR_Mail( 0, TC_word ); + break; + } + } - if (((TC_address != SEND_STATUS_REGISTER) - || (tmp_error_status)) - && ((telemetry_data.error_status & TC_OR_PARITY_ERROR) == 0)) - { - /* Condition 1 : */ - /* (TC is not SEND STATUS REGISTER or TC is invalid). */ - /* and condition 2: */ - /* no invalid telecommands are recorded */ - /* */ - /* First condition checks that the Command Status and */ - /* Command Time Tag registers should be updated. */ - /* Second condition checks that the update can be done. */ + if ( ( ( TC_address != SEND_STATUS_REGISTER ) + || ( tmp_error_status ) ) + && ( ( telemetry_data.error_status & TC_OR_PARITY_ERROR ) == 0 ) ) { + /* Condition 1 : */ + /* (TC is not SEND STATUS REGISTER or TC is invalid). */ + /* and condition 2: */ + /* no invalid telecommands are recorded */ + /* */ + /* First condition checks that the Command Status and */ + /* Command Time Tag registers should be updated. */ + /* Second condition checks that the update can be done. */ - telemetry_data.TC_word = TC_word; - COPY (telemetry_data.TC_time_tag, internal_time); - /* Update TC registers in HK TM data area */ - } + telemetry_data.TC_word = TC_word; + COPY ( telemetry_data.TC_time_tag, internal_time ); + /* Update TC registers in HK TM data area */ + } - if (tmp_error_status) - { - /* TC is invalid. */ + if ( tmp_error_status ) { + /* TC is invalid. */ - telemetry_data.error_status |= tmp_error_status; - WRITE_TM_MSB (telemetry_data.error_status); - WRITE_TM_LSB (telemetry_data.mode_status); - /* Send response to this TC to TM */ + telemetry_data.error_status |= tmp_error_status; + WRITE_TM_MSB ( telemetry_data.error_status ); + WRITE_TM_LSB ( telemetry_data.mode_status ); + /* Send response to this TC to TM */ - return; - /* Abort ISR because TC is invalid. */ - } + return; + /* Abort ISR because TC is invalid. */ + } - if (TC_address == SEND_STATUS_REGISTER) - { - /* Send Status Register TC accepted */ + if ( TC_address == SEND_STATUS_REGISTER ) { + /* Send Status Register TC accepted */ - COPY(telemetry_data.time, internal_time); + COPY( telemetry_data.time, internal_time ); - telemetry_pointer = ((EXTERNAL unsigned char *)&telemetry_data) + TC_code; - telemetry_end_pointer = ((EXTERNAL unsigned char *)&telemetry_data) + - LAST_EVEN + 1; - /* First TM register to be sent is given in TC_Code */ + telemetry_pointer = ( ( EXTERNAL unsigned char * )&telemetry_data ) + + TC_code; + telemetry_end_pointer = ( ( EXTERNAL unsigned char * )&telemetry_data ) + + LAST_EVEN + 1; + /* First TM register to be sent is given in TC_Code */ - CLEAR_TM_INTERRUPT_FLAG; + CLEAR_TM_INTERRUPT_FLAG; - WRITE_TM_MSB (*telemetry_pointer); - telemetry_pointer++; - WRITE_TM_LSB (*telemetry_pointer); - telemetry_pointer++; + WRITE_TM_MSB ( *telemetry_pointer ); + telemetry_pointer++; + WRITE_TM_LSB ( *telemetry_pointer ); + telemetry_pointer++; - TC_state = register_TM_e; + TC_state = register_TM_e; - SetInterruptMask(TM_ISR_MASK); - /* Enable TM interrupt mask. Note that EnableInterrupt */ - /* cannot be called from the C51 ISR */ + SetInterruptMask( TM_ISR_MASK ); + /* Enable TM interrupt mask. Note that EnableInterrupt */ + /* cannot be called from the C51 ISR */ - if (telemetry_pointer > telemetry_end_pointer) - telemetry_pointer = (EXTERNAL unsigned char *)&telemetry_data; - } + if ( telemetry_pointer > telemetry_end_pointer ) + telemetry_pointer = ( EXTERNAL unsigned char * )&telemetry_data; + } - else if (TC_address == SEND_SCIENCE_DATA_FILE) - { + else + if ( TC_address == SEND_SCIENCE_DATA_FILE ) { /* Send Science Data File TC accepted. */ - if ((telemetry_data.mode_status & MODE_BITS_MASK) == DPU_SELF_TEST) - { - /* Wrong DEBIE mode. */ + if ( ( telemetry_data.mode_status & MODE_BITS_MASK ) == DPU_SELF_TEST ) { + /* Wrong DEBIE mode. */ - telemetry_data.error_status |= TC_ERROR; - WRITE_TM_MSB (telemetry_data.error_status); - WRITE_TM_LSB (telemetry_data.mode_status); - /* Send response to this TC to TM. */ + telemetry_data.error_status |= TC_ERROR; + WRITE_TM_MSB ( telemetry_data.error_status ); + WRITE_TM_LSB ( telemetry_data.mode_status ); + /* Send response to this TC to TM. */ } - else - { - telemetry_pointer = (EXTERNAL unsigned char *)&science_data; - telemetry_end_pointer = ((EXTERNAL unsigned char *) - &(science_data.event[free_slot_index])) - 1; - /* Science telemetry stops to the end of the last used event */ - /* record of the Science Data memory. */ + else { + telemetry_pointer = ( EXTERNAL unsigned char * )&science_data; + telemetry_end_pointer = ( ( EXTERNAL unsigned char * ) + & ( science_data.event[ free_slot_index ] ) ) - 1; + /* Science telemetry stops to the end of the last used event */ + /* record of the Science Data memory. */ - science_data.length = (unsigned short int) - (telemetry_end_pointer - telemetry_pointer + 1)/2; - /* Store the current length of used science data. */ + science_data.length = ( unsigned short int ) + ( telemetry_end_pointer - telemetry_pointer + 1 ) / 2; + /* Store the current length of used science data. */ - CLEAR_TM_INTERRUPT_FLAG; + CLEAR_TM_INTERRUPT_FLAG; - WRITE_TM_MSB (*telemetry_pointer); - telemetry_pointer++; - WRITE_TM_LSB (*telemetry_pointer); - telemetry_pointer++; + WRITE_TM_MSB ( *telemetry_pointer ); + telemetry_pointer++; + WRITE_TM_LSB ( *telemetry_pointer ); + telemetry_pointer++; - TC_state = SC_TM_e; + TC_state = SC_TM_e; - SetInterruptMask(TM_ISR_MASK); - /* Enable TM interrupt mask. Note that EnableInterrupt */ - /* cannot be called from a C51 ISR. */ + SetInterruptMask( TM_ISR_MASK ); + /* Enable TM interrupt mask. Note that EnableInterrupt */ + /* cannot be called from a C51 ISR. */ } - } + } - else if (TC_address == READ_DATA_MEMORY_LSB) - { - /* Read Data Memory LSB accepted. */ + else + if ( TC_address == READ_DATA_MEMORY_LSB ) { + /* Read Data Memory LSB accepted. */ - if ( (TC_state != read_memory_e) || - ( ((unsigned int)address_MSB << 8) + TC_code - > (END_SRAM3 - MEM_BUFFER_SIZE) + 1 ) ) - { - /* Wrong TC state or wrong address range. */ + if ( ( TC_state != read_memory_e ) || + ( ( ( unsigned int )address_MSB << 8 ) + TC_code + > ( END_SRAM3 - MEM_BUFFER_SIZE ) + 1 ) ) { + /* Wrong TC state or wrong address range. */ - telemetry_data.error_status |= TC_ERROR; - WRITE_TM_MSB (telemetry_data.error_status); - WRITE_TM_LSB (telemetry_data.mode_status); - /* Send response to this TC to TM. */ + telemetry_data.error_status |= TC_ERROR; + WRITE_TM_MSB ( telemetry_data.error_status ); + WRITE_TM_LSB ( telemetry_data.mode_status ); + /* Send response to this TC to TM. */ - TC_state = TC_handling_e; - } + TC_state = TC_handling_e; + } - else - { - telemetry_pointer = - DATA_POINTER((int)address_MSB * 256 + TC_code); - telemetry_end_pointer = telemetry_pointer + MEM_BUFFER_SIZE; + else { + telemetry_pointer = + DATA_POINTER( ( int )address_MSB * 256 + TC_code ); + telemetry_end_pointer = telemetry_pointer + MEM_BUFFER_SIZE; - CLEAR_TM_INTERRUPT_FLAG; + CLEAR_TM_INTERRUPT_FLAG; - WRITE_TM_MSB (telemetry_data.error_status); - WRITE_TM_LSB (telemetry_data.mode_status); - /* First two bytes of Read Data Memory sequence. */ + WRITE_TM_MSB ( telemetry_data.error_status ); + WRITE_TM_LSB ( telemetry_data.mode_status ); + /* First two bytes of Read Data Memory sequence. */ - read_memory_checksum = tmp_error_status ^ telemetry_data.mode_status; + read_memory_checksum = tmp_error_status ^ telemetry_data.mode_status; - TC_state = memory_dump_e; + TC_state = memory_dump_e; - SetInterruptMask(TM_ISR_MASK); + SetInterruptMask( TM_ISR_MASK ); + } } - } - else - { - /* Some other TC accepted. */ + else { + /* Some other TC accepted. */ - WRITE_TM_MSB (telemetry_data.error_status); - WRITE_TM_LSB (telemetry_data.mode_status); - /* Send response to this TC to TM. */ - } + WRITE_TM_MSB ( telemetry_data.error_status ); + WRITE_TM_LSB ( telemetry_data.mode_status ); + /* Send response to this TC to TM. */ + } } -unsigned char PatchExecCommandOk (unsigned char execution_command) +unsigned char PatchExecCommandOk ( unsigned char execution_command ) { - switch (execution_command) - { - case 0: - case 0x09: - case 0x37: - case 0x5A: - return 1; - } - return 0; + switch ( execution_command ) { + case 0: + case 0x09: + case 0x37: + case 0x5A: + return 1; + } + return 0; } -void MemoryPatch(telecommand_t EXTERNAL *command) +void MemoryPatch( telecommand_t EXTERNAL *command ) /* Purpose : Handles received telecommand in memory patch state */ /* Interface : inputs - command, received telecommand */ /* address_MSB, MSB of patch area */ @@ -612,117 +585,106 @@ void MemoryPatch(telecommand_t EXTERNAL *command) /* - set MEMORY_WRITE_ERROR bit in ModeStatus */ { - memory_patch_variables_t EXTERNAL patch_info; - /* Parameters for PatchCode function. */ + memory_patch_variables_t EXTERNAL patch_info; + /* Parameters for PatchCode function. */ - data_address_t INDIRECT_INTERNAL address; - /* Start address of the memory area to be patched. */ + data_address_t INDIRECT_INTERNAL address; + /* Start address of the memory area to be patched. */ - uint_least8_t INDIRECT_INTERNAL i; - /* Loop variable. */ + uint_least8_t INDIRECT_INTERNAL i; + /* Loop variable. */ - unsigned char INDIRECT_INTERNAL TC_msb; - /* Most significant byte of the TC word. */ + unsigned char INDIRECT_INTERNAL TC_msb; + /* Most significant byte of the TC word. */ - TC_msb = (command -> TC_word) >> 8; - write_checksum ^= TC_msb; + TC_msb = ( command -> TC_word ) >> 8; + write_checksum ^= TC_msb; - if (memory_buffer_index < MEM_BUFFER_SIZE) - { - /* Filling the buffer bytes to be written to code or data */ - /* memory. */ + if ( memory_buffer_index < MEM_BUFFER_SIZE ) { + /* Filling the buffer bytes to be written to code or data */ + /* memory. */ - write_checksum ^= command -> TC_code; + write_checksum ^= command -> TC_code; - memory_transfer_buffer[memory_buffer_index] = TC_msb; - memory_buffer_index++; - memory_transfer_buffer[memory_buffer_index] = command -> TC_code; - memory_buffer_index++; + memory_transfer_buffer[ memory_buffer_index ] = TC_msb; + memory_buffer_index++; + memory_transfer_buffer[ memory_buffer_index ] = command -> TC_code; + memory_buffer_index++; - TC_timeout = WRITE_MEMORY_TIMEOUT; - } + TC_timeout = WRITE_MEMORY_TIMEOUT; + } - else - { - /* Now all bytes for memory area to be patched have been */ - /* received. */ + else { + /* Now all bytes for memory area to be patched have been */ + /* received. */ - if (write_checksum == command -> TC_code) - { - /* Checksum Ok. */ - - address = ((unsigned int)address_MSB)*256 + address_LSB; - - switch (memory_type) - { - case data_e: - /* Write to the data memory. */ - - if (address <= (END_SRAM3 - MEM_BUFFER_SIZE + 1)) - { - _Pragma("loopbound min 32 max 32") - for(i=0; i<MEM_BUFFER_SIZE; i++) - { - SET_DATA_BYTE(address + i, memory_transfer_buffer[i]); - } - } - - else - { - Set_TC_Error(); - } - - break; - - case code_e: - /* Write to the code memory. */ - - if ((address >= BEGIN_SRAM1) && - (address <= END_SRAM1 - MEM_BUFFER_SIZE + 1) && - (PatchExecCommandOk (TC_msb))) - - { - /* Destination section resides in SRAM1. */ - - code_not_patched = 0; - /* Next code checksum not valid, because code memory */ - /* will be patched. */ - - patch_info.source = memory_transfer_buffer, - patch_info.destination = address, - patch_info.data_amount = MEM_BUFFER_SIZE, - patch_info.execution_command = TC_msb; - /* Set parameters for the MemoryPatch function */ - /* (see definition of memory_patch_variables_t). */ - - PatchCode(&patch_info); - /* May or may not return here. */ - } - - else - { - /* Destination section out side SRAM1. */ - Set_TC_Error(); - } - - break; - } - } + if ( write_checksum == command -> TC_code ) { + /* Checksum Ok. */ - else - { - /* Checksum failure. */ + address = ( ( unsigned int )address_MSB ) * 256 + address_LSB; + + switch ( memory_type ) { + case data_e: + /* Write to the data memory. */ + + if ( address <= ( END_SRAM3 - MEM_BUFFER_SIZE + 1 ) ) { + _Pragma( "loopbound min 32 max 32" ) + for ( i = 0; i < MEM_BUFFER_SIZE; i++ ) + SET_DATA_BYTE( address + i, memory_transfer_buffer[ i ] ); + } + + else + Set_TC_Error(); + + break; - SetModeStatusError(MEMORY_WRITE_ERROR); - /* Set memory write error bit in Mode Status register. */ + case code_e: + /* Write to the code memory. */ + + if ( ( address >= BEGIN_SRAM1 ) && + ( address <= END_SRAM1 - MEM_BUFFER_SIZE + 1 ) && + ( PatchExecCommandOk ( TC_msb ) ) ) + + { + /* Destination section resides in SRAM1. */ + + code_not_patched = 0; + /* Next code checksum not valid, because code memory */ + /* will be patched. */ + + patch_info.source = memory_transfer_buffer, + patch_info.destination = address, + patch_info.data_amount = MEM_BUFFER_SIZE, + patch_info.execution_command = TC_msb; + /* Set parameters for the MemoryPatch function */ + /* (see definition of memory_patch_variables_t). */ + + PatchCode( &patch_info ); + /* May or may not return here. */ + } + + else { + /* Destination section out side SRAM1. */ + Set_TC_Error(); + } + + break; } + } + + else { + /* Checksum failure. */ - TC_state = TC_handling_e; - } + SetModeStatusError( MEMORY_WRITE_ERROR ); + /* Set memory write error bit in Mode Status register. */ + } + + TC_state = TC_handling_e; + } } -void WriteMemory(telecommand_t EXTERNAL *command) +void WriteMemory( telecommand_t EXTERNAL *command ) /* Purpose : Handles received telecommand in the WriteMemory state */ /* Interface : inputs - Parameter "command" containing received */ /* telecommand or memory byte */ @@ -744,32 +706,30 @@ void WriteMemory(telecommand_t EXTERNAL *command) /* - set TC state to TC_handling_e */ { - /* Expecting LSB of the start address for the memory area to be patched. */ + /* Expecting LSB of the start address for the memory area to be patched. */ - write_checksum ^= ((command -> TC_word) >> 8) ^ (command -> TC_code); + write_checksum ^= ( ( command -> TC_word ) >> 8 ) ^ ( command -> TC_code ); - if ( ( (command -> TC_address == WRITE_CODE_MEMORY_LSB) - && (memory_type == code_e)) - || ( (command -> TC_address == WRITE_DATA_MEMORY_LSB) - && (memory_type == data_e))) - { - TC_state = memory_patch_e; + if ( ( ( command -> TC_address == WRITE_CODE_MEMORY_LSB ) + && ( memory_type == code_e ) ) + || ( ( command -> TC_address == WRITE_DATA_MEMORY_LSB ) + && ( memory_type == data_e ) ) ) { + TC_state = memory_patch_e; - address_LSB = command -> TC_code; - memory_buffer_index = 0; - TC_timeout = WRITE_MEMORY_TIMEOUT; - } + address_LSB = command -> TC_code; + memory_buffer_index = 0; + TC_timeout = WRITE_MEMORY_TIMEOUT; + } - else - { - TC_state = TC_handling_e; + else { + TC_state = TC_handling_e; - Set_TC_Error(); - } + Set_TC_Error(); + } } -void UpdateTarget(telecommand_t EXTERNAL *command) +void UpdateTarget( telecommand_t EXTERNAL *command ) /* Purpose : Updates a HW register or some global variable according */ /* to the parameter "command" */ /* Interface : inputs - Parameter "command" containing received */ @@ -798,397 +758,382 @@ void UpdateTarget(telecommand_t EXTERNAL *command) /* - case Set Threshold */ /* set Threshold according to "command" */ { - EXTERNAL sensor_unit_t SU_setting; - /* Holds parameters for "SetSensorUnit" operation */ - /* Must be in external memory, because the parameter to the function */ - /* is pointer to external memory */ + EXTERNAL sensor_unit_t SU_setting; + /* Holds parameters for "SetSensorUnit" operation */ + /* Must be in external memory, because the parameter to the function */ + /* is pointer to external memory */ + + EXTERNAL trigger_set_t new_threshold; - EXTERNAL trigger_set_t new_threshold; + dpu_time_t EXTERNAL new_time; + + sensor_index_t EXTERNAL SU_index; - dpu_time_t EXTERNAL new_time; + SU_index = ( ( command -> TC_address ) >> 4 ) - 2; + + + switch ( command -> TC_address ) { + case SET_COEFFICIENT_1: + case SET_COEFFICIENT_2: + case SET_COEFFICIENT_3: + case SET_COEFFICIENT_4: + case SET_COEFFICIENT_5: + + telemetry_data.coefficient[ ( command -> TC_address ) & 0x07 ] = + command -> TC_code; + break; + + case SET_SU_1_PLASMA_1E_1I_MAX_TIME: + case SET_SU_2_PLASMA_1E_1I_MAX_TIME: + case SET_SU_3_PLASMA_1E_1I_MAX_TIME: + case SET_SU_4_PLASMA_1E_1I_MAX_TIME: - sensor_index_t EXTERNAL SU_index; + SU_config[ SU_index ] -> plasma_1_plus_to_minus_max_time = + command -> TC_code; + break; - SU_index = ((command -> TC_address) >> 4) - 2; + case SET_SU_1_PLASMA_1E_PZT_MIN_TIME: + case SET_SU_2_PLASMA_1E_PZT_MIN_TIME: + case SET_SU_3_PLASMA_1E_PZT_MIN_TIME: + case SET_SU_4_PLASMA_1E_PZT_MIN_TIME: + SU_config[ SU_index ] -> plasma_1_plus_to_piezo_min_time = + command -> TC_code; + break; - switch (command -> TC_address) - { - case SET_COEFFICIENT_1: - case SET_COEFFICIENT_2: - case SET_COEFFICIENT_3: - case SET_COEFFICIENT_4: - case SET_COEFFICIENT_5: + case SET_SU_1_PLASMA_1E_PZT_MAX_TIME: + case SET_SU_2_PLASMA_1E_PZT_MAX_TIME: + case SET_SU_3_PLASMA_1E_PZT_MAX_TIME: + case SET_SU_4_PLASMA_1E_PZT_MAX_TIME: - telemetry_data.coefficient[(command -> TC_address)&0x07] = - command -> TC_code; - break; + SU_config[ SU_index ] -> plasma_1_plus_to_piezo_max_time = + command -> TC_code; + break; - case SET_SU_1_PLASMA_1E_1I_MAX_TIME: - case SET_SU_2_PLASMA_1E_1I_MAX_TIME: - case SET_SU_3_PLASMA_1E_1I_MAX_TIME: - case SET_SU_4_PLASMA_1E_1I_MAX_TIME: + case SET_SU_1_PLASMA_1I_PZT_MIN_TIME: + case SET_SU_2_PLASMA_1I_PZT_MIN_TIME: + case SET_SU_3_PLASMA_1I_PZT_MIN_TIME: + case SET_SU_4_PLASMA_1I_PZT_MIN_TIME: - SU_config[SU_index] -> plasma_1_plus_to_minus_max_time = - command -> TC_code; - break; + SU_config[ SU_index ] -> plasma_1_minus_to_piezo_min_time = + command -> TC_code; + break; - case SET_SU_1_PLASMA_1E_PZT_MIN_TIME: - case SET_SU_2_PLASMA_1E_PZT_MIN_TIME: - case SET_SU_3_PLASMA_1E_PZT_MIN_TIME: - case SET_SU_4_PLASMA_1E_PZT_MIN_TIME: + case SET_SU_1_PLASMA_1I_PZT_MAX_TIME: + case SET_SU_2_PLASMA_1I_PZT_MAX_TIME: + case SET_SU_3_PLASMA_1I_PZT_MAX_TIME: + case SET_SU_4_PLASMA_1I_PZT_MAX_TIME: - SU_config[SU_index] -> plasma_1_plus_to_piezo_min_time = - command -> TC_code; - break; + SU_config[ SU_index ] -> plasma_1_minus_to_piezo_max_time = + command -> TC_code; + break; - case SET_SU_1_PLASMA_1E_PZT_MAX_TIME: - case SET_SU_2_PLASMA_1E_PZT_MAX_TIME: - case SET_SU_3_PLASMA_1E_PZT_MAX_TIME: - case SET_SU_4_PLASMA_1E_PZT_MAX_TIME: + case SET_SU_1_PLASMA_1P_CLASS_LEVEL: + case SET_SU_2_PLASMA_1P_CLASS_LEVEL: + case SET_SU_3_PLASMA_1P_CLASS_LEVEL: + case SET_SU_4_PLASMA_1P_CLASS_LEVEL: - SU_config[SU_index] -> plasma_1_plus_to_piezo_max_time = - command -> TC_code; - break; + SU_config[ SU_index ] -> plasma_1_plus_classification = + command -> TC_code; + break; - case SET_SU_1_PLASMA_1I_PZT_MIN_TIME: - case SET_SU_2_PLASMA_1I_PZT_MIN_TIME: - case SET_SU_3_PLASMA_1I_PZT_MIN_TIME: - case SET_SU_4_PLASMA_1I_PZT_MIN_TIME: + case SET_SU_1_PLASMA_1M_CLASS_LEVEL: + case SET_SU_2_PLASMA_1M_CLASS_LEVEL: + case SET_SU_3_PLASMA_1M_CLASS_LEVEL: + case SET_SU_4_PLASMA_1M_CLASS_LEVEL: - SU_config[SU_index] -> plasma_1_minus_to_piezo_min_time = - command -> TC_code; - break; - - case SET_SU_1_PLASMA_1I_PZT_MAX_TIME: - case SET_SU_2_PLASMA_1I_PZT_MAX_TIME: - case SET_SU_3_PLASMA_1I_PZT_MAX_TIME: - case SET_SU_4_PLASMA_1I_PZT_MAX_TIME: - - SU_config[SU_index] -> plasma_1_minus_to_piezo_max_time = - command -> TC_code; - break; - - case SET_SU_1_PLASMA_1P_CLASS_LEVEL: - case SET_SU_2_PLASMA_1P_CLASS_LEVEL: - case SET_SU_3_PLASMA_1P_CLASS_LEVEL: - case SET_SU_4_PLASMA_1P_CLASS_LEVEL: - - SU_config[SU_index] -> plasma_1_plus_classification = - command -> TC_code; - break; - - case SET_SU_1_PLASMA_1M_CLASS_LEVEL: - case SET_SU_2_PLASMA_1M_CLASS_LEVEL: - case SET_SU_3_PLASMA_1M_CLASS_LEVEL: - case SET_SU_4_PLASMA_1M_CLASS_LEVEL: - - SU_config[SU_index] -> plasma_1_minus_classification = - command -> TC_code; - break; + SU_config[ SU_index ] -> plasma_1_minus_classification = + command -> TC_code; + break; - case SET_SU_1_PLASMA_2P_CLASS_LEVEL: - case SET_SU_2_PLASMA_2P_CLASS_LEVEL: - case SET_SU_3_PLASMA_2P_CLASS_LEVEL: - case SET_SU_4_PLASMA_2P_CLASS_LEVEL: + case SET_SU_1_PLASMA_2P_CLASS_LEVEL: + case SET_SU_2_PLASMA_2P_CLASS_LEVEL: + case SET_SU_3_PLASMA_2P_CLASS_LEVEL: + case SET_SU_4_PLASMA_2P_CLASS_LEVEL: - SU_config[SU_index] -> plasma_2_plus_classification = - command -> TC_code; - break; + SU_config[ SU_index ] -> plasma_2_plus_classification = + command -> TC_code; + break; - case SET_SU_1_PIEZO_1_CLASS_LEVEL: - case SET_SU_2_PIEZO_1_CLASS_LEVEL: - case SET_SU_3_PIEZO_1_CLASS_LEVEL: - case SET_SU_4_PIEZO_1_CLASS_LEVEL: + case SET_SU_1_PIEZO_1_CLASS_LEVEL: + case SET_SU_2_PIEZO_1_CLASS_LEVEL: + case SET_SU_3_PIEZO_1_CLASS_LEVEL: + case SET_SU_4_PIEZO_1_CLASS_LEVEL: - SU_config[SU_index] -> piezo_1_classification = - command -> TC_code; - break; + SU_config[ SU_index ] -> piezo_1_classification = + command -> TC_code; + break; - case SET_SU_1_PIEZO_2_CLASS_LEVEL: - case SET_SU_2_PIEZO_2_CLASS_LEVEL: - case SET_SU_3_PIEZO_2_CLASS_LEVEL: - case SET_SU_4_PIEZO_2_CLASS_LEVEL: + case SET_SU_1_PIEZO_2_CLASS_LEVEL: + case SET_SU_2_PIEZO_2_CLASS_LEVEL: + case SET_SU_3_PIEZO_2_CLASS_LEVEL: + case SET_SU_4_PIEZO_2_CLASS_LEVEL: - SU_config[SU_index] -> piezo_2_classification = - command -> TC_code; - break; + SU_config[ SU_index ] -> piezo_2_classification = + command -> TC_code; + break; - case ERROR_STATUS_CLEAR: + case ERROR_STATUS_CLEAR: - ClearErrorStatus(); - Clear_RTX_Errors(); - ClearSoftwareError(); - ClearModeStatusError(); - Clear_SU_Error(); - /* Clear Error Status register, RTX and software error indicating bits */ - /* and Mode and SU Status registers. */ + ClearErrorStatus(); + Clear_RTX_Errors(); + ClearSoftwareError(); + ClearModeStatusError(); + Clear_SU_Error(); + /* Clear Error Status register, RTX and software error indicating bits */ + /* and Mode and SU Status registers. */ - break; + break; - case SET_TIME_BYTE_3: + case SET_TIME_BYTE_3: - new_time = ((dpu_time_t) command -> TC_code) << 24; - COPY (internal_time, new_time); - TC_timeout = SET_TIME_TC_TIMEOUT; + new_time = ( ( dpu_time_t ) command -> TC_code ) << 24; + COPY ( internal_time, new_time ); + TC_timeout = SET_TIME_TC_TIMEOUT; - break; + break; - case SET_TIME_BYTE_2: + case SET_TIME_BYTE_2: - if (previous_TC.TC_address == SET_TIME_BYTE_3) - { - COPY (new_time, internal_time); + if ( previous_TC.TC_address == SET_TIME_BYTE_3 ) { + COPY ( new_time, internal_time ); - new_time &= 0xFF000000; - new_time |= - ((dpu_time_t) command -> TC_code) << 16; + new_time &= 0xFF000000; + new_time |= + ( ( dpu_time_t ) command -> TC_code ) << 16; - COPY (internal_time, new_time); + COPY ( internal_time, new_time ); - TC_timeout = SET_TIME_TC_TIMEOUT; - } + TC_timeout = SET_TIME_TC_TIMEOUT; + } - else - { - Set_TC_Error(); - } + else + Set_TC_Error(); - break; + break; - case SET_TIME_BYTE_1: + case SET_TIME_BYTE_1: - if (previous_TC.TC_address == SET_TIME_BYTE_2) - { - COPY (new_time, internal_time); + if ( previous_TC.TC_address == SET_TIME_BYTE_2 ) { + COPY ( new_time, internal_time ); - new_time &= 0xFFFF0000; - new_time |= - ((dpu_time_t) command -> TC_code) << 8; + new_time &= 0xFFFF0000; + new_time |= + ( ( dpu_time_t ) command -> TC_code ) << 8; - COPY (internal_time, new_time); + COPY ( internal_time, new_time ); - TC_timeout = SET_TIME_TC_TIMEOUT; - } + TC_timeout = SET_TIME_TC_TIMEOUT; + } - else - { - Set_TC_Error(); - } + else + Set_TC_Error(); - break; + break; - case SET_TIME_BYTE_0: + case SET_TIME_BYTE_0: - if (previous_TC.TC_address == SET_TIME_BYTE_1) - { - COPY (new_time, internal_time); + if ( previous_TC.TC_address == SET_TIME_BYTE_1 ) { + COPY ( new_time, internal_time ); - new_time &= 0xFFFFFF00; - new_time |= - ((dpu_time_t) command -> TC_code); + new_time &= 0xFFFFFF00; + new_time |= + ( ( dpu_time_t ) command -> TC_code ); - COPY (internal_time, new_time); - } + COPY ( internal_time, new_time ); + } - else - { - Set_TC_Error(); - } + else + Set_TC_Error(); - break; + break; - case CLEAR_WATCHDOG_FAILURES: + case CLEAR_WATCHDOG_FAILURES: - telemetry_data.watchdog_failures = 0; - break; + telemetry_data.watchdog_failures = 0; + break; - case CLEAR_CHECKSUM_FAILURES: + case CLEAR_CHECKSUM_FAILURES: - telemetry_data.checksum_failures = 0; - break; + telemetry_data.checksum_failures = 0; + break; - case SWITCH_SU_1: - case SWITCH_SU_2: - case SWITCH_SU_3: - case SWITCH_SU_4: + case SWITCH_SU_1: + case SWITCH_SU_2: + case SWITCH_SU_3: + case SWITCH_SU_4: - if (GetMode() != ACQUISITION) - { - SU_setting.SU_number = SU_index + SU_1; + if ( GetMode() != ACQUISITION ) { + SU_setting.SU_number = SU_index + SU_1; - switch (command -> TC_code) - { - case ON_VALUE: - Start_SU_SwitchingOn(SU_index, & - (SU_setting.execution_result)); - break; + switch ( command -> TC_code ) { + case ON_VALUE: + Start_SU_SwitchingOn( SU_index, & + ( SU_setting.execution_result ) ); + break; - case OFF_VALUE: - SetSensorUnitOff(SU_index, &(SU_setting.execution_result)); - break; + case OFF_VALUE: + SetSensorUnitOff( SU_index, &( SU_setting.execution_result ) ); + break; - case SELF_TEST: - SU_setting.SU_state = self_test_mon_e; - SU_setting.expected_source_state = on_e; - Switch_SU_State (&SU_setting); - break; - } + case SELF_TEST: + SU_setting.SU_state = self_test_mon_e; + SU_setting.expected_source_state = on_e; + Switch_SU_State ( &SU_setting ); + break; + } - if (SU_setting.execution_result == SU_STATE_TRANSITION_FAILED) - { - /* The requested SU state transition failed. */ + if ( SU_setting.execution_result == SU_STATE_TRANSITION_FAILED ) { + /* The requested SU state transition failed. */ - Set_TC_Error(); - } + Set_TC_Error(); + } - } + } - else + else - { - Set_TC_Error(); - } + Set_TC_Error(); - break; + break; - case SET_SU_1_PLASMA_1P_THRESHOLD: + case SET_SU_1_PLASMA_1P_THRESHOLD: - new_threshold.sensor_unit = SU_1; - new_threshold.channel = PLASMA_1_PLUS; - new_threshold.level = command -> TC_code; - SetTriggerLevel(&new_threshold); + new_threshold.sensor_unit = SU_1; + new_threshold.channel = PLASMA_1_PLUS; + new_threshold.level = command -> TC_code; + SetTriggerLevel( &new_threshold ); - telemetry_data.sensor_unit_1.plasma_1_plus_threshold = - command -> TC_code; - break; + telemetry_data.sensor_unit_1.plasma_1_plus_threshold = + command -> TC_code; + break; - case SET_SU_2_PLASMA_1P_THRESHOLD: + case SET_SU_2_PLASMA_1P_THRESHOLD: - new_threshold.sensor_unit = SU_2; - new_threshold.channel = PLASMA_1_PLUS; - new_threshold.level = command -> TC_code; - SetTriggerLevel(&new_threshold); + new_threshold.sensor_unit = SU_2; + new_threshold.channel = PLASMA_1_PLUS; + new_threshold.level = command -> TC_code; + SetTriggerLevel( &new_threshold ); - telemetry_data.sensor_unit_2.plasma_1_plus_threshold = - command -> TC_code; - break; + telemetry_data.sensor_unit_2.plasma_1_plus_threshold = + command -> TC_code; + break; - case SET_SU_3_PLASMA_1P_THRESHOLD: + case SET_SU_3_PLASMA_1P_THRESHOLD: - new_threshold.sensor_unit = SU_3; - new_threshold.channel = PLASMA_1_PLUS; - new_threshold.level = command -> TC_code; - SetTriggerLevel(&new_threshold); + new_threshold.sensor_unit = SU_3; + new_threshold.channel = PLASMA_1_PLUS; + new_threshold.level = command -> TC_code; + SetTriggerLevel( &new_threshold ); - telemetry_data.sensor_unit_3.plasma_1_plus_threshold = - command -> TC_code; - break; + telemetry_data.sensor_unit_3.plasma_1_plus_threshold = + command -> TC_code; + break; - case SET_SU_4_PLASMA_1P_THRESHOLD: + case SET_SU_4_PLASMA_1P_THRESHOLD: - new_threshold.sensor_unit = SU_4; - new_threshold.channel = PLASMA_1_PLUS; - new_threshold.level = command -> TC_code; - SetTriggerLevel(&new_threshold); + new_threshold.sensor_unit = SU_4; + new_threshold.channel = PLASMA_1_PLUS; + new_threshold.level = command -> TC_code; + SetTriggerLevel( &new_threshold ); - telemetry_data.sensor_unit_4.plasma_1_plus_threshold = - command -> TC_code; - break; + telemetry_data.sensor_unit_4.plasma_1_plus_threshold = + command -> TC_code; + break; - case SET_SU_1_PLASMA_1M_THRESHOLD: + case SET_SU_1_PLASMA_1M_THRESHOLD: - new_threshold.sensor_unit = SU_1; - new_threshold.channel = PLASMA_1_MINUS; - new_threshold.level = command -> TC_code; - SetTriggerLevel(&new_threshold); + new_threshold.sensor_unit = SU_1; + new_threshold.channel = PLASMA_1_MINUS; + new_threshold.level = command -> TC_code; + SetTriggerLevel( &new_threshold ); - telemetry_data.sensor_unit_1.plasma_1_minus_threshold = - command -> TC_code; - break; + telemetry_data.sensor_unit_1.plasma_1_minus_threshold = + command -> TC_code; + break; - case SET_SU_2_PLASMA_1M_THRESHOLD: + case SET_SU_2_PLASMA_1M_THRESHOLD: - new_threshold.sensor_unit = SU_2; - new_threshold.channel = PLASMA_1_MINUS; - new_threshold.level = command -> TC_code; - SetTriggerLevel(&new_threshold); + new_threshold.sensor_unit = SU_2; + new_threshold.channel = PLASMA_1_MINUS; + new_threshold.level = command -> TC_code; + SetTriggerLevel( &new_threshold ); - telemetry_data.sensor_unit_2.plasma_1_minus_threshold = - command -> TC_code; - break; + telemetry_data.sensor_unit_2.plasma_1_minus_threshold = + command -> TC_code; + break; - case SET_SU_3_PLASMA_1M_THRESHOLD: + case SET_SU_3_PLASMA_1M_THRESHOLD: - new_threshold.sensor_unit = SU_3; - new_threshold.channel = PLASMA_1_MINUS; - new_threshold.level = command -> TC_code; - SetTriggerLevel(&new_threshold); + new_threshold.sensor_unit = SU_3; + new_threshold.channel = PLASMA_1_MINUS; + new_threshold.level = command -> TC_code; + SetTriggerLevel( &new_threshold ); - telemetry_data.sensor_unit_3.plasma_1_minus_threshold = - command -> TC_code; - break; + telemetry_data.sensor_unit_3.plasma_1_minus_threshold = + command -> TC_code; + break; - case SET_SU_4_PLASMA_1M_THRESHOLD: + case SET_SU_4_PLASMA_1M_THRESHOLD: - new_threshold.sensor_unit = SU_4; - new_threshold.channel = PLASMA_1_MINUS; - new_threshold.level = command -> TC_code; - SetTriggerLevel(&new_threshold); + new_threshold.sensor_unit = SU_4; + new_threshold.channel = PLASMA_1_MINUS; + new_threshold.level = command -> TC_code; + SetTriggerLevel( &new_threshold ); - telemetry_data.sensor_unit_4.plasma_1_minus_threshold = - command -> TC_code; - break; + telemetry_data.sensor_unit_4.plasma_1_minus_threshold = + command -> TC_code; + break; - case SET_SU_1_PIEZO_THRESHOLD: + case SET_SU_1_PIEZO_THRESHOLD: - new_threshold.sensor_unit = SU_1; - new_threshold.channel = PZT_1_2; - new_threshold.level = command -> TC_code; - SetTriggerLevel(&new_threshold); + new_threshold.sensor_unit = SU_1; + new_threshold.channel = PZT_1_2; + new_threshold.level = command -> TC_code; + SetTriggerLevel( &new_threshold ); - telemetry_data.sensor_unit_1.piezo_threshold = command -> TC_code; - break; + telemetry_data.sensor_unit_1.piezo_threshold = command -> TC_code; + break; - case SET_SU_2_PIEZO_THRESHOLD: + case SET_SU_2_PIEZO_THRESHOLD: - new_threshold.sensor_unit = SU_2; - new_threshold.channel = PZT_1_2; - new_threshold.level = command -> TC_code; - SetTriggerLevel(&new_threshold); + new_threshold.sensor_unit = SU_2; + new_threshold.channel = PZT_1_2; + new_threshold.level = command -> TC_code; + SetTriggerLevel( &new_threshold ); - telemetry_data.sensor_unit_2.piezo_threshold = command -> TC_code; - break; + telemetry_data.sensor_unit_2.piezo_threshold = command -> TC_code; + break; - case SET_SU_3_PIEZO_THRESHOLD: + case SET_SU_3_PIEZO_THRESHOLD: - new_threshold.sensor_unit = SU_3; - new_threshold.channel = PZT_1_2; - new_threshold.level = command -> TC_code; - SetTriggerLevel(&new_threshold); + new_threshold.sensor_unit = SU_3; + new_threshold.channel = PZT_1_2; + new_threshold.level = command -> TC_code; + SetTriggerLevel( &new_threshold ); - telemetry_data.sensor_unit_3.piezo_threshold = command -> TC_code; - break; + telemetry_data.sensor_unit_3.piezo_threshold = command -> TC_code; + break; - case SET_SU_4_PIEZO_THRESHOLD: + case SET_SU_4_PIEZO_THRESHOLD: - new_threshold.sensor_unit = SU_4; - new_threshold.channel = PZT_1_2; - new_threshold.level = command -> TC_code; - SetTriggerLevel(&new_threshold); + new_threshold.sensor_unit = SU_4; + new_threshold.channel = PZT_1_2; + new_threshold.level = command -> TC_code; + SetTriggerLevel( &new_threshold ); - telemetry_data.sensor_unit_4.piezo_threshold = command -> TC_code; - break; + telemetry_data.sensor_unit_4.piezo_threshold = command -> TC_code; + break; - default: - /* Telecommands that will not be implemented in the Prototype SW */ - break; - } + default: + /* Telecommands that will not be implemented in the Prototype SW */ + break; + } } -void ExecuteCommand(telecommand_t EXTERNAL *command) +void ExecuteCommand( telecommand_t EXTERNAL *command ) /* Purpose : Executes telecommand */ /* Interface : inputs - Parameter "command" containing received */ /* telecommand */ @@ -1234,166 +1179,149 @@ void ExecuteCommand(telecommand_t EXTERNAL *command) /* - default : call UpdateTarget */ { - sensor_unit_t EXTERNAL SU_setting; - unsigned char error_flag; - sensor_number_t i; - - switch (command -> TC_address) - { - case SEND_SCIENCE_DATA_FILE: - break; - - case SEND_STATUS_REGISTER: - break; - - case READ_DATA_MEMORY_MSB: - address_MSB = command -> TC_code; - TC_state = read_memory_e; - break; - - case WRITE_CODE_MEMORY_MSB: - if (GetMode() == STAND_BY) - { - address_MSB = command -> TC_code; - memory_type = code_e; - TC_timeout = WRITE_MEMORY_TIMEOUT; - write_checksum = - ((command -> TC_word) >> 8) ^ (command -> TC_code); - TC_state = write_memory_e; - } - - else - { - Set_TC_Error(); - } - - break; - - case WRITE_DATA_MEMORY_MSB: - if (GetMode() == STAND_BY) - { - address_MSB = command -> TC_code; - memory_type = data_e; - TC_timeout = WRITE_MEMORY_TIMEOUT; - write_checksum = - ((command -> TC_word) >> 8) ^ (command -> TC_code); - TC_state = write_memory_e; - } + sensor_unit_t EXTERNAL SU_setting; + unsigned char error_flag; + sensor_number_t i; + + switch ( command -> TC_address ) { + case SEND_SCIENCE_DATA_FILE: + break; + + case SEND_STATUS_REGISTER: + break; + + case READ_DATA_MEMORY_MSB: + address_MSB = command -> TC_code; + TC_state = read_memory_e; + break; + + case WRITE_CODE_MEMORY_MSB: + if ( GetMode() == STAND_BY ) { + address_MSB = command -> TC_code; + memory_type = code_e; + TC_timeout = WRITE_MEMORY_TIMEOUT; + write_checksum = + ( ( command -> TC_word ) >> 8 ) ^ ( command -> TC_code ); + TC_state = write_memory_e; + } - else - { - Set_TC_Error(); - } + else + Set_TC_Error(); + + break; + + case WRITE_DATA_MEMORY_MSB: + if ( GetMode() == STAND_BY ) { + address_MSB = command -> TC_code; + memory_type = data_e; + TC_timeout = WRITE_MEMORY_TIMEOUT; + write_checksum = + ( ( command -> TC_word ) >> 8 ) ^ ( command -> TC_code ); + TC_state = write_memory_e; + } - break; + else + Set_TC_Error(); - case READ_DATA_MEMORY_LSB: - break; + break; - case WRITE_CODE_MEMORY_LSB: - case WRITE_DATA_MEMORY_LSB: - if (TC_state != write_memory_e) - { - Set_TC_Error(); - } - break; - - case SOFT_RESET: - Reboot(soft_reset_e); - /* Software is rebooted, no return to this point. */ - - break; - - case START_ACQUISITION: - error_flag = 0; - - _Pragma("loopbound min 4 max 4") - for (i=SU_1; i<=SU_4; i++) - { - if ((ReadSensorUnit(i) == start_switching_e) || - (ReadSensorUnit(i) == switching_e)) - { - /* SU is being switched on. */ - - error_flag = 1; - /* StartAcquisition TC has to be rejected. */ - } - } - - if ((GetMode() == STAND_BY) && (error_flag == 0)) - { - SU_setting.SU_state = acquisition_e; - SU_setting.expected_source_state = on_e; + case READ_DATA_MEMORY_LSB: + break; - SU_setting.SU_number = SU_1; - Switch_SU_State (&SU_setting); - /* Try to switch SU 1 to Acquisition state. */ + case WRITE_CODE_MEMORY_LSB: + case WRITE_DATA_MEMORY_LSB: + if ( TC_state != write_memory_e ) + Set_TC_Error(); + break; - SU_setting.SU_number = SU_2; - Switch_SU_State (&SU_setting); - /* Try to switch SU 2 to Acquisition state. */ + case SOFT_RESET: + Reboot( soft_reset_e ); + /* Software is rebooted, no return to this point. */ - SU_setting.SU_number = SU_3; - Switch_SU_State (&SU_setting); - /* Try to switch SU 3 to Acquisition state. */ + break; - SU_setting.SU_number = SU_4; - Switch_SU_State (&SU_setting); - /* Try to switch SU 4 to Acquisition state. */ + case START_ACQUISITION: + error_flag = 0; - CLEAR_HIT_TRIGGER_ISR_FLAG; + _Pragma( "loopbound min 4 max 4" ) + for ( i = SU_1; i <= SU_4; i++ ) { + if ( ( ReadSensorUnit( i ) == start_switching_e ) || + ( ReadSensorUnit( i ) == switching_e ) ) { + /* SU is being switched on. */ - ResetDelayCounters(); - /* Resets the SU logic that generates Hit Triggers. */ - /* Brings T2EX to a high level, making a new falling */ - /* edge possible. */ - /* This statement must come after the above "clear", */ - /* because a reversed order could create a deadlock */ - /* situation. */ + error_flag = 1; + /* StartAcquisition TC has to be rejected. */ + } + } - SetMode(ACQUISITION); - } + if ( ( GetMode() == STAND_BY ) && ( error_flag == 0 ) ) { + SU_setting.SU_state = acquisition_e; + SU_setting.expected_source_state = on_e; - else - { - Set_TC_Error(); - } - break; + SU_setting.SU_number = SU_1; + Switch_SU_State ( &SU_setting ); + /* Try to switch SU 1 to Acquisition state. */ - case STOP_ACQUISITION: - if (GetMode() == ACQUISITION) - { - SU_setting.SU_state = on_e; - SU_setting.expected_source_state = acquisition_e; + SU_setting.SU_number = SU_2; + Switch_SU_State ( &SU_setting ); + /* Try to switch SU 2 to Acquisition state. */ - SU_setting.SU_number = SU_1; - Switch_SU_State (&SU_setting); - /* Try to switch SU 1 to On state. */ + SU_setting.SU_number = SU_3; + Switch_SU_State ( &SU_setting ); + /* Try to switch SU 3 to Acquisition state. */ - SU_setting.SU_number = SU_2; - Switch_SU_State (&SU_setting); - /* Try to switch SU 2 to On state. */ + SU_setting.SU_number = SU_4; + Switch_SU_State ( &SU_setting ); + /* Try to switch SU 4 to Acquisition state. */ - SU_setting.SU_number = SU_3; - Switch_SU_State (&SU_setting); - /* Try to switch SU 3 to On state. */ + CLEAR_HIT_TRIGGER_ISR_FLAG; - SU_setting.SU_number = SU_4; - Switch_SU_State (&SU_setting); - /* Try to switch SU 4 to On state. */ + ResetDelayCounters(); + /* Resets the SU logic that generates Hit Triggers. */ + /* Brings T2EX to a high level, making a new falling */ + /* edge possible. */ + /* This statement must come after the above "clear", */ + /* because a reversed order could create a deadlock */ + /* situation. */ - SetMode(STAND_BY); - } + SetMode( ACQUISITION ); + } - else - { - Set_TC_Error(); - } - break; + else + Set_TC_Error(); + break; + + case STOP_ACQUISITION: + if ( GetMode() == ACQUISITION ) { + SU_setting.SU_state = on_e; + SU_setting.expected_source_state = acquisition_e; + + SU_setting.SU_number = SU_1; + Switch_SU_State ( &SU_setting ); + /* Try to switch SU 1 to On state. */ + + SU_setting.SU_number = SU_2; + Switch_SU_State ( &SU_setting ); + /* Try to switch SU 2 to On state. */ - default: - UpdateTarget(command); - } + SU_setting.SU_number = SU_3; + Switch_SU_State ( &SU_setting ); + /* Try to switch SU 3 to On state. */ + + SU_setting.SU_number = SU_4; + Switch_SU_State ( &SU_setting ); + /* Try to switch SU 4 to On state. */ + + SetMode( STAND_BY ); + } + + else + Set_TC_Error(); + break; + + default: + UpdateTarget( command ); + } } @@ -1408,7 +1336,7 @@ static EXTERNAL telecommand_t received_command; /* to xdata area). */ -void _Pragma("entrypoint") InitTelecommandTask (void) +void _Pragma( "entrypoint" ) InitTelecommandTask ( void ) /* Purpose : Initialize the global state of Telecommand Execution */ /* Interface : inputs - none */ @@ -1420,25 +1348,25 @@ void _Pragma("entrypoint") InitTelecommandTask (void) /* Algorithm : - initialize task variables. */ { - InitTC_LookUp(); + InitTC_LookUp(); - TC_state = TC_handling_e; + TC_state = TC_handling_e; - TC_mail.mailbox_number = TCTM_MAILBOX; - TC_mail.message = &(received_command.TC_word); - /* Parameters for mail waiting function. */ - /* Time-out set separately. */ + TC_mail.mailbox_number = TCTM_MAILBOX; + TC_mail.message = &( received_command.TC_word ); + /* Parameters for mail waiting function. */ + /* Time-out set separately. */ - previous_TC.TC_word = 0; - previous_TC.TC_address = UNUSED_TC_ADDRESS; - previous_TC.TC_code = 0; + previous_TC.TC_word = 0; + previous_TC.TC_address = UNUSED_TC_ADDRESS; + previous_TC.TC_code = 0; - DisableInterrupt(TM_ISR_SOURCE); - EnableInterrupt(TC_ISR_SOURCE); + DisableInterrupt( TM_ISR_SOURCE ); + EnableInterrupt( TC_ISR_SOURCE ); } -void _Pragma("entrypoint") HandleTelecommand (void) +void _Pragma( "entrypoint" ) HandleTelecommand ( void ) /* Purpose : Waits for and handles one Telecommand from the TC ISR */ /* Interface : inputs - Telecommand Execution task mailbox */ @@ -1465,94 +1393,85 @@ void _Pragma("entrypoint") HandleTelecommand (void) /* require any functionalites of this task. */ { - TC_mail.timeout = TC_timeout; + TC_mail.timeout = TC_timeout; - WaitMail(&TC_mail); + WaitMail( &TC_mail ); - TC_timeout = 0; - /* Default value */ + TC_timeout = 0; + /* Default value */ - if (TC_mail.execution_result == TIMEOUT_OCCURRED) - { - previous_TC.TC_word = 0; - previous_TC.TC_address = UNUSED_TC_ADDRESS; - previous_TC.TC_code = 0; - /* Forget previous telecommand. */ + if ( TC_mail.execution_result == TIMEOUT_OCCURRED ) { + previous_TC.TC_word = 0; + previous_TC.TC_address = UNUSED_TC_ADDRESS; + previous_TC.TC_code = 0; + /* Forget previous telecommand. */ - if (TC_state != TC_handling_e) - { - /* Memory R/W time-out. */ - Set_TC_Error(); - } + if ( TC_state != TC_handling_e ) { + /* Memory R/W time-out. */ + Set_TC_Error(); + } - TC_state = TC_handling_e; - } + TC_state = TC_handling_e; + } - else if (TC_mail.execution_result == MSG_RECEIVED) - { - received_command.TC_address = TC_ADDRESS (received_command.TC_word); - received_command.TC_code = TC_CODE (received_command.TC_word); + else + if ( TC_mail.execution_result == MSG_RECEIVED ) { + received_command.TC_address = TC_ADDRESS ( received_command.TC_word ); + received_command.TC_code = TC_CODE ( received_command.TC_word ); - if (((TC_state == SC_TM_e) || (TC_state == memory_dump_e)) && - (received_command.TC_word == TM_READY)) + if ( ( ( TC_state == SC_TM_e ) || ( TC_state == memory_dump_e ) ) && + ( received_command.TC_word == TM_READY ) ) - /* Note that in order to this condition to be sufficient, only */ - /* TM interrupt service should be allowed to send mail to this */ - /* task in the TC states mentioned. */ + /* Note that in order to this condition to be sufficient, only */ + /* TM interrupt service should be allowed to send mail to this */ + /* task in the TC states mentioned. */ { - DisableInterrupt(TM_ISR_SOURCE); + DisableInterrupt( TM_ISR_SOURCE ); - if (TC_state == SC_TM_e) - { - ClearEvents(); - } + if ( TC_state == SC_TM_e ) + ClearEvents(); - TC_state = TC_handling_e; - } - else - { - switch (TC_state) - { + TC_state = TC_handling_e; + } else { + switch ( TC_state ) { - case read_memory_e: + case read_memory_e: - if (received_command.TC_address != READ_DATA_MEMORY_LSB) - { - Set_TC_Error(); - TC_state = TC_handling_e; - } + if ( received_command.TC_address != READ_DATA_MEMORY_LSB ) { + Set_TC_Error(); + TC_state = TC_handling_e; + } - break; + break; - case write_memory_e: - WriteMemory (&received_command); - break; + case write_memory_e: + WriteMemory ( &received_command ); + break; - case memory_patch_e: - MemoryPatch (&received_command); - break; + case memory_patch_e: + MemoryPatch ( &received_command ); + break; - case TC_handling_e: - ExecuteCommand (&received_command); - break; + case TC_handling_e: + ExecuteCommand ( &received_command ); + break; - } + } } - STRUCT_ASSIGN (previous_TC, received_command, telecommand_t); - } + STRUCT_ASSIGN ( previous_TC, received_command, telecommand_t ); + } - else - { + else { /* Nothing is done if WaitMail returns an error message. */ - } + } } -void TelecommandExecutionTask(void) TASK(TC_TM_INTERFACE_TASK) - PRIORITY(TC_TM_INTERFACE_PR) +void TelecommandExecutionTask( void ) TASK( TC_TM_INTERFACE_TASK ) +PRIORITY( TC_TM_INTERFACE_PR ) /* Purpose : Implements the highest level of Telecommand Execution */ /* task */ /* Interface : inputs - Telecommand Execution task mailbox */ @@ -1567,17 +1486,15 @@ void TelecommandExecutionTask(void) TASK(TC_TM_INTERFACE_TASK) /* - HandleTelecommand */ { - InitTelecommandTask (); + InitTelecommandTask (); - _Pragma("loopbound min 0 max 0") - while(1) - { - HandleTelecommand (); - } + _Pragma( "loopbound min 0 max 0" ) + while ( 1 ) + HandleTelecommand (); } -void Set_TC_Error(void) +void Set_TC_Error( void ) /* Purpose : This function will be called always when TC_ERROR bit in */ /* the ErrorStatus register is set. */ /* Interface : inputs - Error_status register */ @@ -1589,12 +1506,12 @@ void Set_TC_Error(void) /* - Write to Error Status register */ /* - Enable interrupts */ { - DISABLE_INTERRUPT_MASTER; + DISABLE_INTERRUPT_MASTER; - telemetry_data.error_status |= TC_ERROR; + telemetry_data.error_status |= TC_ERROR; - ENABLE_INTERRUPT_MASTER; + ENABLE_INTERRUPT_MASTER; } /*Assign pointers to tasks*/ -void (* EXTERNAL TC_task)(void) = TelecommandExecutionTask; +void ( * EXTERNAL TC_task )( void ) = TelecommandExecutionTask; diff --git a/bench/parallel/DEBIE/code/tc_hand.h b/bench/parallel/DEBIE/code/tc_hand.h index 2f110c8ac30a36f7c7e07ea8b59a1693c9d2183d..cb06d5a02ffe3846dc48f281fad86e9906a339fb 100644 --- a/bench/parallel/DEBIE/code/tc_hand.h +++ b/bench/parallel/DEBIE/code/tc_hand.h @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : tc_hand.h - * - * Prototypes etc. for the Telecommand Handler module, TC_Hand. - * - * Based on the SSF file tc_hand.h, rev 1.11, Mon Mar 22 11:39:54 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : tc_hand.h + + Prototypes etc. for the Telecommand Handler module, TC_Hand. + + Based on the SSF file tc_hand.h, rev 1.11, Mon Mar 22 11:39:54 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TC_HAND_H @@ -31,7 +31,7 @@ /* NOTE that all codes are not yet defined, because */ /* all telecommands are not implemented in the */ /* Prototype SW. */ - + #define UNUSED_TC_ADDRESS 0x00 #define START_ACQUISITION 0x01 @@ -102,28 +102,28 @@ #define SET_SU_1_PIEZO_2_CLASS_LEVEL 0x27 #define SET_SU_2_PIEZO_2_CLASS_LEVEL 0x37 #define SET_SU_3_PIEZO_2_CLASS_LEVEL 0x47 -#define SET_SU_4_PIEZO_2_CLASS_LEVEL 0x57 +#define SET_SU_4_PIEZO_2_CLASS_LEVEL 0x57 #define SET_SU_1_PLASMA_1E_1I_MAX_TIME 0x29 #define SET_SU_2_PLASMA_1E_1I_MAX_TIME 0x39 #define SET_SU_3_PLASMA_1E_1I_MAX_TIME 0x49 #define SET_SU_4_PLASMA_1E_1I_MAX_TIME 0x59 - + #define SET_SU_1_PLASMA_1E_PZT_MIN_TIME 0x2A #define SET_SU_2_PLASMA_1E_PZT_MIN_TIME 0x3A #define SET_SU_3_PLASMA_1E_PZT_MIN_TIME 0x4A #define SET_SU_4_PLASMA_1E_PZT_MIN_TIME 0x5A - + #define SET_SU_1_PLASMA_1E_PZT_MAX_TIME 0x2B #define SET_SU_2_PLASMA_1E_PZT_MAX_TIME 0x3B #define SET_SU_3_PLASMA_1E_PZT_MAX_TIME 0x4B #define SET_SU_4_PLASMA_1E_PZT_MAX_TIME 0x5B - + #define SET_SU_1_PLASMA_1I_PZT_MIN_TIME 0x2C #define SET_SU_2_PLASMA_1I_PZT_MIN_TIME 0x3C #define SET_SU_3_PLASMA_1I_PZT_MIN_TIME 0x4C #define SET_SU_4_PLASMA_1I_PZT_MIN_TIME 0x5C - + #define SET_SU_1_PLASMA_1I_PZT_MAX_TIME 0x2D #define SET_SU_2_PLASMA_1I_PZT_MAX_TIME 0x3D #define SET_SU_3_PLASMA_1I_PZT_MAX_TIME 0x4D @@ -148,29 +148,29 @@ /* State of Telecommand Execution task */ typedef enum { - TC_handling_e, - read_memory_e, - memory_dump_e, - write_memory_e, - memory_patch_e, - register_TM_e, - SC_TM_e - } TC_state_t; + TC_handling_e, + read_memory_e, + memory_dump_e, + write_memory_e, + memory_patch_e, + register_TM_e, + SC_TM_e +} TC_state_t; extern EXTERNAL TC_state_t TC_state; /*pointer to a task*/ -extern void (* EXTERNAL TC_task)(void); +extern void ( * EXTERNAL TC_task )( void ); /* Functions prototype */ -extern void Set_TC_Error(void); +extern void Set_TC_Error( void ); /* Task functions, for testing: */ -extern void TC_InterruptService (void) - INTERRUPT(TC_ISR_SOURCE) USED_REG_BANK(2); -extern void InitTelecommandTask (void); -extern void HandleTelecommand (void); +extern void TC_InterruptService ( void ) +INTERRUPT( TC_ISR_SOURCE ) USED_REG_BANK( 2 ); +extern void InitTelecommandTask ( void ); +extern void HandleTelecommand ( void ); #endif - + diff --git a/bench/parallel/DEBIE/code/telem.c b/bench/parallel/DEBIE/code/telem.c index 0149d26fb9099dab047d50962ef94aca07009a12..623ab53eb6e20f5fc88fe740cc99f8ae062111c8 100644 --- a/bench/parallel/DEBIE/code/telem.c +++ b/bench/parallel/DEBIE/code/telem.c @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : telem.c - * - * Telemetry module. - * - * Based on the SSF file telem.c, rev 1.28, Wed Oct 13 19:49:34 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : telem.c + + Telemetry module. + + Based on the SSF file telem.c, rev 1.28, Wed Oct 13 19:49:34 1999. + + - * -------------------------------------------------------------------------- +*/ #include "keyword.h" #include "kernobj.h" @@ -35,7 +35,8 @@ EXTERNAL telemetry_data_t telemetry_data; -EXTERNAL science_data_file_t LOCATION(SCIENCE_DATA_START_ADDRESS) science_data; +EXTERNAL science_data_file_t LOCATION( SCIENCE_DATA_START_ADDRESS ) +science_data; uint_least16_t EXTERNAL max_events; /* This variable is used to speed up certain */ @@ -51,7 +52,7 @@ unsigned char EXTERNAL *telemetry_end_pointer; unsigned char EXTERNAL read_memory_checksum; /* Checksum to be sent at the end of Read Memory sequence. */ -event_record_t EXTERNAL event_queue[MAX_QUEUE_LENGTH]; +event_record_t EXTERNAL event_queue[ MAX_QUEUE_LENGTH ]; /* Holds event records before they are copied to the */ /* Science Data memory. Normally there is only data */ /* from the new event whose data is beign collected, */ @@ -71,7 +72,7 @@ uint_least16_t EXTERNAL free_slot_index; /* Initialised to zero on power-up. */ -event_record_t EXTERNAL *GetFreeRecord(void) +event_record_t EXTERNAL *GetFreeRecord( void ) /* Purpose : Returns pointer to free event record in event queue. */ /* Interface : inputs - event_queue_length, legnth of the event */ @@ -86,19 +87,15 @@ event_record_t EXTERNAL *GetFreeRecord(void) /* -return pointer to the last record */ { - if (event_queue_length < MAX_QUEUE_LENGTH) - { - return &(event_queue[event_queue_length]); - } - - else - { - return &(event_queue[MAX_QUEUE_LENGTH - 1]); - } + if ( event_queue_length < MAX_QUEUE_LENGTH ) + return &( event_queue[ event_queue_length ] ); + + else + return &( event_queue[ MAX_QUEUE_LENGTH - 1 ] ); } -void TM_InterruptService (void) INTERRUPT(TM_ISR_SOURCE) USED_REG_BANK(2) +void TM_InterruptService ( void ) INTERRUPT( TM_ISR_SOURCE ) USED_REG_BANK( 2 ) /* Purpose : This function handles the TM interrupts. */ /* Interface : inputs - telemetry_pointer */ /* telemetry_end_pointer */ @@ -125,61 +122,54 @@ void TM_InterruptService (void) INTERRUPT(TM_ISR_SOURCE) USED_REG_BANK(2) /* mailbox */ { - unsigned char EXTERNAL tm_byte; + unsigned char EXTERNAL tm_byte; - CLEAR_TM_INTERRUPT_FLAG; - /*The interrupt flag is put down by setting high bit 3 'INT1' in port 3. */ + CLEAR_TM_INTERRUPT_FLAG; + /*The interrupt flag is put down by setting high bit 3 'INT1' in port 3. */ - if (telemetry_pointer == (unsigned char *) &telemetry_data.time) - { - COPY (telemetry_data.time, internal_time); - } + if ( telemetry_pointer == ( unsigned char * ) &telemetry_data.time ) + COPY ( telemetry_data.time, internal_time ); - if (telemetry_pointer < telemetry_end_pointer) - { - /* There are bytes left to be sent to TM. */ + if ( telemetry_pointer < telemetry_end_pointer ) { + /* There are bytes left to be sent to TM. */ - tm_byte = *telemetry_pointer; - WRITE_TM_MSB (tm_byte); - read_memory_checksum ^= tm_byte; + tm_byte = *telemetry_pointer; + WRITE_TM_MSB ( tm_byte ); + read_memory_checksum ^= tm_byte; - telemetry_pointer++; + telemetry_pointer++; - tm_byte = *telemetry_pointer; - WRITE_TM_LSB (tm_byte); - read_memory_checksum ^= tm_byte; + tm_byte = *telemetry_pointer; + WRITE_TM_LSB ( tm_byte ); + read_memory_checksum ^= tm_byte; + telemetry_pointer++; + } else + if ( TC_state == register_TM_e ) + /* Start to send TM data registers starting from the first ones */ + { + telemetry_pointer = ( EXTERNAL unsigned char * )&telemetry_data; + WRITE_TM_MSB ( *telemetry_pointer ); telemetry_pointer++; - } - else if (TC_state == register_TM_e) - /* Start to send TM data registers starting from the first ones */ - { - telemetry_pointer = (EXTERNAL unsigned char *)&telemetry_data; - WRITE_TM_MSB (*telemetry_pointer); - telemetry_pointer++; - WRITE_TM_LSB (*telemetry_pointer); + WRITE_TM_LSB ( *telemetry_pointer ); telemetry_pointer++; - } - else if (TC_state == memory_dump_e) - { - WRITE_TM_MSB(0); - WRITE_TM_LSB(read_memory_checksum); - /* Last two bytes of Read Memory sequence. */ - - Send_ISR_Mail(TCTM_MAILBOX, TM_READY); - } - else - /* It is time to stop sending telemetry */ - { - Send_ISR_Mail (TCTM_MAILBOX, TM_READY); - } + } else + if ( TC_state == memory_dump_e ) { + WRITE_TM_MSB( 0 ); + WRITE_TM_LSB( read_memory_checksum ); + /* Last two bytes of Read Memory sequence. */ + + Send_ISR_Mail( TCTM_MAILBOX, TM_READY ); + } else + /* It is time to stop sending telemetry */ + Send_ISR_Mail ( TCTM_MAILBOX, TM_READY ); } -dpu_time_t GetElapsedTime(unsigned int event_number) +dpu_time_t GetElapsedTime( unsigned int event_number ) /* Purpose : Returns the hit time of a given event. */ /* Interface : inputs - event_number (parameter) */ -/* science_data[event_number].hit_time, hit */ +/* science_data[ event_number ].hit_time, hit */ /* time of the given event record. */ /* outputs - return value, hit time. */ /* subroutines - none */ @@ -189,17 +179,17 @@ dpu_time_t GetElapsedTime(unsigned int event_number) /* time */ /* -return the value of hit time */ { - dpu_time_t INDIRECT_INTERNAL hit_time; - /* Hit time. */ + dpu_time_t INDIRECT_INTERNAL hit_time; + /* Hit time. */ - COPY (hit_time, science_data.event[event_number].hit_time); + COPY ( hit_time, science_data.event[ event_number ].hit_time ); - return hit_time; + return hit_time; } -unsigned int FindMinQualityRecord(void) +unsigned int FindMinQualityRecord( void ) /* Purpose : Finds event with lowest quality from Science Data memory.*/ /* Interface : inputs - science_data.event, event records */ @@ -219,63 +209,61 @@ unsigned int FindMinQualityRecord(void) /* -return the index of the selected record. */ { - unsigned int INDIRECT_INTERNAL min_quality_number; - /* The quality number of an event which has the lowest quality */ - /* number in the science data. */ - - unsigned int INDIRECT_INTERNAL min_quality_location; - /* The location of an event which has the lowest quality number */ - /* in the science data. */ - - dpu_time_t DIRECT_INTERNAL min_time; - /* Elapsed time of the oldest event. */ - - dpu_time_t DIRECT_INTERNAL time; - /* Elapsed time as previously mentioned. */ - - uint_least16_t DIRECT_INTERNAL i; - /* Loop variable. */ - - - min_time = GetElapsedTime(0); - min_quality_number = science_data.event[0].quality_number; - min_quality_location = 0; - /* First event is selected and compared against */ - /* the following events in the science_data. */ - - _Pragma("loopbound min 1260 max 1260") - for (i=1; i < max_events; i++) - { - time = GetElapsedTime(i); - - if(science_data.event[i].quality_number < min_quality_number) - { - min_time = time; - min_quality_number = science_data.event[i].quality_number; - min_quality_location = i; - /* If an event in the science_data has a lower quality number than */ - /* any of the previous events, its quality_number and location is */ - /* stored into variables. */ - } - - else if( (science_data.event[i].quality_number == min_quality_number) - && (time < min_time)) - { - min_time = time; - min_quality_location = i; - /* If an event in the science_data has an equal quality number with */ - /* any of the previous events and it's older, event's */ - /* quality_number and location are stored into variables. */ + unsigned int INDIRECT_INTERNAL min_quality_number; + /* The quality number of an event which has the lowest quality */ + /* number in the science data. */ + + unsigned int INDIRECT_INTERNAL min_quality_location; + /* The location of an event which has the lowest quality number */ + /* in the science data. */ + + dpu_time_t DIRECT_INTERNAL min_time; + /* Elapsed time of the oldest event. */ + + dpu_time_t DIRECT_INTERNAL time; + /* Elapsed time as previously mentioned. */ + + uint_least16_t DIRECT_INTERNAL i; + /* Loop variable. */ + + + min_time = GetElapsedTime( 0 ); + min_quality_number = science_data.event[ 0 ].quality_number; + min_quality_location = 0; + /* First event is selected and compared against */ + /* the following events in the science_data. */ + + _Pragma( "loopbound min 1260 max 1260" ) + for ( i = 1; i < max_events; i++ ) { + time = GetElapsedTime( i ); + + if ( science_data.event[ i ].quality_number < min_quality_number ) { + min_time = time; + min_quality_number = science_data.event[ i ].quality_number; + min_quality_location = i; + /* If an event in the science_data has a lower quality number than */ + /* any of the previous events, its quality_number and location is */ + /* stored into variables. */ + } + + else + if ( ( science_data.event[ i ].quality_number == min_quality_number ) + && ( time < min_time ) ) { + min_time = time; + min_quality_location = i; + /* If an event in the science_data has an equal quality number with */ + /* any of the previous events and it's older, event's */ + /* quality_number and location are stored into variables. */ } - } + } - return min_quality_location; + return min_quality_location; } void IncrementCounters( - sensor_index_t sensor_unit, - unsigned char classification) + sensor_index_t sensor_unit, + unsigned char classification ) /* Purpose : Increments given event counters. */ /* Interface : inputs - sensor_unit (parameter) */ @@ -307,36 +295,34 @@ void IncrementCounters( { - unsigned char EXTERNAL counter; - unsigned char EXTERNAL new_checksum; + unsigned char EXTERNAL counter; + unsigned char EXTERNAL new_checksum; - if (telemetry_data.SU_hits[sensor_unit] < 0xFFFF) - { - telemetry_data.SU_hits[sensor_unit]++; - /* SU hit counter is incremented. */ - } + if ( telemetry_data.SU_hits[ sensor_unit ] < 0xFFFF ) { + telemetry_data.SU_hits[ sensor_unit ]++; + /* SU hit counter is incremented. */ + } - if (science_data.event_counter[sensor_unit][classification] < 0xFF) - { + if ( science_data.event_counter[ sensor_unit ][ classification ] < 0xFF ) { - counter = science_data.event_counter[sensor_unit][classification]; + counter = science_data.event_counter[ sensor_unit ][ classification ]; - new_checksum = - science_data.counter_checksum ^ counter; - /* Delete effect of old counter value from the checksum. */ + new_checksum = + science_data.counter_checksum ^ counter; + /* Delete effect of old counter value from the checksum. */ - counter++; + counter++; - new_checksum ^= counter; - /* Add effect of new counter value to the checksum. */ + new_checksum ^= counter; + /* Add effect of new counter value to the checksum. */ - science_data.event_counter[sensor_unit][classification] = counter; - /* The event counter is incremented. */ + science_data.event_counter[ sensor_unit ][ classification ] = counter; + /* The event counter is incremented. */ - science_data.counter_checksum = new_checksum; - /* Event counter checksum is updated. */ - } + science_data.counter_checksum = new_checksum; + /* Event counter checksum is updated. */ + } } @@ -345,7 +331,7 @@ void IncrementCounters( /* tm_data.h */ /*****************************************************************************/ -void RecordEvent(void) +void RecordEvent( void ) /* Purpose : This function increments proper event counter and stores */ /* the new event record to the science data memory. */ /* Interface : inputs - free_slot_index, index of next free event */ @@ -376,135 +362,126 @@ void RecordEvent(void) /* defined earlier as described above. */ { - uint_least16_t INDIRECT_INTERNAL record_index; + uint_least16_t INDIRECT_INTERNAL record_index; - DISABLE_INTERRUPT_MASTER; + DISABLE_INTERRUPT_MASTER; - record_index = free_slot_index; + record_index = free_slot_index; - if (record_index >= max_events && TC_state != SC_TM_e) - { - /* Science Data memory was full and Science TM was not in progress */ + if ( record_index >= max_events && TC_state != SC_TM_e ) { + /* Science Data memory was full and Science TM was not in progress */ - ENABLE_INTERRUPT_MASTER; - record_index = FindMinQualityRecord(); - DISABLE_INTERRUPT_MASTER; - } + ENABLE_INTERRUPT_MASTER; + record_index = FindMinQualityRecord(); + DISABLE_INTERRUPT_MASTER; + } - if (TC_state == SC_TM_e) - { - /* Science Telemetry is in progress, so the event record */ - /* cannot be written to the Science Data memory. Instead */ - /* it is left to the temporary queue which will be */ - /* copied to the Science Data memory after the Science */ - /* telemetry is completed. */ + if ( TC_state == SC_TM_e ) { + /* Science Telemetry is in progress, so the event record */ + /* cannot be written to the Science Data memory. Instead */ + /* it is left to the temporary queue which will be */ + /* copied to the Science Data memory after the Science */ + /* telemetry is completed. */ - if (event_queue_length < MAX_QUEUE_LENGTH) - { - /* There is still room in the queue. */ + if ( event_queue_length < MAX_QUEUE_LENGTH ) { + /* There is still room in the queue. */ - event_queue_length++; - /* Prevent the event data from being overwritten. */ - } - ENABLE_INTERRUPT_MASTER; - } - - else - { - if (free_slot_index < max_events) - { - /* Science Data memory was not full */ - - record_index = free_slot_index; - science_data.event[record_index].quality_number = 0; - free_slot_index++; - } + event_queue_length++; + /* Prevent the event data from being overwritten. */ + } + ENABLE_INTERRUPT_MASTER; + } + else { + if ( free_slot_index < max_events ) { + /* Science Data memory was not full */ - /* Increment event counters. */ - IncrementCounters( - event_queue[0].SU_number - 1, - event_queue[0].classification); + record_index = free_slot_index; + science_data.event[ record_index ].quality_number = 0; + free_slot_index++; + } - ENABLE_INTERRUPT_MASTER; - if (event_queue[0].quality_number >= - science_data.event[record_index].quality_number) + /* Increment event counters. */ + IncrementCounters( + event_queue[ 0 ].SU_number - 1, + event_queue[ 0 ].classification ); - { - STRUCT_ASSIGN ( - science_data.event[record_index], - event_queue[0], - event_record_t); + ENABLE_INTERRUPT_MASTER; - /* In this state the event data is located always to */ - /* the first element of the queue. */ - } - } + if ( event_queue[ 0 ].quality_number >= + science_data.event[ record_index ].quality_number ) + + { + STRUCT_ASSIGN ( + science_data.event[ record_index ], + event_queue[ 0 ], + event_record_t ); + + /* In this state the event data is located always to */ + /* the first element of the queue. */ + } + } } -void ClearEvents(void) +void ClearEvents( void ) /* Cleares the event counters and the quality numbers of */ /* the event records in the science data memory */ { - DIRECT_INTERNAL uint_least8_t i; - /* This variable is used in the for-loop which goes through */ - /* the science data event counter. */ - - DIRECT_INTERNAL uint_least8_t j; - /* This variable is used in the for-loop which goes through */ - /* the science data event counter. */ - - /* Interrupts does not need to be disabled as long as */ - /* Telecommand Execution task has higher priority than */ - /* Acquisition task. */ - - _Pragma("loopbound min 4 max 4") - for(i=0;i<NUM_SU;i++) - { - telemetry_data.SU_hits[i] = 0; - - _Pragma("loopbound min 10 max 10") - for(j=0;j<NUM_CLASSES;j++) - { - science_data.event_counter[i][j] = 0; - } - /*event counters are cleared in science_data */ - } - - _Pragma("loopbound min 0 max 10") - for (i=0; i < event_queue_length; i++) - { - /* Events from the event queue are copied to the Science */ - /* Data memory. */ - - STRUCT_ASSIGN ( - science_data.event[i], - event_queue[i], - event_record_t); - - IncrementCounters( - event_queue[i].SU_number - 1, - event_queue[i].classification); - - /* One more event is stored in the Science Data memory. */ - /* NOTE that the event queue should always be smaller */ - /* than the space reserved for event records in the */ - /* Science Data memory. */ - } - - free_slot_index = event_queue_length; - - event_queue_length = 0; - /* Empty the event queue. */ - - science_data.counter_checksum = 0; - science_data.not_used = 0; + DIRECT_INTERNAL uint_least8_t i; + /* This variable is used in the for-loop which goes through */ + /* the science data event counter. */ + + DIRECT_INTERNAL uint_least8_t j; + /* This variable is used in the for-loop which goes through */ + /* the science data event counter. */ + + /* Interrupts does not need to be disabled as long as */ + /* Telecommand Execution task has higher priority than */ + /* Acquisition task. */ + + _Pragma( "loopbound min 4 max 4" ) + for ( i = 0; i < NUM_SU; i++ ) { + telemetry_data.SU_hits[ i ] = 0; + + _Pragma( "loopbound min 10 max 10" ) + for ( j = 0; j < NUM_CLASSES; j++ ) + science_data.event_counter[ i ][ j ] = 0; + /*event counters are cleared in science_data */ + } + + _Pragma( "loopbound min 10 max 10" ) + for ( i = 0; i < event_queue_length; i++ ) { + /* Events from the event queue are copied to the Science */ + /* Data memory. */ + + STRUCT_ASSIGN ( + science_data.event[ i ], + event_queue[ i ], + event_record_t ); + + IncrementCounters( + event_queue[ i ].SU_number - 1, + event_queue[ i ].classification ); + + /* One more event is stored in the Science Data memory. */ + /* NOTE that the event queue should always be smaller */ + /* than the space reserved for event records in the */ + /* Science Data memory. */ + } + + free_slot_index = event_queue_length; + + event_queue_length = 0; + /* Empty the event queue. */ + + science_data.counter_checksum = 0; + science_data.not_used = 0; } -void ResetEventQueueLength(void) +void ResetEventQueueLength( void ) /* Purpose : Empty the event queue length. */ /* Interface : inputs - none */ /* outputs - none */ @@ -513,7 +490,7 @@ void ResetEventQueueLength(void) /* Postconditions : none. */ /* Algorithm : - reset event queue length. */ { - event_queue_length = 0; + event_queue_length = 0; } diff --git a/bench/parallel/DEBIE/code/telem.h b/bench/parallel/DEBIE/code/telem.h index e19440631b6da5cf9e51590eca0b31f498efd421..bfe05ee228215b94a1c8aae32017e4e9a3e14c2c 100644 --- a/bench/parallel/DEBIE/code/telem.h +++ b/bench/parallel/DEBIE/code/telem.h @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : telem.h - * - * Prototypes etc. for the Telem module. - * - * Based on the SSF file telem.h, rev 1.11, Wed May 12 13:08:26 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : telem.h + + Prototypes etc. for the Telem module. + + Based on the SSF file telem.h, rev 1.11, Wed May 12 13:08:26 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TELEM_H #define TELEM_H @@ -46,17 +46,17 @@ extern unsigned char EXTERNAL read_memory_checksum; /* Checksum to be sent at the end of Read Memory sequence. */ -extern event_record_t EXTERNAL *GetFreeRecord(void); +extern event_record_t EXTERNAL *GetFreeRecord( void ); /* Returns pointer to next free event record from the */ /* event record queue, or pointer to the last record */ /* od the queue, if the queue is full. */ -extern void ResetEventQueueLength(void); +extern void ResetEventQueueLength( void ); /* Task functions, for testing: */ -extern void TM_InterruptService (void) - INTERRUPT(TM_ISR_SOURCE) USED_REG_BANK(2); +extern void TM_InterruptService ( void ) +INTERRUPT( TM_ISR_SOURCE ) USED_REG_BANK( 2 ); #endif diff --git a/bench/parallel/DEBIE/code/tm_data.h b/bench/parallel/DEBIE/code/tm_data.h index f966244afe8c06d29fcb625416c60b3310c7f0dd..251eb6986b1e67beee6230d9a987f55e3f4ab0e4 100644 --- a/bench/parallel/DEBIE/code/tm_data.h +++ b/bench/parallel/DEBIE/code/tm_data.h @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : tm_data.h - * - * The Telemetry Data Structure. - * - * Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : tm_data.h + + The Telemetry Data Structure. + + Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TM_DATA_H #define TM_DATA_H @@ -53,9 +53,9 @@ #define LV_SUPPLY_ERROR 0x40 #define TEMPERATURE_ERROR 0x20 #define SELF_TEST_ERROR 0x10 -#define HV_LIMIT_ERROR 0x08 +#define HV_LIMIT_ERROR 0x08 #define LV_LIMIT_ERROR 0x04 -#define SUPPLY_VOLTAGE_MASK 0x03 +#define SUPPLY_VOLTAGE_MASK 0x03 /* Used when error indiacting bits are cleared. */ @@ -72,7 +72,7 @@ /* Definitions related to error indicating bits in software error register: */ -#define MEASUREMENT_ERROR 0x01 +#define MEASUREMENT_ERROR 0x01 #define OS_START_SYSTEM_ERROR 0x02 #define OS_WAIT_ERROR 0x04 #define OS_SET_SLICE_ERROR 0x08 @@ -84,62 +84,62 @@ /* Sensor Unit low power and TC settings : */ typedef struct { - unsigned char plus_5_voltage; /* byte 1 */ - unsigned char minus_5_voltage; /* byte 2 */ - unsigned char plasma_1_plus_threshold; /* byte 3 */ - unsigned char plasma_1_minus_threshold; /* byte 4 */ - unsigned char piezo_threshold; /* byte 5 */ - unsigned char plasma_1_plus_classification; /* byte 6 */ - unsigned char plasma_1_minus_classification; /* byte 7 */ - unsigned char piezo_1_classification; /* byte 8 */ - unsigned char piezo_2_classification; /* byte 9 */ - unsigned char plasma_2_plus_classification; /* byte 10 */ - unsigned char plasma_1_plus_to_minus_max_time; /* byte 11 */ - unsigned char plasma_1_plus_to_piezo_min_time; /* byte 12 */ - unsigned char plasma_1_plus_to_piezo_max_time; /* byte 13 */ - unsigned char plasma_1_minus_to_piezo_min_time; /* byte 14 */ - unsigned char plasma_1_minus_to_piezo_max_time; /* byte 15 */ + unsigned char plus_5_voltage; /* byte 1 */ + unsigned char minus_5_voltage; /* byte 2 */ + unsigned char plasma_1_plus_threshold; /* byte 3 */ + unsigned char plasma_1_minus_threshold; /* byte 4 */ + unsigned char piezo_threshold; /* byte 5 */ + unsigned char plasma_1_plus_classification; /* byte 6 */ + unsigned char plasma_1_minus_classification; /* byte 7 */ + unsigned char piezo_1_classification; /* byte 8 */ + unsigned char piezo_2_classification; /* byte 9 */ + unsigned char plasma_2_plus_classification; /* byte 10 */ + unsigned char plasma_1_plus_to_minus_max_time; /* byte 11 */ + unsigned char plasma_1_plus_to_piezo_min_time; /* byte 12 */ + unsigned char plasma_1_plus_to_piezo_max_time; /* byte 13 */ + unsigned char plasma_1_minus_to_piezo_min_time; /* byte 14 */ + unsigned char plasma_1_minus_to_piezo_max_time; /* byte 15 */ } SU_settings_t; /* TM data registers : */ typedef struct { - unsigned char error_status; /* reg 0 */ - unsigned char mode_status; /* reg 1 */ - uint16_t TC_word; /* reg 2 - 3 */ - dpu_time_t TC_time_tag; /* reg 4 - 7 */ - unsigned char watchdog_failures; /* reg 8 */ - unsigned char checksum_failures; /* reg 9 */ - unsigned char SW_version; /* reg 10 */ - unsigned char isr_send_message_error; /* reg 11 */ - unsigned char SU_status[NUM_SU]; /* reg 12 - 15 */ - unsigned char SU_temperature[NUM_SU][NUM_TEMP]; /* reg 16 - 23 */ - unsigned char DPU_plus_5_digital; /* reg 24 */ - unsigned char os_send_message_error; /* reg 25 */ - unsigned char os_create_task_error; /* reg 26 */ - unsigned char SU_plus_50; /* reg 27 */ - unsigned char SU_minus_50; /* reg 28 */ - unsigned char os_disable_isr_error; /* reg 29 */ - unsigned char not_used_1; /* reg 30 */ - SU_settings_t sensor_unit_1; /* reg 31 - 45 */ - unsigned char os_wait_error; /* reg 46 */ - SU_settings_t sensor_unit_2; /* reg 47 - 61 */ - unsigned char os_attach_interrupt_error; /* reg 62 */ - SU_settings_t sensor_unit_3; /* reg 63 - 77 */ - unsigned char os_enable_isr_error; /* reg 78 */ - SU_settings_t sensor_unit_4; /* reg 79 - 93 */ - code_address_t failed_code_address; /* reg 94 - 95 */ - data_address_t failed_data_address; /* reg 96 - 97 */ - uint16_t SU_hits[NUM_SU]; /* reg 98 - 105 */ - tm_dpu_time_t time; /* reg 106 - 109 */ - unsigned char software_error; /* reg 110 */ - unsigned char hit_budget_exceedings; /* reg 111 */ - unsigned char coefficient[NUM_QCOEFF]; /* reg 112 - 116 */ - unsigned char not_used; /* reg 117 */ - - /* The last register of telemetry data should be 'not_used'. */ - /* This is necessary for correct operation of telemetry */ - /* retrieving TCs i.e. number of bytes should be even. */ + unsigned char error_status; /* reg 0 */ + unsigned char mode_status; /* reg 1 */ + uint16_t TC_word; /* reg 2 - 3 */ + dpu_time_t TC_time_tag; /* reg 4 - 7 */ + unsigned char watchdog_failures; /* reg 8 */ + unsigned char checksum_failures; /* reg 9 */ + unsigned char SW_version; /* reg 10 */ + unsigned char isr_send_message_error; /* reg 11 */ + unsigned char SU_status[NUM_SU]; /* reg 12 - 15 */ + unsigned char SU_temperature[NUM_SU][NUM_TEMP]; /* reg 16 - 23 */ + unsigned char DPU_plus_5_digital; /* reg 24 */ + unsigned char os_send_message_error; /* reg 25 */ + unsigned char os_create_task_error; /* reg 26 */ + unsigned char SU_plus_50; /* reg 27 */ + unsigned char SU_minus_50; /* reg 28 */ + unsigned char os_disable_isr_error; /* reg 29 */ + unsigned char not_used_1; /* reg 30 */ + SU_settings_t sensor_unit_1; /* reg 31 - 45 */ + unsigned char os_wait_error; /* reg 46 */ + SU_settings_t sensor_unit_2; /* reg 47 - 61 */ + unsigned char os_attach_interrupt_error; /* reg 62 */ + SU_settings_t sensor_unit_3; /* reg 63 - 77 */ + unsigned char os_enable_isr_error; /* reg 78 */ + SU_settings_t sensor_unit_4; /* reg 79 - 93 */ + code_address_t failed_code_address; /* reg 94 - 95 */ + data_address_t failed_data_address; /* reg 96 - 97 */ + uint16_t SU_hits[NUM_SU]; /* reg 98 - 105 */ + tm_dpu_time_t time; /* reg 106 - 109 */ + unsigned char software_error; /* reg 110 */ + unsigned char hit_budget_exceedings; /* reg 111 */ + unsigned char coefficient[NUM_QCOEFF]; /* reg 112 - 116 */ + unsigned char not_used; /* reg 117 */ + + /* The last register of telemetry data should be 'not_used'. */ + /* This is necessary for correct operation of telemetry */ + /* retrieving TCs i.e. number of bytes should be even. */ } telemetry_data_t; @@ -148,36 +148,36 @@ extern EXTERNAL telemetry_data_t telemetry_data; /* Hit trigger event record : */ typedef struct { - unsigned char quality_number; /* byte 0 */ - unsigned char classification; /* byte 1 */ - unsigned char SU_number; /* byte 2 */ - tm_dpu_time_t hit_time; /* byte 3 - 6 */ - unsigned char SU_temperature_1; /* byte 7 */ - unsigned char SU_temperature_2; /* byte 8 */ - tm_ushort_t plasma_1_plus; /* byte 9 - 10 */ - tm_ushort_t plasma_1_minus; /* byte 11 - 12 */ - tm_ushort_t piezo_1; /* byte 13 - 14 */ - tm_ushort_t piezo_2; /* byte 15 - 16 */ - tm_ushort_t plasma_2_plus; /* byte 17 - 18 */ - unsigned char rise_time; /* byte 19 */ - signed char delay_1; /* byte 20 */ - tm_ushort_t delay_2; /* byte 21 - 22 */ - tm_ushort_t delay_3; /* byte 23 - 24 */ - unsigned char checksum; /* byte 25 */ + unsigned char quality_number; /* byte 0 */ + unsigned char classification; /* byte 1 */ + unsigned char SU_number; /* byte 2 */ + tm_dpu_time_t hit_time; /* byte 3 - 6 */ + unsigned char SU_temperature_1; /* byte 7 */ + unsigned char SU_temperature_2; /* byte 8 */ + tm_ushort_t plasma_1_plus; /* byte 9 - 10 */ + tm_ushort_t plasma_1_minus; /* byte 11 - 12 */ + tm_ushort_t piezo_1; /* byte 13 - 14 */ + tm_ushort_t piezo_2; /* byte 15 - 16 */ + tm_ushort_t plasma_2_plus; /* byte 17 - 18 */ + unsigned char rise_time; /* byte 19 */ + signed char delay_1; /* byte 20 */ + tm_ushort_t delay_2; /* byte 21 - 22 */ + tm_ushort_t delay_3; /* byte 23 - 24 */ + unsigned char checksum; /* byte 25 */ } event_record_t; /* Science Data File : */ typedef struct { - unsigned short int length; - unsigned char event_counter[NUM_SU][NUM_CLASSES]; - unsigned char not_used; - unsigned char counter_checksum; - event_record_t event[MAX_EVENTS]; + unsigned short int length; + unsigned char event_counter[NUM_SU][NUM_CLASSES]; + unsigned char not_used; + unsigned char counter_checksum; + event_record_t event[MAX_EVENTS]; } science_data_file_t; extern EXTERNAL science_data_file_t - LOCATION(SCIENCE_DATA_START_ADDRESS) science_data; +LOCATION( SCIENCE_DATA_START_ADDRESS ) science_data; extern uint_least16_t EXTERNAL max_events; /* This variable is used to speed up certain */ @@ -186,13 +186,13 @@ extern uint_least16_t EXTERNAL max_events; /* It is initialised to value MAX_EVENTS at */ /* Boot. */ -extern void RecordEvent(void); +extern void RecordEvent( void ); /* This function increments proper event counter and stores */ -/* the new event record to the science data memory, if there */ +/* the new event record to the science data memory, if there */ /* is free place or events with lower or equal quality number */ -extern void ClearEvents(void); +extern void ClearEvents( void ); /* Cleares the event counters and the quality numbers of */ /* the event records in the science data memory */ diff --git a/bench/parallel/DEBIE/code/ttc_ctrl.h b/bench/parallel/DEBIE/code/ttc_ctrl.h index ee35c7f96cbd2ffd18d6d21513f4a18bd42d5158..1d45181c93626d947369f7fd62591cf94575cc6d 100644 --- a/bench/parallel/DEBIE/code/ttc_ctrl.h +++ b/bench/parallel/DEBIE/code/ttc_ctrl.h @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Module : ttc_ctrl.h - * - * Macros and function prototypes for handling the Telecommand - * and Telemetry interface. - * - * Based on the SSF DHI file ttc_ctrl.h, rev 1.11, Sun May 16 09:20:10 1999. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Module : ttc_ctrl.h + + Macros and function prototypes for handling the Telecommand + and Telemetry interface. + + Based on the SSF DHI file ttc_ctrl.h, rev 1.11, Sun May 16 09:20:10 1999. + + - * -------------------------------------------------------------------------- +*/ #ifndef TTC_CTRL_H @@ -34,6 +34,6 @@ #define PARITY_ERROR 2 #define TC_ERROR 1 -#define TC_OR_PARITY_ERROR (TC_ERROR + PARITY_ERROR) +#define TC_OR_PARITY_ERROR (TC_ERROR + PARITY_ERROR) #endif diff --git a/bench/parallel/DEBIE/code/version.h b/bench/parallel/DEBIE/code/version.h index 5419c34582f5b608bc4bc9fc3f6c87b0e11871be..e1d2a985bb93b28a920817311bf9f356693f79f0 100644 --- a/bench/parallel/DEBIE/code/version.h +++ b/bench/parallel/DEBIE/code/version.h @@ -1,24 +1,24 @@ /*------------------------------------------------------------------------------ - * - * Copyright (C) 1998 : Space Systems Finland Ltd. - * - * Space Systems Finland Ltd (SSF) allows you to use this version of - * the DEBIE-I DPU software for the specific purpose and under the - * specific conditions set forth in the Terms Of Use document enclosed - * with or attached to this software. In particular, the software - * remains the property of SSF and you must not distribute the software - * to third parties without written and signed authorization from SSF. - * - * System Name: DEBIE DPU SW - * Subsystem : DAS - * Module : version.h - * - * DEBIE SW version and checksum. - * - * Based on the SSF file version.h, rev 1.30, Wed Feb 23 12:17:32 2000. - * - *- * -------------------------------------------------------------------------- - */ + + Copyright (C) 1998 : Space Systems Finland Ltd. + + Space Systems Finland Ltd (SSF) allows you to use this version of + the DEBIE-I DPU software for the specific purpose and under the + specific conditions set forth in the Terms Of Use document enclosed + with or attached to this software. In particular, the software + remains the property of SSF and you must not distribute the software + to third parties without written and signed authorization from SSF. + + System Name: DEBIE DPU SW + Subsystem : DAS + Module : version.h + + DEBIE SW version and checksum. + + Based on the SSF file version.h, rev 1.30, Wed Feb 23 12:17:32 2000. + + - * -------------------------------------------------------------------------- +*/ #ifndef VERSION_H #define VERSION_H diff --git a/bench/parallel/PapaBench/arch/include/avr/arch/interrupt.h b/bench/parallel/PapaBench/arch/include/avr/arch/interrupt.h index 882014da459f43221ed68362ccbf13e92ed9c638..3931829117a67ce9d848cc9bdbafce37a9476a1f 100644 --- a/bench/parallel/PapaBench/arch/include/avr/arch/interrupt.h +++ b/bench/parallel/PapaBench/arch/include/avr/arch/interrupt.h @@ -4,15 +4,15 @@ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright + Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holders nor the names of + Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -76,7 +76,7 @@ extern "C" { interrupt needs to be enabled separately if interrupts for this device are desired. While some devices maintain their interrupt enable bit inside the device's register set, external and timer interrupts have system-wide - configuration registers. + configuration registers. Example: @@ -103,7 +103,7 @@ extern "C" { This macro gives access to the \c GIMSK register (or \c EIMSK register if using an AVR Mega device or \c GICR register for others). Although this macro is essentially the same as assigning to the register, it does - adapt slightly to the type of device being used. This macro is + adapt slightly to the type of device being used. This macro is unavailable if none of the registers listed above are defined. */ /* Define common register definition if available. */ @@ -130,14 +130,14 @@ extern "C" { \code#include <arch/interrupt.h>\endcode - This function modifies the \c timsk register. - The value you pass via \c ints is device specific. */ + This function modifies the \c timsk register. + The value you pass via \c ints is device specific. */ #define __inline__ inline -static __inline__ void timer_enable_int (unsigned char ints) +static __inline__ void timer_enable_int ( unsigned char ints ) { -#ifdef TIMSK - TIMSK = ints; -#endif + #ifdef TIMSK + TIMSK = ints; + #endif } /*@}*/ diff --git a/bench/parallel/PapaBench/arch/include/avr/arch/io.h b/bench/parallel/PapaBench/arch/include/avr/arch/io.h index 08e7cbe86ccb5b5d8e211fae3387149d31db4ff7..9e7de4fc8ae2d17ac824234528aa208a2646b677 100644 --- a/bench/parallel/PapaBench/arch/include/avr/arch/io.h +++ b/bench/parallel/PapaBench/arch/include/avr/arch/io.h @@ -4,15 +4,15 @@ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright + Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holders nor the names of + Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -86,20 +86,20 @@ #include <arch/sfr_defs.h> /* - * Registers common to all AVR devices. - */ + Registers common to all AVR devices. +*/ #if __AVR_ARCH__ != 1 /* - * AVR architecture 1 has no RAM, thus no stack pointer. - * - * All other archs do have a stack pointer. Some devices have only - * less than 256 bytes of possible RAM locations (128 Bytes of SRAM - * and no option for external RAM), thus SPH is officially "reserved" - * for them. We catch this case below after including the - * device-specific ioXXXX.h file, by examining XRAMEND, and - * #undef-ining SP and SPH in that case. - */ + AVR architecture 1 has no RAM, thus no stack pointer. + + All other archs do have a stack pointer. Some devices have only + less than 256 bytes of possible RAM locations (128 Bytes of SRAM + and no option for external RAM), thus SPH is officially "reserved" + for them. We catch this case below after including the + device-specific ioXXXX.h file, by examining XRAMEND, and + #undef-ining SP and SPH in that case. +*/ /* Stack Pointer */ #define SP _SFR_IO16(0x3D) #define SPL _SFR_IO8(0x3D) @@ -131,22 +131,22 @@ #define ZH r31 /* - * Only few devices come without EEPROM. In order to assemble the - * EEPROM library components without defining a specific device, we - * keep the EEPROM-related definitions here, and catch the devices - * without EEPROM (E2END == 0) below. Obviously, the EEPROM library - * functions will not work for them. ;-) - */ + Only few devices come without EEPROM. In order to assemble the + EEPROM library components without defining a specific device, we + keep the EEPROM-related definitions here, and catch the devices + without EEPROM (E2END == 0) below. Obviously, the EEPROM library + functions will not work for them. ;-) +*/ /* EEPROM Control Register */ -#define EECR _SFR_IO8(0x1C) +#define EECR _SFR_IO8(0x1C) /* EEPROM Data Register */ -#define EEDR _SFR_IO8(0x1D) +#define EEDR _SFR_IO8(0x1D) /* EEPROM Address Register */ -#define EEAR _SFR_IO16(0x1E) -#define EEARL _SFR_IO8(0x1E) -#define EEARH _SFR_IO8(0x1F) +#define EEAR _SFR_IO16(0x1E) +#define EEARL _SFR_IO8(0x1E) +#define EEARH _SFR_IO8(0x1F) /* EEPROM Control Register */ #define EERIE 3 @@ -274,7 +274,7 @@ #if E2END < 0x100 && !defined(__COMPILING_AVR_LIBC__) # undef EEAR # if E2END > 0 -# define EEAR _SFR_IO8(0x1E) +# define EEAR _SFR_IO8(0x1E) # endif # undef EEARH #endif diff --git a/bench/parallel/PapaBench/arch/include/avr/arch/iom128.h b/bench/parallel/PapaBench/arch/include/avr/arch/iom128.h index ef9d8cf453aaab828a6b52236180002cda6f5f43..7839deba4dff0391b5394733aa7fab1668fde990 100644 --- a/bench/parallel/PapaBench/arch/include/avr/arch/iom128.h +++ b/bench/parallel/PapaBench/arch/include/avr/arch/iom128.h @@ -4,15 +4,15 @@ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright + Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holders nor the names of + Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -30,7 +30,7 @@ /* $Id: iom128.h,v 1.1 2011-01-25 09:40:04 plazar Exp $ */ -/* avr/iom128.h - defines for ATmega128 +/* avr/iom128.h - defines for ATmega128 As of 2002-08-27: - This should be up to date with data sheet 2467E-AVR-05/02 */ @@ -48,7 +48,7 @@ # define _AVR_IOXXX_H_ "iom128.h" #else # error "Attempt to include more than one <arch/ioXXX.h> file." -#endif +#endif /* I/O registers */ @@ -850,7 +850,7 @@ #define PINA5 5 #define PINA4 4 #define PINA3 3 -#define PINA2 2 +#define PINA2 2 #define PINA1 1 #define PINA0 0 @@ -880,7 +880,7 @@ #define PINB5 5 #define PINB4 4 #define PINB3 3 -#define PINB2 2 +#define PINB2 2 #define PINB1 1 #define PINB0 0 @@ -910,7 +910,7 @@ #define PINC5 5 #define PINC4 4 #define PINC3 3 -#define PINC2 2 +#define PINC2 2 #define PINC1 1 #define PINC0 0 @@ -940,7 +940,7 @@ #define PIND5 5 #define PIND4 4 #define PIND3 3 -#define PIND2 2 +#define PIND2 2 #define PIND1 1 #define PIND0 0 @@ -970,7 +970,7 @@ #define PINE5 5 #define PINE4 4 #define PINE3 3 -#define PINE2 2 +#define PINE2 2 #define PINE1 1 #define PINE0 0 @@ -1000,7 +1000,7 @@ #define PINF5 5 #define PINF4 4 #define PINF3 3 -#define PINF2 2 +#define PINF2 2 #define PINF1 1 #define PINF0 0 @@ -1021,7 +1021,7 @@ /* Port G Input Pins - PING */ #define PING4 4 #define PING3 3 -#define PING2 2 +#define PING2 2 #define PING1 1 #define PING0 0 diff --git a/bench/parallel/PapaBench/arch/include/avr/arch/iom8.h b/bench/parallel/PapaBench/arch/include/avr/arch/iom8.h index 346615b79c29d82cc6f5b0de09a6ab941d5d0555..439ef6ca8696ff13c354032461c7871f60d9a75a 100644 --- a/bench/parallel/PapaBench/arch/include/avr/arch/iom8.h +++ b/bench/parallel/PapaBench/arch/include/avr/arch/iom8.h @@ -4,15 +4,15 @@ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright + Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holders nor the names of + Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -45,106 +45,106 @@ # define _AVR_IOXXX_H_ "iom8.h" #else # error "Attempt to include more than one <arch/ioXXX.h> file." -#endif +#endif /* I/O registers */ /* TWI stands for "Two Wire Interface" or "TWI Was I2C(tm)" */ -#define TWBR _SFR_IO8(0x00) -#define TWSR _SFR_IO8(0x01) -#define TWAR _SFR_IO8(0x02) -#define TWDR _SFR_IO8(0x03) +#define TWBR _SFR_IO8(0x00) +#define TWSR _SFR_IO8(0x01) +#define TWAR _SFR_IO8(0x02) +#define TWDR _SFR_IO8(0x03) /* ADC */ -#define ADCW _SFR_IO16(0x04) +#define ADCW _SFR_IO16(0x04) #ifndef __ASSEMBLER__ -#define ADC _SFR_IO16(0x04) +#define ADC _SFR_IO16(0x04) #endif -#define ADCL _SFR_IO8(0x04) -#define ADCH _SFR_IO8(0x05) -#define ADCSR _SFR_IO8(0x06) -#define ADCSRA _SFR_IO8(0x06) /* Changed in 2486H-AVR-09/02 */ -#define ADMUX _SFR_IO8(0x07) +#define ADCL _SFR_IO8(0x04) +#define ADCH _SFR_IO8(0x05) +#define ADCSR _SFR_IO8(0x06) +#define ADCSRA _SFR_IO8(0x06) /* Changed in 2486H-AVR-09/02 */ +#define ADMUX _SFR_IO8(0x07) /* analog comparator */ -#define ACSR _SFR_IO8(0x08) +#define ACSR _SFR_IO8(0x08) /* USART */ -#define UBRRL _SFR_IO8(0x09) -#define UCSRB _SFR_IO8(0x0A) -#define UCSRA _SFR_IO8(0x0B) -#define UDR _SFR_IO8(0x0C) +#define UBRRL _SFR_IO8(0x09) +#define UCSRB _SFR_IO8(0x0A) +#define UCSRA _SFR_IO8(0x0B) +#define UDR _SFR_IO8(0x0C) /* SPI */ -#define SPCR _SFR_IO8(0x0D) -#define SPSR _SFR_IO8(0x0E) -#define SPDR _SFR_IO8(0x0F) +#define SPCR _SFR_IO8(0x0D) +#define SPSR _SFR_IO8(0x0E) +#define SPDR _SFR_IO8(0x0F) /* Port D */ -#define PIND _SFR_IO8(0x10) -#define DDRD _SFR_IO8(0x11) -#define PORTD _SFR_IO8(0x12) +#define PIND _SFR_IO8(0x10) +#define DDRD _SFR_IO8(0x11) +#define PORTD _SFR_IO8(0x12) /* Port C */ -#define PINC _SFR_IO8(0x13) -#define DDRC _SFR_IO8(0x14) -#define PORTC _SFR_IO8(0x15) +#define PINC _SFR_IO8(0x13) +#define DDRC _SFR_IO8(0x14) +#define PORTC _SFR_IO8(0x15) /* Port B */ -#define PINB _SFR_IO8(0x16) -#define DDRB _SFR_IO8(0x17) -#define PORTB _SFR_IO8(0x18) +#define PINB _SFR_IO8(0x16) +#define DDRB _SFR_IO8(0x17) +#define PORTB _SFR_IO8(0x18) /* 0x1C..0x1F EEPROM */ -#define UCSRC _SFR_IO8(0x20) -#define UBRRH _SFR_IO8(0x20) +#define UCSRC _SFR_IO8(0x20) +#define UBRRH _SFR_IO8(0x20) -#define WDTCR _SFR_IO8(0x21) -#define ASSR _SFR_IO8(0x22) +#define WDTCR _SFR_IO8(0x21) +#define ASSR _SFR_IO8(0x22) /* Timer 2 */ -#define OCR2 _SFR_IO8(0x23) -#define TCNT2 _SFR_IO8(0x24) -#define TCCR2 _SFR_IO8(0x25) +#define OCR2 _SFR_IO8(0x23) +#define TCNT2 _SFR_IO8(0x24) +#define TCCR2 _SFR_IO8(0x25) /* Timer 1 */ -#define ICR1 _SFR_IO16(0x26) -#define ICR1L _SFR_IO8(0x26) -#define ICR1H _SFR_IO8(0x27) -#define OCR1B _SFR_IO16(0x28) -#define OCR1BL _SFR_IO8(0x28) -#define OCR1BH _SFR_IO8(0x29) -#define OCR1A _SFR_IO16(0x2A) -#define OCR1AL _SFR_IO8(0x2A) -#define OCR1AH _SFR_IO8(0x2B) -#define TCNT1 _SFR_IO16(0x2C) -#define TCNT1L _SFR_IO8(0x2C) -#define TCNT1H _SFR_IO8(0x2D) -#define TCCR1B _SFR_IO8(0x2E) -#define TCCR1A _SFR_IO8(0x2F) - -#define SFIOR _SFR_IO8(0x30) - -#define OSCCAL _SFR_IO8(0x31) +#define ICR1 _SFR_IO16(0x26) +#define ICR1L _SFR_IO8(0x26) +#define ICR1H _SFR_IO8(0x27) +#define OCR1B _SFR_IO16(0x28) +#define OCR1BL _SFR_IO8(0x28) +#define OCR1BH _SFR_IO8(0x29) +#define OCR1A _SFR_IO16(0x2A) +#define OCR1AL _SFR_IO8(0x2A) +#define OCR1AH _SFR_IO8(0x2B) +#define TCNT1 _SFR_IO16(0x2C) +#define TCNT1L _SFR_IO8(0x2C) +#define TCNT1H _SFR_IO8(0x2D) +#define TCCR1B _SFR_IO8(0x2E) +#define TCCR1A _SFR_IO8(0x2F) + +#define SFIOR _SFR_IO8(0x30) + +#define OSCCAL _SFR_IO8(0x31) /* Timer 0 */ -#define TCNT0 _SFR_IO8(0x32) -#define TCCR0 _SFR_IO8(0x33) +#define TCNT0 _SFR_IO8(0x32) +#define TCCR0 _SFR_IO8(0x33) -#define MCUCSR _SFR_IO8(0x34) -#define MCUCR _SFR_IO8(0x35) +#define MCUCSR _SFR_IO8(0x34) +#define MCUCR _SFR_IO8(0x35) -#define TWCR _SFR_IO8(0x36) +#define TWCR _SFR_IO8(0x36) -#define SPMCR _SFR_IO8(0x37) +#define SPMCR _SFR_IO8(0x37) -#define TIFR _SFR_IO8(0x38) -#define TIMSK _SFR_IO8(0x39) +#define TIFR _SFR_IO8(0x38) +#define TIMSK _SFR_IO8(0x39) -#define GIFR _SFR_IO8(0x3A) -#define GIMSK _SFR_IO8(0x3B) -#define GICR _SFR_IO8(0x3B) /* Changed in 2486H-AVR-09/02 */ +#define GIFR _SFR_IO8(0x3A) +#define GIMSK _SFR_IO8(0x3B) +#define GICR _SFR_IO8(0x3B) /* Changed in 2486H-AVR-09/02 */ /* 0x3C reserved (OCR0?) */ @@ -154,78 +154,78 @@ /* Interrupt vectors */ -#define SIG_INTERRUPT0 _VECTOR(1) -#define SIG_INTERRUPT1 _VECTOR(2) -#define SIG_OUTPUT_COMPARE2 _VECTOR(3) -#define SIG_OVERFLOW2 _VECTOR(4) -#define SIG_INPUT_CAPTURE1 _VECTOR(5) -#define SIG_OUTPUT_COMPARE1A _VECTOR(6) -#define SIG_OUTPUT_COMPARE1B _VECTOR(7) -#define SIG_OVERFLOW1 _VECTOR(8) -#define SIG_OVERFLOW0 _VECTOR(9) -#define SIG_SPI _VECTOR(10) -#define SIG_UART_RECV _VECTOR(11) -#define SIG_UART_DATA _VECTOR(12) -#define SIG_UART_TRANS _VECTOR(13) -#define SIG_ADC _VECTOR(14) -#define SIG_EEPROM_READY _VECTOR(15) -#define SIG_COMPARATOR _VECTOR(16) -#define SIG_2WIRE_SERIAL _VECTOR(17) -#define SIG_SPM_READY _VECTOR(18) +#define SIG_INTERRUPT0 _VECTOR(1) +#define SIG_INTERRUPT1 _VECTOR(2) +#define SIG_OUTPUT_COMPARE2 _VECTOR(3) +#define SIG_OVERFLOW2 _VECTOR(4) +#define SIG_INPUT_CAPTURE1 _VECTOR(5) +#define SIG_OUTPUT_COMPARE1A _VECTOR(6) +#define SIG_OUTPUT_COMPARE1B _VECTOR(7) +#define SIG_OVERFLOW1 _VECTOR(8) +#define SIG_OVERFLOW0 _VECTOR(9) +#define SIG_SPI _VECTOR(10) +#define SIG_UART_RECV _VECTOR(11) +#define SIG_UART_DATA _VECTOR(12) +#define SIG_UART_TRANS _VECTOR(13) +#define SIG_ADC _VECTOR(14) +#define SIG_EEPROM_READY _VECTOR(15) +#define SIG_COMPARATOR _VECTOR(16) +#define SIG_2WIRE_SERIAL _VECTOR(17) +#define SIG_SPM_READY _VECTOR(18) #define _VECTORS_SIZE 38 /* Bit numbers */ /* GIMSK / GICR */ -#define INT1 7 -#define INT0 6 -#define IVSEL 1 -#define IVCE 0 +#define INT1 7 +#define INT0 6 +#define IVSEL 1 +#define IVCE 0 /* GIFR */ -#define INTF1 7 -#define INTF0 6 +#define INTF1 7 +#define INTF0 6 /* TIMSK */ -#define OCIE2 7 -#define TOIE2 6 -#define TICIE1 5 -#define OCIE1A 4 -#define OCIE1B 3 -#define TOIE1 2 +#define OCIE2 7 +#define TOIE2 6 +#define TICIE1 5 +#define OCIE1A 4 +#define OCIE1B 3 +#define TOIE1 2 /* bit 1 reserved (OCIE0?) */ -#define TOIE0 0 +#define TOIE0 0 /* TIFR */ -#define OCF2 7 -#define TOV2 6 -#define ICF1 5 -#define OCF1A 4 -#define OCF1B 3 -#define TOV1 2 +#define OCF2 7 +#define TOV2 6 +#define ICF1 5 +#define OCF1A 4 +#define OCF1B 3 +#define TOV1 2 /* bit 1 reserved (OCF0?) */ -#define TOV0 0 +#define TOV0 0 /* SPMCR */ -#define SPMIE 7 -#define RWWSB 6 +#define SPMIE 7 +#define RWWSB 6 /* bit 5 reserved */ -#define RWWSRE 4 -#define BLBSET 3 -#define PGWRT 2 -#define PGERS 1 -#define SPMEN 0 +#define RWWSRE 4 +#define BLBSET 3 +#define PGWRT 2 +#define PGERS 1 +#define SPMEN 0 /* TWCR */ -#define TWINT 7 -#define TWEA 6 -#define TWSTA 5 -#define TWSTO 4 -#define TWWC 3 -#define TWEN 2 +#define TWINT 7 +#define TWEA 6 +#define TWSTA 5 +#define TWSTO 4 +#define TWWC 3 +#define TWEN 2 /* bit 1 reserved (TWI_TST?) */ -#define TWIE 0 +#define TWIE 0 /* TWAR */ #define TWA6 7 @@ -235,264 +235,264 @@ #define TWA2 3 #define TWA1 2 #define TWA0 1 -#define TWGCE 0 +#define TWGCE 0 /* TWSR */ -#define TWS7 7 -#define TWS6 6 -#define TWS5 5 -#define TWS4 4 -#define TWS3 3 +#define TWS7 7 +#define TWS6 6 +#define TWS5 5 +#define TWS4 4 +#define TWS3 3 /* bit 2 reserved */ -#define TWPS1 1 -#define TWPS0 0 +#define TWPS1 1 +#define TWPS0 0 /* MCUCR */ -#define SE 7 -#define SM2 6 -#define SM1 5 -#define SM0 4 -#define ISC11 3 -#define ISC10 2 -#define ISC01 1 -#define ISC00 0 +#define SE 7 +#define SM2 6 +#define SM1 5 +#define SM0 4 +#define ISC11 3 +#define ISC10 2 +#define ISC01 1 +#define ISC00 0 /* MCUCSR */ /* bits 7-4 reserved */ -#define WDRF 3 -#define BORF 2 -#define EXTRF 1 -#define PORF 0 +#define WDRF 3 +#define BORF 2 +#define EXTRF 1 +#define PORF 0 /* SFIOR */ /* bits 7-5 reserved */ -#define ADHSM 4 -#define ACME 3 -#define PUD 2 -#define PSR2 1 -#define PSR10 0 +#define ADHSM 4 +#define ACME 3 +#define PUD 2 +#define PSR2 1 +#define PSR10 0 /* TCCR0 */ /* bits 7-3 reserved */ -#define CS02 2 -#define CS01 1 -#define CS00 0 +#define CS02 2 +#define CS01 1 +#define CS00 0 /* TCCR2 */ -#define FOC2 7 -#define WGM20 6 -#define COM21 5 -#define COM20 4 -#define WGM21 3 -#define CS22 2 -#define CS21 1 -#define CS20 0 +#define FOC2 7 +#define WGM20 6 +#define COM21 5 +#define COM20 4 +#define WGM21 3 +#define CS22 2 +#define CS21 1 +#define CS20 0 /* ASSR */ /* bits 7-4 reserved */ -#define AS2 3 -#define TCN2UB 2 -#define OCR2UB 1 -#define TCR2UB 0 +#define AS2 3 +#define TCN2UB 2 +#define OCR2UB 1 +#define TCR2UB 0 /* TCCR1A */ -#define COM1A1 7 -#define COM1A0 6 -#define COM1B1 5 -#define COM1B0 4 -#define FOC1A 3 -#define FOC1B 2 -#define WGM11 1 -#define WGM10 0 +#define COM1A1 7 +#define COM1A0 6 +#define COM1B1 5 +#define COM1B0 4 +#define FOC1A 3 +#define FOC1B 2 +#define WGM11 1 +#define WGM10 0 /* TCCR1B */ -#define ICNC1 7 -#define ICES1 6 +#define ICNC1 7 +#define ICES1 6 /* bit 5 reserved */ -#define WGM13 4 -#define WGM12 3 -#define CS12 2 -#define CS11 1 -#define CS10 0 +#define WGM13 4 +#define WGM12 3 +#define CS12 2 +#define CS11 1 +#define CS10 0 /* WDTCR */ /* bits 7-5 reserved */ -#define WDCE 4 -#define WDE 3 -#define WDP2 2 -#define WDP1 1 -#define WDP0 0 +#define WDCE 4 +#define WDE 3 +#define WDP2 2 +#define WDP1 1 +#define WDP0 0 /* UBRRH */ -#define URSEL 7 +#define URSEL 7 /* UCSRC */ -#define URSEL 7 -#define UMSEL 6 -#define UPM1 5 -#define UPM0 4 -#define USBS 3 -#define UCSZ1 2 -#define UCSZ0 1 -#define UCPOL 0 +#define URSEL 7 +#define UMSEL 6 +#define UPM1 5 +#define UPM0 4 +#define USBS 3 +#define UCSZ1 2 +#define UCSZ0 1 +#define UCPOL 0 /* PORTB */ -#define PB7 7 -#define PB6 6 -#define PB5 5 -#define PB4 4 -#define PB3 3 -#define PB2 2 -#define PB1 1 -#define PB0 0 +#define PB7 7 +#define PB6 6 +#define PB5 5 +#define PB4 4 +#define PB3 3 +#define PB2 2 +#define PB1 1 +#define PB0 0 /* DDRB */ -#define DDB7 7 -#define DDB6 6 -#define DDB5 5 -#define DDB4 4 -#define DDB3 3 -#define DDB2 2 -#define DDB1 1 -#define DDB0 0 +#define DDB7 7 +#define DDB6 6 +#define DDB5 5 +#define DDB4 4 +#define DDB3 3 +#define DDB2 2 +#define DDB1 1 +#define DDB0 0 /* PINB */ -#define PINB7 7 -#define PINB6 6 -#define PINB5 5 -#define PINB4 4 -#define PINB3 3 -#define PINB2 2 -#define PINB1 1 -#define PINB0 0 +#define PINB7 7 +#define PINB6 6 +#define PINB5 5 +#define PINB4 4 +#define PINB3 3 +#define PINB2 2 +#define PINB1 1 +#define PINB0 0 /* PORTC */ -#define PC6 6 -#define PC5 5 -#define PC4 4 -#define PC3 3 -#define PC2 2 -#define PC1 1 -#define PC0 0 +#define PC6 6 +#define PC5 5 +#define PC4 4 +#define PC3 3 +#define PC2 2 +#define PC1 1 +#define PC0 0 /* DDRC */ -#define DDC6 6 -#define DDC5 5 -#define DDC4 4 -#define DDC3 3 -#define DDC2 2 -#define DDC1 1 -#define DDC0 0 +#define DDC6 6 +#define DDC5 5 +#define DDC4 4 +#define DDC3 3 +#define DDC2 2 +#define DDC1 1 +#define DDC0 0 /* PINC */ -#define PINC6 6 -#define PINC5 5 -#define PINC4 4 -#define PINC3 3 -#define PINC2 2 -#define PINC1 1 -#define PINC0 0 +#define PINC6 6 +#define PINC5 5 +#define PINC4 4 +#define PINC3 3 +#define PINC2 2 +#define PINC1 1 +#define PINC0 0 /* PORTD */ -#define PD7 7 -#define PD6 6 -#define PD5 5 -#define PD4 4 -#define PD3 3 -#define PD2 2 -#define PD1 1 -#define PD0 0 +#define PD7 7 +#define PD6 6 +#define PD5 5 +#define PD4 4 +#define PD3 3 +#define PD2 2 +#define PD1 1 +#define PD0 0 /* DDRD */ -#define DDD7 7 -#define DDD6 6 -#define DDD5 5 -#define DDD4 4 -#define DDD3 3 -#define DDD2 2 -#define DDD1 1 -#define DDD0 0 +#define DDD7 7 +#define DDD6 6 +#define DDD5 5 +#define DDD4 4 +#define DDD3 3 +#define DDD2 2 +#define DDD1 1 +#define DDD0 0 /* PIND */ -#define PIND7 7 -#define PIND6 6 -#define PIND5 5 -#define PIND4 4 -#define PIND3 3 -#define PIND2 2 -#define PIND1 1 -#define PIND0 0 +#define PIND7 7 +#define PIND6 6 +#define PIND5 5 +#define PIND4 4 +#define PIND3 3 +#define PIND2 2 +#define PIND1 1 +#define PIND0 0 /* SPSR */ -#define SPIF 7 -#define WCOL 6 -#define SPI2X 0 +#define SPIF 7 +#define WCOL 6 +#define SPI2X 0 /* SPCR */ -#define SPIE 7 -#define SPE 6 -#define DORD 5 -#define MSTR 4 -#define CPOL 3 -#define CPHA 2 -#define SPR1 1 -#define SPR0 0 +#define SPIE 7 +#define SPE 6 +#define DORD 5 +#define MSTR 4 +#define CPOL 3 +#define CPHA 2 +#define SPR1 1 +#define SPR0 0 /* UCSRA */ -#define RXC 7 -#define TXC 6 -#define UDRE 5 -#define FE 4 -#define DOR 3 -#define PE 2 -#define U2X 1 -#define MPCM 0 +#define RXC 7 +#define TXC 6 +#define UDRE 5 +#define FE 4 +#define DOR 3 +#define PE 2 +#define U2X 1 +#define MPCM 0 /* UCSRB */ -#define RXCIE 7 -#define TXCIE 6 -#define UDRIE 5 -#define RXEN 4 -#define TXEN 3 -#define UCSZ2 2 -#define RXB8 1 -#define TXB8 0 +#define RXCIE 7 +#define TXCIE 6 +#define UDRIE 5 +#define RXEN 4 +#define TXEN 3 +#define UCSZ2 2 +#define RXB8 1 +#define TXB8 0 /* ACSR */ -#define ACD 7 -#define ACBG 6 -#define ACO 5 -#define ACI 4 -#define ACIE 3 -#define ACIC 2 -#define ACIS1 1 -#define ACIS0 0 +#define ACD 7 +#define ACBG 6 +#define ACO 5 +#define ACI 4 +#define ACIE 3 +#define ACIC 2 +#define ACIS1 1 +#define ACIS0 0 /* ADCSR / ADCSRA */ -#define ADEN 7 -#define ADSC 6 -#define ADFR 5 -#define ADIF 4 -#define ADIE 3 -#define ADPS2 2 -#define ADPS1 1 -#define ADPS0 0 +#define ADEN 7 +#define ADSC 6 +#define ADFR 5 +#define ADIF 4 +#define ADIE 3 +#define ADPS2 2 +#define ADPS1 1 +#define ADPS0 0 /* ADMUX */ -#define REFS1 7 -#define REFS0 6 -#define ADLAR 5 +#define REFS1 7 +#define REFS0 6 +#define ADLAR 5 /* bit 4 reserved */ -#define MUX3 3 -#define MUX2 2 -#define MUX1 1 -#define MUX0 0 +#define MUX3 3 +#define MUX2 2 +#define MUX1 1 +#define MUX0 0 /* Constants */ #define SPM_PAGESIZE 64 -#define RAMEND 0x45F -#define XRAMEND 0x45F -#define E2END 0x1FF -#define FLASHEND 0x1FFF +#define RAMEND 0x45F +#define XRAMEND 0x45F +#define E2END 0x1FF +#define FLASHEND 0x1FFF #endif /* _AVR_IOM8_H_ */ diff --git a/bench/parallel/PapaBench/arch/include/avr/arch/portpins.h b/bench/parallel/PapaBench/arch/include/avr/arch/portpins.h index 1bd9479bde971864ece6a67d9826de6d216acd6e..941f90190e02e5c92abadf4f5773307c60b8e234 100644 --- a/bench/parallel/PapaBench/arch/include/avr/arch/portpins.h +++ b/bench/parallel/PapaBench/arch/include/avr/arch/portpins.h @@ -4,15 +4,15 @@ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright + Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holders nor the names of + Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/bench/parallel/PapaBench/arch/include/avr/arch/sfr_defs.h b/bench/parallel/PapaBench/arch/include/avr/arch/sfr_defs.h index a2fd0091ec9bec193335fd03960a6b81a61a95eb..f8268f2246c71af526dbd91392ddee7878531cd0 100644 --- a/bench/parallel/PapaBench/arch/include/avr/arch/sfr_defs.h +++ b/bench/parallel/PapaBench/arch/include/avr/arch/sfr_defs.h @@ -4,15 +4,15 @@ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright + Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holders nor the names of + Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -44,12 +44,12 @@ <tt>_SFR_ASM_COMPAT</tt> define. Some examples from \c <arch/iom128.h> to show how to define such macros: -\code -#define PORTA _SFR_IO8(0x1b) -#define TCNT1 _SFR_IO16(0x2c) -#define PORTF _SFR_MEM8(0x61) -#define TCNT3 _SFR_MEM16(0x88) -\endcode + \code + #define PORTA _SFR_IO8(0x1b) + #define TCNT1 _SFR_IO16(0x2c) + #define PORTF _SFR_MEM8(0x61) + #define TCNT3 _SFR_MEM16(0x88) + \endcode If \c _SFR_ASM_COMPAT is not defined, C programs can use names like <tt>PORTA</tt> directly in C expressions (also on the left side of @@ -67,9 +67,9 @@ For more backwards compatibility, insert the following at the start of your old assembler source file: -\code -#define __SFR_OFFSET 0 -\endcode + \code + #define __SFR_OFFSET 0 + \endcode This automatically subtracts 0x20 from I/O space addresses, but it's a hack, so it is recommended to change your source: wrap such addresses in @@ -79,18 +79,18 @@ Real example - this code could be used in a boot loader that is portable between devices with \c SPMCR at different addresses. -\verbatim -<arch/iom163.h>: #define SPMCR _SFR_IO8(0x37) -<arch/iom128.h>: #define SPMCR _SFR_MEM8(0x68) -\endverbatim + \verbatim + <arch/iom163.h>: #define SPMCR _SFR_IO8(0x37) + <arch/iom128.h>: #define SPMCR _SFR_MEM8(0x68) + \endverbatim -\code -#if _SFR_IO_REG_P(SPMCR) - out _SFR_IO_ADDR(SPMCR), r24 -#else - sts _SFR_MEM_ADDR(SPMCR), r24 -#endif -\endcode + \code + #if _SFR_IO_REG_P(SPMCR) + out _SFR_IO_ADDR(SPMCR), r24 + #else + sts _SFR_MEM_ADDR(SPMCR), r24 + #endif + \endcode You can use the \c in/out/cbi/sbi/sbic/sbis instructions, without the <tt>_SFR_IO_REG_P</tt> test, if you know that the register is in the I/O @@ -105,9 +105,9 @@ will not work if <tt>__SFR_OFFSET</tt> != 0x20, so use a different macro (defined only if <tt>__SFR_OFFSET</tt> == 0x20) for safety: -\code - sts _SFR_ADDR(SPMCR), r24 -\endcode + \code + sts _SFR_ADDR(SPMCR), r24 + \endcode In C programs, all 3 combinations of \c _SFR_ASM_COMPAT and <tt>__SFR_OFFSET</tt> are supported - the \c _SFR_ADDR(SPMCR) macro can be @@ -185,7 +185,7 @@ \note The bit shift is performed by the compiler which then inserts the result into the code. Thus, there is no run-time overhead when using _BV(). */ - + #define _BV(bit) (1 << (bit)) /*@}*/ @@ -208,7 +208,7 @@ \code #include <arch/io.h>\endcode - Test whether bit \c bit in IO register \c sfr is set. + Test whether bit \c bit in IO register \c sfr is set. This will return a 0 if the bit is clear, and non-zero if the bit is set. */ @@ -219,7 +219,7 @@ \code #include <arch/io.h>\endcode - Test whether bit \c bit in IO register \c sfr is clear. + Test whether bit \c bit in IO register \c sfr is clear. This will return non-zero if the bit is clear, and a 0 if the bit is set. */ diff --git a/bench/parallel/PapaBench/arch/include/avr/arch/signal.h b/bench/parallel/PapaBench/arch/include/avr/arch/signal.h index 61f476a77e2af073060a5063e4a8a67b4b17e535..cc6a7cc843753b0e11b9c22b8f3b1d50208acad2 100644 --- a/bench/parallel/PapaBench/arch/include/avr/arch/signal.h +++ b/bench/parallel/PapaBench/arch/include/avr/arch/signal.h @@ -4,15 +4,15 @@ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright + Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the copyright holders nor the names of + Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -46,16 +46,16 @@ initially disabled. */ #ifdef __cplusplus -#define SIGNAL(signame) \ -extern "C" void signame(void); \ -void signame (void) __attribute__ ((signal)); \ +#define SIGNAL(signame) \ +extern "C" void signame(void); \ +void signame (void) __attribute__ ((signal)); \ void signame (void) #else -#define SIGNAL(signame) \ +#define SIGNAL(signame) \ void signame (void) #endif -/** \def INTERRUPT(signame) +/** \def INTERRUPT(signame) \ingroup avr_interrupts \code#include <arch/signal.h>\endcode @@ -64,17 +64,17 @@ void signame (void) initially enabled. This allows interrupt handlers to be interrupted. */ #ifdef __cplusplus -#define INTERRUPT(signame) \ -extern "C" void signame(void); \ -void signame (void) __attribute__ ((interrupt)); \ +#define INTERRUPT(signame) \ +extern "C" void signame(void); \ +void signame (void) __attribute__ ((interrupt)); \ void signame (void) #else -#define INTERRUPT(signame) \ -void signame (void) __attribute__ ((interrupt)); \ +#define INTERRUPT(signame) \ +void signame (void) __attribute__ ((interrupt)); \ void signame (void) #endif -/** \def EMPTY_INTERRUPT(signame) +/** \def EMPTY_INTERRUPT(signame) \ingroup avr_interrupts \code#include <arch/signal.h>\endcode diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/ad7714.c b/bench/parallel/PapaBench/sw/airborne/autopilot/ad7714.c index 72f906a62feb3d7fee307e2c7754286160abee19..e7394818f10d7991cb5170ae88fb247b4c17fb47 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/ad7714.c +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/ad7714.c @@ -20,11 +20,11 @@ struct AdMsg { uint8_t len; - const uint8_t* data; + const uint8_t *data; }; #define AD7714_SETUP_LEN 6 -const uint8_t ad7714_setup_data[AD7714_SETUP_LEN] = { +const uint8_t ad7714_setup_data[ AD7714_SETUP_LEN ] = { AD_F_HIGH_REG + AD_FD0, /* select high filter register */ AD_HIGH_FILTER_CFG, AD_F_LOW_REG + AD_FD0, /* select low filter register */ @@ -35,7 +35,7 @@ const uint8_t ad7714_setup_data[AD7714_SETUP_LEN] = { const struct AdMsg ad7714_setup = {AD7714_SETUP_LEN, ad7714_setup_data}; #define AD7714_READ_LEN 3 -const uint8_t ad7714_read_data[] = { +const uint8_t ad7714_read_data[ ] = { AD_DATA_REG + AD_WR + AD_FD0, /* transmit read request */ 0x00, /* transmit a dumb value just to get the result */ 0xAA /* transmit a dumb value just to get the result */ @@ -43,7 +43,7 @@ const uint8_t ad7714_read_data[] = { const struct AdMsg ad7714_read = {AD7714_READ_LEN, ad7714_read_data}; #define AD7714_SELECT_CHANNEL_LEN 2 -const uint8_t ad7714_select_channel_data[AD7714_SELECT_CHANNEL_LEN] = { +const uint8_t ad7714_select_channel_data[ AD7714_SELECT_CHANNEL_LEN ] = { AD_MODE_REG + AD_FD0, // AD_BG_CAL_MOD + AD_GAIN_128 AD_NOR_MOD + AD_GAIN_128 @@ -51,35 +51,38 @@ const uint8_t ad7714_select_channel_data[AD7714_SELECT_CHANNEL_LEN] = { const struct AdMsg ad7714_select_channel = {AD7714_SELECT_CHANNEL_LEN, ad7714_select_channel_data}; -static struct AdMsg* msg; +static struct AdMsg *msg; static uint8_t idx; uint16_t ad7714_sample; uint8_t ad7714_sample_read; -void ad7714_start_transmitting (const struct AdMsg *amsg) { +void ad7714_start_transmitting ( const struct AdMsg *amsg ) +{ /* Enable SPI, Master, MSB first, clock idle high, sample on trailing edge, clock rate fck/128 */ - SPI_START(_BV(SPE)| _BV(MSTR) | _BV(SPR1) | _BV(CPOL) | _BV(CPHA)| _BV(SPR0)); //| _BV(SPR0) + SPI_START( _BV( SPE ) | _BV( MSTR ) | _BV( SPR1 ) | _BV( CPOL ) | _BV( + CPHA ) | _BV( SPR0 ) ); //| _BV(SPR0) SPI_SELECT_SLAVE1(); - msg = (struct AdMsg*)amsg; - SPDR = msg->data[0]; + msg = ( struct AdMsg * )amsg; + SPDR = msg->data[ 0 ]; idx = 0; } -void ad7714_on_spi_it( void ) { +void ad7714_on_spi_it( void ) +{ uint8_t spi_read = SPDR; - if (msg == &ad7714_read) { - if (idx==1) - ad7714_sample = spi_read<<8; - else if (idx==2) { - ad7714_sample += spi_read; - ad7714_sample_read = TRUE; - } + if ( msg == &ad7714_read ) { + if ( idx == 1 ) + ad7714_sample = spi_read << 8; + else + if ( idx == 2 ) { + ad7714_sample += spi_read; + ad7714_sample_read = TRUE; + } } idx++; - if (idx < msg->len) { - SPI_SEND(msg->data[idx]); - } + if ( idx < msg->len ) + SPI_SEND( msg->data[ idx ] ); else { SPI_UNSELECT_SLAVE1(); SPI_STOP(); @@ -87,20 +90,23 @@ void ad7714_on_spi_it( void ) { } uint8_t ad7714_status = 0; -void ad7714_on_it( void ) { - if (ad7714_status == 0) - ad7714_start_transmitting(&ad7714_setup); - else if (ad7714_status == 1) - ad7714_start_transmitting(&ad7714_select_channel); +void ad7714_on_it( void ) +{ + if ( ad7714_status == 0 ) + ad7714_start_transmitting( &ad7714_setup ); else - ad7714_start_transmitting(&ad7714_read); + if ( ad7714_status == 1 ) + ad7714_start_transmitting( &ad7714_select_channel ); + else + ad7714_start_transmitting( &ad7714_read ); ad7714_status++; } -void ad7714_init( void ) { +void ad7714_init( void ) +{ /* setupt interrupt on falling edge */ - cbi(EICRB, ISC60); - sbi(EICRB, ISC61); + cbi( EICRB, ISC60 ); + sbi( EICRB, ISC61 ); /* clear interrupt flag */ // if (bit_is_set(EIFR, INTF6)) // EIFR != _BV(INTF6); @@ -108,6 +114,7 @@ void ad7714_init( void ) { } -SIGNAL(SIG_INTERRUPT6) { +SIGNAL( SIG_INTERRUPT6 ) +{ ad7714_on_it(); } diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/ad7714.h b/bench/parallel/PapaBench/sw/airborne/autopilot/ad7714.h index eb1da2e2f52461d8ba627d2de9e1a9fa436c330c..ef722c0fea0a687431014978f90bfcd81bcc9232 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/ad7714.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/ad7714.h @@ -41,9 +41,9 @@ #define AD_BO (1<<1) #define AD_FSYNC (1<<0) -#define Ad7714_Disable_It() { cbi(EIMSK, INT6); } +#define Ad7714_Disable_It() { cbi(EIMSK, INT6); } -#define Ad7714_Enable_It() { sbi(EIMSK, INT6); } +#define Ad7714_Enable_It() { sbi(EIMSK, INT6); } #define Ad7714_Ready() (bit_is_clear(EIFR, INTF6)) diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/adc.c b/bench/parallel/PapaBench/sw/airborne/autopilot/adc.c index f8439cb8a28d1a871d1efde209570616e08e521b..4a06179ceed130ed4e3cf52d450bd41223aa13bd 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/adc.c +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/adc.c @@ -1,29 +1,29 @@ /* - * Paparazzi mcu0 adc functions - * - * Copied from autopilot (autopilot.sf.net) thanx alot Trammell - * - * Copyright (C) 2002 Trammell Hudson <hudson@rotomotion.com> - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi mcu0 adc functions + + Copied from autopilot (autopilot.sf.net) thanx alot Trammell + + Copyright (C) 2002 Trammell Hudson <hudson@rotomotion.com> + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #include <arch/signal.h> @@ -35,19 +35,19 @@ /************************************************************************* - * - * Analog to digital conversion code. - * - * We allow interrupts during the 2048 usec windows. If we run the - * ADC clock faster than Clk/64 we have too much overhead servicing - * the interrupts from it and end up with servo jitter. - * - * For now we've slowed the clock to Clk/128 because it lets us - * be lazy in the interrupt routine. - */ -#define VOLTAGE_TIME 0x07 -#define ANALOG_PORT PORTF -#define ANALOG_PORT_DIR DDRF + + Analog to digital conversion code. + + We allow interrupts during the 2048 usec windows. If we run the + ADC clock faster than Clk/64 we have too much overhead servicing + the interrupts from it and end up with servo jitter. + + For now we've slowed the clock to Clk/128 because it lets us + be lazy in the interrupt routine. +*/ +#define VOLTAGE_TIME 0x07 +#define ANALOG_PORT PORTF +#define ANALOG_PORT_DIR DDRF #ifdef CTL_BRD_V1_1 @@ -58,72 +58,73 @@ #define ANALOG_VREF _BV(REFS0) #endif -uint16_t adc_samples[ NB_ADC ]; +uint16_t adc_samples[ NB_ADC ]; -static struct adc_buf* buffers[NB_ADC]; +static struct adc_buf *buffers[ NB_ADC ]; -void adc_buf_channel(uint8_t adc_channel, struct adc_buf* s) { - buffers[adc_channel] = s; +void adc_buf_channel( uint8_t adc_channel, struct adc_buf *s ) +{ + buffers[ adc_channel ] = s; } -void +void adc_init( void ) { uint8_t i; /* Ensure that our port is for input with no pull-ups */ - ANALOG_PORT = 0x00; - ANALOG_PORT_DIR = 0x00; + ANALOG_PORT = 0x00; + ANALOG_PORT_DIR = 0x00; /* Select our external voltage ref, which is tied to Vcc */ - ADMUX = ANALOG_VREF; + ADMUX = ANALOG_VREF; /* Turn off the analog comparator */ sbi( ACSR, ACD ); /* Select out clock, turn on the ADC interrupt and start conversion */ - ADCSR = 0 - | VOLTAGE_TIME - | ( 1 << ADEN ) - | ( 1 << ADIE ) - | ( 1 << ADSC ); + ADCSR = 0 + | VOLTAGE_TIME + | ( 1 << ADEN ) + | ( 1 << ADIE ) + | ( 1 << ADSC ); /* Init to 0 (usefull ?) */ - _Pragma("loopbound min 8 max 8") - for(i = 0; i < NB_ADC; i++) - buffers[i] = (struct adc_buf*)0; + _Pragma( "loopbound min 8 max 8" ) + for ( i = 0; i < NB_ADC; i++ ) + buffers[ i ] = ( struct adc_buf * )0; } /** - * Called when the voltage conversion is finished - * - * 8.913kHz on mega128@16MHz 1kHz/channel ?? + Called when the voltage conversion is finished + + 8.913kHz on mega128@16MHz 1kHz/channel ?? */ SIGNAL( SIG_ADC ) { - uint8_t adc_input = ADMUX & 0x7; - struct adc_buf* buf = buffers[adc_input]; + uint8_t adc_input = ADMUX & 0x7; + struct adc_buf *buf = buffers[ adc_input ]; uint16_t adc_value = ADCW; /* Store result */ adc_samples[ adc_input ] = adc_value; - if (buf) { + if ( buf ) { uint8_t new_head = buf->head + 1; - if (new_head >= AV_NB_SAMPLE) new_head = 0; - buf->sum -= buf->values[new_head]; - buf->values[new_head] = adc_value; + if ( new_head >= AV_NB_SAMPLE ) new_head = 0; + buf->sum -= buf->values[ new_head ]; + buf->values[ new_head ] = adc_value; buf->sum += adc_value; - buf->head = new_head; + buf->head = new_head; } /* Find the next input */ adc_input++; - if( adc_input >= 8 ) + if ( adc_input >= 8 ) adc_input = 0; /* Select it */ ADMUX = adc_input | ANALOG_VREF; /* Restart the conversion */ sbi( ADCSR, ADSC ); - + } diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/adc.h b/bench/parallel/PapaBench/sw/airborne/autopilot/adc.h index c64a7719f8412fcdc6ed7fab2bfcf88d5f7b6534..5d8b1d82a49fab54e43ccdfc8845bc32655e0db0 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/adc.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/adc.h @@ -1,29 +1,29 @@ /* - * Paparazzi mcu0 adc functions - * - * Copied from autopilot (autopilot.sf.net) thanx alot Trammell - * - * Copyright (C) 2002 Trammell Hudson <hudson@rotomotion.com> - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi mcu0 adc functions + + Copied from autopilot (autopilot.sf.net) thanx alot Trammell + + Copyright (C) 2002 Trammell Hudson <hudson@rotomotion.com> + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef _ADC_H_ #define _ADC_H_ @@ -34,7 +34,7 @@ #define NB_ADC 8 /* Array containing the last measured value */ -extern uint16_t adc_samples[ NB_ADC ]; +extern uint16_t adc_samples[ NB_ADC ]; void adc_init( void ); @@ -42,12 +42,12 @@ void adc_init( void ); struct adc_buf { uint16_t sum; - uint16_t values[AV_NB_SAMPLE]; + uint16_t values[ AV_NB_SAMPLE ]; uint8_t head; }; /* Facility to store last values in a circular buffer for a specific channel: allocate a (struct adc_buf) and register it with the following function */ -void adc_buf_channel(uint8_t adc_channel, struct adc_buf* s); +void adc_buf_channel( uint8_t adc_channel, struct adc_buf *s ); #endif diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/autopilot.h b/bench/parallel/PapaBench/sw/airborne/autopilot/autopilot.h index 1eaa9ebde6c8f39c51ec0ef53e966044a25b84eb..6d72915949ee89e82c2ff5c6d08056dfa4bb5716 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/autopilot.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/autopilot.h @@ -1,26 +1,26 @@ /* - * $Id: autopilot.h,v 1.1 2011-01-18 12:48:38 moellmer Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + $Id: autopilot.h,v 1.1 2011-01-18 12:48:38 moellmer Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef AUTOPILOT_H #define AUTOPILOT_H @@ -112,12 +112,12 @@ extern struct adc_buf buf_bat; #endif void periodic_task( void ); -void use_gps_pos(void); -void radio_control_task(void); +void use_gps_pos( void ); +void radio_control_task( void ); /*receive_gps_data_task */ void send_gps_pos( void ); -void send_radIR(void); -void send_takeOff(void); +void send_radIR( void ); +void send_takeOff( void ); /*end receive_gps_data_task*/ -void stabilisation_task(void); +void stabilisation_task( void ); #endif /* AUTOPILOT_H */ diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/downlink.h b/bench/parallel/PapaBench/sw/airborne/autopilot/downlink.h index e92b79f229624b721ae96f47e4db1feedc2df581..dd10c8f0d82297b702c9bfbe2c81ed623fae9951 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/downlink.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/downlink.h @@ -1,26 +1,26 @@ /* - * Paparazzi mcu0 $Id: downlink.h,v 1.1 2011-01-18 12:48:38 moellmer Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi mcu0 $Id: downlink.h,v 1.1 2011-01-18 12:48:38 moellmer Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef DOWNLINK_H #define DOWNLINK_H diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/estimator.c b/bench/parallel/PapaBench/sw/airborne/autopilot/estimator.c index d504ee162dd002d3bec3467874aadbb06532da60..a0133007e11ebaeee6e65d6901791f2ac9966217 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/estimator.c +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/estimator.c @@ -1,26 +1,26 @@ /* - * Paparazzi autopilot $Id: estimator.c,v 1.2 2011-01-21 11:52:44 moellmer Exp $ - * - * Copyright (C) 2004 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi autopilot $Id: estimator.c,v 1.2 2011-01-21 11:52:44 moellmer Exp $ + + Copyright (C) 2004 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #include <inttypes.h> #include <math.h> @@ -53,9 +53,9 @@ float estimator_psi_dot; float estimator_theta_dot; /* flight time in seconds */ -uint16_t estimator_flight_time; +uint16_t estimator_flight_time; /* flight time in seconds */ -float estimator_t; +float estimator_t; /* horizontal speed in module and dir */ float estimator_hspeed_mod; @@ -93,15 +93,16 @@ float estimator_rad_of_ir, estimator_ir, estimator_rad; inline void estimator_update_lls( void ); -void estimator_init( void ) { +void estimator_init( void ) +{ - EstimatorSetPos (0., 0., 0.); + EstimatorSetPos ( 0., 0., 0. ); - EstimatorSetAtt (0., 0., 0); + EstimatorSetAtt ( 0., 0., 0 ); - EstimatorSetSpeedPol ( 0., 0., 0.); + EstimatorSetSpeedPol ( 0., 0., 0. ); - EstimatorSetRotSpeed (0., 0., 0.); + EstimatorSetRotSpeed ( 0., 0., 0. ); estimator_flight_time = 0; @@ -110,9 +111,11 @@ void estimator_init( void ) { #define EstimatorIrGainIsCorrect() (TRUE) -void estimator_update_state_infrared( void ) { - float rad_of_ir = (ir_estim_mode == IR_ESTIM_MODE_ON && EstimatorIrGainIsCorrect()) ? - estimator_rad_of_ir : ir_rad_of_ir; +void estimator_update_state_infrared( void ) +{ + float rad_of_ir = ( ir_estim_mode == IR_ESTIM_MODE_ON && + EstimatorIrGainIsCorrect() ) ? + estimator_rad_of_ir : ir_rad_of_ir; estimator_phi = rad_of_ir * ir_roll; estimator_theta = rad_of_ir * ir_pitch; @@ -124,7 +127,8 @@ void estimator_update_state_infrared( void ) { #define g 9.81 -void estimator_update_ir_estim( void ) { +void estimator_update_ir_estim( void ) +{ static float last_hspeed_dir; static float last_t; static bool_t initialized = FALSE; @@ -132,45 +136,46 @@ void estimator_update_ir_estim( void ) { float absphi; float init_ir2; - if (initialized) - { + if ( initialized ) { float dt = gps_ftow - last_t; - if (dt > 0.1) { // Against division by zero - float phi = (estimator_hspeed_dir - last_hspeed_dir); + if ( dt > 0.1 ) { // Against division by zero + float phi = ( estimator_hspeed_dir - last_hspeed_dir ); //NORM_RAD_ANGLE(phi); - _Pragma("loopbounds min 0 max 1") - while (phi > M_PI) phi -= 2 * M_PI; - _Pragma("loopbounds min 0 max 1") - while (phi < -M_PI) phi += 2 * M_PI; - phi = phi/dt*NOMINAL_AIRSPEED/g; /* tan linearized */ + _Pragma( "loopbounds min 0 max 1" ) + while ( phi > M_PI ) phi -= 2 * M_PI; + _Pragma( "loopbounds min 0 max 1" ) + while ( phi < -M_PI ) phi += 2 * M_PI; + phi = phi / dt * NOMINAL_AIRSPEED / g; /* tan linearized */ //NORM_RAD_ANGLE(phi); - _Pragma("loopbounds min 0 max 1") - while (phi > M_PI) phi -= 2 * M_PI; - _Pragma("loopbounds min 0 max 1") - while (phi < -M_PI) phi += 2 * M_PI; - estimator_ir = (float)ir_roll; + _Pragma( "loopbounds min 0 max 1" ) + while ( phi > M_PI ) phi -= 2 * M_PI; + _Pragma( "loopbounds min 0 max 1" ) + while ( phi < -M_PI ) phi += 2 * M_PI; + estimator_ir = ( float )ir_roll; estimator_rad = phi; - absphi = fabs(phi); - if (absphi < 1.0 && absphi > 0.05 && (- ir_contrast/2 < ir_roll && ir_roll < ir_contrast/2)) { - sum_xy = estimator_rad * estimator_ir + RHO * sum_xy; - sum_xx = estimator_ir * estimator_ir + RHO * sum_xx; -#if defined IR_RAD_OF_IR_MIN_VALUE & defined IR_RAD_OF_IR_MAX_VALUE - float result = sum_xy / sum_xx; - if (result < IR_RAD_OF_IR_MIN_VALUE) - estimator_rad_of_ir = IR_RAD_OF_IR_MIN_VALUE; - else if (result > IR_RAD_OF_IR_MAX_VALUE) - estimator_rad_of_ir = IR_RAD_OF_IR_MAX_VALUE; - else - estimator_rad_of_ir = result; -#else - estimator_rad_of_ir = sum_xy / sum_xx; -#endif + absphi = fabs( phi ); + if ( absphi < 1.0 && absphi > 0.05 && ( - ir_contrast / 2 < ir_roll && + ir_roll < ir_contrast / 2 ) ) { + sum_xy = estimator_rad * estimator_ir + RHO * sum_xy; + sum_xx = estimator_ir * estimator_ir + RHO * sum_xx; + #if defined IR_RAD_OF_IR_MIN_VALUE & defined IR_RAD_OF_IR_MAX_VALUE + float result = sum_xy / sum_xx; + if ( result < IR_RAD_OF_IR_MIN_VALUE ) + estimator_rad_of_ir = IR_RAD_OF_IR_MIN_VALUE; + else + if ( result > IR_RAD_OF_IR_MAX_VALUE ) + estimator_rad_of_ir = IR_RAD_OF_IR_MAX_VALUE; + else + estimator_rad_of_ir = result; + #else + estimator_rad_of_ir = sum_xy / sum_xx; + #endif } - } + } } else { initialized = TRUE; init_ir2 = ir_contrast; - init_ir2 = init_ir2*init_ir2; + init_ir2 = init_ir2 * init_ir2; sum_xy = INIT_WEIGHT * estimator_rad_of_ir * init_ir2; sum_xx = INIT_WEIGHT * init_ir2; } @@ -180,16 +185,18 @@ void estimator_update_ir_estim( void ) { } -void estimator_update_state_gps( void ) { - if (GPS_FIX_VALID(gps_mode)) { - EstimatorSetPos(gps_east, gps_north, gps_falt); - EstimatorSetSpeedPol(gps_fspeed, gps_fcourse, gps_fclimb); - - if (estimator_flight_time) +void estimator_update_state_gps( void ) +{ + if ( GPS_FIX_VALID( gps_mode ) ) { + EstimatorSetPos( gps_east, gps_north, gps_falt ); + EstimatorSetSpeedPol( gps_fspeed, gps_fcourse, gps_fclimb ); + + if ( estimator_flight_time ) estimator_update_ir_estim(); } } -void estimator_propagate_state( void ) { - +void estimator_propagate_state( void ) +{ + } diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/estimator.h b/bench/parallel/PapaBench/sw/airborne/autopilot/estimator.h index da1a7644210e53664ad50c3f0682be38299cce43..e89ab6b50099d3a65e16ebcdc3568c175dc73e75 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/estimator.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/estimator.h @@ -1,26 +1,26 @@ /* - * $Id: estimator.h,v 1.1 2011-01-18 12:48:38 moellmer Exp $ - * - * Copyright (C) 2004 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + $Id: estimator.h,v 1.1 2011-01-18 12:48:38 moellmer Exp $ + + Copyright (C) 2004 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef ESTIMATOR_H #define ESTIMATOR_H diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/gps.h b/bench/parallel/PapaBench/sw/airborne/autopilot/gps.h index 184d95e55df91abeefe7f28bf67eb2971a1c0786..bd685c130186f24fd804d3264a6b5283874830c2 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/gps.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/gps.h @@ -1,30 +1,30 @@ /* - * Paparazzi mcu0 $Id: gps.h,v 1.1 2011-01-18 12:48:38 moellmer Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi mcu0 $Id: gps.h,v 1.1 2011-01-18 12:48:38 moellmer Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ /* - * Parse SIRF protocol from ublox SAM module - * + Parse SIRF protocol from ublox SAM module + */ diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/gps_sirf.c b/bench/parallel/PapaBench/sw/airborne/autopilot/gps_sirf.c index af12311ffdc970ab779631fec6664c7a9c551027..30aa3e45e25c316837ea90bd896b6cca7e61a16c 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/gps_sirf.c +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/gps_sirf.c @@ -1,32 +1,32 @@ /* - * Paparazzi mcu0 $Id: gps_sirf.c,v 1.2 2011-01-25 09:40:36 plazar Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi mcu0 $Id: gps_sirf.c,v 1.2 2011-01-25 09:40:36 plazar Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #include <inttypes.h> #include <arch/io.h> #include <arch/signal.h> #include <arch/interrupt.h> -#include <string.h> +#include <string.h> #include "math_papabench.h" #include "uart.h" @@ -43,14 +43,14 @@ bool_t gps_pos_available; #define SIRF_MAX_PAYLOAD 255 -uint8_t sirf_msg_buf[SIRF_MAX_PAYLOAD]; +uint8_t sirf_msg_buf[ SIRF_MAX_PAYLOAD ]; #define READ_INT32_AT_OFFSET(offset, dest) \ { \ - dest[0] = sirf_msg_buf[offset+3]; \ - dest[1] = sirf_msg_buf[offset+2]; \ - dest[2] = sirf_msg_buf[offset+1]; \ - dest[3] = sirf_msg_buf[offset]; \ + dest[ 0 ] = sirf_msg_buf[ offset+3 ]; \ + dest[ 1 ] = sirf_msg_buf[ offset+2 ]; \ + dest[ 2 ] = sirf_msg_buf[ offset+1 ]; \ + dest[ 3 ] = sirf_msg_buf[ offset ]; \ } \ /* ext nav type = 0x62 offset len @@ -63,29 +63,30 @@ uint8_t sirf_msg_buf[SIRF_MAX_PAYLOAD]; course 21 4 mode 25 1 */ -void parse_gps_msg( void ) { +void parse_gps_msg( void ) +{ static int32_t tmp_int32; - uint8_t *tmp = (uint8_t*)&tmp_int32; + uint8_t *tmp = ( uint8_t * )&tmp_int32; - READ_INT32_AT_OFFSET(1, tmp); + READ_INT32_AT_OFFSET( 1, tmp ); gps_lat = tmp_int32; - READ_INT32_AT_OFFSET(5, tmp); + READ_INT32_AT_OFFSET( 5, tmp ); gps_lon = tmp_int32; - - READ_INT32_AT_OFFSET(9, tmp); - gps_falt = (float)tmp_int32 / 1e3; - READ_INT32_AT_OFFSET(13, tmp); - gps_fspeed = (float)tmp_int32 / 1e3; + READ_INT32_AT_OFFSET( 9, tmp ); + gps_falt = ( float )tmp_int32 / 1e3; - READ_INT32_AT_OFFSET(17, tmp); - gps_fclimb = (float)tmp_int32 / 1e3; + READ_INT32_AT_OFFSET( 13, tmp ); + gps_fspeed = ( float )tmp_int32 / 1e3; - READ_INT32_AT_OFFSET(21, tmp); - gps_fcourse = (float)tmp_int32 / 1e8; - - gps_mode = sirf_msg_buf[25]; + READ_INT32_AT_OFFSET( 17, tmp ); + gps_fclimb = ( float )tmp_int32 / 1e3; + + READ_INT32_AT_OFFSET( 21, tmp ); + gps_fcourse = ( float )tmp_int32 / 1e8; + + gps_mode = sirf_msg_buf[ 25 ]; gps_pos_available = TRUE; } @@ -95,13 +96,14 @@ void parse_gps_msg( void ) { -void gps_init( void ) { +void gps_init( void ) +{ /* Enable uart */ -#ifdef SIMUL + #ifdef SIMUL uart0_init(); -#else + #else uart1_init(); -#endif + #endif } #define SIRF_START1 0xA0 @@ -141,180 +143,167 @@ static uint8_t sirf_type; static uint8_t sirf_msg_idx; -static inline void parse_sirf( uint8_t c ) { -/*#ifdef WITH_SWITCH -switch (sirf_status) { - case UNINIT: - if (c == SIRF_START1) +static inline void parse_sirf( uint8_t c ) +{ + /*#ifdef WITH_SWITCH + switch (sirf_status) { + case UNINIT: + if (c == SIRF_START1) + sirf_status++; + #ifdef SIMUL + if (c == IR_START) + sirf_status = GOT_IR_START; + #endif + break; + case GOT_START1: + if (c != SIRF_START2) + goto error; sirf_status++; -#ifdef SIMUL - if (c == IR_START) - sirf_status = GOT_IR_START; -#endif - break; - case GOT_START1: - if (c != SIRF_START2) - goto error; - sirf_status++; - break; - case GOT_START2: - sirf_len = (c<<8) & 0xFF00; - sirf_status++; - break; - case GOT_LEN1: - sirf_len += (c & 0x00FF); - if (sirf_len > SIRF_MAX_PAYLOAD) - goto error; - sirf_msg_idx = 0; - sirf_status++; - break; - case GOT_LEN2: - if (sirf_msg_idx==0) { - sirf_type = c; - } - if (sirf_type == SIRF_TYP_EXT_NAV) - sirf_msg_buf[sirf_msg_idx] = c; - sirf_msg_idx++; - if (sirf_msg_idx >= sirf_len) { - sirf_status++; + break; + case GOT_START2: + sirf_len = (c<<8) & 0xFF00; + sirf_status++; + break; + case GOT_LEN1: + sirf_len += (c & 0x00FF); + if (sirf_len > SIRF_MAX_PAYLOAD) + goto error; + sirf_msg_idx = 0; + sirf_status++; + break; + case GOT_LEN2: + if (sirf_msg_idx==0) { + sirf_type = c; + } + if (sirf_type == SIRF_TYP_EXT_NAV) + sirf_msg_buf[ sirf_msg_idx ] = c; + sirf_msg_idx++; + if (sirf_msg_idx >= sirf_len) { + sirf_status++; + } + break; + case GOT_PAYLOAD: + sirf_checksum = (c<<8) & 0xFF00; + sirf_status++; + break; + case GOT_CHECKSUM1: + sirf_checksum += (c & 0x00FF); + // fixme: check correct + sirf_status++; + break; + case GOT_CHECKSUM2: + if (c != SIRF_END1) + goto error; + sirf_status++; + break; + case GOT_END1: + if (c != SIRF_END2) + goto error; + + if (sirf_type == SIRF_TYP_EXT_NAV) + gps_msg_received = TRUE; + goto restart; + break; + #ifdef SIMUL + case GOT_IR_START: + simul_ir_roll = c << 8; + sirf_status++; + break; + case GOT_IR1: + simul_ir_roll |= c; + sirf_status++; + break; + case GOT_IR2: + simul_ir_pitch = c << 8; + sirf_status++; + break; + case GOT_IR3: + simul_ir_pitch |= c; + goto restart; + break; + #endif } - break; - case GOT_PAYLOAD: - sirf_checksum = (c<<8) & 0xFF00; - sirf_status++; - break; - case GOT_CHECKSUM1: - sirf_checksum += (c & 0x00FF); - // fixme: check correct - sirf_status++; - break; - case GOT_CHECKSUM2: - if (c != SIRF_END1) - goto error; - sirf_status++; - break; - case GOT_END1: - if (c != SIRF_END2) - goto error; - - if (sirf_type == SIRF_TYP_EXT_NAV) - gps_msg_received = TRUE; - goto restart; - break; -#ifdef SIMUL - case GOT_IR_START: - simul_ir_roll = c << 8; - sirf_status++; - break; - case GOT_IR1: - simul_ir_roll |= c; - sirf_status++; - break; - case GOT_IR2: - simul_ir_pitch = c << 8; - sirf_status++; - break; - case GOT_IR3: - simul_ir_pitch |= c; - goto restart; - break; -#endif - } -#else*/ -if (sirf_status == UNINIT) -{ - if (c == SIRF_START1) + #else*/ + if ( sirf_status == UNINIT ) { + if ( c == SIRF_START1 ) sirf_status++; -#ifdef SIMUL - if (c == IR_START) + #ifdef SIMUL + if ( c == IR_START ) sirf_status = GOT_IR_START; -#endif -} -else if (sirf_status == GOT_START1) -{ - if (c != SIRF_START2) - goto error; - sirf_status++; -} -else if (sirf_status == GOT_START2) -{ - sirf_len = (c<<8) & 0xFF00; - sirf_status++; -} -else if (sirf_status == GOT_LEN1) -{ - sirf_len += (c & 0x00FF); - if (sirf_len > SIRF_MAX_PAYLOAD) - goto error; - sirf_msg_idx = 0; - sirf_status++; -} -else if (sirf_status == GOT_LEN2) -{ - if (sirf_msg_idx==0) { - sirf_type = c; - } - if (sirf_type == SIRF_TYP_EXT_NAV) - sirf_msg_buf[sirf_msg_idx] = c; - sirf_msg_idx++; - if (sirf_msg_idx >= sirf_len) { - sirf_status++; - } -} -else if (sirf_status == GOT_PAYLOAD) -{ - sirf_checksum = (c<<8) & 0xFF00; - sirf_status++; -} -else if (sirf_status == GOT_CHECKSUM1) -{ - sirf_checksum += (c & 0x00FF); - /* fixme: check correct */ - sirf_status++; -} -else if (sirf_status == GOT_CHECKSUM2) -{ - if (c != SIRF_END1) - goto error; - sirf_status++; -} -else if (sirf_status == GOT_END1) -{ - if (c != SIRF_END2) - goto error; + #endif + } else + if ( sirf_status == GOT_START1 ) { + if ( c != SIRF_START2 ) + goto error; + sirf_status++; + } else + if ( sirf_status == GOT_START2 ) { + sirf_len = ( c << 8 ) & 0xFF00; + sirf_status++; + } else + if ( sirf_status == GOT_LEN1 ) { + sirf_len += ( c & 0x00FF ); + if ( sirf_len > SIRF_MAX_PAYLOAD ) + goto error; + sirf_msg_idx = 0; + sirf_status++; + } else + if ( sirf_status == GOT_LEN2 ) { + if ( sirf_msg_idx == 0 ) + sirf_type = c; + if ( sirf_type == SIRF_TYP_EXT_NAV ) + sirf_msg_buf[ sirf_msg_idx ] = c; + sirf_msg_idx++; + if ( sirf_msg_idx >= sirf_len ) + sirf_status++; + } else + if ( sirf_status == GOT_PAYLOAD ) { + sirf_checksum = ( c << 8 ) & 0xFF00; + sirf_status++; + } else + if ( sirf_status == GOT_CHECKSUM1 ) { + sirf_checksum += ( c & 0x00FF ); + /* fixme: check correct */ + sirf_status++; + } else + if ( sirf_status == GOT_CHECKSUM2 ) { + if ( c != SIRF_END1 ) + goto error; + sirf_status++; + } else + if ( sirf_status == GOT_END1 ) { + if ( c != SIRF_END2 ) + goto error; - if (sirf_type == SIRF_TYP_EXT_NAV) - gps_msg_received = TRUE; - goto restart; -} -#ifdef SIMUL -else if (sirf_status == GOT_IR_START) -{ - simul_ir_roll = c << 8; - sirf_status++; -} -else if (sirf_status == GOT_IR1) -{ - simul_ir_roll |= c; - sirf_status++; -} -else if (sirf_status == GOT_IR2) -{ - simul_ir_pitch = c << 8; - sirf_status++; -} -else if (sirf_status == GOT_IR3) -{ - simul_ir_pitch |= c; - goto restart; -} -#endif -else {} + if ( sirf_type == SIRF_TYP_EXT_NAV ) + gps_msg_received = TRUE; + goto restart; + } + #ifdef SIMUL + else + if ( sirf_status == GOT_IR_START ) { + simul_ir_roll = c << 8; + sirf_status++; + } else + if ( sirf_status == GOT_IR1 ) { + simul_ir_roll |= c; + sirf_status++; + } else + if ( sirf_status == GOT_IR2 ) { + simul_ir_pitch = c << 8; + sirf_status++; + } else + if ( sirf_status == GOT_IR3 ) { + simul_ir_pitch |= c; + goto restart; + } + #endif + else {} //#endif return; - error: +error: // modem_putc('r'); - restart: +restart: // modem_putc('\n'); sirf_status = UNINIT; sirf_checksum = 0; @@ -323,7 +312,7 @@ else {} } #ifdef SIMUL -ReceiveUart0(parse_sirf); +ReceiveUart0( parse_sirf ); #else -ReceiveUart1(parse_sirf); +ReceiveUart1( parse_sirf ); #endif diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/gps_ubx.c b/bench/parallel/PapaBench/sw/airborne/autopilot/gps_ubx.c index 1ab711ca5bb47fa4476c01be30d61de1091447a2..4d6b750b250d9cad30bad2643f73126e40ac586a 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/gps_ubx.c +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/gps_ubx.c @@ -1,32 +1,32 @@ /* - * Paparazzi mcu0 $Id: gps_ubx.c,v 1.4 2011-01-25 09:40:36 plazar Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi mcu0 $Id: gps_ubx.c,v 1.4 2011-01-25 09:40:36 plazar Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #include <inttypes.h> #include <arch/io.h> #include <arch/signal.h> #include <arch/interrupt.h> -//#include <string.h> +//#include <string.h> #include <math.h> #include "flight_plan.h" @@ -49,7 +49,7 @@ const int32_t utm_east0 = NAV_UTM_EAST0; const int32_t utm_north0 = NAV_UTM_NORTH0; #define UBX_MAX_PAYLOAD 255 -static uint8_t ubx_msg_buf[UBX_MAX_PAYLOAD]; +static uint8_t ubx_msg_buf[ UBX_MAX_PAYLOAD ]; #define RadianOfDeg(d) ((d)/180.*3.1415927) @@ -80,190 +80,186 @@ static uint8_t ubx_status; static uint16_t ubx_len; static uint8_t ubx_msg_idx; // was static - uint8_t ck_a, ck_b, ubx_id, ubx_class; +uint8_t ck_a, ck_b, ubx_id, ubx_class; -void gps_init( void ) { +void gps_init( void ) +{ /* Enable uart */ -#ifdef SIMUL + #ifdef SIMUL uart0_init(); simul_ir_roll = ir_roll_neutral; simul_ir_pitch = ir_pitch_neutral; -#else + #else uart1_init(); -#endif + #endif ubx_status = UNINIT; } -void parse_gps_msg( void ) { - if (ubx_class == UBX_NAV_ID) { - if (ubx_id == UBX_NAV_POSUTM_ID) { - gps_utm_east = UBX_NAV_POSUTM_EAST(ubx_msg_buf); - gps_utm_north = UBX_NAV_POSUTM_NORTH(ubx_msg_buf); - gps_falt = (float)UBX_NAV_POSUTM_ALT(ubx_msg_buf) / 100.; - } else if (ubx_id == UBX_NAV_STATUS_ID) { - gps_mode = UBX_NAV_STATUS_GPSfix(ubx_msg_buf); - } else if (ubx_id == UBX_NAV_VELNED_ID) { - gps_fspeed = ((float)UBX_NAV_VELNED_GSpeed(ubx_msg_buf)) / 1e2; - gps_fclimb = ((float)UBX_NAV_VELNED_VEL_D(ubx_msg_buf)) / -1e2; - gps_fcourse = RadianOfDeg(((float)UBX_NAV_VELNED_Heading(ubx_msg_buf)) / 1e5); - gps_ftow = ((float)UBX_NAV_VELNED_ITOW(ubx_msg_buf)) / 1e3; - - gps_east = gps_utm_east / 100 - NAV_UTM_EAST0; - gps_north = gps_utm_north / 100 - NAV_UTM_NORTH0; - - - gps_pos_available = TRUE; /* The 3 UBX messages are sent in one rafale */ - } +void parse_gps_msg( void ) +{ + if ( ubx_class == UBX_NAV_ID ) { + if ( ubx_id == UBX_NAV_POSUTM_ID ) { + gps_utm_east = UBX_NAV_POSUTM_EAST( ubx_msg_buf ); + gps_utm_north = UBX_NAV_POSUTM_NORTH( ubx_msg_buf ); + gps_falt = ( float )UBX_NAV_POSUTM_ALT( ubx_msg_buf ) / 100.; + } else + if ( ubx_id == UBX_NAV_STATUS_ID ) + gps_mode = UBX_NAV_STATUS_GPSfix( ubx_msg_buf ); + + else + if ( ubx_id == UBX_NAV_VELNED_ID ) { + gps_fspeed = ( ( float )UBX_NAV_VELNED_GSpeed( ubx_msg_buf ) ) / 1e2; + gps_fclimb = ( ( float )UBX_NAV_VELNED_VEL_D( ubx_msg_buf ) ) / -1e2; + gps_fcourse = RadianOfDeg( ( ( float )UBX_NAV_VELNED_Heading( + ubx_msg_buf ) ) / 1e5 ); + gps_ftow = ( ( float )UBX_NAV_VELNED_ITOW( ubx_msg_buf ) ) / 1e3; + + gps_east = gps_utm_east / 100 - NAV_UTM_EAST0; + gps_north = gps_utm_north / 100 - NAV_UTM_NORTH0; + + + gps_pos_available = TRUE; /* The 3 UBX messages are sent in one rafale */ + } } -#ifdef SIMUL - if (ubx_class == UBX_USR_ID) { - if (ubx_id == UBX_USR_IRSIM_ID) { - simul_ir_roll = UBX_USR_IRSIM_ROLL(ubx_msg_buf); - simul_ir_pitch = UBX_USR_IRSIM_PITCH(ubx_msg_buf); + #ifdef SIMUL + if ( ubx_class == UBX_USR_ID ) { + if ( ubx_id == UBX_USR_IRSIM_ID ) { + simul_ir_roll = UBX_USR_IRSIM_ROLL( ubx_msg_buf ); + simul_ir_pitch = UBX_USR_IRSIM_PITCH( ubx_msg_buf ); } } -#endif + #endif } uint8_t gps_nb_ovrn; -static void parse_ubx( uint8_t c ) { - if (ubx_status < GOT_PAYLOAD) { +static void parse_ubx( uint8_t c ) +{ + if ( ubx_status < GOT_PAYLOAD ) { ck_a += c; ck_b += ck_a; } -/*#ifdef WITH_SWITCH - switch (ubx_status) { - case UNINIT: - if (c == UBX_SYNC1) + /*#ifdef WITH_SWITCH + switch (ubx_status) { + case UNINIT: + if (c == UBX_SYNC1) + ubx_status++; + break; + case GOT_SYNC1: + if (c != UBX_SYNC2) + goto error; + ck_a = 0; + ck_b = 0; ubx_status++; - break; - case GOT_SYNC1: - if (c != UBX_SYNC2) - goto error; - ck_a = 0; - ck_b = 0; - ubx_status++; - break; - case GOT_SYNC2: - if (gps_msg_received) { - // Previous message has not yet been parsed: discard this one - gps_nb_ovrn++; - goto error; - } - ubx_class = c; - ubx_status++; - break; - case GOT_CLASS: - ubx_id = c; - ubx_status++; - break; - case GOT_ID: - ubx_len = c; - ubx_status++; - break; - case GOT_LEN1: - ubx_len |= (c<<8); - if (ubx_len > UBX_MAX_PAYLOAD) - goto error; - ubx_msg_idx = 0; - ubx_status++; - break; - case GOT_LEN2: - ubx_msg_buf[ubx_msg_idx] = c; - ubx_msg_idx++; - if (ubx_msg_idx >= ubx_len) { + break; + case GOT_SYNC2: + if (gps_msg_received) { + // Previous message has not yet been parsed: discard this one + gps_nb_ovrn++; + goto error; + } + ubx_class = c; ubx_status++; - } - break; - case GOT_PAYLOAD: - if (c != ck_a) - goto error; - ubx_status++; - break; - case GOT_CHECKSUM1: - if (c != ck_b) - goto error; - gps_msg_received = TRUE; - goto restart; - break; - } -#else */ - if (ubx_status == UNINIT) - { - if (c == UBX_SYNC1) + break; + case GOT_CLASS: + ubx_id = c; ubx_status++; - } - else if (ubx_status == GOT_SYNC1) - { - if (c != UBX_SYNC2) - goto error; - ck_a = 0; - ck_b = 0; - ubx_status++; - } - else if (ubx_status == GOT_SYNC2) - { - if (gps_msg_received) { - /* Previous message has not yet been parsed: discard this one */ - gps_nb_ovrn++; - goto error; - } - ubx_class = c; - ubx_status++; - } - else if (ubx_status == GOT_CLASS) - { - ubx_id = c; - ubx_status++; - } - else if (ubx_status == GOT_ID) - { - ubx_len = c; - ubx_status++; - } - else if (ubx_status == GOT_LEN1) - { - ubx_len |= (c<<8); - if (ubx_len > UBX_MAX_PAYLOAD) - goto error; - ubx_msg_idx = 0; - ubx_status++; - } - else if (ubx_status == GOT_LEN2) - { - ubx_msg_buf[ubx_msg_idx] = c; - ubx_msg_idx++; - if (ubx_msg_idx >= ubx_len) { + break; + case GOT_ID: + ubx_len = c; + ubx_status++; + break; + case GOT_LEN1: + ubx_len |= (c<<8); + if (ubx_len > UBX_MAX_PAYLOAD) + goto error; + ubx_msg_idx = 0; ubx_status++; + break; + case GOT_LEN2: + ubx_msg_buf[ ubx_msg_idx ] = c; + ubx_msg_idx++; + if (ubx_msg_idx >= ubx_len) { + ubx_status++; + } + break; + case GOT_PAYLOAD: + if (c != ck_a) + goto error; + ubx_status++; + break; + case GOT_CHECKSUM1: + if (c != ck_b) + goto error; + gps_msg_received = TRUE; + goto restart; + break; } - } - else if (ubx_status == GOT_PAYLOAD) - { - if (c != ck_a) - goto error; - ubx_status++; - } - else if (ubx_status == GOT_CHECKSUM1) - { - if (c != ck_b) - goto error; - gps_msg_received = TRUE; - goto restart; - } - else {} + #else */ + if ( ubx_status == UNINIT ) { + if ( c == UBX_SYNC1 ) + ubx_status++; + } else + if ( ubx_status == GOT_SYNC1 ) { + if ( c != UBX_SYNC2 ) + goto error; + ck_a = 0; + ck_b = 0; + ubx_status++; + } else + if ( ubx_status == GOT_SYNC2 ) { + if ( gps_msg_received ) { + /* Previous message has not yet been parsed: discard this one */ + gps_nb_ovrn++; + goto error; + } + ubx_class = c; + ubx_status++; + } else + if ( ubx_status == GOT_CLASS ) { + ubx_id = c; + ubx_status++; + } else + if ( ubx_status == GOT_ID ) { + ubx_len = c; + ubx_status++; + } else + if ( ubx_status == GOT_LEN1 ) { + ubx_len |= ( c << 8 ); + if ( ubx_len > UBX_MAX_PAYLOAD ) + goto error; + ubx_msg_idx = 0; + ubx_status++; + } else + if ( ubx_status == GOT_LEN2 ) { + ubx_msg_buf[ ubx_msg_idx ] = c; + ubx_msg_idx++; + if ( ubx_msg_idx >= ubx_len ) + ubx_status++; + } else + if ( ubx_status == GOT_PAYLOAD ) { + if ( c != ck_a ) + goto error; + ubx_status++; + } else + if ( ubx_status == GOT_CHECKSUM1 ) { + if ( c != ck_b ) + goto error; + gps_msg_received = TRUE; + goto restart; + } else {} //#endif return; - error: - restart: +error: +restart: ubx_status = UNINIT; return; } #ifdef SIMUL -ReceiveUart0(parse_ubx) +ReceiveUart0( parse_ubx ) #else -ReceiveUart1(parse_ubx) +ReceiveUart1( parse_ubx ) #endif diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/if_calib.c b/bench/parallel/PapaBench/sw/airborne/autopilot/if_calib.c index 18b5332320758dbbd0f2888de81ea807ce39c385..a6e1c090ab246108d6b5be22675f644d8065a5c2 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/if_calib.c +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/if_calib.c @@ -1,27 +1,27 @@ /* - * $Id: if_calib.c,v 1.1 2011-01-18 12:48:38 moellmer Exp $ - * Flight-time calibration facility - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + $Id: if_calib.c,v 1.1 2011-01-18 12:48:38 moellmer Exp $ + Flight-time calibration facility + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #include <inttypes.h> @@ -49,7 +49,7 @@ static int16_t slider1_init, slider2_init; /*** -inline uint8_t inflight_calib(void) { + inline uint8_t inflight_calib(void) { static int16_t slider1_init, slider2_init; //static float ir_gain_init; //static float roll_pgain_init; @@ -64,11 +64,11 @@ inline uint8_t inflight_calib(void) { if (mode_changed) { pitch_neutral_init = ir_pitch_neutral; roll_neutral_init = ir_roll_neutral; - slider1_init = from_fbw.channels[RADIO_GAIN1]; - slider2_init = from_fbw.channels[RADIO_GAIN2]; + slider1_init = from_fbw.channels[ RADIO_GAIN1 ]; + slider2_init = from_fbw.channels[ RADIO_GAIN2 ]; } - ir_pitch_neutral = PARAM_VAL_INT16( pitch_neutral_init, -60., from_fbw.channels[RADIO_GAIN1], slider1_init); - ir_roll_neutral = PARAM_VAL_INT16( roll_neutral_init, 60., from_fbw.channels[RADIO_GAIN2], slider2_init); + ir_pitch_neutral = PARAM_VAL_INT16( pitch_neutral_init, -60., from_fbw.channels[ RADIO_GAIN1 ], slider1_init); + ir_roll_neutral = PARAM_VAL_INT16( roll_neutral_init, 60., from_fbw.channels[ RADIO_GAIN2 ], slider2_init); } else if (inflight_calib_mode == IF_CALIB_MODE_GAIN) { if (mode_changed) { @@ -76,16 +76,16 @@ inline uint8_t inflight_calib(void) { course_pgain_init = course_pgain; // roll_pgain_init = roll_pgain; pitch_pgain_init = pitch_pgain; - slider1_init = from_fbw.channels[RADIO_GAIN1]; - slider2_init = from_fbw.channels[RADIO_GAIN2]; + slider1_init = from_fbw.channels[ RADIO_GAIN1 ]; + slider2_init = from_fbw.channels[ RADIO_GAIN2 ]; } - course_pgain = PARAM_VAL_FLOAT( course_pgain_init, -0.1, from_fbw.channels[RADIO_GAIN1], slider1_init); - // ir_gain = PARAM_VAL_FLOAT( ir_gain_init, 0.0015, from_fbw.channels[RADIO_GAIN2], slider2_init); - // roll_pgain = PARAM_VAL_FLOAT( roll_pgain_init, -5000., from_fbw.channels[RADIO_GAIN2], slider1_init); - pitch_pgain = PARAM_VAL_FLOAT( pitch_pgain_init, -5000., from_fbw.channels[RADIO_GAIN1], slider1_init); + course_pgain = PARAM_VAL_FLOAT( course_pgain_init, -0.1, from_fbw.channels[ RADIO_GAIN1 ], slider1_init); + // ir_gain = PARAM_VAL_FLOAT( ir_gain_init, 0.0015, from_fbw.channels[ RADIO_GAIN2 ], slider2_init); + // roll_pgain = PARAM_VAL_FLOAT( roll_pgain_init, -5000., from_fbw.channels[ RADIO_GAIN2 ], slider1_init); + pitch_pgain = PARAM_VAL_FLOAT( pitch_pgain_init, -5000., from_fbw.channels[ RADIO_GAIN1 ], slider1_init); } return (mode_changed); -} + } ***/ diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/if_calib.h b/bench/parallel/PapaBench/sw/airborne/autopilot/if_calib.h index da23860760558ee445b28ce4eddfc4891f25cbcd..bd46a840b9d79299aab13666ff044a901ccd7532 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/if_calib.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/if_calib.h @@ -3,7 +3,7 @@ #include "link_fbw.h" extern uint8_t inflight_calib_mode; -void inflight_calib(bool_t calib_mode_changed); +void inflight_calib( bool_t calib_mode_changed ); #define IF_CALIB_MODE_NONE 0 @@ -12,11 +12,11 @@ void inflight_calib(bool_t calib_mode_changed); #ifdef ANTON_T7 #define IF_CALIB_MODE_OF_PULSE(pprz) (pprz < TRESHOLD1 ? IF_CALIB_MODE_UP : \ - IF_CALIB_MODE_NONE) + IF_CALIB_MODE_NONE) #else #define IF_CALIB_MODE_OF_PULSE(pprz) (pprz < TRESHOLD1 ? IF_CALIB_MODE_UP : \ - (pprz < TRESHOLD2 ? IF_CALIB_MODE_NONE : \ - IF_CALIB_MODE_DOWN)) + (pprz < TRESHOLD2 ? IF_CALIB_MODE_NONE : \ + IF_CALIB_MODE_DOWN)) #endif /* ANTON_T7 */ #endif // IF_CALIB_H diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/infrared.c b/bench/parallel/PapaBench/sw/airborne/autopilot/infrared.c index 2985a1072b369ad79f335ff5c2e428c3ae54d80c..fc77ac5f3017a94f35043e37266281feac1b8eac 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/infrared.c +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/infrared.c @@ -1,26 +1,26 @@ /* - * Paparazzi mcu0 $Id: infrared.c,v 1.2 2011-01-18 14:55:52 moellmer Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi mcu0 $Id: infrared.c,v 1.2 2011-01-18 14:55:52 moellmer Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #include "adc.h" #include "infrared.h" @@ -43,31 +43,34 @@ float ir_rad_of_ir = 0.00375; static struct adc_buf buf_ir1; static struct adc_buf buf_ir2; -void ir_init(void) { - RadOfIrFromConstrast(IR_DEFAULT_CONTRAST); - adc_buf_channel(ADC_CHANNEL_IR1, &buf_ir1); - adc_buf_channel(ADC_CHANNEL_IR2, &buf_ir2); +void ir_init( void ) +{ + RadOfIrFromConstrast( IR_DEFAULT_CONTRAST ); + adc_buf_channel( ADC_CHANNEL_IR1, &buf_ir1 ); + adc_buf_channel( ADC_CHANNEL_IR2, &buf_ir2 ); } -void ir_update(void) { -#ifndef SIMUL - int16_t x1_mean = buf_ir1.sum/AV_NB_SAMPLE; - int16_t x2_mean = buf_ir2.sum/AV_NB_SAMPLE; - ir_roll = IR_RollOfIrs(x1_mean, x2_mean) - ir_roll_neutral; - ir_pitch = IR_PitchOfIrs(x1_mean, x2_mean) - ir_pitch_neutral; -#else +void ir_update( void ) +{ + #ifndef SIMUL + int16_t x1_mean = buf_ir1.sum / AV_NB_SAMPLE; + int16_t x2_mean = buf_ir2.sum / AV_NB_SAMPLE; + ir_roll = IR_RollOfIrs( x1_mean, x2_mean ) - ir_roll_neutral; + ir_pitch = IR_PitchOfIrs( x1_mean, x2_mean ) - ir_pitch_neutral; + #else extern volatile int16_t simul_ir_roll, simul_ir_pitch; - ir_roll = simul_ir_roll - ir_roll_neutral; - ir_pitch = simul_ir_pitch - ir_pitch_neutral; -#endif + ir_roll = simul_ir_roll - ir_roll_neutral; + ir_pitch = simul_ir_pitch - ir_pitch_neutral; + #endif } -/* +/* Contrast measurement */ -void ir_gain_calib(void) { // Plane nose down +void ir_gain_calib( void ) // Plane nose down +{ /* plane nose down -> negativ value */ ir_contrast = - ir_pitch; - RadOfIrFromConstrast(ir_contrast); + RadOfIrFromConstrast( ir_contrast ); } diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/infrared.h b/bench/parallel/PapaBench/sw/airborne/autopilot/infrared.h index 76b04fe9dae2d57bfb68822e557862e2ed1737ac..d9eccec79489abafb1a35e00918db8f7f281e62a 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/infrared.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/infrared.h @@ -1,26 +1,26 @@ /* - * Paparazzi mcu0 $Id: infrared.h,v 1.2 2011-01-18 14:55:52 moellmer Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi mcu0 $Id: infrared.h,v 1.2 2011-01-18 14:55:52 moellmer Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef INFRARED_H #define INFRARED_H @@ -35,8 +35,8 @@ extern int16_t ir_contrast; extern int16_t ir_roll_neutral; extern int16_t ir_pitch_neutral; -void ir_init(void); -void ir_update(void); -void ir_gain_calib(void); +void ir_init( void ); +void ir_update( void ); +void ir_gain_calib( void ); #endif /* INFRARED_H */ diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/link_fbw.c b/bench/parallel/PapaBench/sw/airborne/autopilot/link_fbw.c index 00f307f93d7e9b66406c21c1846d8224a7c206af..d65feb6151f29cc5ebfebb2aea8f200c1043f004 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/link_fbw.c +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/link_fbw.c @@ -1,26 +1,26 @@ /* - * $Id: link_fbw.c,v 1.3 2011-01-25 09:40:37 plazar Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + $Id: link_fbw.c,v 1.3 2011-01-25 09:40:37 plazar Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #include <arch/io.h> #include <arch/signal.h> @@ -39,61 +39,64 @@ uint8_t link_fbw_fbw_nb_err; static uint8_t idx_buf; static uint8_t xor_in, xor_out; -void link_fbw_init(void) { +void link_fbw_init( void ) +{ link_fbw_nb_err; - link_fbw_receive_complete = FALSE; + link_fbw_receive_complete = FALSE; } -void _Pragma("entrypoint") link_fbw_send(void) { - if (spi_cur_slave != SPI_NONE) { +void _Pragma( "entrypoint" ) link_fbw_send( void ) +{ + if ( spi_cur_slave != SPI_NONE ) { spi_nb_ovrn++; return; } - /* Enable SPI, Master, set clock rate fck/16 */ - SPI_START(_BV(SPE) | _BV(MSTR) | _BV(SPR0)); // | _BV(SPR1); + /* Enable SPI, Master, set clock rate fck/16 */ + SPI_START( _BV( SPE ) | _BV( MSTR ) | _BV( SPR0 ) ); // | _BV(SPR1); SPI_SELECT_SLAVE0(); idx_buf = 0; xor_in = 0; - xor_out = ((uint8_t*)&to_fbw)[idx_buf]; + xor_out = ( ( uint8_t * )&to_fbw )[ idx_buf ]; SPDR = xor_out; link_fbw_receive_valid = FALSE; // Other bytes will follow SIG_SPI interrupts } -void link_fbw_on_spi_it( void ) { +void link_fbw_on_spi_it( void ) +{ /* setup OCR1A to pop in 200 clock cycles */ /* this leaves time for the slave (fbw) */ /* to process the byte we've sent and to */ /* prepare a new one to be sent */ OCR1A = TCNT1 + 200; /* clear interrupt flag */ - sbi(TIFR, OCF1A); + sbi( TIFR, OCF1A ); /* enable OC1A interrupt */ - sbi(TIMSK, OCIE1A); + sbi( TIMSK, OCIE1A ); } /* send the next byte */ -SIGNAL(SIG_OUTPUT_COMPARE1A) { +SIGNAL( SIG_OUTPUT_COMPARE1A ) +{ uint8_t tmp; /* disable OC1A interrupt */ - cbi(TIMSK, OCIE1A); + cbi( TIMSK, OCIE1A ); idx_buf++; /* we have sent/received a complete frame */ - if (idx_buf == FRAME_LENGTH) { + if ( idx_buf == FRAME_LENGTH ) { /* read checksum from receive register */ tmp = SPDR; /* notify valid frame */ - if (tmp == xor_in) { + if ( tmp == xor_in ) { link_fbw_receive_valid = TRUE; link_fbw_fbw_nb_err = from_fbw.nb_err; - } - else + } else link_fbw_nb_err++; link_fbw_receive_complete = TRUE; /* unselect slave0 */ @@ -103,20 +106,20 @@ SIGNAL(SIG_OUTPUT_COMPARE1A) { } /* we are sending/receiving payload */ - if (idx_buf < FRAME_LENGTH - 1) { + if ( idx_buf < FRAME_LENGTH - 1 ) { /* place new payload byte in send register */ - tmp = ((uint8_t*)&to_fbw)[idx_buf]; - SPI_SEND(tmp); + tmp = ( ( uint8_t * )&to_fbw )[ idx_buf ]; + SPI_SEND( tmp ); xor_out ^= tmp; - } + } /* we are done sending the payload */ else { // idx_buf == FRAME_LENGTH - 1 /* place checksum in send register */ - SPI_SEND(xor_out); + SPI_SEND( xor_out ); } - + /* read the byte from receive register */ tmp = SPDR; - ((uint8_t*)&from_fbw)[idx_buf-1] = tmp; + ( ( uint8_t * )&from_fbw )[ idx_buf - 1 ] = tmp; xor_in ^= tmp; } diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/link_fbw.h b/bench/parallel/PapaBench/sw/airborne/autopilot/link_fbw.h index 1d187e187f9b45e41a1be205f746522246f274c8..cf4b64e60f6014b2a63b8a9c400b47d3dc98b8db 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/link_fbw.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/link_fbw.h @@ -1,26 +1,26 @@ /* - * $Id: link_fbw.h,v 1.1 2011-01-18 12:48:38 moellmer Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + $Id: link_fbw.h,v 1.1 2011-01-18 12:48:38 moellmer Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef LINK_FBW_H #define LINK_FBW_H @@ -29,9 +29,9 @@ #include "link_autopilot.h" -void link_fbw_init(void); -void link_fbw_send(void); -void link_fbw_on_spi_it(void); +void link_fbw_init( void ); +void link_fbw_send( void ); +void link_fbw_on_spi_it( void ); extern volatile uint8_t link_fbw_nb_err; extern uint8_t link_fbw_fbw_nb_err; diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/main.c b/bench/parallel/PapaBench/sw/airborne/autopilot/main.c index e0143ebab4bb0be0841a8a0e34e7680caa41b15d..7916b297f3fcb9ada14f105075932e30e0eed01a 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/main.c +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/main.c @@ -1,30 +1,30 @@ /* - * $Id: main.c,v 1.2 2011-01-18 14:55:52 moellmer Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + $Id: main.c,v 1.2 2011-01-18 14:55:52 moellmer Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ /** \file main.c - * \brief Regroup main functions - * - */ + \brief Regroup main functions + +*/ #include <inttypes.h> #include <math.h> @@ -78,94 +78,100 @@ static uint8_t count; //#define Max(x, y) (x > y ? x : y) -#define NO_CALIB 0 /**< \enum No calibration state */ -#define WAITING_CALIB_CONTRAST 1 /**< \enum Waiting calibration contrast state */ -#define CALIB_DONE 2 /**< \enum Calibration done state */ +#define NO_CALIB 0 /**< \enum No calibration state */ +#define WAITING_CALIB_CONTRAST 1 /**< \enum Waiting calibration contrast state */ +#define CALIB_DONE 2 /**< \enum Calibration done state */ /** Maximal delay for calibration */ #define MAX_DELAY_FOR_CALIBRATION 10 /** \fn inline void ground_calibrate( void ) - * \brief Calibrate contrast if paparazzi mode is - * set to auto1 before MAX_DELAY_FOR_CALIBRATION secondes */ + \brief Calibrate contrast if paparazzi mode is + set to auto1 before MAX_DELAY_FOR_CALIBRATION secondes */ /**User must put verticaly the uav (nose bottom) and push - * radio roll stick to get new calibration - * If not, the default calibration is used. - */ -inline void ground_calibrate( void ) { + radio roll stick to get new calibration + If not, the default calibration is used. +*/ +inline void ground_calibrate( void ) +{ static uint8_t calib_status = NO_CALIB; -/*#ifdef WITH_SWITCH - switch (calib_status) { - case NO_CALIB: - if (cputime < MAX_DELAY_FOR_CALIBRATION && pprz_mode == PPRZ_MODE_AUTO1 ) { - calib_status = WAITING_CALIB_CONTRAST; - DOWNLINK_SEND_CALIB_START(); - } - break; - case WAITING_CALIB_CONTRAST: - if (STICK_PUSHED(from_fbw.channels[RADIO_ROLL])) { - ir_gain_calib(); - estimator_rad_of_ir = ir_rad_of_ir; - DOWNLINK_SEND_RAD_OF_IR(&estimator_ir, &estimator_rad, &estimator_rad_of_ir, &ir_roll_neutral, &ir_pitch_neutral); - calib_status = CALIB_DONE; - DOWNLINK_SEND_CALIB_CONTRAST(&ir_contrast); + /*#ifdef WITH_SWITCH + switch (calib_status) { + case NO_CALIB: + if (cputime < MAX_DELAY_FOR_CALIBRATION && pprz_mode == PPRZ_MODE_AUTO1 ) { + calib_status = WAITING_CALIB_CONTRAST; + DOWNLINK_SEND_CALIB_START(); + } + break; + case WAITING_CALIB_CONTRAST: + if (STICK_PUSHED(from_fbw.channels[ RADIO_ROLL ])) { + ir_gain_calib(); + estimator_rad_of_ir = ir_rad_of_ir; + DOWNLINK_SEND_RAD_OF_IR(&estimator_ir, &estimator_rad, &estimator_rad_of_ir, &ir_roll_neutral, &ir_pitch_neutral); + calib_status = CALIB_DONE; + DOWNLINK_SEND_CALIB_CONTRAST(&ir_contrast); + } + break; + case CALIB_DONE: + break; } - break; - case CALIB_DONE: - break; - } -#else*/ -if(calib_status == NO_CALIB) -{ - if (cputime < MAX_DELAY_FOR_CALIBRATION && pprz_mode == PPRZ_MODE_AUTO1 ) { + #else*/ + if ( calib_status == NO_CALIB ) { + if ( cputime < MAX_DELAY_FOR_CALIBRATION && pprz_mode == PPRZ_MODE_AUTO1 ) { calib_status = WAITING_CALIB_CONTRAST; DOWNLINK_SEND_CALIB_START(); } -} -else if (calib_status == WAITING_CALIB_CONTRAST) -{ - if (STICK_PUSHED(from_fbw.channels[RADIO_ROLL])) { - ir_gain_calib(); - estimator_rad_of_ir = ir_rad_of_ir; - DOWNLINK_SEND_RAD_OF_IR(&estimator_ir, &estimator_rad, &estimator_rad_of_ir, &ir_roll_neutral, &ir_pitch_neutral); - calib_status = CALIB_DONE; - DOWNLINK_SEND_CALIB_CONTRAST(&ir_contrast); - } -} -else {} + } else + if ( calib_status == WAITING_CALIB_CONTRAST ) { + if ( STICK_PUSHED( from_fbw.channels[ RADIO_ROLL ] ) ) { + ir_gain_calib(); + estimator_rad_of_ir = ir_rad_of_ir; + DOWNLINK_SEND_RAD_OF_IR( &estimator_ir, &estimator_rad, &estimator_rad_of_ir, + &ir_roll_neutral, &ir_pitch_neutral ); + calib_status = CALIB_DONE; + DOWNLINK_SEND_CALIB_CONTRAST( &ir_contrast ); + } + } else {} //#endif } /** \fn inline uint8_t pprz_mode_update( void ) - * \brief Update paparazzi mode - */ -inline uint8_t pprz_mode_update( void ) { + \brief Update paparazzi mode +*/ +inline uint8_t pprz_mode_update( void ) +{ /** We remain in home mode until explicit reset from the RC */ - if (pprz_mode != PPRZ_MODE_HOME || CheckEvent(rc_event_1)) { - ModeUpdate(pprz_mode, PPRZ_MODE_OF_PULSE(from_fbw.channels[RADIO_MODE], from_fbw.status)); - } else + if ( pprz_mode != PPRZ_MODE_HOME || CheckEvent( rc_event_1 ) ) + ModeUpdate( pprz_mode, PPRZ_MODE_OF_PULSE( from_fbw.channels[ RADIO_MODE ], + from_fbw.status ) ); + + else return FALSE; } #ifdef RADIO_LLS /** \fn inline uint8_t ir_estim_mode_update( void ) - * \brief update ir estimation if RADIO_LLS is true \n - */ -inline uint8_t ir_estim_mode_update( void ) { - ModeUpdate(ir_estim_mode, IR_ESTIM_MODE_OF_PULSE(from_fbw.channels[RADIO_LLS])); + \brief update ir estimation if RADIO_LLS is true \n +*/ +inline uint8_t ir_estim_mode_update( void ) +{ + ModeUpdate( ir_estim_mode, + IR_ESTIM_MODE_OF_PULSE( from_fbw.channels[ RADIO_LLS ] ) ); } #endif /** \fn inline uint8_t mcu1_status_update( void ) - * \brief @@@@@ A FIXER @@@@@ - */ -inline uint8_t mcu1_status_update( void ) { + \brief @@@@@ A FIXER @@@@@ +*/ +inline uint8_t mcu1_status_update( void ) +{ uint8_t new_mode = from_fbw.status; - if (mcu1_status != new_mode) { - bool_t changed = ((mcu1_status&MASK_FBW_CHANGED) != (new_mode&MASK_FBW_CHANGED)); + if ( mcu1_status != new_mode ) { + bool_t changed = ( ( mcu1_status & MASK_FBW_CHANGED ) != + ( new_mode & MASK_FBW_CHANGED ) ); mcu1_status = new_mode; return changed; } @@ -176,8 +182,8 @@ inline uint8_t mcu1_status_update( void ) { #define EVENT_DELAY 20 /** \def EventUpdate(_cpt, _cond, _event) - * @@@@@ A FIXER @@@@@ - */ + @@@@@ A FIXER @@@@@ +*/ #define EventUpdate(_cpt, _cond, _event) \ if (_cond) { \ if (_cpt < EVENT_DELAY) { \ @@ -190,36 +196,38 @@ inline uint8_t mcu1_status_update( void ) { _event = FALSE; \ } /** \def EventPos(_cpt, _channel, _event) - * @@@@@ A FIXER @@@@@ - */ + @@@@@ A FIXER @@@@@ +*/ #define EventPos(_cpt, _channel, _event) \ - EventUpdate(_cpt, (inflight_calib_mode==IF_CALIB_MODE_NONE && from_fbw.channels[_channel]>(int)(0.75*MAX_PPRZ)), _event) + EventUpdate(_cpt, (inflight_calib_mode==IF_CALIB_MODE_NONE && from_fbw.channels[ _channel ]>(int)(0.75*MAX_PPRZ)), _event) /** \def EventNeg(_cpt, _channel, _event) - * @@@@@ A FIXER @@@@@ - */ + @@@@@ A FIXER @@@@@ +*/ #define EventNeg(_cpt, _channel, _event) \ - EventUpdate(_cpt, (inflight_calib_mode==IF_CALIB_MODE_NONE && from_fbw.channels[_channel]<(int)(-0.75*MAX_PPRZ)), _event) + EventUpdate(_cpt, (inflight_calib_mode==IF_CALIB_MODE_NONE && from_fbw.channels[ _channel ]<(int)(-0.75*MAX_PPRZ)), _event) /** \fn static inline void events_update( void ) - * @@@@@ A FIXER @@@@@ - */ -static inline void events_update( void ) { + @@@@@ A FIXER @@@@@ +*/ +static inline void events_update( void ) +{ static uint16_t event1_cpt = 0; static uint16_t event2_cpt = 0; - EventPos(event1_cpt, RADIO_GAIN1, rc_event_1); - EventNeg(event2_cpt, RADIO_GAIN1, rc_event_2); -} + EventPos( event1_cpt, RADIO_GAIN1, rc_event_1 ); + EventNeg( event2_cpt, RADIO_GAIN1, rc_event_2 ); +} /** \fn inline void copy_from_to_fbw ( void ) - * \brief Send back uncontrolled channels (only rudder) - */ -inline void copy_from_to_fbw ( void ) { - to_fbw.channels[RADIO_YAW] = from_fbw.channels[RADIO_YAW]; -#ifdef ANTON_T7 - to_fbw.channels[RADIO_PITCH] = from_fbw.channels[RADIO_PITCH]; -#endif + \brief Send back uncontrolled channels (only rudder) +*/ +inline void copy_from_to_fbw ( void ) +{ + to_fbw.channels[ RADIO_YAW ] = from_fbw.channels[ RADIO_YAW ]; + #ifdef ANTON_T7 + to_fbw.channels[ RADIO_PITCH ] = from_fbw.channels[ RADIO_PITCH ]; + #endif to_fbw.status = 0; } @@ -232,37 +240,37 @@ uint8_t ticks_last_est; // 20Hz -/* +/* called at 20Hz. sends a serie of initialisation messages followed by a stream of periodic ones -*/ +*/ /** Define number of message at initialisation */ #define INIT_MSG_NB 2 /** @@@@@ A FIXER @@@@ */ #define HI_FREQ_PHASE_NB 5 -//static char signature[16] = MESSAGES_MD5SUM; +//static char signature[ 16 ] = MESSAGES_MD5SUM; /** \def PERIODIC_SEND_BAT() - * @@@@@ A FIXER @@@@@ - */ + @@@@@ A FIXER @@@@@ +*/ #define PERIODIC_SEND_BAT() DOWNLINK_SEND_BAT(&vsupply, &estimator_flight_time, &low_battery, &block_time, &stage_time) /** \def EventPos(_cpt, _channel, _event) - * @@@@@ A FIXER @@@@@ - */ + @@@@@ A FIXER @@@@@ +*/ #define PERIODIC_SEND_DEBUG() DOWNLINK_SEND_DEBUG(&link_fbw_nb_err, &link_fbw_fbw_nb_err, &modem_nb_ovrn, &gps_nb_ovrn, &mcu1_ppm_cpt); /** \def EventPos(_cpt, _channel, _event) - * @@@@@ A FIXER @@@@@ - */ -#define PERIODIC_SEND_ATTITUDE() DOWNLINK_SEND_ATTITUDE(&estimator_phi, &estimator_psi, &estimator_theta); + @@@@@ A FIXER @@@@@ +*/ +#define PERIODIC_SEND_ATTITUDE() DOWNLINK_SEND_ATTITUDE(&estimator_phi, &estimator_psi, &estimator_theta); /** \def EventPos(_cpt, _channel, _event) - * @@@@@ A FIXER @@@@@ - */ + @@@@@ A FIXER @@@@@ +*/ #define PERIODIC_SEND_ADC() DOWNLINK_SEND_ADC(&ir_roll, &ir_pitch); /** \def EventPos(_cpt, _channel, _event) - * @@@@@ A FIXER @@@@@ - */ + @@@@@ A FIXER @@@@@ +*/ #define PERIODIC_SEND_STABILISATION() DOWNLINK_SEND_STABILISATION(&roll_pgain, &pitch_pgain); #define PERIODIC_SEND_CLIMB_PID() DOWNLINK_SEND_CLIMB_PID(&desired_gaz, &desired_climb, &climb_sum_err, &climb_pgain); #define PERIODIC_SEND_PPRZ_MODE() DOWNLINK_SEND_PPRZ_MODE(&pprz_mode, &vertical_mode, &inflight_calib_mode, &mcu1_status, &ir_estim_mode); @@ -272,105 +280,140 @@ uint8_t ticks_last_est; // 20Hz #define PERIODIC_SEND_NAVIGATION_REF() DOWNLINK_SEND_NAVIGATION_REF(&utm_east0, &utm_north0); #ifdef RADIO_CALIB -#define PERIODIC_SEND_SETTINGS() if (inflight_calib_mode != IF_CALIB_MODE_NONE) DOWNLINK_SEND_SETTINGS(&inflight_calib_mode, &slider_1_val, &slider_2_val); +#define PERIODIC_SEND_SETTINGS() if (inflight_calib_mode != IF_CALIB_MODE_NONE) DOWNLINK_SEND_SETTINGS(&inflight_calib_mode, &slider_1_val, &slider_2_val); #else #define PERIODIC_SEND_SETTINGS() #endif /** \fn inline void reporting_task( void ) - * \brief Send a serie of initialisation messages followed by a stream of periodic ones\n - * Called at 20Hz. - */ + \brief Send a serie of initialisation messages followed by a stream of periodic ones\n + Called at 20Hz. +*/ -void send_boot(void){ +void send_boot( void ) +{ /** initialisation phase during boot */ - if (boot) { - DOWNLINK_SEND_BOOT(&version); - DOWNLINK_SEND_RAD_OF_IR(&estimator_ir, &estimator_rad, &estimator_rad_of_ir, &ir_roll_neutral, &ir_pitch_neutral); - boot = FALSE; + if ( boot ) { + DOWNLINK_SEND_BOOT( &version ); + DOWNLINK_SEND_RAD_OF_IR( &estimator_ir, &estimator_rad, &estimator_rad_of_ir, + &ir_roll_neutral, &ir_pitch_neutral ); + boot = FALSE; } } -void send_attitude(void){ //500ms - if(!boot){ +void send_attitude( void ) //500ms +{ + if ( !boot ) { count++; - if (count == 250) count = 0; - if (count % 5 == 0) - PERIODIC_SEND_ATTITUDE(); + if ( count == 250 ) count = 0; + if ( count % 5 == 0 ) + PERIODIC_SEND_ATTITUDE(); } } - -void send_adc(void){ //500ms - if(!boot){ if (count % 5 == 1) PERIODIC_SEND_ADC();} + +void send_adc( void ) //500ms +{ + if ( !boot ) { + if ( count % 5 == 1 ) PERIODIC_SEND_ADC(); + } } -void send_settings(void){ //500ms - if(!boot){if (count % 5 == 2) PERIODIC_SEND_SETTINGS();} +void send_settings( void ) //500ms +{ + if ( !boot ) { + if ( count % 5 == 2 ) PERIODIC_SEND_SETTINGS(); + } } -void send_desired(void){ //1000ms - if(!boot){ if (count % 10 == 3) PERIODIC_SEND_DESIRED();} +void send_desired( void ) //1000ms +{ + if ( !boot ) { + if ( count % 10 == 3 ) PERIODIC_SEND_DESIRED(); + } } -void send_bat(void){ //2000ms - if(!boot){ if (count % 20 == 8) PERIODIC_SEND_BAT();} +void send_bat( void ) //2000ms +{ + if ( !boot ) { + if ( count % 20 == 8 ) PERIODIC_SEND_BAT(); + } } -void send_climb(void){ //2000ms - if(!boot){ if (count % 20 == 18) PERIODIC_SEND_CLIMB_PID();} +void send_climb( void ) //2000ms +{ + if ( !boot ) { + if ( count % 20 == 18 ) PERIODIC_SEND_CLIMB_PID(); + } } -void send_mode(void){ //5000ms - if(!boot){ if (count % 50 == 9) PERIODIC_SEND_PPRZ_MODE();} +void send_mode( void ) //5000ms +{ + if ( !boot ) { + if ( count % 50 == 9 ) PERIODIC_SEND_PPRZ_MODE(); + } } -void send_debug(void){ //5000ms - if(!boot){ if (count % 50 == 29) PERIODIC_SEND_DEBUG();} +void send_debug( void ) //5000ms +{ + if ( !boot ) { + if ( count % 50 == 29 ) PERIODIC_SEND_DEBUG(); + } } -void send_nav_ref(void){ //10000ms - if(!boot){ if (count % 100 == 49) PERIODIC_SEND_NAVIGATION_REF();} +void send_nav_ref( void ) //10000ms +{ + if ( !boot ) { + if ( count % 100 == 49 ) PERIODIC_SEND_NAVIGATION_REF(); + } } /** \fn inline uint8_t inflight_calib_mode_update ( void ) - * \brief @@@@@ A FIXER @@@@@ - */ -inline uint8_t inflight_calib_mode_update ( void ) { - ModeUpdate(inflight_calib_mode, IF_CALIB_MODE_OF_PULSE(from_fbw.channels[RADIO_CALIB])); + \brief @@@@@ A FIXER @@@@@ +*/ +inline uint8_t inflight_calib_mode_update ( void ) +{ + ModeUpdate( inflight_calib_mode, + IF_CALIB_MODE_OF_PULSE( from_fbw.channels[ RADIO_CALIB ] ) ); } /** \fn inline void radio_control_task( void ) - * \brief @@@@@ A FIXER @@@@@ - */ -void _Pragma("entrypoint") radio_control_task( void ) { + \brief @@@@@ A FIXER @@@@@ +*/ +void _Pragma( "entrypoint" ) radio_control_task( void ) +{ bool_t calib_mode_changed; - if (link_fbw_receive_valid) { + if ( link_fbw_receive_valid ) { uint8_t mode_changed = FALSE; copy_from_to_fbw(); - if ((bit_is_set(from_fbw.status, RADIO_REALLY_LOST) && (pprz_mode == PPRZ_MODE_AUTO1 || pprz_mode == PPRZ_MODE_MANUAL)) || too_far_from_home) { + if ( ( bit_is_set( from_fbw.status, RADIO_REALLY_LOST ) && + ( pprz_mode == PPRZ_MODE_AUTO1 || pprz_mode == PPRZ_MODE_MANUAL ) ) || + too_far_from_home ) { pprz_mode = PPRZ_MODE_HOME; mode_changed = TRUE; } - if (bit_is_set(from_fbw.status, AVERAGED_CHANNELS_SENT)) { + if ( bit_is_set( from_fbw.status, AVERAGED_CHANNELS_SENT ) ) { bool_t pprz_mode_changed = pprz_mode_update(); mode_changed |= pprz_mode_changed; -#ifdef RADIO_LLS + #ifdef RADIO_LLS mode_changed |= ir_estim_mode_update(); -#endif -#ifdef RADIO_CALIB + #endif + #ifdef RADIO_CALIB calib_mode_changed = inflight_calib_mode_update(); - inflight_calib(calib_mode_changed || pprz_mode_changed); + inflight_calib( calib_mode_changed || pprz_mode_changed ); mode_changed |= calib_mode_changed; -#endif + #endif } mode_changed |= mcu1_status_update(); if ( mode_changed ) - DOWNLINK_SEND_PPRZ_MODE(&pprz_mode, &vertical_mode, &inflight_calib_mode, &mcu1_status, &ir_estim_mode); - - if (pprz_mode == PPRZ_MODE_AUTO1) { - desired_roll = FLOAT_OF_PPRZ(from_fbw.channels[RADIO_ROLL], 0., -0.6); - desired_pitch = FLOAT_OF_PPRZ(from_fbw.channels[RADIO_PITCH], 0., 0.5); + DOWNLINK_SEND_PPRZ_MODE( &pprz_mode, &vertical_mode, &inflight_calib_mode, + &mcu1_status, &ir_estim_mode ); + + if ( pprz_mode == PPRZ_MODE_AUTO1 ) { + desired_roll = FLOAT_OF_PPRZ( from_fbw.channels[ RADIO_ROLL ], 0., -0.6 ); + desired_pitch = FLOAT_OF_PPRZ( from_fbw.channels[ RADIO_PITCH ], 0., 0.5 ); } // else asynchronously set by course_pid_run() - if (pprz_mode == PPRZ_MODE_MANUAL || pprz_mode == PPRZ_MODE_AUTO1) { - desired_gaz = from_fbw.channels[RADIO_THROTTLE]; -#ifdef ANTON_MAGICAL_MISTERY_GAINS - roll_pgain = ROLL_PGAIN * (1 - 5. / 7. * from_fbw.channels[RADIO_THROTTLE] / MAX_PPRZ); - pitch_pgain = PITCH_PGAIN * ( 1 - 1. / 3. * from_fbw.channels[RADIO_THROTTLE] / MAX_PPRZ); -#endif /* ANTON_MAGICAL_MISTERY_GAINS */ + if ( pprz_mode == PPRZ_MODE_MANUAL || pprz_mode == PPRZ_MODE_AUTO1 ) { + desired_gaz = from_fbw.channels[ RADIO_THROTTLE ]; + #ifdef ANTON_MAGICAL_MISTERY_GAINS + roll_pgain = ROLL_PGAIN * ( 1 - 5. / 7. * from_fbw.channels[ RADIO_THROTTLE ] / + MAX_PPRZ ); + pitch_pgain = PITCH_PGAIN * ( 1 - 1. / 3. * from_fbw.channels[ RADIO_THROTTLE ] / + MAX_PPRZ ); + #endif /* ANTON_MAGICAL_MISTERY_GAINS */ } // else asynchronously set by climb_pid_run(); @@ -379,62 +422,64 @@ void _Pragma("entrypoint") radio_control_task( void ) { events_update(); - if (!estimator_flight_time) { + if ( !estimator_flight_time ) { ground_calibrate(); - if (pprz_mode == PPRZ_MODE_AUTO2 && from_fbw.channels[RADIO_THROTTLE] > GAZ_THRESHOLD_TAKEOFF) { - launch = TRUE; - } + if ( pprz_mode == PPRZ_MODE_AUTO2 && + from_fbw.channels[ RADIO_THROTTLE ] > GAZ_THRESHOLD_TAKEOFF ) + launch = TRUE; } } } /** \fn void navigation_task( void ) - * \brief Compute desired_course - */ -void navigation_update( void ) { + \brief Compute desired_course +*/ +void navigation_update( void ) +{ /* Default to keep compatibility with previous behaviour */ lateral_mode = LATERAL_MODE_COURSE; - if (pprz_mode == PPRZ_MODE_HOME) + if ( pprz_mode == PPRZ_MODE_HOME ) nav_home(); else nav_update(); } -void send_nav_values(void){ - - DOWNLINK_SEND_NAVIGATION(&nav_block, &nav_stage, &estimator_x, &estimator_y, &desired_course, &dist2_to_wp, &course_pgain, &dist2_to_home); +void send_nav_values( void ) +{ + + DOWNLINK_SEND_NAVIGATION( &nav_block, &nav_stage, &estimator_x, &estimator_y, + &desired_course, &dist2_to_wp, &course_pgain, &dist2_to_home ); } -void course_run(void){ - - if (pprz_mode == PPRZ_MODE_AUTO2 || pprz_mode == PPRZ_MODE_HOME) - { - if (lateral_mode >= LATERAL_MODE_COURSE) +void course_run( void ) +{ + + if ( pprz_mode == PPRZ_MODE_AUTO2 || pprz_mode == PPRZ_MODE_HOME ) { + if ( lateral_mode >= LATERAL_MODE_COURSE ) course_pid_run(); /* aka compute nav_desired_roll */ desired_roll = nav_desired_roll; - } + } } -void _Pragma("entrypoint") altitude_control_task(void) +void _Pragma( "entrypoint" ) altitude_control_task( void ) { - if (pprz_mode == PPRZ_MODE_AUTO2 || pprz_mode == PPRZ_MODE_HOME) { - if (vertical_mode == VERTICAL_MODE_AUTO_ALT) - altitude_pid_run(); - } + if ( pprz_mode == PPRZ_MODE_AUTO2 || pprz_mode == PPRZ_MODE_HOME ) { + if ( vertical_mode == VERTICAL_MODE_AUTO_ALT ) + altitude_pid_run(); + } } -void _Pragma("entrypoint") climb_control_task(void) +void _Pragma( "entrypoint" ) climb_control_task( void ) { - if (pprz_mode == PPRZ_MODE_AUTO2 || pprz_mode == PPRZ_MODE_HOME) - { - if (vertical_mode >= VERTICAL_MODE_AUTO_CLIMB) - climb_pid_run(); - if (vertical_mode == VERTICAL_MODE_AUTO_GAZ) - desired_gaz = nav_desired_gaz; - if (low_battery || (!estimator_flight_time && !launch)) - desired_gaz = 0.; - } + if ( pprz_mode == PPRZ_MODE_AUTO2 || pprz_mode == PPRZ_MODE_HOME ) { + if ( vertical_mode >= VERTICAL_MODE_AUTO_CLIMB ) + climb_pid_run(); + if ( vertical_mode == VERTICAL_MODE_AUTO_GAZ ) + desired_gaz = nav_desired_gaz; + if ( low_battery || ( !estimator_flight_time && !launch ) ) + desired_gaz = 0.; + } } #define PERIOD (256. * 1024. / CLOCK / 1000000.) @@ -442,32 +487,33 @@ void _Pragma("entrypoint") climb_control_task(void) #define LOW_BATTERY_DELAY 5 /** \fn inline void periodic_task( void ) - * \brief Do periodic tasks at 61 Hz - */ + \brief Do periodic tasks at 61 Hz +*/ /**There are four @@@@@ boucles @@@@@: - * - 20 Hz: - * - lets use \a reporting_task at 10 Hz - * - updates ir with \a ir_update - * - updates estimator of ir with \a estimator_update_state_infrared - * - set \a desired_aileron and \a desired_elevator with \a roll_pitch_pid_run - * - sends to \a fbw \a desired_gaz, \a desired_aileron and - * \a desired_elevator \note \a desired_gaz is set upon GPS - * message reception - * - 10 Hz: to get a \a stage_time_ds - * - 4 Hz: - * - calls \a estimator_propagate_state - * - do navigation with \a navigation_task - * - */ + - 20 Hz: + - lets use \a reporting_task at 10 Hz + - updates ir with \a ir_update + - updates estimator of ir with \a estimator_update_state_infrared + - set \a desired_aileron and \a desired_elevator with \a roll_pitch_pid_run + - sends to \a fbw \a desired_gaz, \a desired_aileron and + \a desired_elevator \note \a desired_gaz is set upon GPS + message reception + - 10 Hz: to get a \a stage_time_ds + - 4 Hz: + - calls \a estimator_propagate_state + - do navigation with \a navigation_task + +*/ #ifdef PAPABENCH_SINGLE - uint8_t _20Hz = 0; - uint8_t _1Hz = 0; +uint8_t _20Hz = 0; +uint8_t _1Hz = 0; #else - static uint8_t _20Hz = 0; - static uint8_t _1Hz = 0; +static uint8_t _20Hz = 0; +static uint8_t _1Hz = 0; #endif -void periodic_task( void ) { +void periodic_task( void ) +{ static uint8_t _10Hz = 0; static uint8_t _4Hz = 0; static uint8_t t = 0; @@ -475,57 +521,56 @@ void periodic_task( void ) { estimator_t += PERIOD; _20Hz++; - if (_20Hz>=3) _20Hz=0; + if ( _20Hz >= 3 ) _20Hz = 0; _10Hz++; - if (_10Hz>=6) _10Hz=0; + if ( _10Hz >= 6 ) _10Hz = 0; _4Hz++; - if (_4Hz>=15) _4Hz=0; + if ( _4Hz >= 15 ) _4Hz = 0; _1Hz++; - if (_1Hz>=61) _1Hz=0; - - if (!_10Hz) { + if ( _1Hz >= 61 ) _1Hz = 0; + + if ( !_10Hz ) stage_time_ds = stage_time_ds + .1; - } - if (!_1Hz) { - if (estimator_flight_time) estimator_flight_time++; + if ( !_1Hz ) { + if ( estimator_flight_time ) estimator_flight_time++; cputime++; - stage_time_ds = (int16_t)(stage_time_ds+.5); + stage_time_ds = ( int16_t )( stage_time_ds + .5 ); stage_time++; block_time++; - if (vsupply < LOW_BATTERY) t++; else t = 0; - low_battery |= (t >= LOW_BATTERY_DELAY); - } -/*#ifdef WITH_SWITCH - switch(_4Hz) { - case 0: - estimator_propagate_state(); - navigation_task(); - altitude_control_task();//added 4-05-06 - climb_control_task();//added 04-05-06 - break; - // default: + if ( vsupply < LOW_BATTERY ) t++; + else t = 0; + low_battery |= ( t >= LOW_BATTERY_DELAY ); } - switch (_20Hz) { - case 0: - break; - case 1: { - static uint8_t odd; - odd++; - if (odd & 0x01) - reporting_task(); - break; - } - case 2: - stabilisation_task(); - link_fbw_send(); - break; - default: - fatal_error_nb++; - } -#else */ -if (_4Hz == 0) -{ + /*#ifdef WITH_SWITCH + switch(_4Hz) { + case 0: + estimator_propagate_state(); + navigation_task(); + altitude_control_task();//added 4-05-06 + climb_control_task();//added 04-05-06 + break; + // default: + } + switch (_20Hz) { + case 0: + break; + case 1: { + static uint8_t odd; + odd++; + if (odd & 0x01) + reporting_task(); + break; + } + case 2: + stabilisation_task(); + link_fbw_send(); + break; + default: + fatal_error_nb++; + } + #else */ + if ( _4Hz == 0 ) { estimator_propagate_state(); /*navigation_task */ navigation_update(); @@ -534,94 +579,99 @@ if (_4Hz == 0) /*end navigation*/ altitude_control_task(); climb_control_task(); -} + } -if(_20Hz == 0) -{} -else if (_20Hz == 1) -{ - static uint8_t odd; - odd++; - if (odd & 0x01) - { - /*reporting_task()*/ - send_boot(); - send_attitude(); - send_adc(); - send_settings(); - send_desired(); - send_bat(); - send_climb(); - send_mode(); - send_debug(); - send_nav_ref(); - } -} -else if(_20Hz == 2) -{ - stabilisation_task(); - link_fbw_send(); -} -else - fatal_error_nb++; + if ( _20Hz == 0 ) + {} + else + if ( _20Hz == 1 ) { + static uint8_t odd; + odd++; + if ( odd & 0x01 ) { + /*reporting_task()*/ + send_boot(); + send_attitude(); + send_adc(); + send_settings(); + send_desired(); + send_bat(); + send_climb(); + send_mode(); + send_debug(); + send_nav_ref(); + } + } else + if ( _20Hz == 2 ) { + stabilisation_task(); + link_fbw_send(); + } else + fatal_error_nb++; //#endif } -void _Pragma("entrypoint") stabilisation_task(void) +void _Pragma( "entrypoint" ) stabilisation_task( void ) { - ir_update(); - estimator_update_state_infrared(); - roll_pitch_pid_run(); // Set desired_aileron & desired_elevator - to_fbw.channels[RADIO_THROTTLE] = desired_gaz; // desired_gaz is set upon GPS message reception - to_fbw.channels[RADIO_ROLL] = desired_aileron; -#ifndef ANTON_T7 - to_fbw.channels[RADIO_PITCH] = desired_elevator; -#endif - - // Code for camera stabilization, FIXME put that elsewhere - to_fbw.channels[RADIO_GAIN1] = TRIM_PPRZ(MAX_PPRZ/0.75*(-estimator_phi)); + ir_update(); + estimator_update_state_infrared(); + roll_pitch_pid_run(); // Set desired_aileron & desired_elevator + to_fbw.channels[ RADIO_THROTTLE ] = + desired_gaz; // desired_gaz is set upon GPS message reception + to_fbw.channels[ RADIO_ROLL ] = desired_aileron; + #ifndef ANTON_T7 + to_fbw.channels[ RADIO_PITCH ] = desired_elevator; + #endif + + // Code for camera stabilization, FIXME put that elsewhere + to_fbw.channels[ RADIO_GAIN1 ] = TRIM_PPRZ( MAX_PPRZ / 0.75 * + ( -estimator_phi ) ); } /*void receive_gps_data_task(void) -{ - parse_gps_msg(); - gps_msg_received = FALSE; - if (gps_pos_available) - { - use_gps_pos(); - gps_pos_available = FALSE; - } -}*/ + { + parse_gps_msg(); + gps_msg_received = FALSE; + if (gps_pos_available) + { + use_gps_pos(); + gps_pos_available = FALSE; + } + }*/ /** \fn void use_gps_pos( void ) - * \brief use GPS - */ + \brief use GPS +*/ /**Send by downlink the GPS and rad_of_ir messages with \a DOWNLINK_SEND_GPS - * and \a DOWNLINK_SEND_RAD_OF_IR \n - * If \a estimator_flight_time is null and \a estimator_hspeed_mod is greater - * than \a MIN_SPEED_FOR_TAKEOFF, set the \a estimator_flight_time to 1 and \a - * launch to true (which is not set in non auto launch. Then call - * \a DOWNLINK_SEND_TAKEOFF - */ -void send_gps_pos( void ) { + and \a DOWNLINK_SEND_RAD_OF_IR \n + If \a estimator_flight_time is null and \a estimator_hspeed_mod is greater + than \a MIN_SPEED_FOR_TAKEOFF, set the \a estimator_flight_time to 1 and \a + launch to true (which is not set in non auto launch. Then call + \a DOWNLINK_SEND_TAKEOFF +*/ +void send_gps_pos( void ) +{ gps_msg_received = FALSE; - if (gps_pos_available){ - DOWNLINK_SEND_GPS(&gps_mode, &gps_utm_east, &gps_utm_north, &gps_fcourse, &gps_falt, &gps_fspeed,&gps_fclimb, &gps_ftow); - estimator_update_state_gps(); + if ( gps_pos_available ) { + DOWNLINK_SEND_GPS( &gps_mode, &gps_utm_east, &gps_utm_north, &gps_fcourse, + &gps_falt, &gps_fspeed, &gps_fclimb, &gps_ftow ); + estimator_update_state_gps(); } } -void send_radIR(void){ - if (gps_pos_available) - DOWNLINK_SEND_RAD_OF_IR(&estimator_ir, &estimator_rad, &estimator_rad_of_ir, &ir_roll_neutral, &ir_pitch_neutral); +void send_radIR( void ) +{ + if ( gps_pos_available ) + DOWNLINK_SEND_RAD_OF_IR( &estimator_ir, &estimator_rad, &estimator_rad_of_ir, + &ir_roll_neutral, &ir_pitch_neutral ); } -void send_takeOff(void){ - if (gps_pos_available){ - if (!estimator_flight_time && (estimator_hspeed_mod > MIN_SPEED_FOR_TAKEOFF)) { - estimator_flight_time = 1; - launch = TRUE; /* Not set in non auto launch */ - DOWNLINK_SEND_TAKEOFF(&cputime); - } - gps_pos_available = FALSE; +void send_takeOff( void ) +{ + if ( gps_pos_available ) { + if ( !estimator_flight_time && + ( estimator_hspeed_mod > MIN_SPEED_FOR_TAKEOFF ) ) { + estimator_flight_time = 1; + launch = TRUE; /* Not set in non auto launch */ + DOWNLINK_SEND_TAKEOFF( &cputime ); + } + gps_pos_available = FALSE; } } diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/mainloop.c b/bench/parallel/PapaBench/sw/airborne/autopilot/mainloop.c index 1733b7882919d8b5c88c0634bf5457fdff8fa374..f50132bdb1757e4c42fcc1f34c08c90a71f601dd 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/mainloop.c +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/mainloop.c @@ -1,26 +1,26 @@ /* - * $Id: mainloop.c,v 1.3 2011-01-25 09:40:37 plazar Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + $Id: mainloop.c,v 1.3 2011-01-25 09:40:37 plazar Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #include <arch/interrupt.h> #include "std.h" @@ -38,65 +38,64 @@ #include "downlink.h" #ifndef PAPABENCH_SINGLE - void fbw_init(void); - void fbw_schedule(void); +void fbw_init( void ); +void fbw_schedule( void ); #endif -int main( void ) +int main( void ) { uint8_t init_cpt; /* init peripherals */ - timer_init(); + timer_init(); modem_init(); adc_init(); -#ifdef CTL_BRD_V1_1 - adc_buf_channel(ADC_CHANNEL_BAT, &buf_bat); -#endif + #ifdef CTL_BRD_V1_1 + adc_buf_channel( ADC_CHANNEL_BAT, &buf_bat ); + #endif spi_init(); link_fbw_init(); gps_init(); nav_init(); ir_init(); estimator_init(); -# ifdef PAPABENCH_SINGLE - fbw_init(); -# endif + # ifdef PAPABENCH_SINGLE + fbw_init(); + # endif /* start interrupt task */ //sei(); /*Fadia*/ /* Wait 0.5s (for modem init ?) */ init_cpt = 30; - _Pragma("loopbound min 31 max 31") - while (init_cpt) { - if (timer_periodic()) + _Pragma( "loopbound min 31 max 31" ) + while ( init_cpt ) { + if ( timer_periodic() ) init_cpt--; } /* enter mainloop */ -#ifndef NO_MAINLOOP - while( 1 ) { -#endif - if(timer_periodic()) { + #ifndef NO_MAINLOOP + while ( 1 ) { + #endif + if ( timer_periodic() ) { periodic_task(); -# if PAPABENCH_SINGLE - fbw_schedule(); -# endif - } - if (gps_msg_received) - { - /*receive_gps_data_task()*/ - parse_gps_msg(); - send_gps_pos(); - send_radIR(); - send_takeOff(); + # if PAPABENCH_SINGLE + fbw_schedule(); + # endif + } + if ( gps_msg_received ) { + /*receive_gps_data_task()*/ + parse_gps_msg(); + send_gps_pos(); + send_radIR(); + send_takeOff(); } - if (link_fbw_receive_complete) { + if ( link_fbw_receive_complete ) { link_fbw_receive_complete = FALSE; radio_control_task(); } -#ifndef NO_MAINLOOP - } -#endif + #ifndef NO_MAINLOOP + } + #endif return 0; } diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/modem.c b/bench/parallel/PapaBench/sw/airborne/autopilot/modem.c index d5a381feb4b8451be0bdc802c32749ec7a1e11a9..736fb10d8c1dc586c450a0eb65897eabc22a0906 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/modem.c +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/modem.c @@ -1,26 +1,26 @@ /* - * Paparazzi mcu0 cmx469 modem functions - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi mcu0 cmx469 modem functions + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #include <inttypes.h> #include <arch/io.h> @@ -41,53 +41,55 @@ uint8_t tx_byte_idx; uint8_t ck_a, ck_b; -void modem_init( void ) { - /* +void modem_init( void ) +{ + /* on >= V1.2 boards, 4MHz modem clock is generated by one PWM module. */ -#if defined CTL_BRD_V1_2 || defined CTL_BRD_V1_2_1 - MODEM_OSC_DDR |= _BV(MODEM_OSC); + #if defined CTL_BRD_V1_2 || defined CTL_BRD_V1_2_1 + MODEM_OSC_DDR |= _BV( MODEM_OSC ); OCR0 = 1; /* 4MhZ */ - TCCR0 = _BV(WGM01) | _BV(COM00) | _BV(CS00); -#endif + TCCR0 = _BV( WGM01 ) | _BV( COM00 ) | _BV( CS00 ); + #endif /* setup TX_EN and TX_DATA pin as output */ - MODEM_TX_DDR |= _BV(MODEM_TX_EN) | _BV(MODEM_TX_DATA); + MODEM_TX_DDR |= _BV( MODEM_TX_EN ) | _BV( MODEM_TX_DATA ); /* data idles hight */ - sbi(MODEM_TX_PORT, MODEM_TX_DATA); + sbi( MODEM_TX_PORT, MODEM_TX_DATA ); /* enable transmitter */ - cbi(MODEM_TX_PORT, MODEM_TX_EN); + cbi( MODEM_TX_PORT, MODEM_TX_EN ); /* set interrupt on failing edge of clock */ MODEM_CLK_INT_REG |= MODEM_CLK_INT_CFG; } -SIGNAL( MODEM_CLK_INT_SIG ) { +SIGNAL( MODEM_CLK_INT_SIG ) +{ /* start bit */ - if (tx_byte_idx == 0) - cbi(MODEM_TX_PORT, MODEM_TX_DATA); - /* 8 data bits */ - else if (tx_byte_idx < 9) { - if (tx_byte & 0x01) - sbi(MODEM_TX_PORT, MODEM_TX_DATA); + if ( tx_byte_idx == 0 ) + cbi( MODEM_TX_PORT, MODEM_TX_DATA ); + /* 8 data bits */ + else + if ( tx_byte_idx < 9 ) { + if ( tx_byte & 0x01 ) + sbi( MODEM_TX_PORT, MODEM_TX_DATA ); + else + cbi( MODEM_TX_PORT, MODEM_TX_DATA ); + tx_byte >>= 1; + } + /* stop_bit */ else - cbi(MODEM_TX_PORT, MODEM_TX_DATA); - tx_byte >>= 1; - } - /* stop_bit */ - else { - sbi(MODEM_TX_PORT, MODEM_TX_DATA); - } + sbi( MODEM_TX_PORT, MODEM_TX_DATA ); tx_byte_idx++; /* next byte */ - if (tx_byte_idx >= 10) { + if ( tx_byte_idx >= 10 ) { /* if we have nothing left to transmit */ - if( tx_head == tx_tail ) { + if ( tx_head == tx_tail ) { /* disable clock interrupt */ cbi( EIMSK, MODEM_CLK_INT ); } else { /* else load next byte */ - MODEM_LOAD_NEXT_BYTE(); + MODEM_LOAD_NEXT_BYTE(); } } } diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/modem.h b/bench/parallel/PapaBench/sw/airborne/autopilot/modem.h index 2d84056e160235c4fb0b27fa696825ddb1fd502d..f6a5d8de075504657d867be7d6defabc8f29bc02 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/modem.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/modem.h @@ -1,26 +1,26 @@ /* - * Paparazzi mcu0 cmx469 modem functions - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi mcu0 cmx469 modem functions + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef MODEM_H #define MODEM_H @@ -49,7 +49,7 @@ extern uint8_t ck_a, ck_b; #define MODEM_TX_PORT PORTD -#define MODEM_TX_DDR DDRD +#define MODEM_TX_DDR DDRD #define MODEM_TX_EN 7 #define MODEM_TX_DATA 6 @@ -63,7 +63,7 @@ extern uint8_t ck_a, ck_b; #define MODEM_CLK_INT_SIG SIG_INTERRUPT0 #endif /* CTL_BRD_V1_1 */ -#ifdef CTL_BRD_V1_2 +#ifdef CTL_BRD_V1_2 #define MODEM_CLK_DDR DDRD #define MODEM_CLK_PORT PORTD #define MODEM_CLK 0 diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/nav.c b/bench/parallel/PapaBench/sw/airborne/autopilot/nav.c index dfaaac08883d47deeb208018669543fdcc791343..97900163c8f68b93d34c737343d81aad976ed11e 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/nav.c +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/nav.c @@ -1,201 +1,216 @@ -/* - * $Id: nav.c,v 1.3 2011-01-21 11:52:44 moellmer Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ - -#define NAV_C - -#include "math.h" - -#include "nav.h" -#include "estimator.h" -#include "pid.h" -#include "autopilot.h" -#include "link_fbw.h" -#include "airframe.h" - -uint8_t nav_stage, nav_block; -uint8_t excpt_stage; /*To save the current stage when an exception is raised */ -static float last_x, last_y; -static uint8_t last_wp; -float rc_pitch; -uint16_t stage_time, block_time; -float stage_time_ds; - -#define RcRoll(travel) (from_fbw.channels[RADIO_ROLL]* (float)travel /(float)MAX_PPRZ) - -#define RcEvent1() CheckEvent(rc_event_1) -#define RcEvent2() CheckEvent(rc_event_2) -#define Block(x) case x: nav_block=x; -#define InitBlock() { nav_stage = 0; block_time = 0; InitStage(); } -#define NextBlock() { nav_block++; InitBlock(); } -#define GotoBlock(b) { nav_block=b; InitBlock(); } - -#define Stage(s) case s: nav_stage=s; -#define InitStage() { last_x = estimator_x; last_y = estimator_y; stage_time = 0; stage_time_ds = 0.0; return; } -#define NextStage() { nav_stage++; InitStage() } -#define NextStageFrom(wp) { last_wp = wp; NextStage() } -#define GotoStage(s) { nav_stage = s; InitStage() } - -#define Label(x) label_ ## x: -#define Goto(x) { goto label_ ## x; } - -#define Exception(x) { excpt_stage = nav_stage; goto label_ ## x; } -#define ReturnFromException(_) { GotoStage(excpt_stage) } - -static bool_t approaching(uint8_t); -static inline void fly_to_xy(float x, float y); -static void fly_to(uint8_t wp); -static void route_to(uint8_t last_wp, uint8_t wp); -//static void glide_to(uint8_t last_wp, uint8_t wp); - -#define MIN_DX ((int16_t)(MAX_PPRZ * 0.05)) - -#define DegOfRad(x) ((x) / M_PI * 180.) -#define RadOfDeg(x) ((x)/180. * M_PI) -#define NormCourse(x) { _Pragma("loopbound min 0 max 0") while (x < 0) x += 360; _Pragma("loopbound min 0 max 0") while (x >= 360) x -= 360;} - -static float qdr; /* Degrees from 0 to 360 */ - -#define CircleXY(x,y,radius) { float alpha = atan2(estimator_y - y, estimator_x - x);float alpha_carrot = alpha + CARROT / (-radius * estimator_hspeed_mod); fly_to_xy(x+cos(alpha_carrot)*fabs(radius),y+sin(alpha_carrot)*fabs(radius)); qdr = DegOfRad(M_PI/2 - alpha_carrot); NormCourse(qdr);} - -#define MAX_DIST_CARROT 250. -#define MIN_HEIGHT_CARROT 50. -#define MAX_HEIGHT_CARROT 150. - -#define Goto3D(radius) { static float carrot_x, carrot_y; int16_t pitch; int16_t roll; if (pprz_mode == PPRZ_MODE_AUTO2) { int16_t yaw = from_fbw.channels[RADIO_YAW]; if (yaw > MIN_DX || yaw < -MIN_DX) { carrot_x += FLOAT_OF_PPRZ(yaw, 0, -20.);carrot_x = Min(carrot_x, MAX_DIST_CARROT); carrot_x = Max(carrot_x, -MAX_DIST_CARROT); } pitch = from_fbw.channels[RADIO_PITCH]; if (pitch > MIN_DX || pitch < -MIN_DX) { carrot_y += FLOAT_OF_PPRZ(pitch, 0, -20.); carrot_y = Min(carrot_y, MAX_DIST_CARROT); carrot_y = Max(carrot_y, -MAX_DIST_CARROT);} vertical_mode = VERTICAL_MODE_AUTO_ALT; roll = from_fbw.channels[RADIO_ROLL]; if (roll > MIN_DX || roll < -MIN_DX) { desired_altitude += FLOAT_OF_PPRZ(roll, 0, -1.0); desired_altitude = Max(desired_altitude, MIN_HEIGHT_CARROT+GROUND_ALT); desired_altitude = Min(desired_altitude, MAX_HEIGHT_CARROT+GROUND_ALT); } } CircleXY(carrot_x, carrot_y, radius); } - -#define Circle(wp, radius) CircleXY(waypoints[wp].x, waypoints[wp].y, radius) - -#define And(x, y) ((x) && (y)) -#define Or(x, y) ((x) || (y)) -//#define Min(x,y) (x < y ? x : y) -//#define Max(x,y) (x > y ? x : y) -#define Qdr(x) (Min(x, 350) < qdr && qdr < x+10) - -#include "flight_plan.h" - - -#define MIN_DIST2_WP (15.*15.) - -#define DISTANCE2(p1_x, p1_y, p2) ((p1_x-p2.x)*(p1_x-p2.x)+(p1_y-p2.y)*(p1_y-p2.y)) - -const int32_t nav_east0 = NAV_UTM_EAST0; -const int32_t nav_north0 = NAV_UTM_NORTH0; - -float desired_altitude = GROUND_ALT + MIN_HEIGHT_CARROT; -float desired_x, desired_y; -uint16_t nav_desired_gaz; -float nav_pitch = NAV_PITCH; -float nav_desired_roll; - -float dist2_to_wp, dist2_to_home; -bool_t too_far_from_home; -const uint8_t nb_waypoint = NB_WAYPOINT; - -struct point waypoints[NB_WAYPOINT+1] = WAYPOINTS - -static float carrot; -static bool_t approaching(uint8_t wp) { - float pw_x = waypoints[wp].x - estimator_x; - float pw_y = waypoints[wp].y - estimator_y; - float scal_prod;//changes for PowerPc Fev-06 - - dist2_to_wp = pw_x*pw_x + pw_y *pw_y; - carrot = CARROT * estimator_hspeed_mod; - carrot = (carrot < 40 ? 40 : carrot); - if (dist2_to_wp < carrot*carrot) - return TRUE; - - scal_prod = (waypoints[wp].x - last_x) * pw_x + (waypoints[wp].y - last_y) * pw_y; - - return (scal_prod < 0); -} - -static inline void fly_to_xy(float x, float y) -{ - desired_x = x; - desired_y = y; - desired_course = M_PI/2.-atan2(y - estimator_y, x - estimator_x); -} - -static void fly_to(uint8_t wp) { - fly_to_xy(waypoints[wp].x, waypoints[wp].y); -} - -static float alpha, leg; -static void route_to(uint8_t _last_wp, uint8_t wp) -{ - float last_wp_x = waypoints[_last_wp].x; - float last_wp_y = waypoints[_last_wp].y; - float leg_x = waypoints[wp].x - last_wp_x; - float leg_y = waypoints[wp].y - last_wp_y; - float leg2 = leg_x * leg_x + leg_y * leg_y; - alpha = ((estimator_x - last_wp_x) * leg_x + (estimator_y - last_wp_y) * leg_y) / leg2; - alpha = Max(alpha, 0.); - leg = sqrt(leg2); - alpha += Max(carrot / leg, 0.); /* carrot computed in approaching() */ - alpha = Min(1., alpha); - fly_to_xy(last_wp_x + alpha*leg_x, last_wp_y + alpha*leg_y); -} - -/*static void glide_to(uint8_t _last_wp, uint8_t wp) { - float last_alt = waypoints[_last_wp].a; - desired_altitude = last_alt + alpha * (waypoints[wp].a - last_alt); - pre_climb = NOMINAL_AIRSPEED * (waypoints[wp].a - last_alt) / leg; -}*/ - -static inline void compute_dist2_to_home(void) { - float ph_x = waypoints[WP_HOME].x - estimator_x; - float ph_y = waypoints[WP_HOME].y - estimator_y; - dist2_to_home = ph_x*ph_x + ph_y *ph_y; - too_far_from_home = dist2_to_home > (MAX_DIST_FROM_HOME*MAX_DIST_FROM_HOME); -} - -void nav_home(void) { - //Circle(WP_HOME, 50); /* FIXME: radius should be defined elsewhere */ - { float alpha = atan2(estimator_y - waypoints[WP_HOME].y, estimator_x - waypoints[WP_HOME].x);float alpha_carrot = alpha + CARROT / (-50 * estimator_hspeed_mod); - fly_to_xy(waypoints[WP_HOME].x+cos(alpha_carrot)*fabs(50),waypoints[WP_HOME].y+sin(alpha_carrot)*fabs(50)); qdr = DegOfRad(M_PI/2 - alpha_carrot); - { - _Pragma("loopbounds min 0 max 2") - while (qdr < 0) qdr += 360; - _Pragma("loopbounds min 0 max 2") - while (qdr >= 360) qdr -= 360;} } - - nav_pitch = 0.; /* Nominal speed */ - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = GROUND_ALT+50; - compute_dist2_to_home(); - dist2_to_wp = dist2_to_home; -} - -void nav_update(void) { - compute_dist2_to_home(); - - auto_nav(); -} - - -void nav_init(void) { - nav_block = 0; - nav_stage = 0; -} +/* + $Id: nav.c,v 1.3 2011-01-21 11:52:44 moellmer Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ + +#define NAV_C + +#include "math.h" + +#include "nav.h" +#include "estimator.h" +#include "pid.h" +#include "autopilot.h" +#include "link_fbw.h" +#include "airframe.h" + +uint8_t nav_stage, nav_block; +uint8_t excpt_stage; /*To save the current stage when an exception is raised */ +static float last_x, last_y; +static uint8_t last_wp; +float rc_pitch; +uint16_t stage_time, block_time; +float stage_time_ds; + +#define RcRoll(travel) (from_fbw.channels[ RADIO_ROLL ]* (float)travel /(float)MAX_PPRZ) + +#define RcEvent1() CheckEvent(rc_event_1) +#define RcEvent2() CheckEvent(rc_event_2) +#define Block(x) case x: nav_block=x; +#define InitBlock() { nav_stage = 0; block_time = 0; InitStage(); } +#define NextBlock() { nav_block++; InitBlock(); } +#define GotoBlock(b) { nav_block=b; InitBlock(); } + +#define Stage(s) case s: nav_stage=s; +#define InitStage() { last_x = estimator_x; last_y = estimator_y; stage_time = 0; stage_time_ds = 0.0; return; } +#define NextStage() { nav_stage++; InitStage() } +#define NextStageFrom(wp) { last_wp = wp; NextStage() } +#define GotoStage(s) { nav_stage = s; InitStage() } + +#define Label(x) label_ ## x: +#define Goto(x) { goto label_ ## x; } + +#define Exception(x) { excpt_stage = nav_stage; goto label_ ## x; } +#define ReturnFromException(_) { GotoStage(excpt_stage) } + +static bool_t approaching( uint8_t ); +static inline void fly_to_xy( float x, float y ); +static void fly_to( uint8_t wp ); +static void route_to( uint8_t last_wp, uint8_t wp ); +//static void glide_to(uint8_t last_wp, uint8_t wp); + +#define MIN_DX ((int16_t)(MAX_PPRZ * 0.05)) + +#define DegOfRad(x) ((x) / M_PI * 180.) +#define RadOfDeg(x) ((x)/180. * M_PI) +#define NormCourse(x) { _Pragma("loopbound min 0 max 0") while (x < 0) x += 360; _Pragma("loopbound min 0 max 0") while (x >= 360) x -= 360;} + +static float qdr; /* Degrees from 0 to 360 */ + +#define CircleXY(x,y,radius) { float alpha = atan2(estimator_y - y, estimator_x - x);float alpha_carrot = alpha + CARROT / (-radius * estimator_hspeed_mod); fly_to_xy(x+cos(alpha_carrot)*fabs(radius),y+sin(alpha_carrot)*fabs(radius)); qdr = DegOfRad(M_PI/2 - alpha_carrot); NormCourse(qdr);} + +#define MAX_DIST_CARROT 250. +#define MIN_HEIGHT_CARROT 50. +#define MAX_HEIGHT_CARROT 150. + +#define Goto3D(radius) { static float carrot_x, carrot_y; int16_t pitch; int16_t roll; if (pprz_mode == PPRZ_MODE_AUTO2) { int16_t yaw = from_fbw.channels[ RADIO_YAW ]; if (yaw > MIN_DX || yaw < -MIN_DX) { carrot_x += FLOAT_OF_PPRZ(yaw, 0, -20.);carrot_x = Min(carrot_x, MAX_DIST_CARROT); carrot_x = Max(carrot_x, -MAX_DIST_CARROT); } pitch = from_fbw.channels[ RADIO_PITCH ]; if (pitch > MIN_DX || pitch < -MIN_DX) { carrot_y += FLOAT_OF_PPRZ(pitch, 0, -20.); carrot_y = Min(carrot_y, MAX_DIST_CARROT); carrot_y = Max(carrot_y, -MAX_DIST_CARROT);} vertical_mode = VERTICAL_MODE_AUTO_ALT; roll = from_fbw.channels[ RADIO_ROLL ]; if (roll > MIN_DX || roll < -MIN_DX) { desired_altitude += FLOAT_OF_PPRZ(roll, 0, -1.0); desired_altitude = Max(desired_altitude, MIN_HEIGHT_CARROT+GROUND_ALT); desired_altitude = Min(desired_altitude, MAX_HEIGHT_CARROT+GROUND_ALT); } } CircleXY(carrot_x, carrot_y, radius); } + +#define Circle(wp, radius) CircleXY(waypoints[ wp ].x, waypoints[ wp ].y, radius) + +#define And(x, y) ((x) && (y)) +#define Or(x, y) ((x) || (y)) +//#define Min(x,y) (x < y ? x : y) +//#define Max(x,y) (x > y ? x : y) +#define Qdr(x) (Min(x, 350) < qdr && qdr < x+10) + +#include "flight_plan.h" + + +#define MIN_DIST2_WP (15.*15.) + +#define DISTANCE2(p1_x, p1_y, p2) ((p1_x-p2.x)*(p1_x-p2.x)+(p1_y-p2.y)*(p1_y-p2.y)) + +const int32_t nav_east0 = NAV_UTM_EAST0; +const int32_t nav_north0 = NAV_UTM_NORTH0; + +float desired_altitude = GROUND_ALT + MIN_HEIGHT_CARROT; +float desired_x, desired_y; +uint16_t nav_desired_gaz; +float nav_pitch = NAV_PITCH; +float nav_desired_roll; + +float dist2_to_wp, dist2_to_home; +bool_t too_far_from_home; +const uint8_t nb_waypoint = NB_WAYPOINT; + +struct point waypoints[ NB_WAYPOINT + 1 ] = WAYPOINTS + + static float carrot; +static bool_t approaching( uint8_t wp ) +{ + float pw_x = waypoints[ wp ].x - estimator_x; + float pw_y = waypoints[ wp ].y - estimator_y; + float scal_prod;//changes for PowerPc Fev-06 + + dist2_to_wp = pw_x * pw_x + pw_y * pw_y; + carrot = CARROT * estimator_hspeed_mod; + carrot = ( carrot < 40 ? 40 : carrot ); + if ( dist2_to_wp < carrot * carrot ) + return TRUE; + + scal_prod = ( waypoints[ wp ].x - last_x ) * pw_x + ( waypoints[ wp ].y - last_y ) * + pw_y; + + return ( scal_prod < 0 ); +} + +static inline void fly_to_xy( float x, float y ) +{ + desired_x = x; + desired_y = y; + desired_course = M_PI / 2. - atan2( y - estimator_y, x - estimator_x ); +} + +static void fly_to( uint8_t wp ) +{ + fly_to_xy( waypoints[ wp ].x, waypoints[ wp ].y ); +} + +static float alpha, leg; +static void route_to( uint8_t _last_wp, uint8_t wp ) +{ + float last_wp_x = waypoints[ _last_wp ].x; + float last_wp_y = waypoints[ _last_wp ].y; + float leg_x = waypoints[ wp ].x - last_wp_x; + float leg_y = waypoints[ wp ].y - last_wp_y; + float leg2 = leg_x * leg_x + leg_y * leg_y; + alpha = ( ( estimator_x - last_wp_x ) * leg_x + ( estimator_y - last_wp_y ) * + leg_y ) / leg2; + alpha = Max( alpha, 0. ); + leg = sqrt( leg2 ); + alpha += Max( carrot / leg, 0. ); /* carrot computed in approaching() */ + alpha = Min( 1., alpha ); + fly_to_xy( last_wp_x + alpha * leg_x, last_wp_y + alpha * leg_y ); +} + +/*static void glide_to(uint8_t _last_wp, uint8_t wp) { + float last_alt = waypoints[ _last_wp ].a; + desired_altitude = last_alt + alpha * (waypoints[ wp ].a - last_alt); + pre_climb = NOMINAL_AIRSPEED * (waypoints[ wp ].a - last_alt) / leg; + }*/ + +static inline void compute_dist2_to_home( void ) +{ + float ph_x = waypoints[ WP_HOME ].x - estimator_x; + float ph_y = waypoints[ WP_HOME ].y - estimator_y; + dist2_to_home = ph_x * ph_x + ph_y * ph_y; + too_far_from_home = dist2_to_home > ( MAX_DIST_FROM_HOME * MAX_DIST_FROM_HOME ); +} + +void nav_home( void ) +{ + //Circle(WP_HOME, 50); /* FIXME: radius should be defined elsewhere */ + { + float alpha = atan2( estimator_y - waypoints[ WP_HOME ].y, + estimator_x - waypoints[ WP_HOME ].x ); + float alpha_carrot = alpha + CARROT / ( -50 * estimator_hspeed_mod ); + fly_to_xy( waypoints[ WP_HOME ].x + cos( alpha_carrot )*fabs( 50 ), + waypoints[ WP_HOME ].y + sin( alpha_carrot )*fabs( 50 ) ); + qdr = DegOfRad( M_PI / 2 - alpha_carrot ); + { + _Pragma( "loopbounds min 0 max 2" ) + while ( qdr < 0 ) qdr += 360; + _Pragma( "loopbounds min 0 max 2" ) + while ( qdr >= 360 ) qdr -= 360; + } + } + + nav_pitch = 0.; /* Nominal speed */ + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = GROUND_ALT + 50; + compute_dist2_to_home(); + dist2_to_wp = dist2_to_home; +} + +void nav_update( void ) +{ + compute_dist2_to_home(); + + auto_nav(); +} + + +void nav_init( void ) +{ + nav_block = 0; + nav_stage = 0; +} diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/nav.h b/bench/parallel/PapaBench/sw/airborne/autopilot/nav.h index 06267cc573569b06d40adfa695fa68983dec0c06..cf2b2b408812d83c28bcb01ce69d9172d46895a4 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/nav.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/nav.h @@ -1,26 +1,26 @@ /* - * Paparazzi mcu0 $Id: nav.h,v 1.1 2011-01-18 12:48:39 moellmer Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi mcu0 $Id: nav.h,v 1.1 2011-01-18 12:48:39 moellmer Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef NAV_H #define NAV_H @@ -37,7 +37,7 @@ extern float cur_pos_y; extern uint8_t nav_stage, nav_block; extern float dist2_to_wp, dist2_to_home; -extern const int32_t nav_east0; +extern const int32_t nav_east0; extern const int32_t nav_north0; extern const uint8_t nb_waypoint; @@ -51,8 +51,8 @@ extern uint16_t stage_time, block_time; /* s */ extern float stage_time_ds; /* s */ extern float nav_desired_roll; -void nav_update(void); -void nav_home(void); -void nav_init(void); +void nav_update( void ); +void nav_home( void ); +void nav_init( void ); #endif /* NAV_H */ diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/pid.c b/bench/parallel/PapaBench/sw/airborne/autopilot/pid.c index 56e17d18458ecaa0159c5cee7a74a8d26293556a..2268acf4d551536353ac951747c262abcc458382 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/pid.c +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/pid.c @@ -1,31 +1,31 @@ /* - * $Id: pid.c,v 1.2 2011-01-21 11:52:44 moellmer Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + $Id: pid.c,v 1.2 2011-01-21 11:52:44 moellmer Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ /** \file pid.c - * \brief PID controllers (roll, pitch, climb, altitude, course). - * - */ + \brief PID controllers (roll, pitch, climb, altitude, course). + +*/ //#include <stdlib.h> #include <math.h> @@ -49,31 +49,35 @@ float pitch_of_vz = 0.; /** \brief Computes ::desired_aileron and ::desired_elevator from attitude estimation and expected attitude. */ -void roll_pitch_pid_run( void ) { +void roll_pitch_pid_run( void ) +{ float err = estimator_phi - desired_roll; - desired_aileron = TRIM_PPRZ(roll_pgain * err); - if (pitch_of_roll <0.) + desired_aileron = TRIM_PPRZ( roll_pgain * err ); + if ( pitch_of_roll < 0. ) pitch_of_roll = 0.; - err = -(estimator_theta - desired_pitch - pitch_of_roll * fabs(estimator_phi)); - desired_elevator = TRIM_PPRZ(pitch_pgain * err); + err = -( estimator_theta - desired_pitch - pitch_of_roll * fabs( + estimator_phi ) ); + desired_elevator = TRIM_PPRZ( pitch_pgain * err ); } float course_pgain = COURSE_PGAIN; float desired_course = 0.; float max_roll = MAX_ROLL; -void course_pid_run( void ) { +void course_pid_run( void ) +{ float err = estimator_hspeed_dir - desired_course; //NORM_RAD_ANGLE(err); - _Pragma("loopbound min 0 max 1") - while (err > M_PI) err -= 2 * M_PI; - _Pragma("loopbound min 0 max 1") - while (err < -M_PI) err += 2 * M_PI; + _Pragma( "loopbound min 0 max 1" ) + while ( err > M_PI ) err -= 2 * M_PI; + _Pragma( "loopbound min 0 max 1" ) + while ( err < -M_PI ) err += 2 * M_PI; nav_desired_roll = course_pgain * err; // * fspeed / AIR_SPEED; - if (nav_desired_roll > max_roll) + if ( nav_desired_roll > max_roll ) nav_desired_roll = max_roll; - else if (nav_desired_roll < -max_roll) - nav_desired_roll = -max_roll; + else + if ( nav_desired_roll < -max_roll ) + nav_desired_roll = -max_roll; } const float climb_pgain = CLIMB_PGAIN; @@ -93,29 +97,32 @@ float min_pitch = MIN_PITCH; #define MAX_PITCH_CLIMB_SUM_ERR 100 /** \brief Computes desired_gaz and desired_pitch from desired_climb */ -void climb_pid_run ( void ) { +void climb_pid_run ( void ) +{ float err = estimator_z_dot - desired_climb; float fgaz; - if (auto_pitch) { /* gaz constant */ + if ( auto_pitch ) { /* gaz constant */ desired_gaz = nav_desired_gaz; - desired_pitch = climb_pitch_pgain * (err + climb_pitch_igain * climb_pitch_sum_err); - if (desired_pitch > max_pitch) + desired_pitch = climb_pitch_pgain * ( err + climb_pitch_igain * + climb_pitch_sum_err ); + if ( desired_pitch > max_pitch ) desired_pitch = max_pitch; - if (desired_pitch < min_pitch) + if ( desired_pitch < min_pitch ) desired_pitch = min_pitch; climb_pitch_sum_err += err; - if (climb_pitch_sum_err > MAX_PITCH_CLIMB_SUM_ERR) + if ( climb_pitch_sum_err > MAX_PITCH_CLIMB_SUM_ERR ) climb_pitch_sum_err = MAX_PITCH_CLIMB_SUM_ERR; - if (climb_pitch_sum_err < - MAX_PITCH_CLIMB_SUM_ERR) - climb_pitch_sum_err = - MAX_PITCH_CLIMB_SUM_ERR; + if ( climb_pitch_sum_err < - MAX_PITCH_CLIMB_SUM_ERR ) + climb_pitch_sum_err = - MAX_PITCH_CLIMB_SUM_ERR; } else { /* pitch almost constant */ /* pitch offset for climb */ - pitch_of_vz = (desired_climb > 0) ? desired_climb * pitch_of_vz_pgain : 0.; - fgaz = climb_pgain * (err + climb_igain * climb_sum_err) + CLIMB_LEVEL_GAZ + CLIMB_GAZ_OF_CLIMB*desired_climb; + pitch_of_vz = ( desired_climb > 0 ) ? desired_climb * pitch_of_vz_pgain : 0.; + fgaz = climb_pgain * ( err + climb_igain * climb_sum_err ) + CLIMB_LEVEL_GAZ + + CLIMB_GAZ_OF_CLIMB * desired_climb; climb_sum_err += err; - if (climb_sum_err > MAX_CLIMB_SUM_ERR) climb_sum_err = MAX_CLIMB_SUM_ERR; - if (climb_sum_err < - MAX_CLIMB_SUM_ERR) climb_sum_err = - MAX_CLIMB_SUM_ERR; - desired_gaz = TRIM_UPPRZ(fgaz * MAX_PPRZ); + if ( climb_sum_err > MAX_CLIMB_SUM_ERR ) climb_sum_err = MAX_CLIMB_SUM_ERR; + if ( climb_sum_err < - MAX_CLIMB_SUM_ERR ) climb_sum_err = - MAX_CLIMB_SUM_ERR; + desired_gaz = TRIM_UPPRZ( fgaz * MAX_PPRZ ); desired_pitch = nav_pitch + pitch_of_vz; } } @@ -123,9 +130,10 @@ void climb_pid_run ( void ) { float altitude_pgain = ALTITUDE_PGAIN; -void altitude_pid_run(void) { +void altitude_pid_run( void ) +{ float err = estimator_z - desired_altitude; desired_climb = pre_climb + altitude_pgain * err; - if (desired_climb < -CLIMB_MAX) desired_climb = -CLIMB_MAX; - if (desired_climb > CLIMB_MAX) desired_climb = CLIMB_MAX; + if ( desired_climb < -CLIMB_MAX ) desired_climb = -CLIMB_MAX; + if ( desired_climb > CLIMB_MAX ) desired_climb = CLIMB_MAX; } diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/pid.h b/bench/parallel/PapaBench/sw/airborne/autopilot/pid.h index 28e25753857278cf877ab5844a9fcac0b232db30..988dcc0c085486852c00710afae16c15d156df8e 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/pid.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/pid.h @@ -1,26 +1,26 @@ /* - * Paparazzi mcu0 $Id: pid.h,v 1.1 2011-01-18 12:48:39 moellmer Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi mcu0 $Id: pid.h,v 1.1 2011-01-18 12:48:39 moellmer Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef PID_H #define PID_H @@ -55,7 +55,7 @@ extern int16_t desired_gaz, desired_aileron, desired_elevator; extern float pitch_of_vz_pgain; extern float pitch_of_vz; -void climb_pid_run(void); -void altitude_pid_run(void); +void climb_pid_run( void ); +void altitude_pid_run( void ); #endif /* PID_H */ diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/sirf.h b/bench/parallel/PapaBench/sw/airborne/autopilot/sirf.h index 901c4df4b98394ad9c26169d5347ecb94aa3bfb3..e7c2d3679b2c32b97619206567f522da28ce2d53 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/sirf.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/sirf.h @@ -1,30 +1,30 @@ /* - * Paparazzi autopilot $Id: sirf.h,v 1.1 2011-01-18 12:48:39 moellmer Exp $ - * - * Copyright (C) 2004 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi autopilot $Id: sirf.h,v 1.1 2011-01-18 12:48:39 moellmer Exp $ + + Copyright (C) 2004 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ /* - * SIRF protocol specific code - * + SIRF protocol specific code + */ diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/spi.c b/bench/parallel/PapaBench/sw/airborne/autopilot/spi.c index da9c57242f4b3c11e011a8cf6eb876d99b9541f6..83165dca0454dbf6c6b27c745a6d670b5df23715 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/spi.c +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/spi.c @@ -12,29 +12,31 @@ volatile uint8_t spi_cur_slave; uint8_t spi_nb_ovrn; -void spi_init( void) { - /* Set MOSI and SCK output, all others input */ - SPI_DDR |= _BV(SPI_MOSI_PIN)| _BV(SPI_SCK_PIN); +void spi_init( void ) +{ + /* Set MOSI and SCK output, all others input */ + SPI_DDR |= _BV( SPI_MOSI_PIN ) | _BV( SPI_SCK_PIN ); /* enable pull up for miso */ // SPI_PORT |= _BV(SPI_MISO_PIN); /* Set SS0 output */ - sbi( SPI_SS0_DDR, SPI_SS0_PIN); + sbi( SPI_SS0_DDR, SPI_SS0_PIN ); /* SS0 idles high (don't select slave yet)*/ SPI_UNSELECT_SLAVE0(); /* Set SS1 output */ - sbi( SPI_SS1_DDR, SPI_SS1_PIN); + sbi( SPI_SS1_DDR, SPI_SS1_PIN ); /* SS1 idles high (don't select slave yet)*/ SPI_UNSELECT_SLAVE1(); - + spi_cur_slave = SPI_NONE; } -SIGNAL(SIG_SPI) { - if (spi_cur_slave == SPI_SLAVE0) +SIGNAL( SIG_SPI ) +{ + if ( spi_cur_slave == SPI_SLAVE0 ) link_fbw_on_spi_it(); else fatal_error_nb++; diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/spi.h b/bench/parallel/PapaBench/sw/airborne/autopilot/spi.h index 556f60c12d86da69ca200348ec07a585d03752b9..a345da5d90df5e635c468efa2facd92c87b09fd8 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/spi.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/spi.h @@ -15,7 +15,7 @@ #define SPI_SS1_DDR DDRE #define SPI_IT1_PIN 6 #define SPI_IT1_PORT PORTE -#define SPI_IT1_DDR DDRE +#define SPI_IT1_DDR DDRE #define SPI_SCK_PIN 1 #define SPI_MOSI_PIN 2 @@ -32,7 +32,7 @@ extern volatile uint8_t spi_cur_slave; extern uint8_t spi_nb_ovrn; -void spi_init( void); +void spi_init( void ); #define SPI_START(_SPCR_VAL) { \ uint8_t foo; \ diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/timer.h b/bench/parallel/PapaBench/sw/airborne/autopilot/timer.h index fe2c3ecbb2af108ea72c42588a994a79fc896344..b02e97b72198563e203b6dff773e8ceba4318de0 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/timer.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/timer.h @@ -1,29 +1,29 @@ /* - * Paparazzi mcu0 timer functions - * - * Copied from autopilot (autopilot.sf.net) thanx alot Trammell - * - * Copyright (C) 2002 Trammell Hudson <hudson@rotomotion.com> - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi mcu0 timer functions + + Copied from autopilot (autopilot.sf.net) thanx alot Trammell + + Copyright (C) 2002 Trammell Hudson <hudson@rotomotion.com> + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef TIMER_H #define TIMER_H @@ -34,32 +34,33 @@ /* - * Enable Timer1 (16-bit) running at Clk/1 for the global system - * clock. This will be used for computing the servo pulse widths, - * PPM decoding, etc. - * - * Low frequency periodic tasks will be signaled by timer 0 - * running at Clk/1024. For 16 Mhz clock, this will be every - * 262144 microseconds, or 61 Hz. - */ -static inline void timer_init( void ) { + Enable Timer1 (16-bit) running at Clk/1 for the global system + clock. This will be used for computing the servo pulse widths, + PPM decoding, etc. + + Low frequency periodic tasks will be signaled by timer 0 + running at Clk/1024. For 16 Mhz clock, this will be every + 262144 microseconds, or 61 Hz. +*/ +static inline void timer_init( void ) +{ /* Timer0: Modem clock is started in modem.h in ctc mode*/ /* Timer1 @ Clk/1: System clock, ppm and servos */ - TCCR1A = 0x00; - TCCR1B = 0x01; + TCCR1A = 0x00; + TCCR1B = 0x01; /* Timer2 @ Clk/1024: Periodic clock */ - TCCR2 = 0x05; + TCCR2 = 0x05; } /* - * Retrieve the current time from the global clock in Timer1, - * disabling interrupts to avoid stomping on the TEMP register. - * If interrupts are already off, the non_atomic form can be used. - */ + Retrieve the current time from the global clock in Timer1, + disabling interrupts to avoid stomping on the TEMP register. + If interrupts are already off, the non_atomic form can be used. +*/ static inline uint16_t timer_now( void ) { @@ -74,14 +75,14 @@ timer_now_non_atomic( void ) /* - * Periodic tasks occur when Timer2 overflows. Check and unset - * the overflow bit. We cycle through four possible periodic states, - * so each state occurs every 30 Hz. - */ + Periodic tasks occur when Timer2 overflows. Check and unset + the overflow bit. We cycle through four possible periodic states, + so each state occurs every 30 Hz. +*/ static inline bool_t timer_periodic( void ) { - if( !bit_is_set( TIFR, TOV2 ) ) + if ( !bit_is_set( TIFR, TOV2 ) ) return FALSE; TIFR = 1 << TOV2; diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/uart.c b/bench/parallel/PapaBench/sw/airborne/autopilot/uart.c index b0c05d327c22ea69c2888d26b1258a5dfce03798..ed9f0d3b3f78c714a0516c715d3858efd43fe26f 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/uart.c +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/uart.c @@ -1,26 +1,26 @@ /* - * Paparazzi $Id: uart.c,v 1.3 2011-01-25 09:40:37 plazar Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi $Id: uart.c,v 1.3 2011-01-25 09:40:37 plazar Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #include <arch/signal.h> #include <arch/interrupt.h> #include <arch/io.h> @@ -36,105 +36,114 @@ static uint8_t tx_head1; /* next free in buf */ static volatile uint8_t tx_tail1; /* next char to send */ static uint8_t tx_buf1[ TX_BUF_SIZE ]; -void uart0_transmit(const unsigned char data ) { - if (UCSR0B & _BV(TXCIE)) { +void uart0_transmit( const unsigned char data ) +{ + if ( UCSR0B & _BV( TXCIE ) ) { /* we are waiting for the last char to be sent : buffering */ - if (tx_tail0 == tx_head0 + 1) { /* BUF_SIZE = 256 */ + if ( tx_tail0 == tx_head0 + 1 ) { /* BUF_SIZE = 256 */ /* Buffer is full (almost, but tx_head = tx_tail means "empty" */ return; } - tx_buf0[tx_head0] = data; + tx_buf0[ tx_head0 ] = data; tx_head0++; /* BUF_SIZE = 256 */ } else { /* Channel is free: just send */ UDR0 = data; - sbi(UCSR0B, TXCIE); + sbi( UCSR0B, TXCIE ); } } -void uart1_transmit(const unsigned char data ) { - if (UCSR1B & _BV(TXCIE)) { +void uart1_transmit( const unsigned char data ) +{ + if ( UCSR1B & _BV( TXCIE ) ) { /* we are waiting for the last char to be sent : buffering */ - if (tx_tail1 == tx_head1 + 1) { /* BUF_SIZE = 256 */ + if ( tx_tail1 == tx_head1 + 1 ) { /* BUF_SIZE = 256 */ /* Buffer is full (almost, but tx_head = tx_tail means "empty" */ return; } - tx_buf1[tx_head1] = data; + tx_buf1[ tx_head1 ] = data; tx_head1++; /* BUF_SIZE = 256 */ } else { /* Channel is free: just send */ UDR1 = data; - sbi(UCSR1B, TXCIE); + sbi( UCSR1B, TXCIE ); } } -void uart0_print_string(const uint8_t* s) { +void uart0_print_string( const uint8_t *s ) +{ uint8_t i = 0; - _Pragma("loopbound min 0 max 0" ) - while (s[i]) { - uart0_transmit(s[i]); + _Pragma( "loopbound min 0 max 0" ) + while ( s[ i ] ) { + uart0_transmit( s[ i ] ); i++; } } -void uart0_print_hex(const uint8_t c) { - const uint8_t hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; - uint8_t high = (c & 0xF0)>>4; +void uart0_print_hex( const uint8_t c ) +{ + const uint8_t hex[ 16 ] = { '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' + }; + uint8_t high = ( c & 0xF0 ) >> 4; uint8_t low = c & 0x0F; - uart0_transmit(hex[high]); - uart0_transmit(hex[low]); + uart0_transmit( hex[ high ] ); + uart0_transmit( hex[ low ] ); } -SIGNAL(SIG_UART0_TRANS) { - if (tx_head0 == tx_tail0) { +SIGNAL( SIG_UART0_TRANS ) +{ + if ( tx_head0 == tx_tail0 ) { /* Nothing more to send */ - cbi(UCSR0B, TXCIE); /* disable interrupt */ + cbi( UCSR0B, TXCIE ); /* disable interrupt */ } else { - UDR0 = tx_buf0[tx_tail0]; + UDR0 = tx_buf0[ tx_tail0 ]; tx_tail0++; /* warning tx_buf_len is 256 */ } } -SIGNAL(SIG_UART1_TRANS) { - if (tx_head1 == tx_tail1) { +SIGNAL( SIG_UART1_TRANS ) +{ + if ( tx_head1 == tx_tail1 ) { /* Nothing more to send */ - cbi(UCSR1B, TXCIE); /* disable interrupt */ + cbi( UCSR1B, TXCIE ); /* disable interrupt */ } else { - UDR1 = tx_buf1[tx_tail1]; + UDR1 = tx_buf1[ tx_tail1 ]; tx_tail1++; /* warning tx_buf_len is 256 */ } } -void uart0_init( void ) { +void uart0_init( void ) +{ /* Baudrate is 38.4k */ - UBRR0H = 0; + UBRR0H = 0; UBRR0L = 25; // 38.4 // UBRR0L = 103; //9600 - /* single speed */ - UCSR0A = 0; - /* Enable receiver and transmitter */ - UCSR0B = _BV(RXEN) | _BV(TXEN); - /* Set frame format: 8data, 1stop bit */ - UCSR0C = _BV(UCSZ1) | _BV(UCSZ0); + /* single speed */ + UCSR0A = 0; + /* Enable receiver and transmitter */ + UCSR0B = _BV( RXEN ) | _BV( TXEN ); + /* Set frame format: 8data, 1stop bit */ + UCSR0C = _BV( UCSZ1 ) | _BV( UCSZ0 ); /* Enable uart receive interrupt */ - sbi(UCSR0B, RXCIE ); + sbi( UCSR0B, RXCIE ); } -void uart1_init( void ) { +void uart1_init( void ) +{ /* Baudrate is 38.4k */ - UBRR1H = 0; + UBRR1H = 0; UBRR1L = 25; // 38.4 // UBRR1L = 103; //9600 - /* single speed */ - UCSR1A = 0; - /* Enable receiver and transmitter */ - UCSR1B = _BV(RXEN) | _BV(TXEN); - /* Set frame format: 8data, 1stop bit */ - UCSR1C = _BV(UCSZ1) | _BV(UCSZ0); + /* single speed */ + UCSR1A = 0; + /* Enable receiver and transmitter */ + UCSR1B = _BV( RXEN ) | _BV( TXEN ); + /* Set frame format: 8data, 1stop bit */ + UCSR1C = _BV( UCSZ1 ) | _BV( UCSZ0 ); /* Enable uart receive interrupt */ - sbi(UCSR1B, RXCIE ); + sbi( UCSR1B, RXCIE ); } diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/uart.h b/bench/parallel/PapaBench/sw/airborne/autopilot/uart.h index 7028c0dbfc776fc283ca2e9c37dba08bafd2554a..eb09b80da9a1b7bab585748735ce9c5170686038 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/uart.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/uart.h @@ -1,38 +1,38 @@ /* - * Paparazzi $Id: uart.h,v 1.2 2011-01-18 14:55:52 moellmer Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi $Id: uart.h,v 1.2 2011-01-18 14:55:52 moellmer Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef _UART_H_ #define _UART_H_ #include <inttypes.h> -extern void uart0_init(void); -extern void uart1_init(void); +extern void uart0_init( void ); +extern void uart1_init( void ); -extern void uart0_print_string(const uint8_t*); -extern void uart0_print_hex(const uint8_t); -void uart0_transmit(const uint8_t); -void uart1_transmit(const uint8_t); +extern void uart0_print_string( const uint8_t * ); +extern void uart0_print_hex( const uint8_t ); +void uart0_transmit( const uint8_t ); +void uart1_transmit( const uint8_t ); #define ReceiveUart0(cb) \ SIGNAL( SIG_UART0_RECV ) { \ diff --git a/bench/parallel/PapaBench/sw/airborne/autopilot/ubx.h b/bench/parallel/PapaBench/sw/airborne/autopilot/ubx.h index 47374f765d342067b27e7f2c274164442b94e5e6..e5d628c52fe8ab5698c99ae5a0e4d74bd75e7e87 100644 --- a/bench/parallel/PapaBench/sw/airborne/autopilot/ubx.h +++ b/bench/parallel/PapaBench/sw/airborne/autopilot/ubx.h @@ -1,30 +1,30 @@ /* - * Paparazzi autopilot $Id: ubx.h,v 1.1 2011-01-18 12:48:39 moellmer Exp $ - * - * Copyright (C) 2004 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi autopilot $Id: ubx.h,v 1.1 2011-01-18 12:48:39 moellmer Exp $ + + Copyright (C) 2004 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ /* - * UBX protocol specific code - * + UBX protocol specific code + */ diff --git a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/adc_fbw.c b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/adc_fbw.c index 98c3c22fd40899d3e1ef7927b9655138974f4c9e..0b150c1fd9cc4e09d407c111c4959323663b55df 100644 --- a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/adc_fbw.c +++ b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/adc_fbw.c @@ -1,29 +1,29 @@ /* - * Paparazzi fly by wire adc functions - * - * Copied from autopilot (autopilot.sf.net) thanx alot Trammell - * - * Copyright (C) 2002 Trammell Hudson <hudson@rotomotion.com> - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi fly by wire adc functions + + Copied from autopilot (autopilot.sf.net) thanx alot Trammell + + Copyright (C) 2002 Trammell Hudson <hudson@rotomotion.com> + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ //// ADC3 MVSUP //// ADC6 MVSERVO @@ -38,78 +38,79 @@ #if defined CTL_BRD_V1_2 || defined CTL_BRD_V1_2_1 -#define VOLTAGE_TIME 0x07 -#define ANALOG_PORT PORTC -#define ANALOG_PORT_DIR DDRC +#define VOLTAGE_TIME 0x07 +#define ANALOG_PORT PORTC +#define ANALOG_PORT_DIR DDRC -// +// #define ANALOG_VREF _BV(REFS0) | _BV(REFS1) -uint16_t adc_samples[ NB_ADC ]; +uint16_t adc_samples[ NB_ADC ]; -static struct adc_buf* buffers[NB_ADC]; +static struct adc_buf *buffers[ NB_ADC ]; -void fbw_adc_buf_channel(uint8_t adc_channel, struct adc_buf* s) { - buffers[adc_channel] = s; +void fbw_adc_buf_channel( uint8_t adc_channel, struct adc_buf *s ) +{ + buffers[ adc_channel ] = s; } -void +void fbw_adc_init( void ) { uint8_t i; /* Ensure that our port is for input with no pull-ups */ - ANALOG_PORT = 0x00; - ANALOG_PORT_DIR = 0x00; + ANALOG_PORT = 0x00; + ANALOG_PORT_DIR = 0x00; /* Select our external voltage ref */ - ADMUX = ANALOG_VREF; + ADMUX = ANALOG_VREF; /* Select out clock, turn on the ADC interrupt and start conversion */ ADCSRA = 0 - | VOLTAGE_TIME - | _BV(ADEN ) - | _BV(ADIE ) - | _BV(ADSC ); + | VOLTAGE_TIME + | _BV( ADEN ) + | _BV( ADIE ) + | _BV( ADSC ); /* Init to 0 (usefull ?) */ - _Pragma("loopbound min 8 max 8") - for(i = 0; i < NB_ADC; i++) - buffers[i] = (struct adc_buf*)0; + _Pragma( "loopbound min 8 max 8" ) + for ( i = 0; i < NB_ADC; i++ ) + buffers[ i ] = ( struct adc_buf * )0; } /** - * Called when the voltage conversion is finished - * - * 8.913kHz on mega128@16MHz 1kHz/channel ?? + Called when the voltage conversion is finished + + 8.913kHz on mega128@16MHz 1kHz/channel ?? */ SIGNAL( SIG_ADC ) { - uint8_t adc_input = ADMUX & 0x7; - struct adc_buf* buf = buffers[adc_input]; + uint8_t adc_input = ADMUX & 0x7; + struct adc_buf *buf = buffers[ adc_input ]; uint16_t adc_value = ADCW; /* Store result */ adc_samples[ adc_input ] = adc_value; - if (buf) { + if ( buf ) { uint8_t new_head = buf->head + 1; - if (new_head >= AV_NB_SAMPLE) new_head = 0; - buf->sum -= buf->values[new_head]; - buf->values[new_head] = adc_value; + if ( new_head >= AV_NB_SAMPLE ) new_head = 0; + buf->sum -= buf->values[ new_head ]; + buf->values[ new_head ] = adc_value; buf->sum += adc_value; - buf->head = new_head; + buf->head = new_head; } /* Find the next input */ adc_input++; - if (adc_input == 4) + if ( adc_input == 4 ) adc_input = 6; // ADC 4 and 5 for i2c - if( adc_input >= 8 ) { + if ( adc_input >= 8 ) { adc_input = 0; -#ifdef CTL_BRD_V1_2 + #ifdef CTL_BRD_V1_2 adc_input = 1; // WARNING ADC0 is for rservo driver reset on v1.2.0 -#endif /* CTL_BRD_V1_2 */ + #endif /* CTL_BRD_V1_2 */ } /* Select it */ ADMUX = adc_input | ANALOG_VREF; diff --git a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/adc_fbw.h b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/adc_fbw.h index 1838d97a9e7937ab2eb28acdbdf0e705c70a960c..f01f476573c0cef3d13c8649d7081c8cf36f2bef 100644 --- a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/adc_fbw.h +++ b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/adc_fbw.h @@ -1,29 +1,29 @@ /* - * Paparazzi fly by wire adc functions - * - * Copied from autopilot (autopilot.sf.net) thanx alot Trammell - * - * Copyright (C) 2002 Trammell Hudson <hudson@rotomotion.com> - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi fly by wire adc functions + + Copied from autopilot (autopilot.sf.net) thanx alot Trammell + + Copyright (C) 2002 Trammell Hudson <hudson@rotomotion.com> + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef _ADC_H_ #define _ADC_H_ @@ -38,7 +38,7 @@ #define NB_ADC 8 /* Array containing the last measured value */ -extern uint16_t adc_samples[ NB_ADC ]; +extern uint16_t adc_samples[ NB_ADC ]; void adc_init( void ); @@ -46,16 +46,16 @@ void adc_init( void ); struct adc_buf { uint16_t sum; - uint16_t values[AV_NB_SAMPLE]; + uint16_t values[ AV_NB_SAMPLE ]; uint8_t head; }; /* Facility to store last values in a circular buffer for a specific channel: allocate a (struct adc_buf) and register it with the following function */ -void adc_buf_channel(uint8_t adc_channel, struct adc_buf* s); +void adc_buf_channel( uint8_t adc_channel, struct adc_buf *s ); void fbw_adc_init( void ); -void fbw_adc_buf_channel(uint8_t adc_channel, struct adc_buf* s); +void fbw_adc_buf_channel( uint8_t adc_channel, struct adc_buf *s ); #endif /* CTL_BRD_V1_2 || CTL_BRD_V1_2 */ diff --git a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/link_autopilot.h b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/link_autopilot.h index 16b26ab8a54a4f5a81891d2ef75aae2ec544a5a0..2f5a292bba36a1147f76d077f7a212e25adda481 100644 --- a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/link_autopilot.h +++ b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/link_autopilot.h @@ -1,25 +1,25 @@ /* $Id: link_autopilot.h,v 1.1 2011-01-18 12:42:42 moellmer Exp $ - * - * (c) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + + (c) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef LINK_AUTOPILOT_H #define LINK_AUTOPILOT_H @@ -31,9 +31,9 @@ #include "airframe.h" /* - * System clock in MHz. - */ -#define CLOCK 16 + System clock in MHz. +*/ +#define CLOCK 16 typedef int16_t pprz_t; // type of commands @@ -42,7 +42,7 @@ typedef int16_t pprz_t; // type of commands #define MIN_PPRZ -MAX_PPRZ struct inter_mcu_msg { - int16_t channels[RADIO_CTL_NB]; + int16_t channels[ RADIO_CTL_NB ]; uint8_t ppm_cpt; uint8_t status; uint8_t nb_err; @@ -62,8 +62,8 @@ struct inter_mcu_msg { #define TRESHOLD_MANUAL_PPRZ (MIN_PPRZ / 2) -void test_ppm_task(void); -void check_mega128_values_task(void); -void send_data_to_autopilot_task(void); -void check_failsafe_task(void); +void test_ppm_task( void ); +void check_mega128_values_task( void ); +void send_data_to_autopilot_task( void ); +void check_failsafe_task( void ); #endif // LINK_AUTOPILOT_H diff --git a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/main.c b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/main.c index 6268fe1bed5c0764aba1f4e7a6f8fcdc4289cf39..0a3f4743ebe11aac6a7a579edfba476b60613481 100644 --- a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/main.c +++ b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/main.c @@ -1,26 +1,26 @@ /* - * Paparazzi $Id: main.c,v 1.4 2011-01-25 10:42:14 plazar Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi $Id: main.c,v 1.4 2011-01-25 10:42:14 plazar Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #include <inttypes.h> #include <io.h> @@ -49,7 +49,7 @@ static uint8_t time_since_last_mega128; static uint16_t time_since_last_ppm; bool_t radio_ok, mega128_ok, radio_really_lost; -static const pprz_t failsafe[] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const pprz_t failsafe[ ] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; static uint8_t ppm_cpt, last_ppm_cpt; @@ -62,70 +62,71 @@ static uint8_t ppm_cpt, last_ppm_cpt; /* uart_transmit(7); */ /* uart_transmit(7); */ /* for (i=0; i<sizeof(struct inter_mcu_msg); i++) */ -/* uart_transmit(((uint8_t*)&to_mega128)[i]); */ +/* uart_transmit(((uint8_t*)&to_mega128)[ i ]); */ /* uart_transmit('\n'); */ /* uart_transmit(7); */ /* uart_transmit(7); */ /* uint8_t i; */ /* for(i = 0; i < RADIO_CTL_NB; i++) { */ -/* extern uint16_t ppm_pulses[]; */ -/* uart_transmit(ppm_pulses[i]>>8); */ -/* uart_transmit(ppm_pulses[i] & 0xff); */ +/* extern uint16_t ppm_pulses[ ]; */ +/* uart_transmit(ppm_pulses[ i ]>>8); */ +/* uart_transmit(ppm_pulses[ i ] & 0xff); */ /* } */ /* uart_transmit('\n'); */ /* } */ /* Prepare data to be sent to mcu0 */ -static void to_autopilot_from_last_radio (void) { +static void to_autopilot_from_last_radio ( void ) +{ uint8_t i; - _Pragma("loopbound min 9 max 9") - for(i = 0; i < RADIO_CTL_NB; i++) - to_mega128.channels[i] = last_radio[i]; - to_mega128.status = (radio_ok ? _BV(STATUS_RADIO_OK) : 0); - to_mega128.status |= (radio_really_lost ? _BV(RADIO_REALLY_LOST) : 0); - if (last_radio_contains_avg_channels) { - to_mega128.status |= _BV(AVERAGED_CHANNELS_SENT); + _Pragma( "loopbound min 9 max 9" ) + for ( i = 0; i < RADIO_CTL_NB; i++ ) + to_mega128.channels[ i ] = last_radio[ i ]; + to_mega128.status = ( radio_ok ? _BV( STATUS_RADIO_OK ) : 0 ); + to_mega128.status |= ( radio_really_lost ? _BV( RADIO_REALLY_LOST ) : 0 ); + if ( last_radio_contains_avg_channels ) { + to_mega128.status |= _BV( AVERAGED_CHANNELS_SENT ); last_radio_contains_avg_channels = FALSE; } to_mega128.ppm_cpt = last_ppm_cpt; -#ifndef CTL_BRD_V1_1 - to_mega128.vsupply = VoltageOfAdc(vsupply_adc_buf.sum/AV_NB_SAMPLE) * 10; -#else + #ifndef CTL_BRD_V1_1 + to_mega128.vsupply = VoltageOfAdc( vsupply_adc_buf.sum / AV_NB_SAMPLE ) * 10; + #else to_mega128.vsupply = 0; -#endif + #endif } -void _Pragma("entrypoint") send_data_to_autopilot_task(void) +void _Pragma( "entrypoint" ) send_data_to_autopilot_task( void ) { -#ifndef WCET_ANALYSIS - if ( !SpiIsSelected() && spi_was_interrupted ) - { - spi_was_interrupted = FALSE; - to_autopilot_from_last_radio(); - spi_reset(); - } -#endif + #ifndef WCET_ANALYSIS + if ( !SpiIsSelected() && spi_was_interrupted ) { + spi_was_interrupted = FALSE; + to_autopilot_from_last_radio(); + spi_reset(); + } + #endif } #ifdef PAPABENCH_SINGLE - extern uint8_t _1Hz; - extern uint8_t _20Hz; +extern uint8_t _1Hz; +extern uint8_t _20Hz; #else - static uint8_t _1Hz; - static uint8_t _20Hz; +static uint8_t _1Hz; +static uint8_t _20Hz; #endif -void fbw_init(void) { +void fbw_init( void ) +{ uart_init_tx(); - uart_print_string("FBW Booting $Id: main.c,v 1.4 2011-01-25 10:42:14 plazar Exp $\n"); + uart_print_string( "FBW Booting $Id: main.c,v 1.4 2011-01-25 10:42:14 plazar Exp $\n" ); -#ifndef CTL_BRD_V1_1 + #ifndef CTL_BRD_V1_1 fbw_adc_init(); - fbw_adc_buf_channel(3, &vsupply_adc_buf); - fbw_adc_buf_channel(6, &vservos_adc_buf); -#endif + fbw_adc_buf_channel( 3, &vsupply_adc_buf ); + fbw_adc_buf_channel( 6, &vservos_adc_buf ); + #endif timer_init(); servo_init(); ppm_init(); @@ -133,107 +134,86 @@ void fbw_init(void) { //sei(); //FN } -void fbw_schedule(void) { - if (time_since_last_mega128 < STALLED_TIME) - time_since_last_mega128++; - if (time_since_last_ppm < REALLY_STALLED_TIME) - time_since_last_ppm++; - if (_1Hz == 0) { - last_ppm_cpt = ppm_cpt; - ppm_cpt = 0; - } - test_ppm_task(); - check_mega128_values_task(); - send_data_to_autopilot_task(); - check_failsafe_task(); - if (_20Hz >= 3) - servo_transmit(); +void fbw_schedule( void ) +{ + if ( time_since_last_mega128 < STALLED_TIME ) + time_since_last_mega128++; + if ( time_since_last_ppm < REALLY_STALLED_TIME ) + time_since_last_ppm++; + if ( _1Hz == 0 ) { + last_ppm_cpt = ppm_cpt; + ppm_cpt = 0; + } + test_ppm_task(); + check_mega128_values_task(); + send_data_to_autopilot_task(); + check_failsafe_task(); + if ( _20Hz >= 3 ) + servo_transmit(); } #ifndef PAPABENCH_SINGLE int main( void ) { - fbw_init(); -#ifndef NO_MAINLOOP - while( 1 ) - { -#endif - fbw_schedule(); - if(timer_periodic()) - { + fbw_init(); + #ifndef NO_MAINLOOP + while ( 1 ) { + #endif + fbw_schedule(); + if ( timer_periodic() ) { _1Hz++; _20Hz++; - if (_1Hz >= 60) - { - _1Hz = 0; - } - if (_20Hz >= 3) - { - _20Hz = 0; - } + if ( _1Hz >= 60 ) + _1Hz = 0; + if ( _20Hz >= 3 ) + _20Hz = 0; } -#ifndef NO_MAINLOOP - } -#endif + #ifndef NO_MAINLOOP + } + #endif return 0; } #endif -void _Pragma("entrypoint") test_ppm_task(void) +void _Pragma( "entrypoint" ) test_ppm_task( void ) { - if( ppm_valid ) - { - ppm_valid = FALSE; - ppm_cpt++; - radio_ok = TRUE; - radio_really_lost = FALSE; - time_since_last_ppm = 0; - last_radio_from_ppm(); - if (last_radio_contains_avg_channels) - { - mode = MODE_OF_PPRZ(last_radio[RADIO_MODE]); - } - if (mode == MODE_MANUAL) - { - servo_set(last_radio); - } - } - else if (mode == MODE_MANUAL && radio_really_lost) - { + if ( ppm_valid ) { + ppm_valid = FALSE; + ppm_cpt++; + radio_ok = TRUE; + radio_really_lost = FALSE; + time_since_last_ppm = 0; + last_radio_from_ppm(); + if ( last_radio_contains_avg_channels ) + mode = MODE_OF_PPRZ( last_radio[ RADIO_MODE ] ); + if ( mode == MODE_MANUAL ) + servo_set( last_radio ); + } else + if ( mode == MODE_MANUAL && radio_really_lost ) mode = MODE_AUTO; - } - if (time_since_last_ppm >= STALLED_TIME) - { - radio_ok = FALSE; - } - if (time_since_last_ppm >= REALLY_STALLED_TIME) - { - radio_really_lost = TRUE; - } + if ( time_since_last_ppm >= STALLED_TIME ) + radio_ok = FALSE; + if ( time_since_last_ppm >= REALLY_STALLED_TIME ) + radio_really_lost = TRUE; } -void _Pragma("entrypoint") check_failsafe_task(void) +void _Pragma( "entrypoint" ) check_failsafe_task( void ) { - if ((mode == MODE_MANUAL && !radio_ok) || - (mode == MODE_AUTO && !mega128_ok)) - { - servo_set(failsafe); - } + if ( ( mode == MODE_MANUAL && !radio_ok ) || + ( mode == MODE_AUTO && !mega128_ok ) ) + servo_set( failsafe ); } -void _Pragma("entrypoint") check_mega128_values_task(void) +void _Pragma( "entrypoint" ) check_mega128_values_task( void ) { -#ifndef WCET_ANALYSIS - if ( !SpiIsSelected() && spi_was_interrupted ) - { - if (mega128_receive_valid) - { + #ifndef WCET_ANALYSIS + if ( !SpiIsSelected() && spi_was_interrupted ) { + if ( mega128_receive_valid ) { time_since_last_mega128 = 0; mega128_ok = TRUE; - if (mode == MODE_AUTO) - servo_set(from_mega128.channels); + if ( mode == MODE_AUTO ) + servo_set( from_mega128.channels ); } } - if (time_since_last_mega128 == STALLED_TIME) { + if ( time_since_last_mega128 == STALLED_TIME ) mega128_ok = FALSE; - } -#endif + #endif } diff --git a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/ppm.c b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/ppm.c index 5c8ca8c12667183b47069e4d247eea7331628ea2..4c0fcf4a7d3dcf0fdf8f5909388a0a662ed53ec2 100644 --- a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/ppm.c +++ b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/ppm.c @@ -1,27 +1,27 @@ /* $Id: ppm.c,v 1.1 2011-01-18 12:42:42 moellmer Exp $ - * Copied from autopilot (autopilot.sf.net) thanx alot Trammell - * - * (c) 2003 Trammell Hudson <hudson@rotomotion.com> - * (c) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Copied from autopilot (autopilot.sf.net) thanx alot Trammell + + (c) 2003 Trammell Hudson <hudson@rotomotion.com> + (c) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #include "radio.h" #include "ppm.h" @@ -29,20 +29,20 @@ #define AVERAGING_PERIOD (PPM_FREQ/4) /* - * Pulse width is computed as the difference between now and the - * previous pulse. If no pulse has been received between then and - * now, the time of the last pulse will be equal to the last pulse - * we measured. Unfortunately, the Input Capture Flag (ICF1) will - * not be set since the interrupt routine disables it. - * - * Sync pulses are timed with Timer2, which runs at Clk/1024. This - * is slow enough at both 4 and 8 Mhz to measure the lengthy (10ms - * or longer) pulse. - * - * Otherwise, compute the pulse width with the 16-bit timer1, - * push the pulse width onto the stack and increment the - * pulse counter until we have received eight pulses. - */ + Pulse width is computed as the difference between now and the + previous pulse. If no pulse has been received between then and + now, the time of the last pulse will be equal to the last pulse + we measured. Unfortunately, the Input Capture Flag (ICF1) will + not be set since the interrupt routine disables it. + + Sync pulses are timed with Timer2, which runs at Clk/1024. This + is slow enough at both 4 and 8 Mhz to measure the lengthy (10ms + or longer) pulse. + + Otherwise, compute the pulse width with the 16-bit timer1, + push the pulse width onto the stack and increment the + pulse counter until we have received eight pulses. +*/ uint16_t ppm_pulses[ PPM_NB_PULSES ]; pprz_t last_radio[ PPM_NB_PULSES ]; @@ -50,59 +50,58 @@ pprz_t avg_last_radio[ PPM_NB_PULSES ]; bool_t last_radio_contains_avg_channels = FALSE; volatile bool_t ppm_valid; -/* MC3030, Trame PPM7: 25ms, 10.4 au neutre, +/* MC3030, Trame PPM7: 25ms, 10.4 au neutre, sync pulse = 16.2ms with low value on every channels */ - - + + #define RestartPpmCycle() { state = 0; sync_start = TCNT2; return; } #ifdef PAPABENCH_SINGLE - SIGNAL(SIG_SPM_READY) +SIGNAL( SIG_SPM_READY ) #else - SIGNAL( SIG_INPUT_CAPTURE1 ) +SIGNAL( SIG_INPUT_CAPTURE1 ) #endif { - static uint16_t last; - uint16_t this; - uint16_t width; - static uint8_t state; - static uint8_t sync_start; - - this = ICR1; - width = this - last; - last = this; - - if( state == 0 ) { - uint8_t end = TCNT2; - uint8_t diff = (end - sync_start); + static uint16_t last; + uint16_t this; + uint16_t width; + static uint8_t state; + static uint8_t sync_start; + + this = ICR1; + width = this - last; + last = this; + + if ( state == 0 ) { + uint8_t end = TCNT2; + uint8_t diff = ( end - sync_start ); sync_start = end; - /* The frame period of the mc3030 seems to be 25ms. - * One pulse lasts from 1.05ms to 2.150ms. - * Sync pulse is at least 7ms : (7000*CLOCK)/1024 = 109 - */ - if( diff > (uint8_t)(((uint32_t)(7000ul*CLOCK))/1024ul) ) { + /* The frame period of the mc3030 seems to be 25ms. + One pulse lasts from 1.05ms to 2.150ms. + Sync pulse is at least 7ms : (7000*CLOCK)/1024 = 109 + */ + if ( diff > ( uint8_t )( ( ( uint32_t )( 7000ul * CLOCK ) ) / 1024ul ) ) state = 1; - } - } - else { + } else { /* Read a data pulses */ - if( width < 700ul*CLOCK || width > 2300ul*CLOCK) + if ( width < 700ul * CLOCK || width > 2300ul * CLOCK ) RestartPpmCycle(); - ppm_pulses[state - 1] = width; + ppm_pulses[ state - 1 ] = width; - if (state >= PPM_NB_PULSES) { - ppm_valid = 1; + if ( state >= PPM_NB_PULSES ) { + ppm_valid = 1; RestartPpmCycle(); - } else + } else state++; } return; } /* Copy from the ppm receiving buffer to the buffer sent to mcu0 */ -void last_radio_from_ppm() { +void last_radio_from_ppm() +{ LastRadioFromPpm() } diff --git a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/ppm.h b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/ppm.h index a2d036c9cfdd759807927e1086557714d9c26a5a..fc22b31d19898bddf895fb6a07b769a3de81e60a 100644 --- a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/ppm.h +++ b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/ppm.h @@ -1,45 +1,45 @@ /* $Id: ppm.h,v 1.2 2011-01-18 14:55:53 moellmer Exp $ - * - * Decoder for the trainer ports or hacked receivers for both - * Futaba and JR formats. The ppm_valid flag is set whenever - * a valid frame is received. - * - * Pulse widths are stored as unscaled 16-bit values in ppm_pulses[]. - * If you require actual microsecond values, divide by CLOCK. - * For an 8 Mhz clock and typical servo values, these will range - * from 0x1F00 to 0x4000. - * - * Copied from autopilot (autopilot.sf.net) thanx alot Trammell - * - * (c) 2002 Trammell Hudson <hudson@rotomotion.com> - * (c) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + + Decoder for the trainer ports or hacked receivers for both + Futaba and JR formats. The ppm_valid flag is set whenever + a valid frame is received. + + Pulse widths are stored as unscaled 16-bit values in ppm_pulses[ ]. + If you require actual microsecond values, divide by CLOCK. + For an 8 Mhz clock and typical servo values, these will range + from 0x1F00 to 0x4000. + + Copied from autopilot (autopilot.sf.net) thanx alot Trammell + + (c) 2002 Trammell Hudson <hudson@rotomotion.com> + (c) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef PPM_H #define PPM_H /** - * Receiver types - */ + Receiver types +*/ #define RXFUTABA 0 #define RXJR 1 @@ -59,37 +59,37 @@ #define PPM_PIN PB0 /* - * PPM pulses are falling edge clocked on the ICP, which records - * the state of the global clock. We do not use any noise - * canceling features. - * - * JR might be rising edge clocked; set that as an option - */ + PPM pulses are falling edge clocked on the ICP, which records + the state of the global clock. We do not use any noise + canceling features. + + JR might be rising edge clocked; set that as an option +*/ static inline void ppm_init( void ) { -#if PPM_RX_TYPE == RXFUTABA + #if PPM_RX_TYPE == RXFUTABA cbi( TCCR1B, ICES1 ); -#elif PPM_RX_TYPE == RXJR + #elif PPM_RX_TYPE == RXJR sbi( TCCR1B, ICES1 ); -#else -# error "ppm.h: Unknown receiver type in PPM_RX_TYPE" -#endif + #else +# error "ppm.h: Unknown receiver type in PPM_RX_TYPE" + #endif /* No noise cancelation */ sbi( TCCR1B, ICNC1 ); - + /* Set ICP to input, no internal pull up */ - cbi( PPM_DDR, PPM_PIN); - + cbi( PPM_DDR, PPM_PIN ); + /* Enable interrupt on input capture */ sbi( TIMSK, TICIE1 ); } #define PPM_NB_PULSES RADIO_CTL_NB -extern volatile bool_t ppm_valid; -extern pprz_t last_radio[PPM_NB_PULSES]; +extern volatile bool_t ppm_valid; +extern pprz_t last_radio[ PPM_NB_PULSES ]; extern bool_t last_radio_contains_avg_channels; @@ -98,5 +98,5 @@ extern bool_t last_radio_contains_avg_channels; #define MODE_OF_PPRZ(mode) ((mode) < TRESHOLD_MANUAL_PPRZ ? MODE_MANUAL : MODE_AUTO) -extern void last_radio_from_ppm(void); +extern void last_radio_from_ppm( void ); #endif diff --git a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/servo.c b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/servo.c index 279dc452bb1693c9812c0362b5ff0a5d10c5fbac..e3143511334cbf4a44af79eb8343bab219911b4e 100644 --- a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/servo.c +++ b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/servo.c @@ -1,27 +1,27 @@ /* $Id: servo.c,v 1.4 2011-01-25 10:05:41 plazar Exp $ - * - * Copied from autopilot (autopilot.sf.net) thanx alot Trammell - * (c) 2002 Trammell Hudson <hudson@rotomotion.com> - * (c) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + + Copied from autopilot (autopilot.sf.net) thanx alot Trammell + (c) 2002 Trammell Hudson <hudson@rotomotion.com> + (c) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #include <arch/io.h> @@ -35,16 +35,16 @@ /* - * Paparazzi boards have one 4017 servo driver. - * It is driven by OCR1A (PB1) with reset on PORTD5. - */ + Paparazzi boards have one 4017 servo driver. + It is driven by OCR1A (PB1) with reset on PORTD5. +*/ #define _4017_NB_CHANNELS 10 #ifdef CTL_BRD_V1_1 #define _4017_RESET_PORT PORTD #define _4017_RESET_DDR DDRD #define _4017_RESET_PIN 5 -#endif /* CTL_BRD_V1_1 */ +#endif /* CTL_BRD_V1_1 */ #ifdef CTL_BRD_V1_2 #define _4017_RESET_PORT PORTC @@ -62,50 +62,50 @@ #define _4017_CLOCK_DDR DDRB #define _4017_CLOCK_PIN PB1 -#define SERVO_OCR OCR1A -#define SERVO_ENABLE OCIE1A -#define SERVO_FLAG OCF1A -#define SERVO_FORCE FOC1A -#define SERVO_COM0 COM1A0 -#define SERVO_COM1 COM1A1 +#define SERVO_OCR OCR1A +#define SERVO_ENABLE OCIE1A +#define SERVO_FLAG OCF1A +#define SERVO_FORCE FOC1A +#define SERVO_COM0 COM1A0 +#define SERVO_COM1 COM1A1 /* Following macro is required since the compiler does not solve at compile-time indexation in a known array with a known index */ #define SERVO_NEUTRAL_(i) SERVOS_NEUTRALS_ ## i #define SERVO_NEUTRAL(i) (SERVO_NEUTRAL_(i)*CLOCK) -#define SERVO_NEUTRAL_I(i) (((int[])SERVOS_NEUTRALS[i])*CLOCK) -#define SERVO_MIN_I(i) (((int[])SERVOS_MINS[i])*CLOCK) +#define SERVO_NEUTRAL_I(i) (((int[ ])SERVOS_NEUTRALS[ i ])*CLOCK) +#define SERVO_MIN_I(i) (((int[ ])SERVOS_MINS[ i ])*CLOCK) #define SERVO_MIN (SERVO_MIN_US*CLOCK) #define SERVO_MAX (SERVO_MAX_US*CLOCK) #define ChopServo(x) ((x) < SERVO_MIN ? SERVO_MIN : ((x) > SERVO_MAX ? SERVO_MAX : (x))) /* holds the servo pulses width in clock ticks */ -static uint16_t servo_widths[_4017_NB_CHANNELS]; +static uint16_t servo_widths[ _4017_NB_CHANNELS ]; /* - * We use the output compare registers to generate our servo pulses. - * These should be connected to a decade counter that routes the - * pulses to the appropriate servo. - * - * Initialization involves: - * - * - Reseting the decade counters - * - Writing the first pulse width to the counters - * - Setting output compare to set the clock line by calling servo_enable() - * - Bringing down the reset lines - * - * Ideally, you can use two decade counters to drive 20 servos. - */ + We use the output compare registers to generate our servo pulses. + These should be connected to a decade counter that routes the + pulses to the appropriate servo. + + Initialization involves: + + - Reseting the decade counters + - Writing the first pulse width to the counters + - Setting output compare to set the clock line by calling servo_enable() + - Bringing down the reset lines + + Ideally, you can use two decade counters to drive 20 servos. +*/ void servo_init( void ) { - uint8_t i; + uint8_t i; /* Configure the reset and clock lines */ - _4017_RESET_DDR |= _BV(_4017_RESET_PIN); - _4017_CLOCK_DDR |= _BV(_4017_CLOCK_PIN); + _4017_RESET_DDR |= _BV( _4017_RESET_PIN ); + _4017_CLOCK_DDR |= _BV( _4017_CLOCK_PIN ); /* Reset the decade counter */ sbi( _4017_RESET_PORT, _4017_RESET_PIN ); @@ -114,43 +114,43 @@ servo_init( void ) cbi( _4017_CLOCK_PORT, _4017_CLOCK_PIN ); /* Set all servos at their midpoints */ - _Pragma("loopbound min 10 max 10") - for( i=0 ; i < _4017_NB_CHANNELS ; i++ ) - // servo_widths[i] = SERVO_MIN; - servo_widths[i] = (SERVO_MIN+SERVO_MAX)/2; - + _Pragma( "loopbound min 10 max 10" ) + for ( i = 0 ; i < _4017_NB_CHANNELS ; i++ ) + // servo_widths[ i ] = SERVO_MIN; + servo_widths[ i ] = ( SERVO_MIN + SERVO_MAX ) / 2; + /* Set servos to go off some long time from now */ - SERVO_OCR = 32768ul; + SERVO_OCR = 32768ul; /* - * Configure output compare to toggle the output bits. - */ - TCCR1A |= _BV(SERVO_COM0 ); - + Configure output compare to toggle the output bits. + */ + TCCR1A |= _BV( SERVO_COM0 ); + /* Clear the interrupt flags in case they are set */ - TIFR = _BV(SERVO_FLAG); + TIFR = _BV( SERVO_FLAG ); /* Unassert the decade counter reset to start it running */ cbi( _4017_RESET_PORT, _4017_RESET_PIN ); /* Enable our output compare interrupts */ - TIMSK |= _BV(SERVO_ENABLE ); + TIMSK |= _BV( SERVO_ENABLE ); } -/* - * Interrupt routine - * - * write the next pulse width to OCR register and - * assert the servo signal. It will be cleared by - * the following compare match. - */ +/* + Interrupt routine + + write the next pulse width to OCR register and + assert the servo signal. It will be cleared by + the following compare match. +*/ SIGNAL( SIG_OUTPUT_COMPARE1A ) { static uint8_t servo = 0; uint16_t width; - if (servo >= _4017_NB_CHANNELS) { + if ( servo >= _4017_NB_CHANNELS ) { sbi( _4017_RESET_PORT, _4017_RESET_PIN ); servo = 0; // FIXME: 500 ns required by 4017 reset ???? why does it work without! @@ -158,39 +158,43 @@ SIGNAL( SIG_OUTPUT_COMPARE1A ) cbi( _4017_RESET_PORT, _4017_RESET_PIN ); } - width = servo_widths[servo]; + width = servo_widths[ servo ]; SERVO_OCR += width; - TCCR1A |= _BV(SERVO_FORCE); + TCCR1A |= _BV( SERVO_FORCE ); servo++; } -void servo_set_one(uint8_t servo, uint16_t value_us) { - servo_widths[servo] = ChopServo(CLOCK*value_us); +void servo_set_one( uint8_t servo, uint16_t value_us ) +{ + servo_widths[ servo ] = ChopServo( CLOCK * value_us ); } -void -_Pragma("entrypoint") servo_transmit(void) { +void +_Pragma( "entrypoint" ) servo_transmit( void ) +{ uint8_t servo; - uart_transmit((uint8_t)0); uart_transmit((uint8_t)0); + uart_transmit( ( uint8_t )0 ); + uart_transmit( ( uint8_t )0 ); - _Pragma("loopbound min 10 max 10") - for(servo = 0; servo < _4017_NB_CHANNELS; servo++) { - uart_transmit((uint8_t)(servo_widths[servo] >> 8)); - uart_transmit((uint8_t)(servo_widths[servo] & 0xff)); + _Pragma( "loopbound min 10 max 10" ) + for ( servo = 0; servo < _4017_NB_CHANNELS; servo++ ) { + uart_transmit( ( uint8_t )( servo_widths[ servo ] >> 8 ) ); + uart_transmit( ( uint8_t )( servo_widths[ servo ] & 0xff ) ); } - uart_transmit((uint8_t)'\n'); + uart_transmit( ( uint8_t )'\n' ); } /* - * - * defines how servos react to radio control or autopilot channels - * - */ -void servo_set(const pprz_t values[]) { - ServoSet(values); /*Generated from airframe.xml */ + defines how servos react to radio control or autopilot channels + +*/ + +void servo_set( const pprz_t values[ ] ) +{ + ServoSet( values ); /*Generated from airframe.xml */ } diff --git a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/servo.h b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/servo.h index 0e03ee7a7c3b8130492cf4d148ee7879e337b40b..f53dce6e909dbc6081c477bc18d26f83bb22714d 100644 --- a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/servo.h +++ b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/servo.h @@ -1,50 +1,50 @@ /* $Id: servo.h,v 1.1 2011-01-18 12:48:40 moellmer Exp $ - * - * Copied from autopilot (autopilot.sf.net) thanx alot Trammell - * (c) 2002 Trammell Hudson <hudson@rotomotion.com> - * (c) 2003 Pascal Brisset, Antoine Drouin - * - * This is the new decade counter based servo driving code. It uses - * one 16-bit output compare registers to determine when the regular - * servo clock line should be toggled, causing the output to move to the - * next servo. The other 16-bit output compare is used to drive a - * JR or Futaba compatible high-speed digital servo. - * - * User visibile routines: - * - * - servo_init(); - * - * Call once at the start of the program to bring the servos online - * and start the external decade counters. This will also start the - * high speed servo. - * - * - servo_make_pulse_width( length ); - * - * Converts a position value between 0 and 65536 to actual pulsewidth. 0 is - * all the way left (1.0 ms pulse) and 65536 is all the way right (2.0 ms - * pulse). Use it like this: - * - * servo_widths[ i ] = servo_make_pulse_width( val ) - * - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + + Copied from autopilot (autopilot.sf.net) thanx alot Trammell + (c) 2002 Trammell Hudson <hudson@rotomotion.com> + (c) 2003 Pascal Brisset, Antoine Drouin + + This is the new decade counter based servo driving code. It uses + one 16-bit output compare registers to determine when the regular + servo clock line should be toggled, causing the output to move to the + next servo. The other 16-bit output compare is used to drive a + JR or Futaba compatible high-speed digital servo. + + User visibile routines: + + - servo_init(); + + Call once at the start of the program to bring the servos online + and start the external decade counters. This will also start the + high speed servo. + + - servo_make_pulse_width( length ); + + Converts a position value between 0 and 65536 to actual pulsewidth. 0 is + all the way left (1.0 ms pulse) and 65536 is all the way right (2.0 ms + pulse). Use it like this: + + servo_widths[ i ] = servo_make_pulse_width( val ) + + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef SERVO_H #define SERVO_H @@ -53,9 +53,9 @@ #include "timer.h" extern void servo_init( void ); -extern void servo_set(const pprz_t values[]); -extern void servo_set_one(uint8_t servo, uint16_t value_us); -extern void servo_transmit(void); +extern void servo_set( const pprz_t values[ ] ); +extern void servo_set_one( uint8_t servo, uint16_t value_us ); +extern void servo_transmit( void ); #endif /* SERVO_H */ diff --git a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/spi.c b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/spi.c index 5edf9b1d4a6eb32b71eef3e76dd14d3450a14617..9b29fedd634fa966df36a8f507474ef6e217e025 100644 --- a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/spi.c +++ b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/spi.c @@ -1,28 +1,28 @@ /* - * $Id: spi.c,v 1.2 2011-01-25 10:05:41 plazar Exp $ - * - * Paparazzi mcu1 spi functions - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + $Id: spi.c,v 1.2 2011-01-25 10:05:41 plazar Exp $ + + Paparazzi mcu1 spi functions + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #include <inttypes.h> #include <arch/io.h> @@ -48,15 +48,17 @@ volatile bool_t spi_was_interrupted = FALSE; static volatile uint8_t idx_buf = 0; static volatile uint8_t xor_in, xor_out; -void spi_reset(void) { +void spi_reset( void ) +{ idx_buf = 0; xor_in = 0; - xor_out = ((uint8_t*)&to_mega128)[idx_buf]; + xor_out = ( ( uint8_t * )&to_mega128 )[ idx_buf ]; SPDR = xor_out; mega128_receive_valid = FALSE; } -void fbw_spi_init(void) { +void fbw_spi_init( void ) +{ to_mega128.status = 0; to_mega128.nb_err = 0; @@ -64,28 +66,29 @@ void fbw_spi_init(void) { // IT_DDR |= _BV(IT_PIN); /* set MISO pin output */ - SPI_DDR |= _BV(SPI_MISO_PIN); + SPI_DDR |= _BV( SPI_MISO_PIN ); /* enable SPI, slave, MSB first, sck idle low */ - SPCR = _BV(SPE); + SPCR = _BV( SPE ); /* enable interrupt */ - SPCR |= _BV(SPIE); + SPCR |= _BV( SPIE ); } -SIGNAL(SIG_SPI) { +SIGNAL( SIG_SPI ) +{ static uint8_t tmp; - + idx_buf++; spi_was_interrupted = TRUE; - if (idx_buf > FRAME_LENGTH) + if ( idx_buf > FRAME_LENGTH ) return; /* we have sent/received a complete frame */ - if (idx_buf == FRAME_LENGTH) { + if ( idx_buf == FRAME_LENGTH ) { /* read checksum from receive register */ tmp = SPDR; /* notify valid frame */ - if (tmp == xor_in) + if ( tmp == xor_in ) mega128_receive_valid = TRUE; else to_mega128.nb_err++; @@ -93,20 +96,20 @@ SIGNAL(SIG_SPI) { } /* we are sending/receiving payload */ - if (idx_buf < FRAME_LENGTH - 1) { + if ( idx_buf < FRAME_LENGTH - 1 ) { /* place new payload byte in send register */ - tmp = ((uint8_t*)&to_mega128)[idx_buf]; + tmp = ( ( uint8_t * )&to_mega128 )[ idx_buf ]; SPDR = tmp; xor_out = xor_out ^ tmp; - } + } /* we are done sending the payload */ else { // idx_buf == FRAME_LENGTH - 1 /* place checksum in send register */ SPDR = xor_out; } - + /* read the byte from receive register */ tmp = SPDR; - ((uint8_t*)&from_mega128)[idx_buf-1] = tmp; + ( ( uint8_t * )&from_mega128 )[ idx_buf - 1 ] = tmp; xor_in = xor_in ^ tmp; } diff --git a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/spi.h b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/spi.h index 708e5b57fa21aa30cd5b971750fce8fe2553e532..376d8e7aaec43c01b0260ede7fc8a384a517bd62 100644 --- a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/spi.h +++ b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/spi.h @@ -1,27 +1,27 @@ /* $Id: spi.h,v 1.1 2011-01-18 12:42:42 moellmer Exp $ - * - * Paparazzi fbw spi functions - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + + Paparazzi fbw spi functions + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef SPI_H #define SPI_H @@ -41,8 +41,8 @@ extern volatile bool_t mega128_receive_valid; extern volatile bool_t spi_was_interrupted; -void spi_init(void); -void spi_reset(void); +void spi_init( void ); +void spi_reset( void ); #endif /* SPI_H */ diff --git a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/timer.h b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/timer.h index 5394bd54530314d1abe09da83ab6210f9863ff83..c7649f705e07592cfa3e2f109ce204369f1006f9 100644 --- a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/timer.h +++ b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/timer.h @@ -1,30 +1,30 @@ /* $Id: timer.h,v 1.2 2011-01-18 14:55:53 moellmer Exp $ - * - * Paparazzi fbw timer functions - * - * Copied from autopilot (autopilot.sf.net) thanx alot Trammell - * - * Copyright (C) 2002 Trammell Hudson <hudson@rotomotion.com> - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + + Paparazzi fbw timer functions + + Copied from autopilot (autopilot.sf.net) thanx alot Trammell + + Copyright (C) 2002 Trammell Hudson <hudson@rotomotion.com> + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef TIMER_H #define TIMER_H @@ -36,31 +36,31 @@ /* - * Enable Timer1 (16-bit) running at Clk/1 for the global system - * clock. This will be used for computing the servo pulse widths, - * PPM decoding, etc. - * - * Low frequency periodic tasks will be signaled by timer 2 - * running at Clk/1024. For 16 Mhz clock, this will be every - * 16384 microseconds, or 61 Hz. - */ + Enable Timer1 (16-bit) running at Clk/1 for the global system + clock. This will be used for computing the servo pulse widths, + PPM decoding, etc. + + Low frequency periodic tasks will be signaled by timer 2 + running at Clk/1024. For 16 Mhz clock, this will be every + 16384 microseconds, or 61 Hz. +*/ static inline void timer_init( void ) { /* Timer1 @ Clk/1: System clock, ppm and servos pulses */ - TCCR1A = 0x00; - TCCR1B = 0x01; - + TCCR1A = 0x00; + TCCR1B = 0x01; + /* Timer2 @ Clk/1024: Periodic clock */ - TCCR2 = 0x07; + TCCR2 = 0x07; } /* - * Retrieve the current time from the global clock in Timer1, - * disabling interrupts to avoid stomping on the TEMP register. - * If interrupts are already off, the non_atomic form can be used. - */ + Retrieve the current time from the global clock in Timer1, + disabling interrupts to avoid stomping on the TEMP register. + If interrupts are already off, the non_atomic form can be used. +*/ static inline uint16_t timer_now( void ) { @@ -75,16 +75,16 @@ timer_now_non_atomic( void ) /* - * Periodic tasks occur when Timer2 overflows. Check and unset - * the overflow bit. We cycle through four possible periodic states, - * so each state occurs every 60 Hz. - */ + Periodic tasks occur when Timer2 overflows. Check and unset + the overflow bit. We cycle through four possible periodic states, + so each state occurs every 60 Hz. +*/ static inline bool_t timer_periodic( void ) { - if( !bit_is_set( TIFR, TOV2 ) ) + if ( !bit_is_set( TIFR, TOV2 ) ) return FALSE; - + TIFR = 1 << TOV2; return TRUE; } diff --git a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/uart.c b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/uart.c index d46de5cd199f7340a6ad5b7b39064b0ea23b53b4..82f80fc782d314495423d96de5b802c803340c11 100644 --- a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/uart.c +++ b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/uart.c @@ -1,26 +1,26 @@ /* - * Paparazzi $Id: uart.c,v 1.4 2011-01-25 10:17:46 plazar Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi $Id: uart.c,v 1.4 2011-01-25 10:17:46 plazar Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #include <arch/signal.h> #include <arch/interrupt.h> @@ -36,90 +36,98 @@ static volatile uint8_t tx_tail; /* next char to send */ static uint8_t tx_buf[ TX_BUF_SIZE ]; /* - * UART Baud rate generation settings: - * - * With 16.0 MHz clock,UBRR=25 => 38400 baud - * - */ -void uart_init_tx( void ) { -#ifndef WCET_ANALYSIS + UART Baud rate generation settings: + + With 16.0 MHz clock,UBRR=25 => 38400 baud + +*/ +void uart_init_tx( void ) +{ + #ifndef WCET_ANALYSIS /* Baudrate is 38.4k */ - UBRRH = 0; - UBRRL = 25; - /* single speed */ - UCSRA = 0; - /* Enable transmitter */ - UCSRB = _BV(TXEN); - /* Set frame format: 8data, 1stop bit */ - UCSRC = _BV(URSEL) | _BV(UCSZ1) | _BV(UCSZ0); -#endif + UBRRH = 0; + UBRRL = 25; + /* single speed */ + UCSRA = 0; + /* Enable transmitter */ + UCSRB = _BV( TXEN ); + /* Set frame format: 8data, 1stop bit */ + UCSRC = _BV( URSEL ) | _BV( UCSZ1 ) | _BV( UCSZ0 ); + #endif } -void uart_init_rx() { -#ifndef WCET_ANALYSIS - /* Enable receiver */ - UCSRB |= _BV(RXEN); +void uart_init_rx() +{ + #ifndef WCET_ANALYSIS + /* Enable receiver */ + UCSRB |= _BV( RXEN ); /* Enable uart receive interrupt */ - sbi( UCSRB, RXCIE ); -#endif + sbi( UCSRB, RXCIE ); + #endif } -void uart_transmit( unsigned char data ) { -#ifndef WCET_ANALYSIS - if (UCSRB & _BV(TXCIE)) { +void uart_transmit( unsigned char data ) +{ + #ifndef WCET_ANALYSIS + if ( UCSRB & _BV( TXCIE ) ) { /* we are waiting for the last char to be sent : buffering */ - if (tx_tail == tx_head + 1) { /* BUF_SIZE = 256 */ + if ( tx_tail == tx_head + 1 ) { /* BUF_SIZE = 256 */ /* Buffer is full (almost, but tx_head = tx_tail means "empty" */ return; } - tx_buf[tx_head] = data; + tx_buf[ tx_head ] = data; tx_head++; /* BUF_SIZE = 256 */ } else { /* Channel is free: just send */ UDR = data; - sbi(UCSRB, TXCIE); + sbi( UCSRB, TXCIE ); } -#endif + #endif } -void uart_print_hex ( uint8_t c ) { -#ifndef WCET_ANALYSIS - const uint8_t hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; - uint8_t high = (c & 0xF0)>>4; +void uart_print_hex ( uint8_t c ) +{ + #ifndef WCET_ANALYSIS + const uint8_t hex[ 16 ] = { '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' + }; + uint8_t high = ( c & 0xF0 ) >> 4; uint8_t low = c & 0x0F; - uart_transmit(hex[high]); - uart_transmit(hex[low]); -#endif -} - -void uart_print_hex16 ( uint16_t c ) { -#ifndef WCET_ANALYSIS - uint8_t high = (uint8_t)(c>>8); - uint8_t low = (uint8_t)(c); - uart_print_hex(high); - uart_print_hex(low); -#endif + uart_transmit( hex[ high ] ); + uart_transmit( hex[ low ] ); + #endif +} + +void uart_print_hex16 ( uint16_t c ) +{ + #ifndef WCET_ANALYSIS + uint8_t high = ( uint8_t )( c >> 8 ); + uint8_t low = ( uint8_t )( c ); + uart_print_hex( high ); + uart_print_hex( low ); + #endif } -void uart_print_string(const uint8_t* s) { -#ifndef WCET_ANALYSIS +void uart_print_string( const uint8_t *s ) +{ + #ifndef WCET_ANALYSIS uint8_t i = 0; - _Pragma("loopbound min 100 max 100") - while (s[i]) { - uart_transmit(s[i]); + _Pragma( "loopbound min 100 max 100" ) + while ( s[ i ] ) { + uart_transmit( s[ i ] ); i++; } -#endif + #endif } -SIGNAL(SIG_UART_TRANS) { -#ifndef WCET_ANALYSIS - if (tx_head == tx_tail) { +SIGNAL( SIG_UART_TRANS ) +{ + #ifndef WCET_ANALYSIS + if ( tx_head == tx_tail ) { /* Nothing more to send */ - cbi(UCSRB, TXCIE); /* disable interrupt */ + cbi( UCSRB, TXCIE ); /* disable interrupt */ } else { - UDR = tx_buf[tx_tail]; + UDR = tx_buf[ tx_tail ]; tx_tail++; /* warning tx_buf_len is 256 */ } -#endif + #endif } diff --git a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/uart.h b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/uart.h index 9b7df459c5a5d65318e3bd904d491644348ea3ab..3aeb9f74f46dbec58e810628da9a5f27856be608 100644 --- a/bench/parallel/PapaBench/sw/airborne/fly_by_wire/uart.h +++ b/bench/parallel/PapaBench/sw/airborne/fly_by_wire/uart.h @@ -1,26 +1,26 @@ /* - * Paparazzi $Id: uart.h,v 1.1 2011-01-18 12:42:42 moellmer Exp $ - * - * Copyright (C) 2003 Pascal Brisset, Antoine Drouin - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Paparazzi $Id: uart.h,v 1.1 2011-01-18 12:42:42 moellmer Exp $ + + Copyright (C) 2003 Pascal Brisset, Antoine Drouin + + This file is part of paparazzi. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef _UART_H_ #define _UART_H_ @@ -33,7 +33,7 @@ void uart_transmit( unsigned char data ); void uart_print_hex ( uint8_t c ); void uart_print_hex16 ( uint16_t c ); -void uart_print_string(const uint8_t* s); -void uart_print_float( const float * f); +void uart_print_string( const uint8_t *s ); +void uart_print_float( const float *f ); #endif diff --git a/bench/parallel/PapaBench/sw/include/c/downlink.h b/bench/parallel/PapaBench/sw/include/c/downlink.h index b0d970ab5169c2501a57b5b6c8d25cd7fc0f1096..7f0064a6de6a82833819cbb924627b683495ca60 100644 --- a/bench/parallel/PapaBench/sw/include/c/downlink.h +++ b/bench/parallel/PapaBench/sw/include/c/downlink.h @@ -1,24 +1,24 @@ -/* +/* downlink.h Copyright (C) 2003 Antoine Drouin - This file is part of paparazzi. + This file is part of paparazzi. - paparazzi is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. - paparazzi is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with paparazzi; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ /* decodes downlink protocol @@ -39,10 +39,10 @@ #define DL_TAIL_LEN 2 -struct Transport* downlink_new( struct PprzProtocol* protocol, - void(*err_callback)(gpointer callback_data, GError *error), - void(*msg_callback)(gpointer callback_data, struct TransportMsg* msg), - gpointer callback_data); +struct Transport *downlink_new( struct PprzProtocol *protocol, + void( *err_callback )( gpointer callback_data, GError *error ), + void( *msg_callback )( gpointer callback_data, struct TransportMsg *msg ), + gpointer callback_data ); diff --git a/bench/parallel/PapaBench/sw/include/c/geometry.h b/bench/parallel/PapaBench/sw/include/c/geometry.h index 32c9f2df3908cc9a042139a70805046b719fb013..20c8d50acb20e8e428e35d2346953efaa2d483e7 100644 --- a/bench/parallel/PapaBench/sw/include/c/geometry.h +++ b/bench/parallel/PapaBench/sw/include/c/geometry.h @@ -1,24 +1,24 @@ -/* +/* geometry.h Copyright (C) 2003 Antoine Drouin - This file is part of paparazzi. + This file is part of paparazzi. - paparazzi is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. - paparazzi is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with paparazzi; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ /* geometry :) originated from Pascal Brisset pascal(dot)brisset(at)free(dot)fr @@ -30,8 +30,8 @@ #include <math.h> #include "angles.h" -/* - please use +/* + please use x, y, z, h in meters lat, lon in radians */ @@ -57,58 +57,64 @@ struct double_e3d { -struct double_c2d vector_c2d(const struct double_c2d a, const struct double_c2d b); -struct double_c2d unit_vector_c2d(const struct double_c2d a, const struct double_c2d b); -struct double_c2d normal_vector_c2d(const struct double_c2d u); - -double vect_prod_c2d(const struct double_c2d a, const struct double_c2d b); -double scal_prod_c2d(const struct double_c2d a, const struct double_c2d b); -double module_c2d(const struct double_c2d a); -double norme2_c2d(const struct double_c2d a); -double distance_c2d(const struct double_c2d a, const struct double_c2d b); -void rotate_c2d(struct double_c2d* a, double alpha); -void translate_c2d(struct double_c2d* a, const struct double_c2d v); -void add_c2d_s(struct double_c2d* a, const struct double_c2d b); -struct double_c2d add_c2d(struct double_c2d a, struct double_c2d b); -void minus_c2d_s(struct double_c2d* a, const struct double_c2d v); -struct double_c2d minus_c2d(struct double_c2d a, const struct double_c2d v); -void normalise_c2d_s(struct double_c2d* a); -struct double_c2d normalise_c2d(struct double_c2d a); -void scale_c2d_s(struct double_c2d* v, double factor); -struct double_c2d scale_c2d(struct double_c2d v, double factor); -double angle_c2d(struct double_c2d u, struct double_c2d v); - -struct double_p2d p2d_of_c2d(const struct double_c2d c); -struct double_c2d c2d_of_p2d(const struct double_p2d p); -struct double_c2d c2d_of_polar(double r, double teta); -struct double_p2d add_p2d(const struct double_p2d p1, const struct double_p2d p2); -struct double_p2d minus_p2d(const struct double_p2d p1, const struct double_p2d p2); - -void translate_c3d(struct double_c3d* a, const struct double_c3d v); -void scale_c3d(struct double_c3d* v, double factor); - -struct double_c2d lin_interp_c2d(struct double_c2d a, double ta, struct double_c2d b, double tb, double t); - - -/* rad is an angle in EAST NORTH frame, - * returns the wind direction in degrees - */ -double wind_dir_from_angle_rad(double rad); +struct double_c2d vector_c2d( const struct double_c2d a, + const struct double_c2d b ); +struct double_c2d unit_vector_c2d( const struct double_c2d a, + const struct double_c2d b ); +struct double_c2d normal_vector_c2d( const struct double_c2d u ); + +double vect_prod_c2d( const struct double_c2d a, const struct double_c2d b ); +double scal_prod_c2d( const struct double_c2d a, const struct double_c2d b ); +double module_c2d( const struct double_c2d a ); +double norme2_c2d( const struct double_c2d a ); +double distance_c2d( const struct double_c2d a, const struct double_c2d b ); +void rotate_c2d( struct double_c2d *a, double alpha ); +void translate_c2d( struct double_c2d *a, const struct double_c2d v ); +void add_c2d_s( struct double_c2d *a, const struct double_c2d b ); +struct double_c2d add_c2d( struct double_c2d a, struct double_c2d b ); +void minus_c2d_s( struct double_c2d *a, const struct double_c2d v ); +struct double_c2d minus_c2d( struct double_c2d a, const struct double_c2d v ); +void normalise_c2d_s( struct double_c2d *a ); +struct double_c2d normalise_c2d( struct double_c2d a ); +void scale_c2d_s( struct double_c2d *v, double factor ); +struct double_c2d scale_c2d( struct double_c2d v, double factor ); +double angle_c2d( struct double_c2d u, struct double_c2d v ); + +struct double_p2d p2d_of_c2d( const struct double_c2d c ); +struct double_c2d c2d_of_p2d( const struct double_p2d p ); +struct double_c2d c2d_of_polar( double r, double teta ); +struct double_p2d add_p2d( const struct double_p2d p1, + const struct double_p2d p2 ); +struct double_p2d minus_p2d( const struct double_p2d p1, + const struct double_p2d p2 ); + +void translate_c3d( struct double_c3d *a, const struct double_c3d v ); +void scale_c3d( struct double_c3d *v, double factor ); + +struct double_c2d lin_interp_c2d( struct double_c2d a, double ta, + struct double_c2d b, double tb, double t ); + + +/* rad is an angle in EAST NORTH frame, + returns the wind direction in degrees +*/ +double wind_dir_from_angle_rad( double rad ); /* converts between angle in EAST NORTH frame and headings (0->N 90->E) */ -double heading_of_to_angle_deg(double angle); -double heading_of_to_angle_rad(double angle); +double heading_of_to_angle_deg( double angle ); +double heading_of_to_angle_rad( double angle ); /* - * compute bank angle - */ -double compute_phi(struct double_c2d curspeed, struct double_c2d last_speed, double delta_t); + compute bank angle +*/ +double compute_phi( struct double_c2d curspeed, struct double_c2d last_speed, + double delta_t ); #define SEC_OF_TIMEVAL(tv) (tv.tv_sec + 1e-6 * tv.tv_usec) #define DELAY_SEC_OF_TIMEVAL(tv1, tv2) (SEC_OF_TIMEVAL(tv1) - SEC_OF_TIMEVAL(tv2)) -double mpi_pi(double val); +double mpi_pi( double val ); struct ellipsoid { double dx, dy, dz; @@ -125,10 +131,10 @@ enum type_ellipsoid { ELLIPSOID_NB }; -extern const struct ellipsoid ellipsoids[ELLIPSOID_NB]; +extern const struct ellipsoid ellipsoids[ ELLIPSOID_NB ]; struct lambert { - const struct ellipsoid* ellipsoid; + const struct ellipsoid *ellipsoid; double phi0; /* radians */ double lphi0; double r0; @@ -149,27 +155,31 @@ enum type_lambert { LAMBERT_NB }; -extern const struct lambert lamberts[LAMBERT_NB]; +extern const struct lambert lamberts[ LAMBERT_NB ]; #define DECIMAL(D,M,S) (D + M / 60. + S / 3600.) #define RAD_OF_DEG(D) (D*M_PI/180.) #define DEG_OF_RAD(R) (R/M_PI*180.) -#define LATITUDE_ISOMETRIQUE(PHI,E) (log(tan(M_PI_4 + PHI/2.0)) - E/2.0 * log((1.0+E*sin(PHI)) / (1.0-E*sin(PHI)))) -#define E_SQUARE(D) (2.0*D - D * D) +#define LATITUDE_ISOMETRIQUE(PHI,E) (log(tan(M_PI_4 + PHI/2.0)) - E/2.0 * log((1.0+E*sin(PHI)) / (1.0-E*sin(PHI)))) +#define E_SQUARE(D) (2.0*D - D * D) #define E_PRIME_SQUARE(D) (1.0 / (1.0 - D) / (1.0 - D) - 1.0) /* projections */ -void lambert_of_e2d (const enum type_lambert lmb, const enum type_ellipsoid elps, - struct double_e2d world_pos, struct double_c2d *lmb_pos); -void e2d_of_lambert (const enum type_lambert lmb, const enum type_ellipsoid elps, - struct double_c2d c_pos, struct double_e2d *e_pos); +void lambert_of_e2d ( const enum type_lambert lmb, + const enum type_ellipsoid elps, + struct double_e2d world_pos, struct double_c2d *lmb_pos ); +void e2d_of_lambert ( const enum type_lambert lmb, + const enum type_ellipsoid elps, + struct double_c2d c_pos, struct double_e2d *e_pos ); /* coordinates */ -void e3d_of_c3d(const enum type_ellipsoid elps, struct double_c3d c_pos, struct double_e3d *e_pos); -void e2d_of_e2d(const enum type_ellipsoid dest, const enum type_ellipsoid src, struct double_e2d *e2d_pos); +void e3d_of_c3d( const enum type_ellipsoid elps, struct double_c3d c_pos, + struct double_e3d *e_pos ); +void e2d_of_e2d( const enum type_ellipsoid dest, const enum type_ellipsoid src, + struct double_e2d *e2d_pos ); #endif /* GEOMETRY_H */ diff --git a/bench/parallel/PapaBench/sw/include/c/glade_support.h b/bench/parallel/PapaBench/sw/include/c/glade_support.h index 9c4901d60ac202d667f54d096a2954a11b6560c2..544a385557d0b361d8baf0dc7942cf36dad21e06 100644 --- a/bench/parallel/PapaBench/sw/include/c/glade_support.h +++ b/bench/parallel/PapaBench/sw/include/c/glade_support.h @@ -1,24 +1,24 @@ -/* +/* glade_support.h Copyright (C) 2003 Antoine Drouin - This file is part of paparazzi. + This file is part of paparazzi. - paparazzi is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. - paparazzi is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with paparazzi; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ /* @@ -40,7 +40,7 @@ gtk_label_set_text(label, str->str); \ } \ else \ - g_message("##### unknown label [%s]", label_name); \ + g_message("##### unknown label [ %s ]", label_name); \ g_string_free(str, TRUE); \ } \ @@ -54,12 +54,12 @@ gtk_label_set_text(label, str->str); \ } \ else \ - g_message("##### unknown label [%s]", label_name); \ + g_message("##### unknown label [ %s ]", label_name); \ g_string_free(str, TRUE); \ for (state = GTK_STATE_NORMAL; state <= GTK_STATE_INSENSITIVE; state++) \ - gtk_widget_modify_fg(GTK_WIDGET(label), state, (test)?&my_red_color:>k_widget_get_default_style()->fg[state]); \ + gtk_widget_modify_fg(GTK_WIDGET(label), state, (test)?&my_red_color:>k_widget_get_default_style()->fg[ state ]); \ } \ - + diff --git a/bench/parallel/PapaBench/sw/include/c/logger.h b/bench/parallel/PapaBench/sw/include/c/logger.h index 6c47f828154315cca24b9d6b20433f70ef8b28f0..cd93331ef8707515b6c02eca556142a390ecebe1 100644 --- a/bench/parallel/PapaBench/sw/include/c/logger.h +++ b/bench/parallel/PapaBench/sw/include/c/logger.h @@ -1,26 +1,26 @@ -/* +/* logger.h Copyright (C) 2003 Antoine Drouin - This file is part of paparazzi. + This file is part of paparazzi. - paparazzi is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. - paparazzi is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with paparazzi; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ -/* +/* write and read logs for the paparazzi */ @@ -35,15 +35,16 @@ #include "protocol.h" struct Logger { - GIOChannel* channel; + GIOChannel *channel; }; -struct Logger* logger_new(const gchar* out_file, xmlDocPtr doc); -void logger_log(struct Logger* this, struct PprzMsg* msg); -void logger_free(struct Logger* this); +struct Logger *logger_new( const gchar *out_file, xmlDocPtr doc ); +void logger_log( struct Logger *this, struct PprzMsg *msg ); +void logger_free( struct Logger *this ); -GList* logger_parse_log(const gchar* filename, struct PprzProtocol** protocol); +GList *logger_parse_log( const gchar *filename, + struct PprzProtocol **protocol ); diff --git a/bench/parallel/PapaBench/sw/include/c/network.h b/bench/parallel/PapaBench/sw/include/c/network.h index f6a6ee4a76432af5d99808b0fbf903d77ec4b3e5..3c4d27cd83787fa9eade97b9400a229ac9a81577 100644 --- a/bench/parallel/PapaBench/sw/include/c/network.h +++ b/bench/parallel/PapaBench/sw/include/c/network.h @@ -1,24 +1,24 @@ -/* +/* $id:$ Copyright (C) 2003 Antoine Drouin - This file is part of paparazzi. + This file is part of paparazzi. - paparazzi is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. - paparazzi is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with paparazzi; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ /* network functions @@ -54,15 +54,17 @@ struct NetworkServer { }; -struct NetworkServer* network_server_new(struct PprzProtocol *protocol, - const char* bcast_addr, const int bcast_port, - GFunc rcv_callback, GFunc err_callback, gpointer user_data); -void network_server_dispatch(struct NetworkServer* this, struct PprzMsg* msg); +struct NetworkServer *network_server_new( struct PprzProtocol *protocol, + const char *bcast_addr, const int bcast_port, + GFunc rcv_callback, GFunc err_callback, gpointer user_data ); +void network_server_dispatch( struct NetworkServer *this, struct PprzMsg *msg ); -struct NetworkClient* network_client_new(struct PprzProtocol *protocol, const char* bcast_addr, const int bcast_port, - GFunc rcv_callback, GFunc err_callback, gpointer user_data); -void network_client_send_to_server(struct NetworkClient* this, struct PprzMsg* msg); +struct NetworkClient *network_client_new( struct PprzProtocol *protocol, + const char *bcast_addr, const int bcast_port, + GFunc rcv_callback, GFunc err_callback, gpointer user_data ); +void network_client_send_to_server( struct NetworkClient *this, + struct PprzMsg *msg ); #endif /* NETWORK_H */ diff --git a/bench/parallel/PapaBench/sw/include/c/protocol.h b/bench/parallel/PapaBench/sw/include/c/protocol.h index 21f6bde032371f8f73d6cd1be675f20626dbbc53..c1fd3238e51bc2d32e0c52ee9de748cceddd5254 100644 --- a/bench/parallel/PapaBench/sw/include/c/protocol.h +++ b/bench/parallel/PapaBench/sw/include/c/protocol.h @@ -1,24 +1,24 @@ -/* +/* $Id: protocol.h,v 1.1 2011-01-18 12:48:44 moellmer Exp $ Copyright (C) 2003 Pascal Brisset, Antoine Drouin - This file is part of paparazzi. + This file is part of paparazzi. - paparazzi is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. - paparazzi is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with paparazzi; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ #ifndef PROTOCOL_H #define PROTOCOL_H @@ -40,67 +40,81 @@ enum PprzFieldType { }; struct PprzFieldClass { - gchar* name; + gchar *name; enum PprzFieldType type; guint offset; - gchar* format; - gchar* unit; - gchar* description; + gchar *format; + gchar *unit; + gchar *description; }; struct PprzMsgClass { guint id; - gchar* name; - GList* fields_classes; - GHashTable* fields_classes_by_name; - struct PprzFieldClass** fields_classes_by_id; + gchar *name; + GList *fields_classes; + GHashTable *fields_classes_by_name; + struct PprzFieldClass **fields_classes_by_id; guint nb_fields_classes; guint size; /* size in byte off all fields + 1 for id */ }; struct PprzMsg { GTimeVal date; - struct PprzMsgClass* class; - guchar* bytes; + struct PprzMsgClass *class; + guchar *bytes; }; struct PprzProtocol { - GList* msgs_classes; - GHashTable* msgs_classes_by_name; - struct PprzMsgClass** msgs_classes_by_id; + GList *msgs_classes; + GHashTable *msgs_classes_by_name; + struct PprzMsgClass **msgs_classes_by_id; guint nb_msgs_classes; }; -struct PprzProtocol* pprz_protocol_new_from_xml(xmlDocPtr doc, xmlNodePtr cur); -void pprz_protocol_free(struct PprzProtocol* this); - -struct PprzMsg* pprz_msg_new(struct PprzMsgClass* msg_class, GTimeVal date); -struct PprzMsg* pprz_protocol_msg_new_by_id(struct PprzProtocol* this, guchar id, GTimeVal date); -struct PprzMsg* pprz_protocol_msg_new_by_name(struct PprzProtocol* this, const gchar* name, GTimeVal date); -struct PprzMsg* pprz_protocol_msg_new_of_bin(struct PprzProtocol* this, const guchar* buf, GTimeVal date); -struct PprzMsg* pprz_protocol_msg_new_of_ascii(struct PprzProtocol* this, const gchar* line); -void pprz_msg_free(struct PprzMsg* msg); - -void pprz_protocol_ascii_of_msg(struct PprzMsg* msg, GString** buf); - -const gchar* pprz_protocol_str_of_field_type(enum PprzFieldType type); -const guint pprz_protocol_size_of_field_type(enum PprzFieldType type); - -const struct PprzMsgClass* protocol_msg_class_of_id(struct PprzProtocol* this, guint id); - -void pprz_msg_ascii_of_field(struct PprzMsg* msg, struct PprzFieldClass* field_class, GString* buf); - -gpointer pprz_msg_get_field(struct PprzMsg* msg, struct PprzFieldClass* field_class); -gpointer pprz_msg_get_field_by_name(struct PprzMsg* msg, const gchar* name); -gpointer pprz_msg_get_field_by_place(struct PprzMsg* msg, guint place); - -gboolean pprz_msg_set_field(struct PprzMsg* msg, struct PprzFieldClass* field_class, gconstpointer value); -gboolean pprz_msg_set_field_by_name(struct PprzMsg* msg, const gchar* name, gconstpointer value); -gboolean pprz_msg_set_field_by_id(struct PprzMsg* msg, guint id, gconstpointer value); - -gboolean pprz_msg_set_field_ascii(struct PprzMsg* msg, struct PprzFieldClass* field_class, const gchar* str_val); -gboolean pprz_msg_set_field_ascii_by_name(struct PprzMsg* msg, const gchar* name, const gchar* str_val); -gboolean pprz_msg_set_field_ascii_by_id(struct PprzMsg* msg, guint id, const gchar* str_val); +struct PprzProtocol *pprz_protocol_new_from_xml( xmlDocPtr doc, + xmlNodePtr cur ); +void pprz_protocol_free( struct PprzProtocol *this ); + +struct PprzMsg *pprz_msg_new( struct PprzMsgClass *msg_class, GTimeVal date ); +struct PprzMsg *pprz_protocol_msg_new_by_id( struct PprzProtocol *this, + guchar id, GTimeVal date ); +struct PprzMsg *pprz_protocol_msg_new_by_name( struct PprzProtocol *this, + const gchar *name, GTimeVal date ); +struct PprzMsg *pprz_protocol_msg_new_of_bin( struct PprzProtocol *this, + const guchar *buf, GTimeVal date ); +struct PprzMsg *pprz_protocol_msg_new_of_ascii( struct PprzProtocol *this, + const gchar *line ); +void pprz_msg_free( struct PprzMsg *msg ); + +void pprz_protocol_ascii_of_msg( struct PprzMsg *msg, GString **buf ); + +const gchar *pprz_protocol_str_of_field_type( enum PprzFieldType type ); +const guint pprz_protocol_size_of_field_type( enum PprzFieldType type ); + +const struct PprzMsgClass *protocol_msg_class_of_id( struct PprzProtocol *this, + guint id ); + +void pprz_msg_ascii_of_field( struct PprzMsg *msg, + struct PprzFieldClass *field_class, GString *buf ); + +gpointer pprz_msg_get_field( struct PprzMsg *msg, + struct PprzFieldClass *field_class ); +gpointer pprz_msg_get_field_by_name( struct PprzMsg *msg, const gchar *name ); +gpointer pprz_msg_get_field_by_place( struct PprzMsg *msg, guint place ); + +gboolean pprz_msg_set_field( struct PprzMsg *msg, + struct PprzFieldClass *field_class, gconstpointer value ); +gboolean pprz_msg_set_field_by_name( struct PprzMsg *msg, const gchar *name, + gconstpointer value ); +gboolean pprz_msg_set_field_by_id( struct PprzMsg *msg, guint id, + gconstpointer value ); + +gboolean pprz_msg_set_field_ascii( struct PprzMsg *msg, + struct PprzFieldClass *field_class, const gchar *str_val ); +gboolean pprz_msg_set_field_ascii_by_name( struct PprzMsg *msg, + const gchar *name, const gchar *str_val ); +gboolean pprz_msg_set_field_ascii_by_id( struct PprzMsg *msg, guint id, + const gchar *str_val ); #endif /* PROTOCOL_H */ diff --git a/bench/parallel/PapaBench/sw/include/c/traces.h b/bench/parallel/PapaBench/sw/include/c/traces.h index 356e884fe2b6610203a84c3924f036e59b9b1f69..4d59e2a31f1fa1f7c6f57deb6d6b0415ada0dfb3 100644 --- a/bench/parallel/PapaBench/sw/include/c/traces.h +++ b/bench/parallel/PapaBench/sw/include/c/traces.h @@ -1,24 +1,24 @@ -/* +/* traces.h Copyright (C) 2003 Antoine Drouin - This file is part of paparazzi. + This file is part of paparazzi. - paparazzi is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. - paparazzi is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with paparazzi; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ #ifndef TRACES_H #define TRACES_H @@ -42,15 +42,15 @@ #define TRACE_TRANSPORT 0x00000400L #define TRACE_TRANSPORT_VERB 0x00000800L -extern unsigned long TraceLevel; +extern unsigned long TraceLevel; #define TRACE(type,fmt,args...) \ { \ if (TraceLevel&type) { \ - fprintf(stderr, "["#type"] " fmt, ##args); \ + fprintf(stderr, "[ "#type" ] " fmt, ##args); \ } \ } -const char* print_hex(const unsigned char* buf, unsigned int len); +const char *print_hex( const unsigned char *buf, unsigned int len ); #else #define TRACE(type,fmt,args...) diff --git a/bench/parallel/PapaBench/sw/include/c/transport.h b/bench/parallel/PapaBench/sw/include/c/transport.h index e9252d5255af32f6a7751ec71caa9b654d31d5da..47edbbfebc60950cc7d291502065a742ac7a8b33 100644 --- a/bench/parallel/PapaBench/sw/include/c/transport.h +++ b/bench/parallel/PapaBench/sw/include/c/transport.h @@ -24,7 +24,7 @@ enum TransportError { struct TransportMsg { GTimeVal date; guint len; - guchar* data; + guchar *data; }; struct TransportStatus { @@ -37,8 +37,8 @@ struct TransportStatus { }; struct Transport { - void(*err_callback)(gpointer callback_data, GError *error); - void(*msg_callback)(gpointer callback_data, struct TransportMsg* msg); + void( *err_callback )( gpointer callback_data, GError *error ); + void( *msg_callback )( gpointer callback_data, struct TransportMsg *msg ); gpointer callback_data; GQuark quark; gchar stx; @@ -46,28 +46,30 @@ struct Transport { gboolean fixed_size; gboolean two_bytes_checksum; guint nb_msg_type; - guint* size_msg; + guint *size_msg; guint max_msg_size; struct TransportStatus status; gulong nb_msg_last_status; gulong nb_byte_last_status; - guchar buf[TRANSPORT_BUF_LEN]; + guchar buf[ TRANSPORT_BUF_LEN ]; guint buf_len; GTimeVal start_date, last_status_date; - + }; -struct Transport* transport_new(gboolean fixed_size, gboolean two_bytes_checksum, guint nb_msg, guint* size_msg, guint max_msg_size, - guchar stx, guchar etx, - void(*err_callback)(gpointer callback_data, GError *error), - void(*msg_callback)(gpointer callback_data, struct TransportMsg* msg), - gpointer callback_data); +struct Transport *transport_new( gboolean fixed_size, + gboolean two_bytes_checksum, guint nb_msg, guint *size_msg, guint max_msg_size, + guchar stx, guchar etx, + void( *err_callback )( gpointer callback_data, GError *error ), + void( *msg_callback )( gpointer callback_data, struct TransportMsg *msg ), + gpointer callback_data ); -struct TransportStatus* transport_get_status(struct Transport* this); +struct TransportStatus *transport_get_status( struct Transport *this ); -void transport_feed_data(struct Transport* this, const guchar* buf, guint len); +void transport_feed_data( struct Transport *this, const guchar *buf, + guint len ); -void transport_free(struct Transport* this); +void transport_free( struct Transport *this ); #endif /* TRANSPORT_H */ diff --git a/bench/parallel/PapaBench/sw/include/math.h b/bench/parallel/PapaBench/sw/include/math.h index 836ccfb9a436d607d135b445a1d2cbc487fc5e31..398713ee23897577cf1276266cdb6b3bce1a47ea 100644 --- a/bench/parallel/PapaBench/sw/include/math.h +++ b/bench/parallel/PapaBench/sw/include/math.h @@ -3,19 +3,19 @@ #define M_PI 3.141592653589793238462643 #define HALFPI 1.57079632679489661923 -#define sin(x) (pp_sin(x)) -#define atan2(x,y) (pp_atan2(x,y)) -#define sqrt(x) (pp_sqrt(x)) -#define cos(x) (pp_sin(x+HALFPI)) /*cosinus [radians]*/ -#define fabs(x) (pp_fabs(x)) -#define pp_fabs(x) ((x)< 0. ? -(x) : (x)) /*floating absolute value*/ -#define Max(x,y) (pp_Max(x,y)) -#define pp_Max(x,y) ((x) >= (y) ? (x) : (y)) -#define Min(x,y) (pp_Min(x,y)) -#define pp_Min(x,y) ((x) <= (y) ? (x) : (y)) +#define sin(x) (pp_sin(x)) +#define atan2(x,y) (pp_atan2(x,y)) +#define sqrt(x) (pp_sqrt(x)) +#define cos(x) (pp_sin(x+HALFPI)) /*cosinus [ radians ]*/ +#define fabs(x) (pp_fabs(x)) +#define pp_fabs(x) ((x)< 0. ? -(x) : (x)) /*floating absolute value*/ +#define Max(x,y) (pp_Max(x,y)) +#define pp_Max(x,y) ((x) >= (y) ? (x) : (y)) +#define Min(x,y) (pp_Min(x,y)) +#define pp_Min(x,y) ((x) <= (y) ? (x) : (y)) -extern double pp_sin(double x); -extern double pp_sqrt(double x); -extern double pp_atan2(double x, double y); +extern double pp_sin( double x ); +extern double pp_sqrt( double x ); +extern double pp_atan2( double x, double y ); #endif /*MATH_H_*/ diff --git a/bench/parallel/PapaBench/sw/lib/c/downlink.c b/bench/parallel/PapaBench/sw/lib/c/downlink.c index fba1f58b5ad14f395ae9ccc58c3fc4c15c29ae93..428bbe34f8324b3ba15d30d0ab32627fb2e74594 100644 --- a/bench/parallel/PapaBench/sw/lib/c/downlink.c +++ b/bench/parallel/PapaBench/sw/lib/c/downlink.c @@ -1,24 +1,24 @@ -/* +/* downlink.c Copyright (C) 2003 Antoine Drouin - This file is part of paparazzi. + This file is part of paparazzi. - paparazzi is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. - paparazzi is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with paparazzi; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ #include <string.h> @@ -35,29 +35,31 @@ #define READ_GINT16_FROM_BUF(dest, buf) dest = GINT16_FROM_LE(*((gint16*)(buf))); buf += 2; #define READ_GUINT8_FROM_BUF(dest, buf) dest = (guint8)(*(buf++)); -struct Transport* downlink_new( struct PprzProtocol* protocol, - void(*err_callback)(gpointer callback_data, GError *error), - void(*msg_callback)(gpointer callback_data, struct TransportMsg* msg), - gpointer callback_data) { - struct Transport* transport; - guint* fixed_payload_len = g_new(guint, g_list_length(protocol->msgs_classes)); +struct Transport *downlink_new( struct PprzProtocol *protocol, + void( *err_callback )( gpointer callback_data, GError *error ), + void( *msg_callback )( gpointer callback_data, struct TransportMsg *msg ), + gpointer callback_data ) +{ + struct Transport *transport; + guint *fixed_payload_len = g_new( guint, + g_list_length( protocol->msgs_classes ) ); guint i = 0; - GList* msgs_classes = protocol->msgs_classes; - while (msgs_classes) { - fixed_payload_len[i] = ((struct PprzMsgClass*)msgs_classes->data)->size; - // printf("fixed_payload_len : %d %d\n", i, fixed_payload_len[i]); + GList *msgs_classes = protocol->msgs_classes; + while ( msgs_classes ) { + fixed_payload_len[ i ] = ( ( struct PprzMsgClass * )msgs_classes->data )->size; + // printf("fixed_payload_len : %d %d\n", i, fixed_payload_len[ i ]); i++; msgs_classes = msgs_classes->next; } - transport = transport_new(TRUE, /* fixed_size */ - TRUE, /* two bytes checksum */ - i, /* nb_msg */ - fixed_payload_len, /* size_msg */ - 100, /* max_msg_size */ - DL_STX, DL_ETX, /* STX, ETX */ - err_callback, /* err callback */ - msg_callback, /* msg callback */ - callback_data); /* callback data */ + transport = transport_new( TRUE, /* fixed_size */ + TRUE, /* two bytes checksum */ + i, /* nb_msg */ + fixed_payload_len, /* size_msg */ + 100, /* max_msg_size */ + DL_STX, DL_ETX, /* STX, ETX */ + err_callback, /* err callback */ + msg_callback, /* msg callback */ + callback_data ); /* callback data */ return transport; } diff --git a/bench/parallel/PapaBench/sw/lib/c/geometry.c b/bench/parallel/PapaBench/sw/lib/c/geometry.c index 6f142d74c2fd488a1d9095cff4611f95996c7948..e1c656f0173864ff93f5a3bb34415c4154da3686 100644 --- a/bench/parallel/PapaBench/sw/lib/c/geometry.c +++ b/bench/parallel/PapaBench/sw/lib/c/geometry.c @@ -1,88 +1,88 @@ -/* +/* geometry.c Copyright (C) 2003 Antoine Drouin - This file is part of paparazzi. + This file is part of paparazzi. - paparazzi is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. - paparazzi is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with paparazzi; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ #include "geometry.h" //#include <math.h> #include "math_papabench.h" -const struct ellipsoid ellipsoids[ELLIPSOID_NB] = { - {-168., -60., 320., 6378249.2, 0.0034075495234250643, 0.08248325676}, /* NTF */ - { 0., 0., 0., 6378137.0, 0.0033528106647474805, 0.08181919106}, /* WGS84 */ - {-87.0, -98., -121.0, 6378388.0, 0.003367003367003367, 0.08199188998}, /* ED50 */ - { 0.0, 125.0, 194.0, 6378067.6, 0.0033155460257, 0.08181919106} /* NAD27 */ +const struct ellipsoid ellipsoids[ ELLIPSOID_NB ] = { + {-168., -60., 320., 6378249.2, 0.0034075495234250643, 0.08248325676}, /* NTF */ + { 0., 0., 0., 6378137.0, 0.0033528106647474805, 0.08181919106}, /* WGS84 */ + {-87.0, -98., -121.0, 6378388.0, 0.003367003367003367, 0.08199188998}, /* ED50 */ + { 0.0, 125.0, 194.0, 6378067.6, 0.0033155460257, 0.08181919106} /* NAD27 */ }; -/* From http://www.tandt.be/wis/WiS/eqntf.html and http://www.ign.fr/MP/GEOD/geodesie/coordonnees.html */ -const struct lambert lamberts[LAMBERT_NB] = { +/* From http://www.tandt.be/wis/WiS/eqntf.html and http://www.ign.fr/MP/GEOD/geodesie/coordonnees.html */ +const struct lambert lamberts[ LAMBERT_NB ] = { { /* LAMBERTI */ - &ellipsoids[NTF], - RAD_OF_DEG(DECIMAL(49., 30., 0.)), /* phi0 */ + &ellipsoids[ NTF ], + RAD_OF_DEG( DECIMAL( 49., 30., 0. ) ), /* phi0 */ 0.991996665, /* lphi0 */ 5457616.674, /* r0 */ - RAD_OF_DEG(DECIMAL(2., 20., 14.025)), /* lambda0 */ + RAD_OF_DEG( DECIMAL( 2., 20., 14.025 ) ), /* lambda0 */ 600000, /* x0 */ 200000, /* y0 */ 5657617, /* ys */ 0.99987734 /* k0 */ }, { /* LAMBERTII */ - &ellipsoids[NTF], - RAD_OF_DEG(DECIMAL(46., 48., 0.)), /* phi0 */ + &ellipsoids[ NTF ], + RAD_OF_DEG( DECIMAL( 46., 48., 0. ) ), /* phi0 */ 0.921557361, /* lphi0 */ 5999695.77, /* r0 */ - RAD_OF_DEG(DECIMAL(2., 20., 14.025)), /* lambda0 */ + RAD_OF_DEG( DECIMAL( 2., 20., 14.025 ) ), /* lambda0 */ 600000, /* x0 */ 2200000, /* y0 */ 6199696, /* ys */ 0.99987742 /* k0 */ }, { /* LAMBERTIIE */ - &ellipsoids[NTF], - RAD_OF_DEG(DECIMAL(46., 48., 0.)), /* phi0 */ + &ellipsoids[ NTF ], + RAD_OF_DEG( DECIMAL( 46., 48., 0. ) ), /* phi0 */ 0.921557361, /* lphi0 */ 5999695.77, /* r0 */ - RAD_OF_DEG(DECIMAL(2., 20., 14.025)), /* lambda0 */ + RAD_OF_DEG( DECIMAL( 2., 20., 14.025 ) ), /* lambda0 */ 600000, /* x0 */ 2200000, /* y0 */ 8199696, /* ys */ 0.99987742 /* k0 */ }, { /* LAMBERTIII */ - &ellipsoids[NTF], - RAD_OF_DEG(DECIMAL(44., 6., 0.)), /* phi0 */ + &ellipsoids[ NTF ], + RAD_OF_DEG( DECIMAL( 44., 6., 0. ) ), /* phi0 */ 0.921557361, /* lphi0 */ 6591905.08, /* r0 */ - RAD_OF_DEG(DECIMAL(2., 20., 14.025)), /* lambda0 */ + RAD_OF_DEG( DECIMAL( 2., 20., 14.025 ) ), /* lambda0 */ 600000, /* x0 */ 3200000, /* y0 */ 6791905, /* ys */ 0.99987750 /* k0 */ }, { /* LAMBERTIV */ - &ellipsoids[NTF], - RAD_OF_DEG(DECIMAL(42., 9., 54.)), /* phi0 */ + &ellipsoids[ NTF ], + RAD_OF_DEG( DECIMAL( 42., 9., 54. ) ), /* phi0 */ 0.921557361, /* lphi0 */ 7053300.18, /* r0 */ - RAD_OF_DEG(DECIMAL(2., 20., 14.025)), /* lambda0 */ + RAD_OF_DEG( DECIMAL( 2., 20., 14.025 ) ), /* lambda0 */ 234, /* x0 */ /* FIXME mmmmmmm suspicious */ 4185861, /* y0 */ 7239162, /* ys */ @@ -90,93 +90,113 @@ const struct lambert lamberts[LAMBERT_NB] = { }, }; -double distance_c2d(const struct double_c2d a, const struct double_c2d b) { - return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); +double distance_c2d( const struct double_c2d a, const struct double_c2d b ) +{ + return sqrt( ( a.x - b.x ) * ( a.x - b.x ) + ( a.y - b.y ) * ( a.y - b.y ) ); } -struct double_c2d vector_c2d(const struct double_c2d a, const struct double_c2d b) { +struct double_c2d vector_c2d( const struct double_c2d a, + const struct double_c2d b ) +{ struct double_c2d v; - v.x = b.x - a.x; + v.x = b.x - a.x; v.y = b.y - a.y; return v; } -struct double_c2d unit_vector_c2d(const struct double_c2d a, const struct double_c2d b) { - struct double_c2d v = vector_c2d(a, b); - scale_c2d_s(&v, 1/module_c2d(v)); +struct double_c2d unit_vector_c2d( const struct double_c2d a, + const struct double_c2d b ) +{ + struct double_c2d v = vector_c2d( a, b ); + scale_c2d_s( &v, 1 / module_c2d( v ) ); return v; } -struct double_c2d normal_vector_c2d(const struct double_c2d u) { +struct double_c2d normal_vector_c2d( const struct double_c2d u ) +{ struct double_c2d v; v.x = -u.y; v.y = u.x; return v; } -double vect_prod_c2d(const struct double_c2d a, const struct double_c2d b) { +double vect_prod_c2d( const struct double_c2d a, const struct double_c2d b ) +{ return a.x * b.y - a.y * b.x; } -double scal_prod_c2d(const struct double_c2d a, const struct double_c2d b) { +double scal_prod_c2d( const struct double_c2d a, const struct double_c2d b ) +{ return a.x * b.x + a.y * b.y; } -void rotate_c2d(struct double_c2d* a, double alpha) { +void rotate_c2d( struct double_c2d *a, double alpha ) +{ double tmp; - tmp = a->x*cos(alpha)-a->y*sin(alpha); - a->y = a->x*sin(alpha)+a->y*cos(alpha); + tmp = a->x * cos( alpha ) - a->y * sin( alpha ); + a->y = a->x * sin( alpha ) + a->y * cos( alpha ); a->x = tmp; } -double norme2_c2d(const struct double_c2d a) { - return a.x*a.x+a.y*a.y; +double norme2_c2d( const struct double_c2d a ) +{ + return a.x * a.x + a.y * a.y; } -double module_c2d(const struct double_c2d a) { - return sqrt(norme2_c2d(a)); +double module_c2d( const struct double_c2d a ) +{ + return sqrt( norme2_c2d( a ) ); } -void translate_c2d(struct double_c2d* a, const struct double_c2d v) { - add_c2d_s(a, v); +void translate_c2d( struct double_c2d *a, const struct double_c2d v ) +{ + add_c2d_s( a, v ); } -void add_c2d_s(struct double_c2d* a, const struct double_c2d b) { +void add_c2d_s( struct double_c2d *a, const struct double_c2d b ) +{ a->x = a->x + b.x; a->y = a->y + b.y; } -struct double_c2d add_c2d(struct double_c2d a, const struct double_c2d b) { - add_c2d_s(&a, b); +struct double_c2d add_c2d( struct double_c2d a, const struct double_c2d b ) +{ + add_c2d_s( &a, b ); return a; } -void normalise_c2d_s(struct double_c2d* a) { - scale_c2d_s(a, 1/module_c2d(*a)); +void normalise_c2d_s( struct double_c2d *a ) +{ + scale_c2d_s( a, 1 / module_c2d( *a ) ); } -struct double_c2d normalise_c2d(struct double_c2d a) { - normalise_c2d_s(&a); +struct double_c2d normalise_c2d( struct double_c2d a ) +{ + normalise_c2d_s( &a ); return a; } -void minus_c2d_s(struct double_c2d* a, const struct double_c2d b) { +void minus_c2d_s( struct double_c2d *a, const struct double_c2d b ) +{ a->x = a->x - b.x; a->y = a->y - b.y; } -struct double_c2d minus_c2d(struct double_c2d a, const struct double_c2d b) { - minus_c2d_s(&a, b); +struct double_c2d minus_c2d( struct double_c2d a, const struct double_c2d b ) +{ + minus_c2d_s( &a, b ); return a; } -void scale_c2d_s(struct double_c2d* v, double factor) { - v->x = v->x*factor; - v->y = v->y*factor; +void scale_c2d_s( struct double_c2d *v, double factor ) +{ + v->x = v->x * factor; + v->y = v->y * factor; } -struct double_c2d scale_c2d(struct double_c2d v, double factor) { - scale_c2d_s(&v, factor); +struct double_c2d scale_c2d( struct double_c2d v, double factor ) +{ + scale_c2d_s( &v, factor ); return v; } @@ -188,41 +208,48 @@ struct double_c2d scale_c2d(struct double_c2d v, double factor) { while (val<-M_PI) val += 2. * M_PI;\ } -double mpi_pi(double val) { - MPI_PI(val); +double mpi_pi( double val ) +{ + MPI_PI( val ); return val; }; -struct double_c2d lin_interp_c2d(struct double_c2d a, double ta, struct double_c2d b, double tb, double t) { +struct double_c2d lin_interp_c2d( struct double_c2d a, double ta, + struct double_c2d b, double tb, double t ) +{ double delta_t = tb - ta; struct double_c2d res; - res.x = a.x + (t-ta)/delta_t*(b.x-a.x); - res.y = a.y + (t-ta)/delta_t*(b.y-a.y); + res.x = a.x + ( t - ta ) / delta_t *( b.x - a.x ); + res.y = a.y + ( t - ta ) / delta_t *( b.y - a.y ); return res; } -double wind_dir_from_angle_deg(double deg) { +double wind_dir_from_angle_deg( double deg ) +{ double w = 180. + 90. - deg; - while(w>360) w -= 360; + while ( w > 360 ) w -= 360; return w; } -double wind_dir_from_angle_rad(double rad) { +double wind_dir_from_angle_rad( double rad ) +{ double w = M_PI + M_PI_2 - rad; - while(w>2*M_PI) w -= (2*M_PI); + while ( w > 2 * M_PI ) w -= ( 2 * M_PI ); return w; } -double heading_of_to_angle_deg(double angle) { +double heading_of_to_angle_deg( double angle ) +{ double a = 90. - angle + 360.; - while (a>=180.) a-=360.; + while ( a >= 180. ) a -= 360.; return a; } -double heading_of_to_angle_rad(double angle) { +double heading_of_to_angle_rad( double angle ) +{ double two_pi = 2 * M_PI; double a = M_PI_2 - angle + two_pi; - while (a >= two_pi) a-= two_pi; + while ( a >= two_pi ) a -= two_pi; return a; } @@ -230,165 +257,194 @@ double heading_of_to_angle_rad(double angle) { #define G 9.81 #define ACCEL_DOWN 0 -double compute_phi(struct double_c2d curspeed, struct double_c2d last_speed, double delta_t) { +double compute_phi( struct double_c2d curspeed, struct double_c2d last_speed, + double delta_t ) +{ double accel_norm, accel_tgt, phi; - struct double_c2d accel = minus_c2d(curspeed, last_speed); + struct double_c2d accel = minus_c2d( curspeed, last_speed ); // printf("%lf %lf %lf %lf %lf\n", curspeed.x, curspeed.y, last_speed.x, last_speed.y, delta_t); - scale_c2d_s( &accel, 1/delta_t); - accel_norm = vect_prod_c2d(accel, curspeed) / module_c2d(curspeed); - accel_tgt = scal_prod_c2d(accel, curspeed) / module_c2d(curspeed); - phi = -atan2(accel_norm, G - ACCEL_DOWN); + scale_c2d_s( &accel, 1 / delta_t ); + accel_norm = vect_prod_c2d( accel, curspeed ) / module_c2d( curspeed ); + accel_tgt = scal_prod_c2d( accel, curspeed ) / module_c2d( curspeed ); + phi = -atan2( accel_norm, G - ACCEL_DOWN ); return phi; } -double angle_c2d(struct double_c2d u, struct double_c2d v) { - double alpha1 = atan2(u.y, u.x); - double alpha2 = atan2(v.y, v.x); +double angle_c2d( struct double_c2d u, struct double_c2d v ) +{ + double alpha1 = atan2( u.y, u.x ); + double alpha2 = atan2( v.y, v.x ); double alpha = alpha2 - alpha1; - MPI_PI(alpha); + MPI_PI( alpha ); return alpha; } -struct double_p2d p2d_of_c2d(const struct double_c2d c) { +struct double_p2d p2d_of_c2d( const struct double_c2d c ) +{ struct double_p2d p; - p.r = module_c2d(c); - p.teta = atan2(c.y, c.x); + p.r = module_c2d( c ); + p.teta = atan2( c.y, c.x ); return p; } -struct double_c2d c2d_of_p2d(const struct double_p2d p) { +struct double_c2d c2d_of_p2d( const struct double_p2d p ) +{ struct double_c2d c; - c.x = p.r * cos(p.teta); - c.y = p.r * sin(p.teta); + c.x = p.r * cos( p.teta ); + c.y = p.r * sin( p.teta ); return c; } -struct double_p2d add_p2d(const struct double_p2d p1, const struct double_p2d p2) { -/* p.r = sqrt(p1.r*p1.r + p2.r*p2.r + 2 * p1.r * p2.r * cos ( p1.teta - p2.teta )); */ -/* p.teta = 0; */ - struct double_c2d c1 = c2d_of_p2d(p1); - struct double_c2d c2 = c2d_of_p2d(p2); - struct double_c2d c3 = add_c2d(c1, c2); - struct double_p2d p = p2d_of_c2d(c3); +struct double_p2d add_p2d( const struct double_p2d p1, + const struct double_p2d p2 ) +{ + /* p.r = sqrt(p1.r*p1.r + p2.r*p2.r + 2 * p1.r * p2.r * cos ( p1.teta - p2.teta )); */ + /* p.teta = 0; */ + struct double_c2d c1 = c2d_of_p2d( p1 ); + struct double_c2d c2 = c2d_of_p2d( p2 ); + struct double_c2d c3 = add_c2d( c1, c2 ); + struct double_p2d p = p2d_of_c2d( c3 ); return p; } -struct double_p2d minus_p2d(const struct double_p2d p1, const struct double_p2d p2) { - struct double_c2d c1 = c2d_of_p2d(p1); - struct double_c2d c2 = c2d_of_p2d(p2); - struct double_c2d c3 = minus_c2d(c1, c2); - struct double_p2d p = p2d_of_c2d(c3); +struct double_p2d minus_p2d( const struct double_p2d p1, + const struct double_p2d p2 ) +{ + struct double_c2d c1 = c2d_of_p2d( p1 ); + struct double_c2d c2 = c2d_of_p2d( p2 ); + struct double_c2d c3 = minus_c2d( c1, c2 ); + struct double_p2d p = p2d_of_c2d( c3 ); return p; } -struct double_c2d c2d_of_polar(double r, double teta) { - struct double_c2d res = {r*cos(teta), r*sin(teta)}; +struct double_c2d c2d_of_polar( double r, double teta ) +{ + struct double_c2d res = {r * cos( teta ), r * sin( teta )}; return res; } -void translate_c3d(struct double_c3d* a, const struct double_c3d v) { +void translate_c3d( struct double_c3d *a, const struct double_c3d v ) +{ a->x = a->x + v.x; a->y = a->y + v.y; a->z = a->z + v.z; } -void scale_c3d(struct double_c3d* v, double factor) { - v->x = v->x*factor; - v->y = v->y*factor; - v->z = v->z*factor; -} - -static double inverse_latitude_isometrique(double lat, double e, double epsilon) { - double exp_l = exp(lat); - double phi0 = 2. * atan(exp_l -M_PI_2); - double loop(double phi) { - double sin_phi = e * sin(phi); - double new_phi = 2. * atan (pow((1. + sin_phi) / (1. - sin_phi), e/2) * exp_l) - M_PI_2; - if (fabs(phi - new_phi) < epsilon) return new_phi; - return loop(new_phi); +void scale_c3d( struct double_c3d *v, double factor ) +{ + v->x = v->x * factor; + v->y = v->y * factor; + v->z = v->z * factor; +} + +static double inverse_latitude_isometrique( double lat, double e, + double epsilon ) +{ + double exp_l = exp( lat ); + double phi0 = 2. * atan( exp_l - M_PI_2 ); + double loop( double phi ) { + double sin_phi = e * sin( phi ); + double new_phi = 2. * atan ( pow( ( 1. + sin_phi ) / ( 1. - sin_phi ), + e / 2 ) * exp_l ) - M_PI_2; + if ( fabs( phi - new_phi ) < epsilon ) return new_phi; + return loop( new_phi ); } - return loop(phi0); + return loop( phi0 ); } -static double lambert_n (const enum type_lambert lmb) { return sin(lamberts[lmb].phi0); } -static double lambert_c (const enum type_lambert lmb) { - return lamberts[lmb].r0 * exp(lamberts[lmb].phi0 * lambert_n(lmb)); +static double lambert_n ( const enum type_lambert lmb ) +{ + return sin( lamberts[ lmb ].phi0 ); +} +static double lambert_c ( const enum type_lambert lmb ) +{ + return lamberts[ lmb ].r0 * exp( lamberts[ lmb ].phi0 * lambert_n( lmb ) ); } -void lambert_of_e2d (const enum type_lambert lmb, const enum type_ellipsoid elps, - struct double_e2d e2d_pos, struct double_c2d *lmb_pos) { +void lambert_of_e2d ( const enum type_lambert lmb, + const enum type_ellipsoid elps, + struct double_e2d e2d_pos, struct double_c2d *lmb_pos ) +{ double n, ll, r, gamma; - e2d_of_e2d(NTF, elps, &e2d_pos); - n = lambert_n(lmb); - ll = LATITUDE_ISOMETRIQUE(e2d_pos.lat, lamberts[lmb].ellipsoid->e); - r = lamberts[lmb].r0 * exp(lamberts[lmb].lphi0 * sin(lamberts[lmb].phi0)) * exp(-ll*n); - gamma = (e2d_pos.lon - lamberts[lmb].lambda0) * n; - lmb_pos->x = (double)lamberts[lmb].x0 + r * sin(gamma); - lmb_pos->y = (double)lamberts[lmb].ys - r * cos(gamma); -} - -void e2d_of_lambert (const enum type_lambert lmb, const enum type_ellipsoid elps, - struct double_c2d c_pos, struct double_e2d *e_pos) { - double dx = c_pos.x - lamberts[lmb].x0; - double dy = c_pos.y - lamberts[lmb].ys; - double r = sqrt(dx*dx + dy*dy); - double gamma = atan2(dx, -dy); - double lambda = lamberts[lmb].lambda0 + gamma / lambert_n(lmb); - double ll = -1. / lambert_n(lmb) * log(fabs(r/lambert_c(lmb))); - double phi = inverse_latitude_isometrique(ll, lamberts[lmb].ellipsoid->e, 1e-11); - e_pos->lon = lambda; e_pos->lat = phi; - e2d_of_e2d(elps, NTF, e_pos); -} - -void e2d_of_e2d(const enum type_ellipsoid dest, const enum type_ellipsoid src, struct double_e2d *e2d_pos) { - if (dest != src) { - double sin_lat = sin(e2d_pos->lat); - double cos_lat = cos(e2d_pos->lat); - double sin_lon = sin(e2d_pos->lon); - double cos_lon = cos(e2d_pos->lon); - double d16 = E_SQUARE(ellipsoids[src].df); - double d17 = E_SQUARE(ellipsoids[dest].df); - double d18 = ellipsoids[src].a / sqrt (1.0 - d16 * sin_lat * sin_lat); + e2d_of_e2d( NTF, elps, &e2d_pos ); + n = lambert_n( lmb ); + ll = LATITUDE_ISOMETRIQUE( e2d_pos.lat, lamberts[ lmb ].ellipsoid->e ); + r = lamberts[ lmb ].r0 * exp( lamberts[ lmb ].lphi0 * sin( lamberts[ lmb ].phi0 ) ) * + exp( -ll * n ); + gamma = ( e2d_pos.lon - lamberts[ lmb ].lambda0 ) * n; + lmb_pos->x = ( double )lamberts[ lmb ].x0 + r * sin( gamma ); + lmb_pos->y = ( double )lamberts[ lmb ].ys - r * cos( gamma ); +} + +void e2d_of_lambert ( const enum type_lambert lmb, + const enum type_ellipsoid elps, + struct double_c2d c_pos, struct double_e2d *e_pos ) +{ + double dx = c_pos.x - lamberts[ lmb ].x0; + double dy = c_pos.y - lamberts[ lmb ].ys; + double r = sqrt( dx * dx + dy * dy ); + double gamma = atan2( dx, -dy ); + double lambda = lamberts[ lmb ].lambda0 + gamma / lambert_n( lmb ); + double ll = -1. / lambert_n( lmb ) * log( fabs( r / lambert_c( lmb ) ) ); + double phi = inverse_latitude_isometrique( ll, lamberts[ lmb ].ellipsoid->e, + 1e-11 ); + e_pos->lon = lambda; + e_pos->lat = phi; + e2d_of_e2d( elps, NTF, e_pos ); +} + +void e2d_of_e2d( const enum type_ellipsoid dest, const enum type_ellipsoid src, + struct double_e2d *e2d_pos ) +{ + if ( dest != src ) { + double sin_lat = sin( e2d_pos->lat ); + double cos_lat = cos( e2d_pos->lat ); + double sin_lon = sin( e2d_pos->lon ); + double cos_lon = cos( e2d_pos->lon ); + double d16 = E_SQUARE( ellipsoids[ src ].df ); + double d17 = E_SQUARE( ellipsoids[ dest ].df ); + double d18 = ellipsoids[ src ].a / sqrt ( 1.0 - d16 * sin_lat * sin_lat ); double d20 = d18 * cos_lat * cos_lon; double d21 = d18 * cos_lat * sin_lon; - double d22 = d18 * (1.0 - d16) * sin_lat; - double d23 = d20 - ellipsoids[dest].dx + ellipsoids[src].dx; - double d24 = d21 - ellipsoids[dest].dy + ellipsoids[src].dy; - double d25 = d22 - ellipsoids[dest].dz + ellipsoids[src].dz; - double d26 = sqrt (d23 * d23 + d24 * d24); - double d27 = atan2(d25, d26*(1.0 - ellipsoids[dest].df)); - double d28 = ellipsoids[dest].a *(1.0 - ellipsoids[dest].df); - double d29 = E_PRIME_SQUARE(ellipsoids[dest].df); - double d3 = atan2((d25 + d29 * d28 * sin(d27) * sin(d27) * sin(d27)), - (d26 - d17 * ellipsoids[dest].a * cos(d27) * cos(d27) * cos(d27))); - double d4 = atan2(d24, d23); + double d22 = d18 * ( 1.0 - d16 ) * sin_lat; + double d23 = d20 - ellipsoids[ dest ].dx + ellipsoids[ src ].dx; + double d24 = d21 - ellipsoids[ dest ].dy + ellipsoids[ src ].dy; + double d25 = d22 - ellipsoids[ dest ].dz + ellipsoids[ src ].dz; + double d26 = sqrt ( d23 * d23 + d24 * d24 ); + double d27 = atan2( d25, d26 * ( 1.0 - ellipsoids[ dest ].df ) ); + double d28 = ellipsoids[ dest ].a * ( 1.0 - ellipsoids[ dest ].df ); + double d29 = E_PRIME_SQUARE( ellipsoids[ dest ].df ); + double d3 = atan2( ( d25 + d29 * d28 * sin( d27 ) * sin( d27 ) * sin( d27 ) ), + ( d26 - d17 * ellipsoids[ dest ].a * cos( d27 ) * cos( d27 ) * cos( d27 ) ) ); + double d4 = atan2( d24, d23 ); e2d_pos->lon = d4; e2d_pos->lat = d3; } } -/* +/* converts 3d cartesian coordinate to 3d ellipsoidal */ -void e3d_of_c3d(const enum type_ellipsoid elps, struct double_c3d c_pos, struct double_e3d *e_pos) { +void e3d_of_c3d( const enum type_ellipsoid elps, struct double_c3d c_pos, + struct double_e3d *e_pos ) +{ #define WGS_84_SMA 6378137.00 #define WGS_84_SMB 6356752.31 #define E2 ((WGS_84_SMA*WGS_84_SMA-WGS_84_SMB*WGS_84_SMB)/(WGS_84_SMA*WGS_84_SMA)) #define PREC 0.000000000001 - double dist = sqrt(c_pos.x*c_pos.x+c_pos.y*c_pos.y); - double v, old_phi, new_phi = atan2((double)c_pos.z, dist*(1-E2)); + double dist = sqrt( c_pos.x * c_pos.x + c_pos.y * c_pos.y ); + double v, old_phi, new_phi = atan2( ( double )c_pos.z, dist * ( 1 - E2 ) ); do { old_phi = new_phi; - v = WGS_84_SMA / sqrt(1 - (E2 * sin(old_phi) * sin(old_phi))); - new_phi = atan2(((double)c_pos.z + E2 * v * sin (old_phi)), dist); - } - while (fabs(new_phi-old_phi)>PREC); + v = WGS_84_SMA / sqrt( 1 - ( E2 * sin( old_phi ) * sin( old_phi ) ) ); + new_phi = atan2( ( ( double )c_pos.z + E2 * v * sin ( old_phi ) ), dist ); + } while ( fabs( new_phi - old_phi ) > PREC ); e_pos->lat = new_phi; - e_pos->lon = atan2(c_pos.y,c_pos.x); - e_pos->h = (dist / cos (new_phi)) - v; + e_pos->lon = atan2( c_pos.y, c_pos.x ); + e_pos->h = ( dist / cos ( new_phi ) ) - v; } diff --git a/bench/parallel/PapaBench/sw/lib/c/logger.c b/bench/parallel/PapaBench/sw/lib/c/logger.c index 91135dd597ae0d7c7c55e810a5e5a66c91904316..99265b6546e6ca2f35856cc8040e46d38c0d77dc 100644 --- a/bench/parallel/PapaBench/sw/lib/c/logger.c +++ b/bench/parallel/PapaBench/sw/lib/c/logger.c @@ -1,24 +1,24 @@ -/* +/* logger.c Copyright (C) 2003 Antoine Drouin - This file is part of paparazzi. + This file is part of paparazzi. - paparazzi is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. - paparazzi is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with paparazzi; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ #include <sys/types.h> @@ -33,152 +33,161 @@ #include "logger.h" //static GList* logger_parse_messages(struct PprzProtocol* protocol, xmlDocPtr doc, xmlNodePtr cur); -static GList* logger_parse_message(struct PprzProtocol* protocol, GList* msgs, const guchar* buf); +static GList *logger_parse_message( struct PprzProtocol *protocol, GList *msgs, + const guchar *buf ); -struct Logger* logger_new(const gchar* out_file, xmlDocPtr doc) { - const gchar* opening = "<data>\n"; - struct Logger* this = g_new(struct Logger, 1); - if (this) { +struct Logger *logger_new( const gchar *out_file, xmlDocPtr doc ) +{ + const gchar *opening = "<data>\n"; + struct Logger *this = g_new( struct Logger, 1 ); + if ( this ) { GError *err = NULL; - - gchar* copy = strdup(out_file); - gchar* out_dir = dirname(copy); + + gchar *copy = strdup( out_file ); + gchar *out_dir = dirname( copy ); DIR *d; - if (!(d=opendir(out_dir))) { - if (errno == ENOENT) { - if (mkdir(out_dir, S_IRWXU | S_IRWXG)) { - g_message("log directory %s doesn't exist and could not create it", out_dir); - /* FIXME : FREE */ - return NULL; - } - } - else { - g_message("could not acces log directory %s %s", out_dir, g_strerror(errno)); - /* FIXME : FREE */ - return NULL; + if ( !( d = opendir( out_dir ) ) ) { + if ( errno == ENOENT ) { + if ( mkdir( out_dir, S_IRWXU | S_IRWXG ) ) { + g_message( "log directory %s doesn't exist and could not create it", out_dir ); + /* FIXME : FREE */ + return NULL; + } + } else { + g_message( "could not acces log directory %s %s", out_dir, + g_strerror( errno ) ); + /* FIXME : FREE */ + return NULL; } } - closedir(d); - g_free(copy); + closedir( d ); + g_free( copy ); - xmlSaveFormatFile (out_file, doc, 1); + xmlSaveFormatFile ( out_file, doc, 1 ); /* FIXME : check result */ - - this->channel = g_io_channel_new_file(out_file, "a", &err); - if (err) { - g_message("could not open log file %s : %s", out_file, err->message); - g_error_free(err); - g_free(this); + + this->channel = g_io_channel_new_file( out_file, "a", &err ); + if ( err ) { + g_message( "could not open log file %s : %s", out_file, err->message ); + g_error_free( err ); + g_free( this ); return NULL; } - g_io_channel_write_chars(this->channel, opening, strlen(opening), NULL, NULL); + g_io_channel_write_chars( this->channel, opening, strlen( opening ), NULL, + NULL ); } return this; } -void logger_free(struct Logger* this) +void logger_free( struct Logger *this ) { - const gchar* closing = "</data>\n</log>\n"; - g_io_channel_write_chars(this->channel, closing, strlen(closing), NULL, NULL); - g_io_channel_flush(this->channel, NULL); + const gchar *closing = "</data>\n</log>\n"; + g_io_channel_write_chars( this->channel, closing, strlen( closing ), NULL, + NULL ); + g_io_channel_flush( this->channel, NULL ); // g_io_channel_free(this->channel); - g_free(this); + g_free( this ); } -void logger_log(struct Logger* this, struct PprzMsg* msg) { +void logger_log( struct Logger *this, struct PprzMsg *msg ) +{ GString *str; - pprz_protocol_ascii_of_msg(msg, &str); - if (str) { + pprz_protocol_ascii_of_msg( msg, &str ); + if ( str ) { GError *err = NULL; guint len; - g_io_channel_write_chars (this->channel, str->str, str->len, &len, &err); - if (err) { - g_warning("log write failed %s", err->message); - g_error_free(err); - g_string_free(str, TRUE); + g_io_channel_write_chars ( this->channel, str->str, str->len, &len, &err ); + if ( err ) { + g_warning( "log write failed %s", err->message ); + g_error_free( err ); + g_string_free( str, TRUE ); return; } - g_string_free(str, TRUE); - g_io_channel_flush(this->channel, &err); - if (err) { - g_warning("log flush failed %s", err->message); - g_error_free(err); + g_string_free( str, TRUE ); + g_io_channel_flush( this->channel, &err ); + if ( err ) { + g_warning( "log flush failed %s", err->message ); + g_error_free( err ); return; } } } -GList* logger_parse_log(const gchar* filename, struct PprzProtocol** protocol) { +GList *logger_parse_log( const gchar *filename, + struct PprzProtocol **protocol ) +{ xmlDocPtr doc; xmlNodePtr cur; - GList* msgs = NULL; - const gchar* protocol_closure = "</protocol>"; + GList *msgs = NULL; + const gchar *protocol_closure = "</protocol>"; gchar *contents, *data_start; gsize len; - GError* err; - gboolean res = g_file_get_contents(filename, &contents, &len, &err); - - if (!res) { - g_message("could not read file %s : %s", filename, err->message); - g_error_free(err); + GError *err; + gboolean res = g_file_get_contents( filename, &contents, &len, &err ); + + if ( !res ) { + g_message( "could not read file %s : %s", filename, err->message ); + g_error_free( err ); return NULL; } - if (!(data_start = g_strstr_len(contents, len, protocol_closure))) { - g_free(contents); - g_message("protocol closing not found"); + if ( !( data_start = g_strstr_len( contents, len, protocol_closure ) ) ) { + g_free( contents ); + g_message( "protocol closing not found" ); return NULL; } - data_start += strlen(protocol_closure); - - if (!( doc = xmlParseMemory(contents, data_start - contents))) { - g_free(contents); - g_message("error parsing protocol xml"); + data_start += strlen( protocol_closure ); + + if ( !( doc = xmlParseMemory( contents, data_start - contents ) ) ) { + g_free( contents ); + g_message( "error parsing protocol xml" ); return NULL; } - - if (!(cur = xmlDocGetRootElement(doc))) { - g_free(contents); - g_message("empty protocol"); + + if ( !( cur = xmlDocGetRootElement( doc ) ) ) { + g_free( contents ); + g_message( "empty protocol" ); return NULL; } - if (!(*protocol = pprz_protocol_new_from_xml(doc, cur))) { - g_free(contents); - g_message("error interpreting protocol"); + if ( !( *protocol = pprz_protocol_new_from_xml( doc, cur ) ) ) { + g_free( contents ); + g_message( "error interpreting protocol" ); return NULL; } - msgs = logger_parse_message(*protocol, msgs, data_start); - g_free(contents); + msgs = logger_parse_message( *protocol, msgs, data_start ); + g_free( contents ); return msgs; } /* static GList* logger_parse_messages(struct PprzProtocol* protocol, xmlDocPtr doc, xmlNodePtr cur) { */ - + /* if (!cur) return NULL; */ /* if (xmlStrcmp(cur->name, (const xmlChar *) "data")) */ /* return cur->next?logger_parse_messages(protocol, doc, cur->next):NULL; */ /* cur = cur->xmlChildrenNode; */ - + /* if (xmlStrcmp(cur->name, (const xmlChar *) "text")) */ /* return NULL; */ - + /* return logger_parse_message(protocol, NULL, cur->content); */ /* } */ -static GList* logger_parse_message(struct PprzProtocol* protocol, GList* msgs, const guchar* buf) { - guchar* next; - struct PprzMsg* msg = pprz_protocol_msg_new_of_ascii(protocol, buf); - if (msg) - msgs = g_list_append(msgs, msg); - if ((next = index(buf, '\n'))) - return logger_parse_message(protocol, msgs, next+1); +static GList *logger_parse_message( struct PprzProtocol *protocol, GList *msgs, + const guchar *buf ) +{ + guchar *next; + struct PprzMsg *msg = pprz_protocol_msg_new_of_ascii( protocol, buf ); + if ( msg ) + msgs = g_list_append( msgs, msg ); + if ( ( next = index( buf, '\n' ) ) ) + return logger_parse_message( protocol, msgs, next + 1 ); return msgs; } diff --git a/bench/parallel/PapaBench/sw/lib/c/math.c b/bench/parallel/PapaBench/sw/lib/c/math.c index f1d45d70f1bc19005ae5b5bc069d5039de383a3c..dd1e05cec6d29435754c2185a086c275031b4d89 100644 --- a/bench/parallel/PapaBench/sw/lib/c/math.c +++ b/bench/parallel/PapaBench/sw/lib/c/math.c @@ -1,94 +1,93 @@ /* - * Math library emulation functions - * - * Copyright (C) 2007 IRIT - UPS <casse@irit.fr> - * - * This file is part of papabench. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with papabench; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ + Math library emulation functions + + Copyright (C) 2007 IRIT - UPS <casse@irit.fr> + + This file is part of papabench. + + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with papabench; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #include <math.h> -double pp_atan2(double x, double y) +double pp_atan2( double x, double y ) { - double coeff_1 = M_PI/4; - double coeff_2 = 3*coeff_1; - double abs_y = fabs(y)+1e-10; - double angle, r; - if(x>0) - { - r = (x - abs_y)/(x + abs_y); - angle = coeff_1 - coeff_1*r; - } - else - { - r = (x + abs_y)/(abs_y - x); - angle = coeff_2 - coeff_1*r; - } - if(y<0) - return (-angle); - else - return angle; + double coeff_1 = M_PI / 4; + double coeff_2 = 3 * coeff_1; + double abs_y = fabs( y ) + 1e-10; + double angle, r; + if ( x > 0 ) { + r = ( x - abs_y ) / ( x + abs_y ); + angle = coeff_1 - coeff_1 * r; + } else { + r = ( x + abs_y ) / ( abs_y - x ); + angle = coeff_2 - coeff_1 * r; + } + if ( y < 0 ) + return ( -angle ); + else + return angle; } /* Calculates sin(x), angle x must be in rad. - * Range: -pi/2 <= x <= pi/2 - * Precision: +/- .000,000,005 - */ - -double pp_sin(double x) + Range: -pi/2 <= x <= pi/2 + Precision: +/- .000,000,005 +*/ + +double pp_sin( double x ) { - double xi, y, q, q2; - int sign; + double xi, y, q, q2; + int sign; - xi = x; sign = 1; - _Pragma("loopbound min 0 max 0" ) - while (xi < -1.57079632679489661923) xi += 6.28318530717958647692; - _Pragma("loopbound min 0 max 0" ) - while (xi > 4.71238898038468985769) xi -= 6.28318530717958647692; - if (xi > 1.57079632679489661923) { - xi -= 3.141592653589793238462643; - sign = -1; - } - q = xi / 1.57079632679; q2 = q * q; - y = ((((.00015148419 * q2 - - .00467376557) * q2 - + .07968967928) * q2 - - .64596371106) * q2 - +1.57079631847) * q; - return(sign < 0? -y : y); + xi = x; + sign = 1; + _Pragma( "loopbound min 0 max 0" ) + while ( xi < -1.57079632679489661923 ) xi += 6.28318530717958647692; + _Pragma( "loopbound min 0 max 0" ) + while ( xi > 4.71238898038468985769 ) xi -= 6.28318530717958647692; + if ( xi > 1.57079632679489661923 ) { + xi -= 3.141592653589793238462643; + sign = -1; + } + q = xi / 1.57079632679; + q2 = q * q; + y = ( ( ( ( .00015148419 * q2 + - .00467376557 ) * q2 + + .07968967928 ) * q2 + - .64596371106 ) * q2 + + 1.57079631847 ) * q; + return ( sign < 0 ? -y : y ); } #define SQRT_PRECISION 5 -double pp_sqrt(double n) +double pp_sqrt( double n ) { -#if 0 - float x, m; - int i, e; - - /* compute the approximation */ - m = frexpf(n, &e); - x = ldexp(m, e/2); - - /* perform the computation */ + #if 0 + float x, m; + int i, e; + + /* compute the approximation */ + m = frexpf( n, &e ); + x = ldexp( m, e / 2 ); + + /* perform the computation */ _Pragma( "loopbound min 5 max 5 ) - for(i = 0; i < SQRT_PRECISION; i++) - x = (x + n / x) / 2; - return x; -#endif + for ( i = 0; i < SQRT_PRECISION; i++ ) + x = ( x + n / x ) / 2; + return x; + #endif } diff --git a/bench/parallel/PapaBench/sw/lib/c/network.c b/bench/parallel/PapaBench/sw/lib/c/network.c index 27830780a92bc84262adc9dec05072059bcd726b..e32e60a6c2445c51ffba9161db557950fb0ca1d3 100644 --- a/bench/parallel/PapaBench/sw/lib/c/network.c +++ b/bench/parallel/PapaBench/sw/lib/c/network.c @@ -1,24 +1,24 @@ -/* +/* $id:$ Copyright (C) 2003 Antoine Drouin - This file is part of paparazzi. + This file is part of paparazzi. - paparazzi is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. - paparazzi is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with paparazzi; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ /* network functions @@ -35,29 +35,34 @@ #include <sys/socket.h> #include <arpa/inet.h> -static gboolean server_on_data_received(GIOChannel *source, GIOCondition condition, gpointer data); -static gboolean client_on_data_received(GIOChannel *source, GIOCondition condition, gpointer data); - -struct NetworkServer* network_server_new(struct PprzProtocol* protocol, const char* bcast_addr, const int bcast_port, - GFunc rcv_callback, GFunc err_callback, gpointer user_data) { - struct NetworkServer* this = g_new(struct NetworkServer, 1); - if (this) { - GIOChannel* channel; - struct protoent * pte = getprotobyname("UDP"); +static gboolean server_on_data_received( GIOChannel *source, + GIOCondition condition, gpointer data ); +static gboolean client_on_data_received( GIOChannel *source, + GIOCondition condition, gpointer data ); + +struct NetworkServer *network_server_new( struct PprzProtocol *protocol, + const char *bcast_addr, const int bcast_port, + GFunc rcv_callback, GFunc err_callback, gpointer user_data ) +{ + struct NetworkServer *this = g_new( struct NetworkServer, 1 ); + if ( this ) { + GIOChannel *channel; + struct protoent *pte = getprotobyname( "UDP" ); static int so_broadcast = TRUE; - this->bcast_socket = socket( PF_INET, SOCK_DGRAM, pte->p_proto); - setsockopt(this->bcast_socket, SOL_SOCKET, SO_BROADCAST, &so_broadcast, sizeof(so_broadcast)); + this->bcast_socket = socket( PF_INET, SOCK_DGRAM, pte->p_proto ); + setsockopt( this->bcast_socket, SOL_SOCKET, SO_BROADCAST, &so_broadcast, + sizeof( so_broadcast ) ); this->bcast_addr.sin_family = PF_INET; - this->bcast_addr.sin_port = htons(bcast_port); - this->bcast_addr.sin_addr.s_addr = inet_addr(bcast_addr); + this->bcast_addr.sin_port = htons( bcast_port ); + this->bcast_addr.sin_addr.s_addr = inet_addr( bcast_addr ); - channel = g_io_channel_unix_new(this->bcast_socket); - g_io_add_watch (channel, G_IO_IN | G_IO_PRI, server_on_data_received, this); + channel = g_io_channel_unix_new( this->bcast_socket ); + g_io_add_watch ( channel, G_IO_IN | G_IO_PRI, server_on_data_received, this ); this->protocol = protocol; - + this->rcv_callback = rcv_callback; this->err_callback = err_callback; this->user_data = user_data; @@ -67,37 +72,42 @@ struct NetworkServer* network_server_new(struct PprzProtocol* protocol, const ch #define FIXME_LEN 2048 -void network_server_dispatch(struct NetworkServer* this, struct PprzMsg* msg) { - guchar buf[FIXME_LEN]; - GTimeVal* date = (GTimeVal*)buf; - guchar* type = buf + sizeof(GTimeVal); - guchar* data = type + 1; - guint len = sizeof(GTimeVal) + msg->class->size; +void network_server_dispatch( struct NetworkServer *this, struct PprzMsg *msg ) +{ + guchar buf[ FIXME_LEN ]; + GTimeVal *date = ( GTimeVal * )buf; + guchar *type = buf + sizeof( GTimeVal ); + guchar *data = type + 1; + guint len = sizeof( GTimeVal ) + msg->class->size; *date = msg->date; *type = msg->class->id; - memcpy(data, msg->bytes, msg->class->size - 1); - if (sendto(this->bcast_socket, buf, len, 0, - (struct sockaddr*)&this->bcast_addr, sizeof(this->bcast_addr)) == -1) - g_message("error broadcasting"); + memcpy( data, msg->bytes, msg->class->size - 1 ); + if ( sendto( this->bcast_socket, buf, len, 0, + ( struct sockaddr * )&this->bcast_addr, sizeof( this->bcast_addr ) ) == -1 ) + g_message( "error broadcasting" ); } -struct NetworkClient* network_client_new(struct PprzProtocol* protocol, const char* bcast_addr, const int bcast_port, - GFunc rcv_callback, GFunc err_callback, gpointer user_data) { - struct NetworkClient* this = g_new(struct NetworkClient, 1); - if (this) { +struct NetworkClient *network_client_new( struct PprzProtocol *protocol, + const char *bcast_addr, const int bcast_port, + GFunc rcv_callback, GFunc err_callback, gpointer user_data ) +{ + struct NetworkClient *this = g_new( struct NetworkClient, 1 ); + if ( this ) { int so_reuseaddr = TRUE; - GIOChannel* channel; - struct protoent * pte = getprotobyname("UDP"); + GIOChannel *channel; + struct protoent *pte = getprotobyname( "UDP" ); - this->socket = socket( PF_INET, SOCK_DGRAM, pte->p_proto); - setsockopt(this->socket, SOL_SOCKET, SO_REUSEADDR, &so_reuseaddr, sizeof(so_reuseaddr)); + this->socket = socket( PF_INET, SOCK_DGRAM, pte->p_proto ); + setsockopt( this->socket, SOL_SOCKET, SO_REUSEADDR, &so_reuseaddr, + sizeof( so_reuseaddr ) ); this->bcast_addr.sin_family = PF_INET; - this->bcast_addr.sin_port = htons(bcast_port); - this->bcast_addr.sin_addr.s_addr = inet_addr(bcast_addr); - bind(this->socket, (struct sockaddr*)&this->bcast_addr, sizeof(this->bcast_addr)); + this->bcast_addr.sin_port = htons( bcast_port ); + this->bcast_addr.sin_addr.s_addr = inet_addr( bcast_addr ); + bind( this->socket, ( struct sockaddr * )&this->bcast_addr, + sizeof( this->bcast_addr ) ); - channel = g_io_channel_unix_new(this->socket); - g_io_add_watch (channel, G_IO_IN | G_IO_PRI, client_on_data_received, this); + channel = g_io_channel_unix_new( this->socket ); + g_io_add_watch ( channel, G_IO_IN | G_IO_PRI, client_on_data_received, this ); this->protocol = protocol; @@ -108,65 +118,73 @@ struct NetworkClient* network_client_new(struct PprzProtocol* protocol, const ch return this; } -void network_client_send_to_server(struct NetworkClient* this, struct PprzMsg* msg) { - guchar buf[FIXME_LEN]; - GTimeVal* date = (GTimeVal*)buf; - guchar* type = buf + sizeof(GTimeVal); - guchar* data = type + 1; - guint len = sizeof(GTimeVal) + msg->class->size; +void network_client_send_to_server( struct NetworkClient *this, + struct PprzMsg *msg ) +{ + guchar buf[ FIXME_LEN ]; + GTimeVal *date = ( GTimeVal * )buf; + guchar *type = buf + sizeof( GTimeVal ); + guchar *data = type + 1; + guint len = sizeof( GTimeVal ) + msg->class->size; *date = msg->date; *type = msg->class->id; - memcpy(data, msg->bytes, msg->class->size - 1); - if (sendto(this->socket, buf, len, 0, - (struct sockaddr*)&this->bcast_addr, sizeof(this->bcast_addr)) == -1) - g_message("error sending to server"); + memcpy( data, msg->bytes, msg->class->size - 1 ); + if ( sendto( this->socket, buf, len, 0, + ( struct sockaddr * )&this->bcast_addr, sizeof( this->bcast_addr ) ) == -1 ) + g_message( "error sending to server" ); } -static gboolean server_on_data_received(GIOChannel *source, GIOCondition condition, gpointer data) { - guchar buf[FIXME_LEN]; +static gboolean server_on_data_received( GIOChannel *source, + GIOCondition condition, gpointer data ) +{ + guchar buf[ FIXME_LEN ]; struct sockaddr_in from; int from_len; gint len; - struct NetworkServer* this = (struct NetworkServer*)data; - if ((len = recvfrom(this->bcast_socket, buf, FIXME_LEN, 0, (struct sockaddr*)&from, &from_len)) == -1) { - this->err_callback(NULL, this->user_data); + struct NetworkServer *this = ( struct NetworkServer * )data; + if ( ( len = recvfrom( this->bcast_socket, buf, FIXME_LEN, 0, + ( struct sockaddr * )&from, &from_len ) ) == -1 ) { + this->err_callback( NULL, this->user_data ); return FALSE; - } - else { - struct PprzMsg* msg; - GTimeVal* date = (GTimeVal*)buf; - guchar* ptr_type = buf + sizeof(GTimeVal); - if (!(msg = pprz_protocol_msg_new_of_bin(this->protocol, ptr_type, *date))) { - this->err_callback(NULL, this->user_data); + } else { + struct PprzMsg *msg; + GTimeVal *date = ( GTimeVal * )buf; + guchar *ptr_type = buf + sizeof( GTimeVal ); + if ( !( msg = pprz_protocol_msg_new_of_bin( this->protocol, ptr_type, + *date ) ) ) { + this->err_callback( NULL, this->user_data ); return TRUE; } - this->rcv_callback(msg, this->user_data); + this->rcv_callback( msg, this->user_data ); // g_message("network data received %s %d", inet_ntoa(from.sin_addr), ntohs(from.sin_port)); - + } return TRUE; } -static gboolean client_on_data_received(GIOChannel *source, GIOCondition condition, gpointer data) { - guchar buf[FIXME_LEN]; +static gboolean client_on_data_received( GIOChannel *source, + GIOCondition condition, gpointer data ) +{ + guchar buf[ FIXME_LEN ]; struct sockaddr_in from; int from_len; gint len; - struct NetworkClient* this = (struct NetworkClient*)data; - if ((len = recvfrom(this->socket, buf, FIXME_LEN, 0, (struct sockaddr*)&from, &from_len)) == -1) { - g_message("client_on_data_received [%s]", strerror(errno)); - this->err_callback(NULL, this->user_data); + struct NetworkClient *this = ( struct NetworkClient * )data; + if ( ( len = recvfrom( this->socket, buf, FIXME_LEN, 0, + ( struct sockaddr * )&from, &from_len ) ) == -1 ) { + g_message( "client_on_data_received [ %s ]", strerror( errno ) ); + this->err_callback( NULL, this->user_data ); return TRUE; - } - else { - struct PprzMsg* msg; - GTimeVal* date = (GTimeVal*)buf; - guchar* ptr_type = buf + sizeof(GTimeVal); - if (!(msg = pprz_protocol_msg_new_of_bin(this->protocol, ptr_type, *date))) { - this->err_callback(NULL, this->user_data); + } else { + struct PprzMsg *msg; + GTimeVal *date = ( GTimeVal * )buf; + guchar *ptr_type = buf + sizeof( GTimeVal ); + if ( !( msg = pprz_protocol_msg_new_of_bin( this->protocol, ptr_type, + *date ) ) ) { + this->err_callback( NULL, this->user_data ); return TRUE; } - this->rcv_callback(msg, this->user_data); + this->rcv_callback( msg, this->user_data ); // g_message("network data received %s %d", inet_ntoa(from.sin_addr), ntohs(from.sin_port)); } this->server_addr = from; diff --git a/bench/parallel/PapaBench/sw/lib/c/protocol.c b/bench/parallel/PapaBench/sw/lib/c/protocol.c index 621fe8c2785317ff9465b645b196029ed2779c99..9395f34694e8f983de93ca999991f14fac502226 100644 --- a/bench/parallel/PapaBench/sw/lib/c/protocol.c +++ b/bench/parallel/PapaBench/sw/lib/c/protocol.c @@ -1,36 +1,36 @@ -/* +/* $Id: protocol.c,v 1.1 2011-01-18 12:48:45 moellmer Exp $ Copyright (C) 2003 Pascal Brisset, Antoine Drouin - This file is part of paparazzi. + This file is part of paparazzi. - paparazzi is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. - paparazzi is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with paparazzi; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ #include "protocol.h" #include <stdlib.h> #include <string.h> struct PprzTypInfo { - gchar* xml_name; + gchar *xml_name; guint size; - gchar* default_format; + gchar *default_format; }; -const struct PprzTypInfo type_info[TYP_NB] = { +const struct PprzTypInfo type_info[ TYP_NB ] = { {"uint8", 1, "%hhu"}, {"uint16", 2, "%hu" }, {"uint32", 4, "%u" }, @@ -41,38 +41,48 @@ const struct PprzTypInfo type_info[TYP_NB] = { {"uint8_array", 1, "%0x"} }; -static gboolean parse_xml_msg(struct PprzProtocol* this, xmlNodePtr ptr); -static gboolean parse_xml_field(struct PprzMsgClass* msg_class, xmlNodePtr ptr); -static void ascii_of_fields(struct PprzMsg* msg, GList* fields_class, GString* buf); -static gboolean field_of_ascii(GList* fields_class, gchar* line, struct PprzMsg* msg); +static gboolean parse_xml_msg( struct PprzProtocol *this, xmlNodePtr ptr ); +static gboolean parse_xml_field( struct PprzMsgClass *msg_class, + xmlNodePtr ptr ); +static void ascii_of_fields( struct PprzMsg *msg, GList *fields_class, + GString *buf ); +static gboolean field_of_ascii( GList *fields_class, gchar *line, + struct PprzMsg *msg ); -static enum PprzFieldType type_of_string(const gchar* type_str); +static enum PprzFieldType type_of_string( const gchar *type_str ); -static struct PprzMsgClass* msg_class_of_name(struct PprzProtocol* this, const gchar* name); -static struct PprzMsgClass* msg_class_of_id(struct PprzProtocol* this, guchar id); +static struct PprzMsgClass *msg_class_of_name( struct PprzProtocol *this, + const gchar *name ); +static struct PprzMsgClass *msg_class_of_id( struct PprzProtocol *this, + guchar id ); -static struct PprzFieldClass* field_class_of_name(struct PprzMsg* msg, const gchar* name); +static struct PprzFieldClass *field_class_of_name( struct PprzMsg *msg, + const gchar *name ); /* static struct PprzFieldClass* field_class_of_id(struct PprzMsg* msg, guchar id); */ -struct PprzProtocol* pprz_protocol_new_from_xml(xmlDocPtr doc, xmlNodePtr cur) { - struct PprzProtocol* this; - if (!cur) return NULL; /* empty document */ - if (xmlStrcmp(cur->name, (const xmlChar *) "protocol")) /* not protocol */ - return cur->next?pprz_protocol_new_from_xml(doc, cur->next):NULL; - this= g_new(struct PprzProtocol, 1); +struct PprzProtocol *pprz_protocol_new_from_xml( xmlDocPtr doc, + xmlNodePtr cur ) +{ + struct PprzProtocol *this; + if ( !cur ) return NULL; /* empty document */ + if ( xmlStrcmp( cur->name, + ( const xmlChar * ) "protocol" ) ) /* not protocol */ + return cur->next ? pprz_protocol_new_from_xml( doc, cur->next ) : NULL; + this = g_new( struct PprzProtocol, 1 ); this->msgs_classes = NULL; - this->msgs_classes_by_name = g_hash_table_new(g_str_hash, g_str_equal); - if (!parse_xml_msg(this, cur->xmlChildrenNode)) { - g_free(this); + this->msgs_classes_by_name = g_hash_table_new( g_str_hash, g_str_equal ); + if ( !parse_xml_msg( this, cur->xmlChildrenNode ) ) { + g_free( this ); return NULL; } - this->nb_msgs_classes = g_list_length(this->msgs_classes); - this->msgs_classes_by_id = g_new(struct PprzMsgClass*, this->nb_msgs_classes); + this->nb_msgs_classes = g_list_length( this->msgs_classes ); + this->msgs_classes_by_id = g_new( struct PprzMsgClass *, + this->nb_msgs_classes ); { - GList* cur = this->msgs_classes; + GList *cur = this->msgs_classes; guint i = 0; - while (cur) { - this->msgs_classes_by_id[i] = cur->data; + while ( cur ) { + this->msgs_classes_by_id[ i ] = cur->data; i++; cur = cur->next; } @@ -80,436 +90,461 @@ struct PprzProtocol* pprz_protocol_new_from_xml(xmlDocPtr doc, xmlNodePtr cur) { return this; } -const gchar* pprz_protocol_str_of_field_type(enum PprzFieldType type) { - return type_info[type].xml_name; +const gchar *pprz_protocol_str_of_field_type( enum PprzFieldType type ) +{ + return type_info[ type ].xml_name; } -const guint pprz_protocol_size_of_field_type(enum PprzFieldType type) { - return type_info[type].size; +const guint pprz_protocol_size_of_field_type( enum PprzFieldType type ) +{ + return type_info[ type ].size; } -static enum PprzFieldType type_of_string(const gchar* type_str) { +static enum PprzFieldType type_of_string( const gchar *type_str ) +{ guint ret = 0; - while (ret<TYP_NB && strcmp(type_info[ret].xml_name, type_str)) + while ( ret < TYP_NB && strcmp( type_info[ ret ].xml_name, type_str ) ) ret++; return ret; } -struct PprzMsg* pprz_message_new(struct PprzMsgClass* msg_class, GTimeVal date) { - struct PprzMsg* this = g_new(struct PprzMsg, 1); +struct PprzMsg *pprz_message_new( struct PprzMsgClass *msg_class, + GTimeVal date ) +{ + struct PprzMsg *this = g_new( struct PprzMsg, 1 ); this->date = date; this->class = msg_class; - this->bytes = g_new(guchar, this->class->size - 1); + this->bytes = g_new( guchar, this->class->size - 1 ); return this; } -struct PprzMsg* pprz_protocol_msg_new_by_id(struct PprzProtocol* this, guchar id, GTimeVal date) { - struct PprzMsgClass* msg_class = msg_class_of_id(this, id); - if (msg_class) return pprz_message_new(msg_class, date); +struct PprzMsg *pprz_protocol_msg_new_by_id( struct PprzProtocol *this, + guchar id, GTimeVal date ) +{ + struct PprzMsgClass *msg_class = msg_class_of_id( this, id ); + if ( msg_class ) return pprz_message_new( msg_class, date ); return NULL; } -struct PprzMsg* pprz_protocol_msg_new_by_name(struct PprzProtocol* this, const gchar* name, GTimeVal date) { - struct PprzMsgClass* msg_class = msg_class_of_name(this, name); - if (msg_class) return pprz_message_new(msg_class, date); +struct PprzMsg *pprz_protocol_msg_new_by_name( struct PprzProtocol *this, + const gchar *name, GTimeVal date ) +{ + struct PprzMsgClass *msg_class = msg_class_of_name( this, name ); + if ( msg_class ) return pprz_message_new( msg_class, date ); return NULL; } -struct PprzMsg* pprz_protocol_msg_new_of_bin(struct PprzProtocol* this, const guchar* buf, GTimeVal date) { - struct PprzMsg* msg = pprz_protocol_msg_new_by_id(this, buf[0], date); - if (msg) - memcpy(msg->bytes, buf+1, msg->class->size-1); +struct PprzMsg *pprz_protocol_msg_new_of_bin( struct PprzProtocol *this, + const guchar *buf, GTimeVal date ) +{ + struct PprzMsg *msg = pprz_protocol_msg_new_by_id( this, buf[ 0 ], date ); + if ( msg ) + memcpy( msg->bytes, buf + 1, msg->class->size - 1 ); return msg; } -struct PprzMsg* pprz_protocol_msg_new_of_ascii(struct PprzProtocol* this, const gchar* line) { - gchar* kw; +struct PprzMsg *pprz_protocol_msg_new_of_ascii( struct PprzProtocol *this, + const gchar *line ) +{ + gchar *kw; GTimeVal date; - struct PprzMsg* msg; - if (sscanf(line, "%ld.%06ld %as", &date.tv_sec, &date.tv_usec, &kw) != 3) + struct PprzMsg *msg; + if ( sscanf( line, "%ld.%06ld %as", &date.tv_sec, &date.tv_usec, &kw ) != 3 ) return NULL; - if (!(msg = pprz_protocol_msg_new_by_name(this, kw, date))) + if ( !( msg = pprz_protocol_msg_new_by_name( this, kw, date ) ) ) return NULL; - if(msg->class->fields_classes) { // message has arguments - gchar* space = index(line, ' '); - g_assert(space); g_assert(space+1); // checked before by sscanf - space = index(space+1, ' '); - g_assert(space); // checked before by sscanf - if (!field_of_ascii(msg->class->fields_classes, space, msg)) { - pprz_msg_free(msg); + if ( msg->class->fields_classes ) { // message has arguments + gchar *space = index( line, ' ' ); + g_assert( space ); + g_assert( space + 1 ); // checked before by sscanf + space = index( space + 1, ' ' ); + g_assert( space ); // checked before by sscanf + if ( !field_of_ascii( msg->class->fields_classes, space, msg ) ) { + pprz_msg_free( msg ); return NULL; } } return msg; } -void pprz_msg_free(struct PprzMsg* this) { - g_free(this->bytes); - g_free(this); +void pprz_msg_free( struct PprzMsg *this ) +{ + g_free( this->bytes ); + g_free( this ); } -gboolean pprz_msg_set_field(struct PprzMsg* msg, struct PprzFieldClass* field_class, gconstpointer value) { -/*#ifdef WITH_SWITCH - switch (field_class->type) { - case TYP_UINT_8: - *(guint8*)(msg->bytes+field_class->offset) = *(guint8*)value; - break; - case TYP_UINT_16: - *(guint16*)(msg->bytes+field_class->offset) = *(guint16*)value; - break; - case TYP_UINT_32: - *(guint32*)(msg->bytes+field_class->offset) = *(guint32*)value; - break; - case TYP_INT_8: - *(gint8*)(msg->bytes+field_class->offset) = *(gint8*)value; - break; - case TYP_INT_16: - *(gint16*)(msg->bytes+field_class->offset) = *(gint16*)value; - break; - case TYP_INT_32: - *(gint32*)(msg->bytes+field_class->offset) = *(gint32*)value; - break; - case TYP_FLOAT: - *(gfloat*)(msg->bytes+field_class->offset) = *(gfloat*)value; - break; - case TYP_ARRAY_UINT_8: - // g_string_append_printf(buf, format, *((gfloat*)data)); - break; - default: - g_warning("in ascii of field : unknown type"); - } -#else*/ - if(field_class->type == TYP_UINT_8) - { - *(guint8*)(msg->bytes+field_class->offset) = *(guint8*)value; - break; - } - else if (field_class->type == TYP_UINT_16) - { - *(guint16*)(msg->bytes+field_class->offset) = *(guint16*)value; - break; - } - else if (field_class->type == TYP_UINT_32) - { - *(guint32*)(msg->bytes+field_class->offset) = *(guint32*)value; - break; - } - else if (field_class->type == TYP_INT_8) - { - *(gint8*)(msg->bytes+field_class->offset) = *(gint8*)value; - break; - } - else if(field_class->type == TYP_INT_16) - { - *(gint16*)(msg->bytes+field_class->offset) = *(gint16*)value; - break; - } - else if (field_class->type == TYP_INT_32) - { - *(gint32*)(msg->bytes+field_class->offset) = *(gint32*)value; - break; - } - else if (field_class->type == TYP_FLOAT) - { - *(gfloat*)(msg->bytes+field_class->offset) = *(gfloat*)value; - break; - } - else if (field_class->type == TYP_ARRAY_UINT_8) - { - // g_string_append_printf(buf, format, *((gfloat*)data)); - break; - } - else - { - g_warning("in ascii of field : unknown type"); - } +gboolean pprz_msg_set_field( struct PprzMsg *msg, + struct PprzFieldClass *field_class, gconstpointer value ) +{ + /*#ifdef WITH_SWITCH + switch (field_class->type) { + case TYP_UINT_8: + (guint8*)(msg->bytes+field_class->offset) = *(guint8*)value; + break; + case TYP_UINT_16: + (guint16*)(msg->bytes+field_class->offset) = *(guint16*)value; + break; + case TYP_UINT_32: + (guint32*)(msg->bytes+field_class->offset) = *(guint32*)value; + break; + case TYP_INT_8: + (gint8*)(msg->bytes+field_class->offset) = *(gint8*)value; + break; + case TYP_INT_16: + (gint16*)(msg->bytes+field_class->offset) = *(gint16*)value; + break; + case TYP_INT_32: + (gint32*)(msg->bytes+field_class->offset) = *(gint32*)value; + break; + case TYP_FLOAT: + (gfloat*)(msg->bytes+field_class->offset) = *(gfloat*)value; + break; + case TYP_ARRAY_UINT_8: + // g_string_append_printf(buf, format, *((gfloat*)data)); + break; + default: + g_warning("in ascii of field : unknown type"); + } + #else*/ + if ( field_class->type == TYP_UINT_8 ) { + *( guint8 * )( msg->bytes + field_class->offset ) = *( guint8 * )value; + break; + } else + if ( field_class->type == TYP_UINT_16 ) { + *( guint16 * )( msg->bytes + field_class->offset ) = *( guint16 * )value; + break; + } else + if ( field_class->type == TYP_UINT_32 ) { + *( guint32 * )( msg->bytes + field_class->offset ) = *( guint32 * )value; + break; + } else + if ( field_class->type == TYP_INT_8 ) { + *( gint8 * )( msg->bytes + field_class->offset ) = *( gint8 * )value; + break; + } else + if ( field_class->type == TYP_INT_16 ) { + *( gint16 * )( msg->bytes + field_class->offset ) = *( gint16 * )value; + break; + } else + if ( field_class->type == TYP_INT_32 ) { + *( gint32 * )( msg->bytes + field_class->offset ) = *( gint32 * )value; + break; + } else + if ( field_class->type == TYP_FLOAT ) { + *( gfloat * )( msg->bytes + field_class->offset ) = *( gfloat * )value; + break; + } else + if ( field_class->type == TYP_ARRAY_UINT_8 ) { + // g_string_append_printf(buf, format, *((gfloat*)data)); + break; + } else + g_warning( "in ascii of field : unknown type" ); //#endif return TRUE; } -gboolean pprz_msg_set_field_by_name(struct PprzMsg* msg, const gchar* name, gconstpointer value) { - struct PprzFieldClass* field_class = field_class_of_name(msg, name); - if (field_class) - return pprz_msg_set_field(msg, field_class, value); +gboolean pprz_msg_set_field_by_name( struct PprzMsg *msg, const gchar *name, + gconstpointer value ) +{ + struct PprzFieldClass *field_class = field_class_of_name( msg, name ); + if ( field_class ) + return pprz_msg_set_field( msg, field_class, value ); return FALSE; } -gboolean pprz_msg_set_field_by_id(struct PprzMsg* msg, guint id, gconstpointer value) { - GList* cell = g_list_nth(msg->class->fields_classes, id); - if (cell) - return pprz_msg_set_field(msg, cell->data, value); +gboolean pprz_msg_set_field_by_id( struct PprzMsg *msg, guint id, + gconstpointer value ) +{ + GList *cell = g_list_nth( msg->class->fields_classes, id ); + if ( cell ) + return pprz_msg_set_field( msg, cell->data, value ); return FALSE; } -gpointer pprz_msg_get_field(struct PprzMsg* msg, struct PprzFieldClass* field_class) { +gpointer pprz_msg_get_field( struct PprzMsg *msg, + struct PprzFieldClass *field_class ) +{ return msg->bytes + field_class->offset; } -gpointer pprz_msg_get_field_by_name(struct PprzMsg* msg, const gchar* name) { - struct PprzFieldClass* field_class = field_class_of_name(msg, name); - if (field_class) - return pprz_msg_get_field(msg, field_class); - g_message("pprz_msg_get_field_by_name : unknown field [%s] in msg [%s]",name, msg->class->name); +gpointer pprz_msg_get_field_by_name( struct PprzMsg *msg, const gchar *name ) +{ + struct PprzFieldClass *field_class = field_class_of_name( msg, name ); + if ( field_class ) + return pprz_msg_get_field( msg, field_class ); + g_message( "pprz_msg_get_field_by_name : unknown field [ %s ] in msg [ %s ]", name, + msg->class->name ); return NULL; } #define DEFAULT_LINE_LEN 256 -void pprz_protocol_ascii_of_msg(struct PprzMsg* msg, GString** buf) { - *buf = g_string_sized_new(DEFAULT_LINE_LEN); - g_string_printf(*buf, "%ld.%06ld %s ", msg->date.tv_sec, msg->date.tv_usec, msg->class->name); - if (msg->class->fields_classes) ascii_of_fields(msg, msg->class->fields_classes, *buf); - g_string_append_printf(*buf, "\n"); +void pprz_protocol_ascii_of_msg( struct PprzMsg *msg, GString **buf ) +{ + *buf = g_string_sized_new( DEFAULT_LINE_LEN ); + g_string_printf( *buf, "%ld.%06ld %s ", msg->date.tv_sec, msg->date.tv_usec, + msg->class->name ); + if ( msg->class->fields_classes ) ascii_of_fields( msg, + msg->class->fields_classes, *buf ); + g_string_append_printf( *buf, "\n" ); } -void pprz_msg_ascii_of_field(struct PprzMsg* msg, struct PprzFieldClass* field_class, GString* buf) { - guchar* format; - guchar* data; +void pprz_msg_ascii_of_field( struct PprzMsg *msg, + struct PprzFieldClass *field_class, GString *buf ) +{ + guchar *format; + guchar *data; format = field_class->format; - if(!format) format = type_info[field_class->type].default_format; + if ( !format ) format = type_info[ field_class->type ].default_format; data = msg->bytes + field_class->offset; -/*#ifdef WITH_SWITCH - switch (field_class->type) { - case TYP_UINT_8: - g_string_append_printf(buf, format, *((guint8*)data)); - break; - case TYP_UINT_16: - g_string_append_printf(buf, format, *((guint16*)data)); - break; - case TYP_UINT_32: - g_string_append_printf(buf, format, *((guint32*)data)); - break; - case TYP_INT_8: - g_string_append_printf(buf, format, *((gint8*)data)); - break; - case TYP_INT_16: - g_string_append_printf(buf, format, *((gint16*)data)); - break; - case TYP_INT_32: - g_string_append_printf(buf, format, *((gint32*)data)); - break; - case TYP_FLOAT: - g_string_append_printf(buf, format, *((gfloat*)data)); - break; - case TYP_ARRAY_UINT_8: - // g_string_append_printf(buf, format, *((gfloat*)data)); - break; - default: - g_warning("in ascii of field : unknown type"); - } -#else*/ - if(field_class->type == TYP_UINT_8) - { - g_string_append_printf(buf, format, *((guint8*)data)); - break; - } - else if(field_class->type == TYP_UINT_16) - { - g_string_append_printf(buf, format, *((guint16*)data)); - break; - } - else if(field_class->type == TYP_UINT_32) - { - g_string_append_printf(buf, format, *((guint32*)data)); - break; - } - else if(field_class->type == TYP_INT_8) - { - g_string_append_printf(buf, format, *((gint8*)data)); - break; - } - else if(field_class->type == TYP_INT_16) - { - g_string_append_printf(buf, format, *((gint16*)data)); - break; - } - else if(field_class->type == TYP_INT_32) - { - g_string_append_printf(buf, format, *((gint32*)data)); - break; - } - else if(field_class->type == TYP_FLOAT) - { - g_string_append_printf(buf, format, *((gfloat*)data)); - break; - } - else if(field_class->type == TYP_ARRAY_UINT_8) - { - // g_string_append_printf(buf, format, *((gfloat*)data)); - break; - } - else - g_warning("in ascii of field : unknown type"); + /*#ifdef WITH_SWITCH + switch (field_class->type) { + case TYP_UINT_8: + g_string_append_printf(buf, format, *((guint8*)data)); + break; + case TYP_UINT_16: + g_string_append_printf(buf, format, *((guint16*)data)); + break; + case TYP_UINT_32: + g_string_append_printf(buf, format, *((guint32*)data)); + break; + case TYP_INT_8: + g_string_append_printf(buf, format, *((gint8*)data)); + break; + case TYP_INT_16: + g_string_append_printf(buf, format, *((gint16*)data)); + break; + case TYP_INT_32: + g_string_append_printf(buf, format, *((gint32*)data)); + break; + case TYP_FLOAT: + g_string_append_printf(buf, format, *((gfloat*)data)); + break; + case TYP_ARRAY_UINT_8: + // g_string_append_printf(buf, format, *((gfloat*)data)); + break; + default: + g_warning("in ascii of field : unknown type"); + } + #else*/ + if ( field_class->type == TYP_UINT_8 ) { + g_string_append_printf( buf, format, *( ( guint8 * )data ) ); + break; + } else + if ( field_class->type == TYP_UINT_16 ) { + g_string_append_printf( buf, format, *( ( guint16 * )data ) ); + break; + } else + if ( field_class->type == TYP_UINT_32 ) { + g_string_append_printf( buf, format, *( ( guint32 * )data ) ); + break; + } else + if ( field_class->type == TYP_INT_8 ) { + g_string_append_printf( buf, format, *( ( gint8 * )data ) ); + break; + } else + if ( field_class->type == TYP_INT_16 ) { + g_string_append_printf( buf, format, *( ( gint16 * )data ) ); + break; + } else + if ( field_class->type == TYP_INT_32 ) { + g_string_append_printf( buf, format, *( ( gint32 * )data ) ); + break; + } else + if ( field_class->type == TYP_FLOAT ) { + g_string_append_printf( buf, format, *( ( gfloat * )data ) ); + break; + } else + if ( field_class->type == TYP_ARRAY_UINT_8 ) { + // g_string_append_printf(buf, format, *((gfloat*)data)); + break; + } else + g_warning( "in ascii of field : unknown type" ); //#endif } -static gboolean field_of_ascii(GList* fields_classes, gchar* line, struct PprzMsg* msg) { - struct PprzFieldClass* field_class = (struct PprzFieldClass*)fields_classes->data; - gchar* end_ptr; - gchar* ptr_field = msg->bytes + field_class->offset; -/*#ifdef WITH_SWITCH - switch (field_class->type) { - case TYP_UINT_8: - *((guint8*)ptr_field) = (guint8)strtoul(line, &end_ptr, 10); - break; - case TYP_UINT_16: - *((guint16*)ptr_field) = (guint16)strtoul(line, &end_ptr, 10); - break; - case TYP_UINT_32: - *((guint32*)ptr_field) = (guint32)strtoul(line, &end_ptr, 10); - break; - case TYP_INT_8: - *((gint8*)ptr_field) = (gint8)strtol(line, &end_ptr, 10); - break; - case TYP_INT_16: - *((gint16*)ptr_field) = (gint16)strtol(line, &end_ptr, 10); - break; - case TYP_INT_32: - *((gint32*)ptr_field) = (gint32)strtol(line, &end_ptr, 10); - break; - case TYP_FLOAT: - *((gfloat*)ptr_field) = (gfloat)strtod(line, &end_ptr); - break; - case TYP_ARRAY_UINT_8: - break; - default: - printf("in field of ascii: unknown type\n"); - } -#else*/ -if (field_class->type == TYP_UINT_8) -{ - *((guint8*)ptr_field) = (guint8)strtoul(line, &end_ptr, 10); - break; -} -else if (field_class->type == TYP_UINT_16) -{ - *((guint16*)ptr_field) = (guint16)strtoul(line, &end_ptr, 10); - break; -} -else if (field_class->type == TYP_UINT_32) +static gboolean field_of_ascii( GList *fields_classes, gchar *line, + struct PprzMsg *msg ) { - *((guint32*)ptr_field) = (guint32)strtoul(line, &end_ptr, 10); - break; -} -else if (field_class->type == TYP_INT_8) -{ - *((gint8*)ptr_field) = (gint8)strtol(line, &end_ptr, 10); - break; -} -else if (field_class->type == TYP_INT_16) -{ - *((gint16*)ptr_field) = (gint16)strtol(line, &end_ptr, 10); - break; -} -else if (field_class->type == TYP_INT_32) -{ - *((gint32*)ptr_field) = (gint32)strtol(line, &end_ptr, 10); - break; -} -else if (field_class->type == TYP_FLOAT) -{ - *((gfloat*)ptr_field) = (gfloat)strtod(line, &end_ptr); - break; -} -else if (field_class->type == TYP_ARRAY_UINT_8) - break; -else - printf("in field of ascii: unknown type\n"); + struct PprzFieldClass *field_class = ( struct PprzFieldClass * ) + fields_classes->data; + gchar *end_ptr; + gchar *ptr_field = msg->bytes + field_class->offset; + /*#ifdef WITH_SWITCH + switch (field_class->type) { + case TYP_UINT_8: + ((guint8*)ptr_field) = (guint8)strtoul(line, &end_ptr, 10); + break; + case TYP_UINT_16: + ((guint16*)ptr_field) = (guint16)strtoul(line, &end_ptr, 10); + break; + case TYP_UINT_32: + ((guint32*)ptr_field) = (guint32)strtoul(line, &end_ptr, 10); + break; + case TYP_INT_8: + ((gint8*)ptr_field) = (gint8)strtol(line, &end_ptr, 10); + break; + case TYP_INT_16: + ((gint16*)ptr_field) = (gint16)strtol(line, &end_ptr, 10); + break; + case TYP_INT_32: + ((gint32*)ptr_field) = (gint32)strtol(line, &end_ptr, 10); + break; + case TYP_FLOAT: + ((gfloat*)ptr_field) = (gfloat)strtod(line, &end_ptr); + break; + case TYP_ARRAY_UINT_8: + break; + default: + printf("in field of ascii: unknown type\n"); + } + #else*/ + if ( field_class->type == TYP_UINT_8 ) { + *( ( guint8 * )ptr_field ) = ( guint8 )strtoul( line, &end_ptr, 10 ); + break; + } else + if ( field_class->type == TYP_UINT_16 ) { + *( ( guint16 * )ptr_field ) = ( guint16 )strtoul( line, &end_ptr, 10 ); + break; + } else + if ( field_class->type == TYP_UINT_32 ) { + *( ( guint32 * )ptr_field ) = ( guint32 )strtoul( line, &end_ptr, 10 ); + break; + } else + if ( field_class->type == TYP_INT_8 ) { + *( ( gint8 * )ptr_field ) = ( gint8 )strtol( line, &end_ptr, 10 ); + break; + } else + if ( field_class->type == TYP_INT_16 ) { + *( ( gint16 * )ptr_field ) = ( gint16 )strtol( line, &end_ptr, 10 ); + break; + } else + if ( field_class->type == TYP_INT_32 ) { + *( ( gint32 * )ptr_field ) = ( gint32 )strtol( line, &end_ptr, 10 ); + break; + } else + if ( field_class->type == TYP_FLOAT ) { + *( ( gfloat * )ptr_field ) = ( gfloat )strtod( line, &end_ptr ); + break; + } else + if ( field_class->type == TYP_ARRAY_UINT_8 ) + break; + else + printf( "in field of ascii: unknown type\n" ); //#endif - if (fields_classes->next) - return field_of_ascii(fields_classes->next, end_ptr, msg); + if ( fields_classes->next ) + return field_of_ascii( fields_classes->next, end_ptr, msg ); return TRUE; } -static void ascii_of_fields(struct PprzMsg* msg, GList* fields_class, GString* buf) { - struct PprzFieldClass* field_class = (struct PprzFieldClass*)fields_class->data; - pprz_msg_ascii_of_field(msg, field_class, buf); - if (fields_class->next) { - g_string_append_printf(buf, " "); - ascii_of_fields(msg, fields_class->next, buf); +static void ascii_of_fields( struct PprzMsg *msg, GList *fields_class, + GString *buf ) +{ + struct PprzFieldClass *field_class = ( struct PprzFieldClass * ) + fields_class->data; + pprz_msg_ascii_of_field( msg, field_class, buf ); + if ( fields_class->next ) { + g_string_append_printf( buf, " " ); + ascii_of_fields( msg, fields_class->next, buf ); } } -static gboolean parse_xml_msg(struct PprzProtocol* this, xmlNodePtr ptr) { - struct PprzMsgClass* new_msg_class; - if ( !xmlNodeIsText (ptr)) { - if (xmlStrcmp(ptr->name, (const xmlChar *)"message")) /* not a message */ +static gboolean parse_xml_msg( struct PprzProtocol *this, xmlNodePtr ptr ) +{ + struct PprzMsgClass *new_msg_class; + if ( !xmlNodeIsText ( ptr ) ) { + if ( xmlStrcmp( ptr->name, ( const xmlChar * )"message" ) ) /* not a message */ return FALSE; - new_msg_class = g_new(struct PprzMsgClass, 1); - new_msg_class->id = g_list_length(this->msgs_classes); - new_msg_class->name = xmlGetProp(ptr, "id"); + new_msg_class = g_new( struct PprzMsgClass, 1 ); + new_msg_class->id = g_list_length( this->msgs_classes ); + new_msg_class->name = xmlGetProp( ptr, "id" ); new_msg_class->fields_classes = NULL; - new_msg_class->fields_classes_by_name = g_hash_table_new(g_str_hash, g_str_equal); + new_msg_class->fields_classes_by_name = g_hash_table_new( g_str_hash, + g_str_equal ); new_msg_class->size = 1; - this->msgs_classes = g_list_append(this->msgs_classes, new_msg_class); - g_hash_table_insert(this->msgs_classes_by_name, new_msg_class->name, new_msg_class); - if (ptr->xmlChildrenNode && !parse_xml_field(new_msg_class, ptr->xmlChildrenNode)) + this->msgs_classes = g_list_append( this->msgs_classes, new_msg_class ); + g_hash_table_insert( this->msgs_classes_by_name, new_msg_class->name, + new_msg_class ); + if ( ptr->xmlChildrenNode && + !parse_xml_field( new_msg_class, ptr->xmlChildrenNode ) ) /* fixme : free space */ return FALSE; - new_msg_class->nb_fields_classes = g_list_length(new_msg_class->fields_classes); - new_msg_class->fields_classes_by_id = g_new(struct PprzFieldClass*, new_msg_class->nb_fields_classes); + new_msg_class->nb_fields_classes = g_list_length( + new_msg_class->fields_classes ); + new_msg_class->fields_classes_by_id = g_new( struct PprzFieldClass *, + new_msg_class->nb_fields_classes ); { - GList* cur = new_msg_class->fields_classes; + GList *cur = new_msg_class->fields_classes; guint i = 0; - while (cur) { - new_msg_class->fields_classes_by_id[i] = cur->data; - i++; - cur = cur->next; + while ( cur ) { + new_msg_class->fields_classes_by_id[ i ] = cur->data; + i++; + cur = cur->next; } } } - if (ptr->next) - return parse_xml_msg(this, ptr->next); + if ( ptr->next ) + return parse_xml_msg( this, ptr->next ); return TRUE; } -static gboolean parse_xml_field(struct PprzMsgClass* msg_class, xmlNodePtr ptr) { - struct PprzFieldClass* new_field_class; - xmlChar* type_str; - if ( !xmlNodeIsText (ptr)) { - if (xmlStrcmp(ptr->name, (const xmlChar *)"field")) /* not a field */ +static gboolean parse_xml_field( struct PprzMsgClass *msg_class, + xmlNodePtr ptr ) +{ + struct PprzFieldClass *new_field_class; + xmlChar *type_str; + if ( !xmlNodeIsText ( ptr ) ) { + if ( xmlStrcmp( ptr->name, ( const xmlChar * )"field" ) ) /* not a field */ return FALSE; - new_field_class = g_new(struct PprzFieldClass, 1); - new_field_class->name = xmlGetProp(ptr, "id"); - new_field_class->format = xmlGetProp(ptr, "format"); - new_field_class->unit = xmlGetProp(ptr, "unit"); - new_field_class->description = xmlGetProp(ptr, "description"); - type_str = xmlGetProp(ptr, "type"); - if ((new_field_class->type = type_of_string(type_str)) >= TYP_NB) { + new_field_class = g_new( struct PprzFieldClass, 1 ); + new_field_class->name = xmlGetProp( ptr, "id" ); + new_field_class->format = xmlGetProp( ptr, "format" ); + new_field_class->unit = xmlGetProp( ptr, "unit" ); + new_field_class->description = xmlGetProp( ptr, "description" ); + type_str = xmlGetProp( ptr, "type" ); + if ( ( new_field_class->type = type_of_string( type_str ) ) >= TYP_NB ) { /* fixme : free space */ return FALSE; } - xmlFree(type_str); - msg_class->fields_classes = g_list_append(msg_class->fields_classes, new_field_class); - g_hash_table_insert(msg_class->fields_classes_by_name, new_field_class->name, new_field_class); + xmlFree( type_str ); + msg_class->fields_classes = g_list_append( msg_class->fields_classes, + new_field_class ); + g_hash_table_insert( msg_class->fields_classes_by_name, new_field_class->name, + new_field_class ); new_field_class->offset = msg_class->size - 1; - msg_class->size += type_info[new_field_class->type].size; + msg_class->size += type_info[ new_field_class->type ].size; } - if (ptr->next) + if ( ptr->next ) /* check return and free space */ - return parse_xml_field(msg_class, ptr->next); + return parse_xml_field( msg_class, ptr->next ); return TRUE; } -static struct PprzMsgClass* msg_class_of_name(struct PprzProtocol* this, const gchar* name) { - return g_hash_table_lookup(this->msgs_classes_by_name, name); +static struct PprzMsgClass *msg_class_of_name( struct PprzProtocol *this, + const gchar *name ) +{ + return g_hash_table_lookup( this->msgs_classes_by_name, name ); } -static struct PprzMsgClass* msg_class_of_id(struct PprzProtocol* this, guchar id) { - if (id >= this->nb_msgs_classes) +static struct PprzMsgClass *msg_class_of_id( struct PprzProtocol *this, + guchar id ) +{ + if ( id >= this->nb_msgs_classes ) return NULL; - return this->msgs_classes_by_id[id]; + return this->msgs_classes_by_id[ id ]; } -static struct PprzFieldClass* field_class_of_name(struct PprzMsg* msg, const gchar* name) { - return g_hash_table_lookup(msg->class->fields_classes_by_name, name); +static struct PprzFieldClass *field_class_of_name( struct PprzMsg *msg, + const gchar *name ) +{ + return g_hash_table_lookup( msg->class->fields_classes_by_name, name ); } - + /* static struct PprzFieldClass* field_class_of_id(struct PprzMsg* msg, guchar id) { */ /* GList* cell = g_list_nth(msg->class->fields_classes, id); */ /* return cell?cell->data:NULL; */ diff --git a/bench/parallel/PapaBench/sw/lib/c/traces.c b/bench/parallel/PapaBench/sw/lib/c/traces.c index 7ee13b3245c85bd43d42fb893676e4997965f19b..a32ec86ac7c091be4871d344511c22b189da9e57 100644 --- a/bench/parallel/PapaBench/sw/lib/c/traces.c +++ b/bench/parallel/PapaBench/sw/lib/c/traces.c @@ -1,49 +1,52 @@ -/* +/* traces.c Copyright (C) 2003 Antoine Drouin - This file is part of paparazzi. + This file is part of paparazzi. - paparazzi is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + paparazzi is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. - paparazzi is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + paparazzi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with paparazzi; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ + You should have received a copy of the GNU General Public License + along with paparazzi; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ #include "traces.h" #ifdef TRACE_ON -unsigned long TraceLevel = TRACE_ERROR| TRACE_TRANSPORT ;// | TRACE_MODEM_READ ;// | TRACE_DATA_READ | TRACE_DOWNLINK; //| TRACE_MODEM_READ;// ;//| TRACE_MSG// | TRACE_DOWNLINK; +unsigned long TraceLevel = TRACE_ERROR | TRACE_TRANSPORT + ; // | TRACE_MODEM_READ ;// | TRACE_DATA_READ | TRACE_DOWNLINK; //| TRACE_MODEM_READ;// ;//| TRACE_MSG// | TRACE_DOWNLINK; // unsigned long TraceLevel = TRACE_DOWNLINK | TRACE_MSG | TRACE_ERROR ; -const char* print_hex(const unsigned char* buf, unsigned int len) { - const char d2h[] = "0123456789ABCDEF"; - int i=0; +const char *print_hex( const unsigned char *buf, unsigned int len ) +{ + const char d2h[ ] = "0123456789ABCDEF"; + int i = 0; #define HEX_BUF_LEN 1024 #define FMT_LEN 3 #define FMT "%c%c " - static unsigned char priv_buf[HEX_BUF_LEN]; -/* printf("[%d] ", len); */ - for (i=0; i<len && i < HEX_BUF_LEN/FMT_LEN; i++) { - // printf(FMT, d2h[(int)buf[i]/16], d2h[(int)buf[i]%16]); - sprintf(priv_buf+FMT_LEN*i, FMT, d2h[(int)buf[i]/16], d2h[(int)buf[i]%16]); + static unsigned char priv_buf[ HEX_BUF_LEN ]; + /* printf("[ %d ] ", len); */ + for ( i = 0; i < len && i < HEX_BUF_LEN / FMT_LEN; i++ ) { + // printf(FMT, d2h[ (int)buf[ i ]/16 ], d2h[ (int)buf[ i ]%16 ]); + sprintf( priv_buf + FMT_LEN * i, FMT, d2h[ ( int )buf[ i ] / 16 ], + d2h[ ( int )buf[ i ] % 16 ] ); } - if (len==0) - priv_buf[0] = '\0'; + if ( len == 0 ) + priv_buf[ 0 ] = '\0'; return priv_buf; } -#endif +#endif diff --git a/bench/parallel/PapaBench/sw/lib/c/transport.c b/bench/parallel/PapaBench/sw/lib/c/transport.c index d3db9d5a8221bdc08625cc5b1538586f572a442c..31e1883d786dc17f390231528e10f0eab91586c1 100644 --- a/bench/parallel/PapaBench/sw/lib/c/transport.c +++ b/bench/parallel/PapaBench/sw/lib/c/transport.c @@ -4,19 +4,21 @@ #include "geometry.h" #include "traces.h" -static void parse_buf(struct Transport* this); -static gboolean check_checksum(struct Transport* this, guint msg_len); -static void remove_n_from_buf(struct Transport* this, guint len); -static void remove_until_stx(struct Transport* this); - -struct Transport* transport_new(gboolean fixed_size, gboolean two_bytes_checksum, guint nb_msg, - guint* size_msg, guint max_msg_size, - guchar stx, guchar etx, - void(*err_callback)(gpointer callback_data, GError *error), - void(*msg_callback)(gpointer callback_data, struct TransportMsg* msg), - gpointer callback_data) { - struct Transport* this = g_new(struct Transport, 1); - if (this) { +static void parse_buf( struct Transport *this ); +static gboolean check_checksum( struct Transport *this, guint msg_len ); +static void remove_n_from_buf( struct Transport *this, guint len ); +static void remove_until_stx( struct Transport *this ); + +struct Transport *transport_new( gboolean fixed_size, + gboolean two_bytes_checksum, guint nb_msg, + guint *size_msg, guint max_msg_size, + guchar stx, guchar etx, + void( *err_callback )( gpointer callback_data, GError *error ), + void( *msg_callback )( gpointer callback_data, struct TransportMsg *msg ), + gpointer callback_data ) +{ + struct Transport *this = g_new( struct Transport, 1 ); + if ( this ) { this->stx = stx; this->etx = etx; this->err_callback = err_callback; @@ -25,14 +27,13 @@ struct Transport* transport_new(gboolean fixed_size, gboolean two_bytes_checksu this->buf_len = 0; this->fixed_size = fixed_size; this->two_bytes_checksum = two_bytes_checksum; - this->quark = g_quark_from_string("Transport"); - g_get_current_time(&this->start_date); - if (fixed_size) { + this->quark = g_quark_from_string( "Transport" ); + g_get_current_time( &this->start_date ); + if ( fixed_size ) { this->nb_msg_type = nb_msg; this->size_msg = size_msg; //this->max_msg_size = FIXME find max size in array;; - } - else + } else this->max_msg_size = max_msg_size; this->nb_byte_last_status = 0; this->nb_msg_last_status = 0; @@ -45,17 +46,18 @@ struct Transport* transport_new(gboolean fixed_size, gboolean two_bytes_checksu #define GDOUBLE_FROM_DIF_TV(a,b) ((gdouble)(a.tv_sec-b.tv_sec) + 1e-6 * (gdouble)(a.tv_usec-b.tv_usec)) -struct TransportStatus* transport_get_status(struct Transport* this) { +struct TransportStatus *transport_get_status( struct Transport *this ) +{ GTimeVal now; gdouble duration; - - g_get_current_time(&now); - this->status.run_time = DELAY_SEC_OF_TIMEVAL(now, this->start_date); - duration = GDOUBLE_FROM_DIF_TV(now, this->last_status_date); + g_get_current_time( &now ); + this->status.run_time = DELAY_SEC_OF_TIMEVAL( now, this->start_date ); + + duration = GDOUBLE_FROM_DIF_TV( now, this->last_status_date ); this->status.byte_rate = this->nb_byte_last_status / duration; this->status.msg_rate = this->nb_msg_last_status / duration; - + this->nb_byte_last_status = 0; this->nb_msg_last_status = 0; this->last_status_date = now; @@ -65,97 +67,103 @@ struct TransportStatus* transport_get_status(struct Transport* this) { -void transport_free(struct Transport* this) { - g_free(this); +void transport_free( struct Transport *this ) +{ + g_free( this ); } -void transport_feed_data(struct Transport* this, const guchar* buf, guint len) { - if (len >= TRANSPORT_BUF_LEN - this->buf_len) { - GError* err = g_error_new(this->quark, - TRANSPORT_BUF_OVFW, /* guint code */ - "buffer overflow" /* const gchar *format */ - ); - this->err_callback(this->callback_data, err); - g_error_free(err); - } - else { +void transport_feed_data( struct Transport *this, const guchar *buf, + guint len ) +{ + if ( len >= TRANSPORT_BUF_LEN - this->buf_len ) { + GError *err = g_error_new( this->quark, + TRANSPORT_BUF_OVFW, /* guint code */ + "buffer overflow" /* const gchar *format */ + ); + this->err_callback( this->callback_data, err ); + g_error_free( err ); + } else { this->status.nb_byte += len; this->nb_byte_last_status += len; - memcpy(this->buf+this->buf_len, buf, len); + memcpy( this->buf + this->buf_len, buf, len ); this->buf_len += len; - parse_buf(this); + parse_buf( this ); } } -static gboolean check_checksum(struct Transport* this, guint msg_len) { +static gboolean check_checksum( struct Transport *this, guint msg_len ) +{ guint checksum_idx = msg_len - TRANSPORT_TAIL_LEN; guint i; - if (this->two_bytes_checksum) { + if ( this->two_bytes_checksum ) { guchar cka = 0, ckb = 0; - for (i=TRANSPORT_PAYLOAD_OFFSET; i< checksum_idx; i++) { - cka += this->buf[i]; + for ( i = TRANSPORT_PAYLOAD_OFFSET; i < checksum_idx; i++ ) { + cka += this->buf[ i ]; ckb += cka; } - return (cka == this->buf[checksum_idx] && ckb == this->buf[checksum_idx+1]); - } - else { + return ( cka == this->buf[ checksum_idx ] && + ckb == this->buf[ checksum_idx + 1 ] ); + } else { guchar checksum = 0; - for (i=TRANSPORT_PAYLOAD_OFFSET; i< checksum_idx; i++) - checksum ^= this->buf[i]; - if (checksum != this->buf[checksum_idx]) - TRACE(TRACE_ERROR, "transport checksum error (found : 0x%02X read : 0x%02X)\n", checksum, this->buf[checksum_idx]); - return checksum == this->buf[checksum_idx]; + for ( i = TRANSPORT_PAYLOAD_OFFSET; i < checksum_idx; i++ ) + checksum ^= this->buf[ i ]; + if ( checksum != this->buf[ checksum_idx ] ) + TRACE( TRACE_ERROR, "transport checksum error (found : 0x%02X read : 0x%02X)\n", + checksum, this->buf[ checksum_idx ] ); + return checksum == this->buf[ checksum_idx ]; } } -static void remove_n_from_buf(struct Transport* this, guint len) { - memmove(this->buf, this->buf + len, this->buf_len - len); +static void remove_n_from_buf( struct Transport *this, guint len ) +{ + memmove( this->buf, this->buf + len, this->buf_len - len ); this->buf_len -= len; } -static void remove_until_stx(struct Transport* this) { - guchar* stx = memchr(this->buf, this->stx, this->buf_len); - if (stx) { - if (stx != this->buf) { - memmove(this->buf, stx, this->buf_len - (stx - this->buf)); - this->buf_len -= (stx - this->buf); +static void remove_until_stx( struct Transport *this ) +{ + guchar *stx = memchr( this->buf, this->stx, this->buf_len ); + if ( stx ) { + if ( stx != this->buf ) { + memmove( this->buf, stx, this->buf_len - ( stx - this->buf ) ); + this->buf_len -= ( stx - this->buf ); } - } - else + } else this->buf_len = 0; } -static gboolean get_msg_len(struct Transport* this, guint* len) { - if (this->fixed_size) { - guint type = this->buf[TRANSPORT_PAYLOAD_OFFSET]; - if (type >= this->nb_msg_type) { /* BAP ID */ - TRACE(TRACE_TRANSPORT, "%d bad type\n", this->buf[TRANSPORT_PAYLOAD_OFFSET]); - TRACE(TRACE_TRANSPORT, "parse_buf %s\n", print_hex(this->buf, this->buf_len)); +static gboolean get_msg_len( struct Transport *this, guint *len ) +{ + if ( this->fixed_size ) { + guint type = this->buf[ TRANSPORT_PAYLOAD_OFFSET ]; + if ( type >= this->nb_msg_type ) { /* BAP ID */ + TRACE( TRACE_TRANSPORT, "%d bad type\n", this->buf[ TRANSPORT_PAYLOAD_OFFSET ] ); + TRACE( TRACE_TRANSPORT, "parse_buf %s\n", print_hex( this->buf, + this->buf_len ) ); this->status.nb_err++; { - GError* err = g_error_new(this->quark, - TRANSPORT_INVALID_MSG_ID, /* guint code */ - "invalid msg id" /* const gchar *format */ - ); - this->err_callback(this->callback_data, err); - g_error_free(err); + GError *err = g_error_new( this->quark, + TRANSPORT_INVALID_MSG_ID, /* guint code */ + "invalid msg id" /* const gchar *format */ + ); + this->err_callback( this->callback_data, err ); + g_error_free( err ); } return FALSE; - } - else *len = this->size_msg[type] + TRANSPORT_HEAD_LEN + TRANSPORT_TAIL_LEN; - } - else { - *len = this->buf[TRANSPORT_PAYLOAD_OFFSET] + TRANSPORT_HEAD_LEN + TRANSPORT_TAIL_LEN; - if (*len >= this->max_msg_size) { /* BAD LEN */ - TRACE(TRACE_TRANSPORT, "%d bad len\n", this->buf[TRANSPORT_PAYLOAD_OFFSET]); + } else *len = this->size_msg[ type ] + TRANSPORT_HEAD_LEN + TRANSPORT_TAIL_LEN; + } else { + *len = this->buf[ TRANSPORT_PAYLOAD_OFFSET ] + TRANSPORT_HEAD_LEN + + TRANSPORT_TAIL_LEN; + if ( *len >= this->max_msg_size ) { /* BAD LEN */ + TRACE( TRACE_TRANSPORT, "%d bad len\n", this->buf[ TRANSPORT_PAYLOAD_OFFSET ] ); this->status.nb_err++; { - GError* err = g_error_new(this->quark, - TRANSPORT_INVALID_MSG_LEN, /* guint code */ - "invalid message len" /* const gchar *format */ - ); - this->err_callback(this->callback_data, err); - g_error_free(err); + GError *err = g_error_new( this->quark, + TRANSPORT_INVALID_MSG_LEN, /* guint code */ + "invalid message len" /* const gchar *format */ + ); + this->err_callback( this->callback_data, err ); + g_error_free( err ); } return FALSE; } @@ -164,71 +172,72 @@ static gboolean get_msg_len(struct Transport* this, guint* len) { } -static void parse_buf(struct Transport* this) { +static void parse_buf( struct Transport *this ) +{ /* make sure first byte in buffer is STX */ - remove_until_stx(this); + remove_until_stx( this ); // if (this->fixed_size) // TRACE(TRACE_TRANSPORT, "parse_buf %s\n", print_hex(this->buf, this->buf_len)); - if (this->buf_len < TRANSPORT_PAYLOAD_OFFSET) { /* NO PAYLOAD */ - TRACE(TRACE_TRANSPORT_VERB, "no payload\n"); - } + if ( this->buf_len < TRANSPORT_PAYLOAD_OFFSET ) /* NO PAYLOAD */ + TRACE( TRACE_TRANSPORT_VERB, "no payload\n" ); else { guint msg_len; - if (!get_msg_len(this, &msg_len)) { /* BAD LEN ( or TYPE) */ - remove_n_from_buf(this, 1); - parse_buf(this); - } - else { - if (this->buf_len < msg_len) { /* NOT ENOUGTH DATA */ - TRACE(TRACE_TRANSPORT_VERB, "not enough data\n"); - } + if ( !get_msg_len( this, + &msg_len ) ) { /* BAD LEN ( or TYPE) */ + remove_n_from_buf( this, 1 ); + parse_buf( this ); + } else { + if ( this->buf_len < msg_len ) /* NOT ENOUGTH DATA */ + TRACE( TRACE_TRANSPORT_VERB, "not enough data\n" ); else { - if (!check_checksum(this, msg_len)) { - TRACE(TRACE_TRANSPORT, "parse_buf %s\n", print_hex(this->buf, this->buf_len)); - this->status.nb_err++; - { - GError* err = g_error_new(this->quark, - TRANSPORT_CHECKSUM_ERROR, /* guint code */ - "checksum error" /* const gchar *format */ - ); - this->err_callback(this->callback_data, err); - g_error_free(err); - } - - remove_n_from_buf(this, 1); - parse_buf(this); - } - else { - if (!this->two_bytes_checksum && this->buf[msg_len - 1] != this->etx) { - TRACE(TRACE_TRANSPORT, "parse_buf %s\n", print_hex(this->buf, this->buf_len)); - TRACE(TRACE_TRANSPORT_VERB, "%d is not ETX\n", this->buf[msg_len - 1]); - this->status.nb_err++; - { - GError* err = g_error_new(this->quark, - TRANSPORT_NO_ETX, /* guint code */ - "NO ETX" /* const gchar *format */ - ); - this->err_callback(this->callback_data, err); - g_error_free(err); - } - remove_n_from_buf(this, 1); - parse_buf(this); - } - else { - struct TransportMsg msg; - guint payload_len = msg_len - TRANSPORT_HEAD_LEN - TRANSPORT_TAIL_LEN; - g_get_current_time(&msg.date); - msg.len = payload_len; - msg.data = this->buf + TRANSPORT_PAYLOAD_OFFSET; - this->status.nb_msg++; - this->nb_msg_last_status++; - - TRACE(TRACE_TRANSPORT_VERB, "transport msg date : %ld%06ld len : %d data : %s\n", msg.date.tv_sec, msg.date.tv_usec,msg.len, print_hex(msg.data, msg.len)); - this->msg_callback(this->callback_data, &msg); - remove_n_from_buf(this, msg_len); - parse_buf(this); - } - } + if ( !check_checksum( this, msg_len ) ) { + TRACE( TRACE_TRANSPORT, "parse_buf %s\n", print_hex( this->buf, + this->buf_len ) ); + this->status.nb_err++; + { + GError *err = g_error_new( this->quark, + TRANSPORT_CHECKSUM_ERROR, /* guint code */ + "checksum error" /* const gchar *format */ + ); + this->err_callback( this->callback_data, err ); + g_error_free( err ); + } + + remove_n_from_buf( this, 1 ); + parse_buf( this ); + } else { + if ( !this->two_bytes_checksum && this->buf[ msg_len - 1 ] != this->etx ) { + TRACE( TRACE_TRANSPORT, "parse_buf %s\n", print_hex( this->buf, + this->buf_len ) ); + TRACE( TRACE_TRANSPORT_VERB, "%d is not ETX\n", this->buf[ msg_len - 1 ] ); + this->status.nb_err++; + { + GError *err = g_error_new( this->quark, + TRANSPORT_NO_ETX, /* guint code */ + "NO ETX" /* const gchar *format */ + ); + this->err_callback( this->callback_data, err ); + g_error_free( err ); + } + remove_n_from_buf( this, 1 ); + parse_buf( this ); + } else { + struct TransportMsg msg; + guint payload_len = msg_len - TRANSPORT_HEAD_LEN - TRANSPORT_TAIL_LEN; + g_get_current_time( &msg.date ); + msg.len = payload_len; + msg.data = this->buf + TRANSPORT_PAYLOAD_OFFSET; + this->status.nb_msg++; + this->nb_msg_last_status++; + + TRACE( TRACE_TRANSPORT_VERB, + "transport msg date : %ld%06ld len : %d data : %s\n", msg.date.tv_sec, + msg.date.tv_usec, msg.len, print_hex( msg.data, msg.len ) ); + this->msg_callback( this->callback_data, &msg ); + remove_n_from_buf( this, msg_len ); + parse_buf( this ); + } + } } } } diff --git a/bench/parallel/PapaBench/sw/lib/crt0/powerpc-elf-crt0.c b/bench/parallel/PapaBench/sw/lib/crt0/powerpc-elf-crt0.c index f26641b366fcfeb25f628d547530111da40598e1..447177c0240b1b7547cad93034289133025d17c0 100644 --- a/bench/parallel/PapaBench/sw/lib/crt0/powerpc-elf-crt0.c +++ b/bench/parallel/PapaBench/sw/lib/crt0/powerpc-elf-crt0.c @@ -1,11 +1,12 @@ -int main(int argc, char **argv, char **envp); +int main( int argc, char **argv, char **envp ); -static char *argv[] = { "", 0 }; -static char *envp[] = { 0 }; +static char *argv[ ] = { "", 0 }; +static char *envp[ ] = { 0 }; -void _start(void) { - __asm("lis 1," STACK ">>16"); - __asm("addis 1,1," STACK "&0xffff"); - main(1, argv, envp); - while(1); +void _start( void ) +{ + __asm( "lis 1," STACK ">>16" ); + __asm( "addis 1,1," STACK "&0xffff" ); + main( 1, argv, envp ); + while ( 1 ); } diff --git a/bench/parallel/PapaBench/sw/var/include/airframe.h b/bench/parallel/PapaBench/sw/var/include/airframe.h index 60cbbf063dbeda9ba0b1307629ba30fd8df3900a..d07da9529f38574873056a8a950bdfc245bdb134 100644 --- a/bench/parallel/PapaBench/sw/var/include/airframe.h +++ b/bench/parallel/PapaBench/sw/var/include/airframe.h @@ -2,7 +2,7 @@ /* Please DO NOT EDIT */ #ifndef AIRFRAME_H -#define AIRFRAME_H +#define AIRFRAME_H #define AIRFRAME_NAME "Twinstar trois" @@ -48,24 +48,24 @@ #define ServoSet(values) { \ uint16_t servo_value;\ int16_t _var_roll;\ - servo_value = SERVO_NEUTRAL(SERVO_MOTOR_LEFT) + (int16_t)((2 * values[RADIO_GAIN1])*SERVO_MOTOR_LEFT_TRAVEL);\ - servo_widths[SERVO_MOTOR_LEFT] = ChopServo(servo_value);\ + servo_value = SERVO_NEUTRAL(SERVO_MOTOR_LEFT) + (int16_t)((2 * values[ RADIO_GAIN1 ])*SERVO_MOTOR_LEFT_TRAVEL);\ + servo_widths[ SERVO_MOTOR_LEFT ] = ChopServo(servo_value);\ \ - servo_value = SERVO_NEUTRAL(SERVO_MOTOR_RIGHT) + (int16_t)((2 * values[RADIO_THROTTLE])*SERVO_MOTOR_RIGHT_TRAVEL);\ - servo_widths[SERVO_MOTOR_RIGHT] = ChopServo(servo_value);\ + servo_value = SERVO_NEUTRAL(SERVO_MOTOR_RIGHT) + (int16_t)((2 * values[ RADIO_THROTTLE ])*SERVO_MOTOR_RIGHT_TRAVEL);\ + servo_widths[ SERVO_MOTOR_RIGHT ] = ChopServo(servo_value);\ \ - servo_value = SERVO_NEUTRAL(SERVO_ELEVATOR) + (int16_t)((values[RADIO_PITCH])*SERVO_ELEVATOR_TRAVEL);\ - servo_widths[SERVO_ELEVATOR] = ChopServo(servo_value);\ + servo_value = SERVO_NEUTRAL(SERVO_ELEVATOR) + (int16_t)((values[ RADIO_PITCH ])*SERVO_ELEVATOR_TRAVEL);\ + servo_widths[ SERVO_ELEVATOR ] = ChopServo(servo_value);\ \ - _var_roll = values[RADIO_ROLL];\ + _var_roll = values[ RADIO_ROLL ];\ servo_value = SERVO_NEUTRAL(SERVO_AILERON_LEFT) + (int16_t)(((_var_roll > 0 ? 1 : AILERON_DIFF) * _var_roll)*SERVO_AILERON_LEFT_TRAVEL);\ - servo_widths[SERVO_AILERON_LEFT] = ChopServo(servo_value);\ + servo_widths[ SERVO_AILERON_LEFT ] = ChopServo(servo_value);\ \ servo_value = SERVO_NEUTRAL(SERVO_AILERON_RIGHT) + (int16_t)(((_var_roll > 0 ? AILERON_DIFF : 1) * _var_roll)*SERVO_AILERON_RIGHT_TRAVEL);\ - servo_widths[SERVO_AILERON_RIGHT] = ChopServo(servo_value);\ + servo_widths[ SERVO_AILERON_RIGHT ] = ChopServo(servo_value);\ \ - servo_value = SERVO_NEUTRAL(SERVO_RUDDER) + (int16_t)((values[RADIO_YAW] + values[RADIO_ROLL]*COMBI_SWITCH)*SERVO_RUDDER_TRAVEL);\ - servo_widths[SERVO_RUDDER] = ChopServo(servo_value);\ + servo_value = SERVO_NEUTRAL(SERVO_RUDDER) + (int16_t)((values[ RADIO_YAW ] + values[ RADIO_ROLL ]*COMBI_SWITCH)*SERVO_RUDDER_TRAVEL);\ + servo_widths[ SERVO_RUDDER ] = ChopServo(servo_value);\ \ } #define AILERON_DIFF 0.66 diff --git a/bench/parallel/PapaBench/sw/var/include/flight_plan.h b/bench/parallel/PapaBench/sw/var/include/flight_plan.h index bca1b1670d132ec214a80ed1e3d02f495e2d89f0..f51f89b96aa4de13883efd2ee1bf75525bcf41ce 100644 --- a/bench/parallel/PapaBench/sw/var/include/flight_plan.h +++ b/bench/parallel/PapaBench/sw/var/include/flight_plan.h @@ -2,7 +2,7 @@ /* Please DO NOT EDIT */ #ifndef FLIGHT_PLAN_H -#define FLIGHT_PLAN_H +#define FLIGHT_PLAN_H #define FLIGHT_PLAN_NAME "EMAV 2004, 8 shape" #define NAV_UTM_EAST0 605530 @@ -24,530 +24,520 @@ #define MAX_DIST_FROM_HOME 500. #ifdef NAV_C -static inline void auto_nav(void) { -/*#ifdef WITH_SWITCH -switch (nav_block) { - Block(0) // init - switch(nav_stage) { - Label(while_1) - Stage(0) - if (! (!(estimator_flight_time))) Goto(endwhile_2) else NextStage(); - Stage(1) - Goto(while_1) - Label(endwhile_2) - Stage(2) - if ((estimator_flight_time>8)) NextStage() else { - desired_course = RadOfDeg(QFU); - auto_pitch = FALSE; - nav_pitch = 0.150000; - vertical_mode = VERTICAL_MODE_AUTO_GAZ; - nav_desired_gaz = TRIM_UPPRZ(0.800000*MAX_PPRZ); - } - return; - Stage(3) - if ((estimator_z>SECURITY_ALT)) NextStage() else { - desired_course = RadOfDeg(QFU); - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_CLIMB; - desired_climb = 8.000000; - } - return; - Stage(4) - NextBlock() - } - - Block(1) // two - if RcEvent1() { GotoBlock(2) } - switch(nav_stage) { - Label(while_3) - Stage(0) - if (! (TRUE)) Goto(endwhile_4) else NextStage(); - Stage(1) - if (approaching(1)) NextStageFrom(1) else { - fly_to(1); - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[1].a; - pre_climb = 0.; - } - return; - Stage(2) - if (approaching(4)) NextStageFrom(4) else { - fly_to(4); - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[4].a; - pre_climb = 0.; - } - return; - Stage(3) - Goto(while_3) - Label(endwhile_4) - Stage(4) - NextBlock() - } - - Block(2) // height - if RcEvent1() { GotoBlock(3) } - switch(nav_stage) { - Label(while_5) - Stage(0) - if (! (TRUE)) Goto(endwhile_6) else NextStage(); - Stage(1) - if (approaching(6)) NextStageFrom(6) else { - fly_to(6); - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[6].a; - pre_climb = 0.; - } - return; +static inline void auto_nav( void ) +{ + /*#ifdef WITH_SWITCH + switch (nav_block) { + Block(0) // init + switch(nav_stage) { + Label(while_1) + Stage(0) + if (! (!(estimator_flight_time))) Goto(endwhile_2) else NextStage(); + Stage(1) + Goto(while_1) + Label(endwhile_2) Stage(2) - if (approaching(1)) NextStageFrom(1) else { - fly_to(1); + if ((estimator_flight_time>8)) NextStage() else { + desired_course = RadOfDeg(QFU); auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[1].a; - pre_climb = 0.; + nav_pitch = 0.150000; + vertical_mode = VERTICAL_MODE_AUTO_GAZ; + nav_desired_gaz = TRIM_UPPRZ(0.800000*MAX_PPRZ); } return; Stage(3) - if (approaching(2)) NextStageFrom(2) else { - route_to(last_wp, 2); + if ((estimator_z>SECURITY_ALT)) NextStage() else { + desired_course = RadOfDeg(QFU); auto_pitch = FALSE; nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[2].a; - pre_climb = 0.; + vertical_mode = VERTICAL_MODE_AUTO_CLIMB; + desired_climb = 8.000000; } return; Stage(4) - if (approaching(3)) NextStageFrom(3) else { - fly_to(3); - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[3].a; - pre_climb = 0.; - } - return; - Stage(5) - if (approaching(4)) NextStageFrom(4) else { - fly_to(4); - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[4].a; - pre_climb = 0.; - } - return; - Stage(6) - if (approaching(5)) NextStageFrom(5) else { - route_to(last_wp, 5); - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[5].a; - pre_climb = 0.; - } - return; - Stage(7) - Goto(while_5) - Label(endwhile_6) - Stage(8) - NextBlock() - } + NextBlock() + } - Block(3) // xyz - if RcEvent1() { GotoBlock(4) } - switch(nav_stage) { - Stage(0) - - - //NormCourse(x) { while (x < 0) x += 360; while (x >= 360) x -= 360;} - + Block(1) // two + if RcEvent1() { GotoBlock(2) } + switch(nav_stage) { + Label(while_3) + Stage(0) + if (! (TRUE)) Goto(endwhile_4) else NextStage(); + Stage(1) + if (approaching(1)) NextStageFrom(1) else { + fly_to(1); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 1 ].a; + pre_climb = 0.; + } + return; + Stage(2) + if (approaching(4)) NextStageFrom(4) else { + fly_to(4); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 4 ].a; + pre_climb = 0.; + } + return; + Stage(3) + Goto(while_3) + Label(endwhile_4) + Stage(4) + NextBlock() + } - //CircleXY(x,y,radius) { float alpha = atan2(estimator_y - y, estimator_x - x);float alpha_carrot = alpha + CARROT / (-radius * estimator_hspeed_mod); - //fly_to_xy(x+cos(alpha_carrot)*fabs(radius),y+sin(alpha_carrot)*fabs(radius)); qdr = DegOfRad(M_PI/2 - alpha_carrot); NormCourse(qdr);} - - - //Goto3D(50) - {static float carrot_x, carrot_y; int16_t pitch; int16_t roll; if (pprz_mode == PPRZ_MODE_AUTO2) { int16_t yaw = from_fbw.channels[RADIO_YAW]; if (yaw > - MIN_DX || yaw < -MIN_DX) { carrot_x += FLOAT_OF_PPRZ(yaw, 0, -20.);carrot_x = Min(carrot_x, MAX_DIST_CARROT); carrot_x = Max(carrot_x, -MAX_DIST_CARROT); } - pitch = from_fbw.channels[RADIO_PITCH]; if (pitch > MIN_DX || pitch < -MIN_DX) { carrot_y += FLOAT_OF_PPRZ(pitch, 0, -20.); carrot_y = Min(carrot_y, - MAX_DIST_CARROT); carrot_y = Max(carrot_y, -MAX_DIST_CARROT);} vertical_mode = VERTICAL_MODE_AUTO_ALT; roll = from_fbw.channels[RADIO_ROLL]; if (roll > - MIN_DX || roll < -MIN_DX) { desired_altitude += FLOAT_OF_PPRZ(roll, 0, -1.0); desired_altitude = Max(desired_altitude, MIN_HEIGHT_CARROT+GROUND_ALT); - desired_altitude = Min(desired_altitude, MAX_HEIGHT_CARROT+GROUND_ALT); } } { float alpha = atan2(estimator_y - carrot_y, estimator_x - carrot_x);float alpha_carrot = alpha + CARROT / (-50 * estimator_hspeed_mod); - fly_to_xy(carrot_x+cos(alpha_carrot)*fabs(50),carrot_y+sin(alpha_carrot)*fabs(50)); qdr = DegOfRad(M_PI/2 - alpha_carrot); { while (qdr < 0) qdr += 360; - while (qdr >= 360) qdr -= 360;}} } - - - return; - Stage(1) - NextBlock() - } + Block(2) // height + if RcEvent1() { GotoBlock(3) } + switch(nav_stage) { + Label(while_5) + Stage(0) + if (! (TRUE)) Goto(endwhile_6) else NextStage(); + Stage(1) + if (approaching(6)) NextStageFrom(6) else { + fly_to(6); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 6 ].a; + pre_climb = 0.; + } + return; + Stage(2) + if (approaching(1)) NextStageFrom(1) else { + fly_to(1); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 1 ].a; + pre_climb = 0.; + } + return; + Stage(3) + if (approaching(2)) NextStageFrom(2) else { + route_to(last_wp, 2); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 2 ].a; + pre_climb = 0.; + } + return; + Stage(4) + if (approaching(3)) NextStageFrom(3) else { + fly_to(3); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 3 ].a; + pre_climb = 0.; + } + return; + Stage(5) + if (approaching(4)) NextStageFrom(4) else { + fly_to(4); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 4 ].a; + pre_climb = 0.; + } + return; + Stage(6) + if (approaching(5)) NextStageFrom(5) else { + route_to(last_wp, 5); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 5 ].a; + pre_climb = 0.; + } + return; + Stage(7) + Goto(while_5) + Label(endwhile_6) + Stage(8) + NextBlock() + } + + Block(3) // xyz + if RcEvent1() { GotoBlock(4) } + switch(nav_stage) { + Stage(0) + + + //NormCourse(x) { while (x < 0) x += 360; while (x >= 360) x -= 360;} + + + //CircleXY(x,y,radius) { float alpha = atan2(estimator_y - y, estimator_x - x);float alpha_carrot = alpha + CARROT / (-radius * estimator_hspeed_mod); + //fly_to_xy(x+cos(alpha_carrot)*fabs(radius),y+sin(alpha_carrot)*fabs(radius)); qdr = DegOfRad(M_PI/2 - alpha_carrot); NormCourse(qdr);} + + + //Goto3D(50) + {static float carrot_x, carrot_y; int16_t pitch; int16_t roll; if (pprz_mode == PPRZ_MODE_AUTO2) { int16_t yaw = from_fbw.channels[ RADIO_YAW ]; if (yaw > + MIN_DX || yaw < -MIN_DX) { carrot_x += FLOAT_OF_PPRZ(yaw, 0, -20.);carrot_x = Min(carrot_x, MAX_DIST_CARROT); carrot_x = Max(carrot_x, -MAX_DIST_CARROT); } + pitch = from_fbw.channels[ RADIO_PITCH ]; if (pitch > MIN_DX || pitch < -MIN_DX) { carrot_y += FLOAT_OF_PPRZ(pitch, 0, -20.); carrot_y = Min(carrot_y, + MAX_DIST_CARROT); carrot_y = Max(carrot_y, -MAX_DIST_CARROT);} vertical_mode = VERTICAL_MODE_AUTO_ALT; roll = from_fbw.channels[ RADIO_ROLL ]; if (roll > + MIN_DX || roll < -MIN_DX) { desired_altitude += FLOAT_OF_PPRZ(roll, 0, -1.0); desired_altitude = Max(desired_altitude, MIN_HEIGHT_CARROT+GROUND_ALT); + desired_altitude = Min(desired_altitude, MAX_HEIGHT_CARROT+GROUND_ALT); } } { float alpha = atan2(estimator_y - carrot_y, estimator_x - carrot_x);float alpha_carrot = alpha + CARROT / (-50 * estimator_hspeed_mod); + fly_to_xy(carrot_x+cos(alpha_carrot)*fabs(50),carrot_y+sin(alpha_carrot)*fabs(50)); qdr = DegOfRad(M_PI/2 - alpha_carrot); { while (qdr < 0) qdr += 360; + while (qdr >= 360) qdr -= 360;}} } - Block(4) // circle - if RcEvent1() { GotoBlock(5) } - switch(nav_stage) { - Stage(0) - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[0].a; - pre_climb = 0.; - Circle(0, 150); - return; - Stage(1) - NextBlock() - } - Block(5) // hippo - if RcEvent1() { GotoBlock(1) } - switch(nav_stage) { - Label(while_7) - Stage(0) - if (! (TRUE)) Goto(endwhile_8) else NextStage(); - Stage(1) - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[1].a; - pre_climb = 0.; - Circle(1, 100); - if (Qdr(0)) NextStage(); return; - Stage(2) + Stage(1) + NextBlock() + } + + Block(4) // circle + if RcEvent1() { GotoBlock(5) } + switch(nav_stage) { + Stage(0) auto_pitch = FALSE; nav_pitch = 0.000000; vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[4].a; + desired_altitude = waypoints[ 0 ].a; pre_climb = 0.; - Circle(4, 100); - if (Qdr(180)) NextStage(); + Circle(0, 150); return; - Stage(3) - Goto(while_7) - Label(endwhile_8) - Stage(4) - NextBlock() - } + Stage(1) + NextBlock() + } -} -#else*/ -if(nav_block == 0) -{ // init - - if (nav_stage == 0) - { - Label(while_1) - nav_stage=0; - if (! (!(estimator_flight_time))) Goto(endwhile_2) - else NextStage(); - } - else if (nav_stage == 1) - { Goto(while_1)} - else if (nav_stage == 2) - { - Label(endwhile_2) - nav_stage = 2; - if ((estimator_flight_time>8)) NextStage() else { - desired_course = RadOfDeg(QFU); - auto_pitch = FALSE; - nav_pitch = 0.150000; - vertical_mode = VERTICAL_MODE_AUTO_GAZ; - nav_desired_gaz = TRIM_UPPRZ(0.800000*MAX_PPRZ); - } - return; - } - else if (nav_stage == 3) - { - nav_stage = 3; - if ((estimator_z>SECURITY_ALT)) NextStage() else { - desired_course = RadOfDeg(QFU); - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_CLIMB; - desired_climb = 8.000000; - } - return; - } - else if (nav_stage == 4) - NextBlock() - else { } -} -else if (nav_block == 1) // two -{ - nav_block = 1; - if RcEvent1() - { GotoBlock(2) } - if(nav_stage == 0) - { - Label(while_3) - if (! (TRUE)) Goto(endwhile_4) else NextStage(); - } - else if (nav_stage == 1) - { - nav_stage = 1; - if (approaching(1)) NextStageFrom(1) else { - fly_to(1); + Block(5) // hippo + if RcEvent1() { GotoBlock(1) } + switch(nav_stage) { + Label(while_7) + Stage(0) + if (! (TRUE)) Goto(endwhile_8) else NextStage(); + Stage(1) auto_pitch = FALSE; nav_pitch = 0.000000; vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[1].a; + desired_altitude = waypoints[ 1 ].a; pre_climb = 0.; - } - return; - } - else if (nav_stage == 2) - { - nav_stage = 2; - if (approaching(4)) NextStageFrom(4) else { - fly_to(4); + Circle(1, 100); + if (Qdr(0)) NextStage(); + return; + Stage(2) auto_pitch = FALSE; nav_pitch = 0.000000; vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[4].a; + desired_altitude = waypoints[ 4 ].a; pre_climb = 0.; - } - return; - } - else if (nav_stage == 3) - { - nav_stage = 3; - Goto(while_3) - } - else if (nav_stage == 4) - { - Label(endwhile_4) - nav_stage = 4; - NextBlock() + Circle(4, 100); + if (Qdr(180)) NextStage(); + return; + Stage(3) + Goto(while_7) + Label(endwhile_8) + Stage(4) + NextBlock() } - else { } -} -else if (nav_block == 2) // height -{ - nav_block = 2; - if RcEvent1() { GotoBlock(3) } - - if(nav_stage == 0) - { - Label(while_5) - nav_stage = 0; - if (! (TRUE)) Goto(endwhile_6) else NextStage(); + } - else if(nav_stage == 1) - { - nav_stage =1; - if (approaching(6)) NextStageFrom(6) else { - fly_to(6); - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[6].a; - pre_climb = 0.; - } - return; - } - else if (nav_stage == 2) - { - nav_stage =2; - if (approaching(1)) NextStageFrom(1) else { - fly_to(1); - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[1].a; - pre_climb = 0.; - } + #else*/ + if ( nav_block == 0 ) { + // init + + if ( nav_stage == 0 ) { + Label( while_1 ) + nav_stage = 0; + if ( ! ( !( estimator_flight_time ) ) ) Goto( endwhile_2 ) + else NextStage(); + } else + if ( nav_stage == 1 ) { + Goto( while_1 ) + } else + if ( nav_stage == 2 ) { + Label( endwhile_2 ) + nav_stage = 2; + if ( ( estimator_flight_time > 8 ) ) NextStage() else { + desired_course = RadOfDeg( QFU ); + auto_pitch = FALSE; + nav_pitch = 0.150000; + vertical_mode = VERTICAL_MODE_AUTO_GAZ; + nav_desired_gaz = TRIM_UPPRZ( 0.800000 * MAX_PPRZ ); + } return; + } else + if ( nav_stage == 3 ) { + nav_stage = 3; + if ( ( estimator_z > SECURITY_ALT ) ) NextStage() else { + desired_course = RadOfDeg( QFU ); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_CLIMB; + desired_climb = 8.000000; + } + return; + } else + if ( nav_stage == 4 ) + NextBlock() + else { } + } else + if ( nav_block == 1 ) { // two + nav_block = 1; + if RcEvent1() { + GotoBlock( 2 ) } - else if (nav_stage == 3) - { - nav_stage = 3; - if (approaching(2)) NextStageFrom(2) else { - route_to(last_wp, 2); - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[2].a; - pre_climb = 0.; - } + if ( nav_stage == 0 ) { + Label( while_3 ) + if ( ! ( TRUE ) ) Goto( endwhile_4 ) else NextStage(); + } else + if ( nav_stage == 1 ) { + nav_stage = 1; + if ( approaching( 1 ) ) NextStageFrom( 1 ) else { + fly_to( 1 ); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 1 ].a; + pre_climb = 0.; + } return; - } - else if (nav_stage == 4) - { - nav_stage = 4; - if (approaching(3)) NextStageFrom(3) else { - fly_to(3); - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[3].a; - pre_climb = 0.; - } - return; - } - else if (nav_stage == 5) - { - nav_stage =5; - if (approaching(4)) NextStageFrom(4) else { - fly_to(4); - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[4].a; - pre_climb = 0.; - } - return; - } - else if (nav_stage == 6) - { - nav_stage =6; - if (approaching(5)) NextStageFrom(5) else { - route_to(last_wp, 5); - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[5].a; - pre_climb = 0.; + } else + if ( nav_stage == 2 ) { + nav_stage = 2; + if ( approaching( 4 ) ) NextStageFrom( 4 ) else { + fly_to( 4 ); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 4 ].a; + pre_climb = 0.; + } + return; + } else + if ( nav_stage == 3 ) { + nav_stage = 3; + Goto( while_3 ) + } else + if ( nav_stage == 4 ) { + Label( endwhile_4 ) + nav_stage = 4; + NextBlock() + } else { } + } else + if ( nav_block == 2 ) { // height + nav_block = 2; + if RcEvent1() { + GotoBlock( 3 ) + } + + if ( nav_stage == 0 ) { + Label( while_5 ) + nav_stage = 0; + if ( ! ( TRUE ) ) Goto( endwhile_6 ) else NextStage(); + } else + if ( nav_stage == 1 ) { + nav_stage = 1; + if ( approaching( 6 ) ) NextStageFrom( 6 ) else { + fly_to( 6 ); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 6 ].a; + pre_climb = 0.; + } + return; + } else + if ( nav_stage == 2 ) { + nav_stage = 2; + if ( approaching( 1 ) ) NextStageFrom( 1 ) else { + fly_to( 1 ); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 1 ].a; + pre_climb = 0.; + } + return; + } else + if ( nav_stage == 3 ) { + nav_stage = 3; + if ( approaching( 2 ) ) NextStageFrom( 2 ) else { + route_to( last_wp, 2 ); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 2 ].a; + pre_climb = 0.; + } + return; + } else + if ( nav_stage == 4 ) { + nav_stage = 4; + if ( approaching( 3 ) ) NextStageFrom( 3 ) else { + fly_to( 3 ); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 3 ].a; + pre_climb = 0.; + } + return; + } else + if ( nav_stage == 5 ) { + nav_stage = 5; + if ( approaching( 4 ) ) NextStageFrom( 4 ) else { + fly_to( 4 ); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 4 ].a; + pre_climb = 0.; + } + return; + } else + if ( nav_stage == 6 ) { + nav_stage = 6; + if ( approaching( 5 ) ) NextStageFrom( 5 ) else { + route_to( last_wp, 5 ); + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 5 ].a; + pre_climb = 0.; + } + return; + } else + if ( nav_stage == 7 ) { + nav_stage = 7; + Goto( while_5 ) + } + + else + if ( nav_stage == 8 ) { + Label( endwhile_6 ) + nav_stage = 8; + NextBlock(); + } else { } + } else + if ( nav_block == 3 ) { // xyz + nav_block = 3; + if RcEvent1() { + GotoBlock( 4 ) } - return; - } - else if (nav_stage == 7) - { - nav_stage =7; - Goto(while_5) - } - - else if (nav_stage == 8){ - Label(endwhile_6) - nav_stage =8; - NextBlock(); - } - else { } -} -else if (nav_block == 3) // xyz -{ - nav_block = 3; - if RcEvent1() { GotoBlock(4) } - if(nav_stage == 0) - { - nav_stage = 0; - //Goto3D(50) - {static float carrot_x, carrot_y; - int16_t pitch; int16_t roll; - if (pprz_mode == PPRZ_MODE_AUTO2) { - int16_t yaw = from_fbw.channels[RADIO_YAW]; - if (yaw > MIN_DX || yaw < -MIN_DX) - { - carrot_x += FLOAT_OF_PPRZ(yaw, 0, -20.);carrot_x = Min(carrot_x, MAX_DIST_CARROT); carrot_x = Max(carrot_x, -MAX_DIST_CARROT); - } - pitch = from_fbw.channels[RADIO_PITCH]; - if (pitch > MIN_DX || pitch < -MIN_DX) - { carrot_y += FLOAT_OF_PPRZ(pitch, 0, -20.); carrot_y = Min(carrot_y, - MAX_DIST_CARROT); carrot_y = Max(carrot_y, -MAX_DIST_CARROT); - } - vertical_mode = VERTICAL_MODE_AUTO_ALT; - roll = from_fbw.channels[RADIO_ROLL]; - if (roll > MIN_DX || roll < -MIN_DX) - { desired_altitude += FLOAT_OF_PPRZ(roll, 0, -1.0); desired_altitude = Max(desired_altitude, MIN_HEIGHT_CARROT+GROUND_ALT); - desired_altitude = Min(desired_altitude, MAX_HEIGHT_CARROT+GROUND_ALT); - } - } - { float alpha = atan2(estimator_y - carrot_y, estimator_x - carrot_x); - float alpha_carrot = alpha + CARROT / (-50 * estimator_hspeed_mod); - fly_to_xy(carrot_x+cos(alpha_carrot)*fabs(50),carrot_y+sin(alpha_carrot)*fabs(50)); - qdr = DegOfRad(M_PI/2 - alpha_carrot); - { - _Pragma("loopbounds min 0 max 1") - while (qdr < 0) qdr += 360; - _Pragma("loopbounds min 0 max 1") - while (qdr >= 360) qdr -= 360;}} } - - return; - } - else if (nav_stage == 1) - { - nav_stage = 1; - NextBlock() - } - else { } -} -else if (nav_block == 4) -{ - nav_block = 4; - if RcEvent1() { GotoBlock(5) } - if(nav_stage == 0) - { - nav_stage = 0; - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[0].a; - pre_climb = 0.; - Circle(0, 150); - return; - } - else if (nav_stage == 1) - { - nav_stage =1; - NextBlock() - } - else {} -} -else if (nav_block == 5) -{ - nav_block = 5; - if RcEvent1() { GotoBlock(1) } - if(nav_stage == 0) { - Label(while_7) - nav_stage = 0; - if (! (TRUE)) Goto(endwhile_8) else NextStage();} - - else if (nav_stage == 1) - { - nav_stage =1; - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[1].a; - pre_climb = 0.; - Circle(1, 100); - if (Qdr(0)) NextStage(); - return; - } - else if (nav_stage == 2) - { - nav_stage = 2; - auto_pitch = FALSE; - nav_pitch = 0.000000; - vertical_mode = VERTICAL_MODE_AUTO_ALT; - desired_altitude = waypoints[4].a; - pre_climb = 0.; - Circle(4, 100); - if (Qdr(180)) NextStage(); - return; - } - else if (nav_stage == 3) - { - nav_stage = 3; - Goto(while_7) - } - else if (nav_stage == 4) - { - Label(endwhile_8) - nav_stage = 4; - NextBlock() - } - else { } -} -else { } + if ( nav_stage == 0 ) { + nav_stage = 0; + //Goto3D(50) + { + static float carrot_x, carrot_y; + int16_t pitch; + int16_t roll; + if ( pprz_mode == PPRZ_MODE_AUTO2 ) { + int16_t yaw = from_fbw.channels[ RADIO_YAW ]; + if ( yaw > MIN_DX || yaw < -MIN_DX ) { + carrot_x += FLOAT_OF_PPRZ( yaw, 0, -20. ); + carrot_x = Min( carrot_x, MAX_DIST_CARROT ); + carrot_x = Max( carrot_x, -MAX_DIST_CARROT ); + } + pitch = from_fbw.channels[ RADIO_PITCH ]; + if ( pitch > MIN_DX || pitch < -MIN_DX ) { + carrot_y += FLOAT_OF_PPRZ( pitch, 0, -20. ); + carrot_y = Min( carrot_y, + MAX_DIST_CARROT ); + carrot_y = Max( carrot_y, -MAX_DIST_CARROT ); + } + vertical_mode = VERTICAL_MODE_AUTO_ALT; + roll = from_fbw.channels[ RADIO_ROLL ]; + if ( roll > MIN_DX || roll < -MIN_DX ) { + desired_altitude += FLOAT_OF_PPRZ( roll, 0, -1.0 ); + desired_altitude = Max( desired_altitude, MIN_HEIGHT_CARROT + GROUND_ALT ); + desired_altitude = Min( desired_altitude, MAX_HEIGHT_CARROT + GROUND_ALT ); + } + } + { + float alpha = atan2( estimator_y - carrot_y, estimator_x - carrot_x ); + float alpha_carrot = alpha + CARROT / ( -50 * estimator_hspeed_mod ); + fly_to_xy( carrot_x + cos( alpha_carrot )*fabs( 50 ), + carrot_y + sin( alpha_carrot )*fabs( 50 ) ); + qdr = DegOfRad( M_PI / 2 - alpha_carrot ); + { + _Pragma( "loopbounds min 0 max 1" ) + while ( qdr < 0 ) qdr += 360; + _Pragma( "loopbounds min 0 max 1" ) + while ( qdr >= 360 ) qdr -= 360; + } + } + } + + return; + } else + if ( nav_stage == 1 ) { + nav_stage = 1; + NextBlock() + } else { } + } else + if ( nav_block == 4 ) { + nav_block = 4; + if RcEvent1() { + GotoBlock( 5 ) + } + if ( nav_stage == 0 ) { + nav_stage = 0; + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 0 ].a; + pre_climb = 0.; + Circle( 0, 150 ); + return; + } else + if ( nav_stage == 1 ) { + nav_stage = 1; + NextBlock() + } else {} + } else + if ( nav_block == 5 ) { + nav_block = 5; + if RcEvent1() { + GotoBlock( 1 ) + } + if ( nav_stage == 0 ) { + Label( while_7 ) + nav_stage = 0; + if ( ! ( TRUE ) ) Goto( endwhile_8 ) else NextStage(); + } + + else + if ( nav_stage == 1 ) { + nav_stage = 1; + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 1 ].a; + pre_climb = 0.; + Circle( 1, 100 ); + if ( Qdr( 0 ) ) NextStage(); + return; + } else + if ( nav_stage == 2 ) { + nav_stage = 2; + auto_pitch = FALSE; + nav_pitch = 0.000000; + vertical_mode = VERTICAL_MODE_AUTO_ALT; + desired_altitude = waypoints[ 4 ].a; + pre_climb = 0.; + Circle( 4, 100 ); + if ( Qdr( 180 ) ) NextStage(); + return; + } else + if ( nav_stage == 3 ) { + nav_stage = 3; + Goto( while_7 ) + } else + if ( nav_stage == 4 ) { + Label( endwhile_8 ) + nav_stage = 4; + NextBlock() + } else { } + } else { } //#endif } diff --git a/bench/parallel/PapaBench/sw/var/include/inflight_calib.h b/bench/parallel/PapaBench/sw/var/include/inflight_calib.h index 0ffbfb575f3492a084f14f3b67462eab75f1acff..148e4df90c635eee5e8b008ea61bc5da2f58b285 100644 --- a/bench/parallel/PapaBench/sw/var/include/inflight_calib.h +++ b/bench/parallel/PapaBench/sw/var/include/inflight_calib.h @@ -2,47 +2,52 @@ /* Please DO NOT EDIT */ #ifndef INFLIGHT_CALIB_H -#define INFLIGHT_CALIB_H +#define INFLIGHT_CALIB_H -void inflight_calib(bool_t mode_changed) { - if (pprz_mode == PPRZ_MODE_AUTO1) { - if (inflight_calib_mode == IF_CALIB_MODE_UP) { +void inflight_calib( bool_t mode_changed ) +{ + if ( pprz_mode == PPRZ_MODE_AUTO1 ) { + if ( inflight_calib_mode == IF_CALIB_MODE_UP ) { static int16_t ir_pitch_neutral_init; - if (mode_changed) { + if ( mode_changed ) { ir_pitch_neutral_init = ir_pitch_neutral; - slider1_init = from_fbw.channels[RADIO_GAIN1]; + slider1_init = from_fbw.channels[ RADIO_GAIN1 ]; } - ir_pitch_neutral = ParamValInt16(ir_pitch_neutral_init, 60.000000, from_fbw.channels[RADIO_GAIN1], slider1_init); - slider_1_val = (float)ir_pitch_neutral; + ir_pitch_neutral = ParamValInt16( ir_pitch_neutral_init, 60.000000, + from_fbw.channels[ RADIO_GAIN1 ], slider1_init ); + slider_1_val = ( float )ir_pitch_neutral; } - if (inflight_calib_mode == IF_CALIB_MODE_UP) { + if ( inflight_calib_mode == IF_CALIB_MODE_UP ) { static int16_t ir_roll_neutral_init; - if (mode_changed) { + if ( mode_changed ) { ir_roll_neutral_init = ir_roll_neutral; - slider2_init = from_fbw.channels[RADIO_GAIN2]; + slider2_init = from_fbw.channels[ RADIO_GAIN2 ]; } - ir_roll_neutral = ParamValInt16(ir_roll_neutral_init, -60.000000, from_fbw.channels[RADIO_GAIN2], slider2_init); - slider_2_val = (float)ir_roll_neutral; + ir_roll_neutral = ParamValInt16( ir_roll_neutral_init, -60.000000, + from_fbw.channels[ RADIO_GAIN2 ], slider2_init ); + slider_2_val = ( float )ir_roll_neutral; } } - if (pprz_mode == PPRZ_MODE_AUTO2) { - if (inflight_calib_mode == IF_CALIB_MODE_UP) { + if ( pprz_mode == PPRZ_MODE_AUTO2 ) { + if ( inflight_calib_mode == IF_CALIB_MODE_UP ) { static float course_pgain_init; - if (mode_changed) { + if ( mode_changed ) { course_pgain_init = course_pgain; - slider1_init = from_fbw.channels[RADIO_GAIN1]; + slider1_init = from_fbw.channels[ RADIO_GAIN1 ]; } - course_pgain = ParamValFloat(course_pgain_init, 0.100000, from_fbw.channels[RADIO_GAIN1], slider1_init); - slider_1_val = (float)course_pgain; + course_pgain = ParamValFloat( course_pgain_init, 0.100000, + from_fbw.channels[ RADIO_GAIN1 ], slider1_init ); + slider_1_val = ( float )course_pgain; } - if (inflight_calib_mode == IF_CALIB_MODE_UP) { + if ( inflight_calib_mode == IF_CALIB_MODE_UP ) { static float max_roll_init; - if (mode_changed) { + if ( mode_changed ) { max_roll_init = max_roll; - slider2_init = from_fbw.channels[RADIO_GAIN2]; + slider2_init = from_fbw.channels[ RADIO_GAIN2 ]; } - max_roll = ParamValFloat(max_roll_init, -0.200000, from_fbw.channels[RADIO_GAIN2], slider2_init); - slider_2_val = (float)max_roll; + max_roll = ParamValFloat( max_roll_init, -0.200000, + from_fbw.channels[ RADIO_GAIN2 ], slider2_init ); + slider_2_val = ( float )max_roll; } } } diff --git a/bench/parallel/PapaBench/sw/var/include/messages.h b/bench/parallel/PapaBench/sw/var/include/messages.h index acb2fed15a6e16f4d7ded6885bfdb80c2e72f85c..fdb7a91b18dd2c970c13133cadccc198ec932986 100644 --- a/bench/parallel/PapaBench/sw/var/include/messages.h +++ b/bench/parallel/PapaBench/sw/var/include/messages.h @@ -26,308 +26,308 @@ #define DL_MSG_NB 23 #define DOWNLINK_SEND_ID(md5sum){ \ - if (MODEM_CHECK_FREE_SPACE(20)) {\ - ModemStartMessage(DL_ID) \ - {\ - int i;\ - for(i = 0; i < 16; i++) {\ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(&md5sum[i])); \ - }\ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(20)) {\ + ModemStartMessage(DL_ID) \ + {\ + int i;\ + for(i = 0; i < 16; i++) {\ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(&md5sum[ i ])); \ + }\ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_BOOT(version){ \ - if (MODEM_CHECK_FREE_SPACE(6)) {\ - ModemStartMessage(DL_BOOT) \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(version)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(6)) {\ + ModemStartMessage(DL_BOOT) \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(version)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_CALIB_START(){ \ - if (MODEM_CHECK_FREE_SPACE(4)) {\ - ModemStartMessage(DL_CALIB_START) \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(4)) {\ + ModemStartMessage(DL_CALIB_START) \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_CALIB_CONTRAST(adc){ \ - if (MODEM_CHECK_FREE_SPACE(6)) {\ - ModemStartMessage(DL_CALIB_CONTRAST) \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(adc)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(6)) {\ + ModemStartMessage(DL_CALIB_CONTRAST) \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(adc)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_TAKEOFF(cpu_time){ \ - if (MODEM_CHECK_FREE_SPACE(6)) {\ - ModemStartMessage(DL_TAKEOFF) \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(cpu_time)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(6)) {\ + ModemStartMessage(DL_TAKEOFF) \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(cpu_time)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_RAD_OF_IR(ir, rad, rad_of_ir, ir_roll_ntrl, ir_pitch_ntrl){ \ - if (MODEM_CHECK_FREE_SPACE(20)) {\ - ModemStartMessage(DL_RAD_OF_IR) \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(ir)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(rad)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(rad_of_ir)); \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(ir_roll_ntrl)); \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(ir_pitch_ntrl)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(20)) {\ + ModemStartMessage(DL_RAD_OF_IR) \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(ir)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(rad)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(rad_of_ir)); \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(ir_roll_ntrl)); \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(ir_pitch_ntrl)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_ATTITUDE(phi, psi, theta){ \ - if (MODEM_CHECK_FREE_SPACE(16)) {\ - ModemStartMessage(DL_ATTITUDE) \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(phi)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(psi)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(theta)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(16)) {\ + ModemStartMessage(DL_ATTITUDE) \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(phi)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(psi)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(theta)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_ADC(roll, pitch){ \ - if (MODEM_CHECK_FREE_SPACE(8)) {\ - ModemStartMessage(DL_ADC) \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(roll)); \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(pitch)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(8)) {\ + ModemStartMessage(DL_ADC) \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(roll)); \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(pitch)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_GPS(mode, east, north, course, alt, speed, climb, tow){ \ - if (MODEM_CHECK_FREE_SPACE(33)) {\ - ModemStartMessage(DL_GPS) \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(mode)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(east)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(north)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(course)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(alt)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(speed)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(climb)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(tow)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(33)) {\ + ModemStartMessage(DL_GPS) \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(mode)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(east)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(north)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(course)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(alt)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(speed)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(climb)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(tow)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_NAVIGATION_REF(utm_east, utm_north){ \ - if (MODEM_CHECK_FREE_SPACE(12)) {\ - ModemStartMessage(DL_NAVIGATION_REF) \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(utm_east)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(utm_north)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(12)) {\ + ModemStartMessage(DL_NAVIGATION_REF) \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(utm_east)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(utm_north)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_NAVIGATION(cur_block, cur_stage, pos_x, pos_y, desired_course, dist2_wp, course_pgain, dist2_home){ \ - if (MODEM_CHECK_FREE_SPACE(30)) {\ - ModemStartMessage(DL_NAVIGATION) \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(cur_block)); \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(cur_stage)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(pos_x)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(pos_y)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(desired_course)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(dist2_wp)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(course_pgain)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(dist2_home)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(30)) {\ + ModemStartMessage(DL_NAVIGATION) \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(cur_block)); \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(cur_stage)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(pos_x)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(pos_y)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(desired_course)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(dist2_wp)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(course_pgain)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(dist2_home)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_PPRZ_MODE(ap_mode, ap_altitude, if_calib_mode, mcu1_status, lls_calib){ \ - if (MODEM_CHECK_FREE_SPACE(9)) {\ - ModemStartMessage(DL_PPRZ_MODE) \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(ap_mode)); \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(ap_altitude)); \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(if_calib_mode)); \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(mcu1_status)); \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(lls_calib)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(9)) {\ + ModemStartMessage(DL_PPRZ_MODE) \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(ap_mode)); \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(ap_altitude)); \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(if_calib_mode)); \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(mcu1_status)); \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(lls_calib)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_BAT(voltage, flight_time, low_battery, block_time, stage_time){ \ - if (MODEM_CHECK_FREE_SPACE(12)) {\ - ModemStartMessage(DL_BAT) \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(voltage)); \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(flight_time)); \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(low_battery)); \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(block_time)); \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(stage_time)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(12)) {\ + ModemStartMessage(DL_BAT) \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(voltage)); \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(flight_time)); \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(low_battery)); \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(block_time)); \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(stage_time)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_DEBUG(i2c_nb_err, i2c_mcu1_nb_err, modem_nb_err, gps_nb_err, ppm_rate){ \ - if (MODEM_CHECK_FREE_SPACE(9)) {\ - ModemStartMessage(DL_DEBUG) \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(i2c_nb_err)); \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(i2c_mcu1_nb_err)); \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(modem_nb_err)); \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(gps_nb_err)); \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(ppm_rate)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(9)) {\ + ModemStartMessage(DL_DEBUG) \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(i2c_nb_err)); \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(i2c_mcu1_nb_err)); \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(modem_nb_err)); \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(gps_nb_err)); \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(ppm_rate)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_CLIMB_PID(gaz, climb, sum_err, p_gain){ \ - if (MODEM_CHECK_FREE_SPACE(18)) {\ - ModemStartMessage(DL_CLIMB_PID) \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(gaz)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(climb)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(sum_err)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(p_gain)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(18)) {\ + ModemStartMessage(DL_CLIMB_PID) \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(gaz)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(climb)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(sum_err)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(p_gain)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_DOWNLINK_STATUS(run_time, rx_bytes, rx_msgs, rx_err, rx_bytes_rate, rx_msgs_rate){ \ - if (MODEM_CHECK_FREE_SPACE(28)) {\ - ModemStartMessage(DL_DOWNLINK_STATUS) \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(run_time)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(rx_bytes)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(rx_msgs)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(rx_err)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(rx_bytes_rate)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(rx_msgs_rate)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(28)) {\ + ModemStartMessage(DL_DOWNLINK_STATUS) \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(run_time)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(rx_bytes)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(rx_msgs)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(rx_err)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(rx_bytes_rate)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(rx_msgs_rate)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_MODEM_STATUS(detected, valim, cd, nb_byte, nb_msg, nb_err){ \ - if (MODEM_CHECK_FREE_SPACE(22)) {\ - ModemStartMessage(DL_MODEM_STATUS) \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(detected)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(valim)); \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(cd)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(nb_byte)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(nb_msg)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(nb_err)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(22)) {\ + ModemStartMessage(DL_MODEM_STATUS) \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(detected)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(valim)); \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(cd)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(nb_byte)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(nb_msg)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(nb_err)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_SETTINGS(mode, slider_1_val, slider_2_val){ \ - if (MODEM_CHECK_FREE_SPACE(13)) {\ - ModemStartMessage(DL_SETTINGS) \ - MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(mode)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(slider_1_val)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(slider_2_val)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(13)) {\ + ModemStartMessage(DL_SETTINGS) \ + MODEM_PUT_1_BYTE_BY_ADDR((uint8_t*)(mode)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(slider_1_val)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(slider_2_val)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_DESIRED(roll, pitch, desired_x, desired_y, desired_altitude){ \ - if (MODEM_CHECK_FREE_SPACE(24)) {\ - ModemStartMessage(DL_DESIRED) \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(roll)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(pitch)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(desired_x)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(desired_y)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(desired_altitude)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(24)) {\ + ModemStartMessage(DL_DESIRED) \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(roll)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(pitch)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(desired_x)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(desired_y)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(desired_altitude)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_WIND(dir, speed, mean_as, nb_sample, stddev){ \ - if (MODEM_CHECK_FREE_SPACE(22)) {\ - ModemStartMessage(DL_WIND) \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(dir)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(speed)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(mean_as)); \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(nb_sample)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(stddev)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(22)) {\ + ModemStartMessage(DL_WIND) \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(dir)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(speed)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(mean_as)); \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(nb_sample)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(stddev)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_IMU(gyro_x, gyro_y, gyro_z, accel_x, accel_y, accel_z){ \ - if (MODEM_CHECK_FREE_SPACE(28)) {\ - ModemStartMessage(DL_IMU) \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(gyro_x)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(gyro_y)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(gyro_z)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(accel_x)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(accel_y)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(accel_z)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(28)) {\ + ModemStartMessage(DL_IMU) \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(gyro_x)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(gyro_y)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(gyro_z)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(accel_x)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(accel_y)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(accel_z)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_RAW_IMU(raw_gx, raw_gy, raw_gz, raw_ax, raw_ay, raw_az){ \ - if (MODEM_CHECK_FREE_SPACE(16)) {\ - ModemStartMessage(DL_RAW_IMU) \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(raw_gx)); \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(raw_gy)); \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(raw_gz)); \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(raw_ax)); \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(raw_ay)); \ - MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(raw_az)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(16)) {\ + ModemStartMessage(DL_RAW_IMU) \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(raw_gx)); \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(raw_gy)); \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(raw_gz)); \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(raw_ax)); \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(raw_ay)); \ + MODEM_PUT_2_BYTE_BY_ADDR((uint8_t*)(raw_az)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define DOWNLINK_SEND_KALMAN(phi, phi_dot, phi_bias, theta, theta_dot, theta_bias){ \ - if (MODEM_CHECK_FREE_SPACE(28)) {\ - ModemStartMessage(DL_KALMAN) \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(phi)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(phi_dot)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(phi_bias)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(theta)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(theta_dot)); \ - MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(theta_bias)); \ - ModemEndMessage() \ - } \ - else \ - modem_nb_ovrn++; \ + if (MODEM_CHECK_FREE_SPACE(28)) {\ + ModemStartMessage(DL_KALMAN) \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(phi)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(phi_dot)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(phi_bias)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(theta)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(theta_dot)); \ + MODEM_PUT_4_BYTE_BY_ADDR((uint8_t*)(theta_bias)); \ + ModemEndMessage() \ + } \ + else \ + modem_nb_ovrn++; \ } #define MESSAGES_MD5SUM "\120\162\150\107\166\250\102\343\211\352\231\260\061\055\031\274" @@ -345,4 +345,4 @@ if (i % 50 == 9) PERIODIC_SEND_PPRZ_MODE();\ if (i % 50 == 29) PERIODIC_SEND_DEBUG();\ if (i % 100 == 49) PERIODIC_SEND_NAVIGATION_REF();\ -}*/ + }*/ diff --git a/bench/parallel/PapaBench/sw/var/include/radio.h b/bench/parallel/PapaBench/sw/var/include/radio.h index 3136c768fa79c57a8abd8c5107488d67cfc48f1a..320362b3e31dcab8788463e529ce378597eaf738 100644 --- a/bench/parallel/PapaBench/sw/var/include/radio.h +++ b/bench/parallel/PapaBench/sw/var/include/radio.h @@ -2,7 +2,7 @@ /* Please DO NOT EDIT */ #ifndef RADIO_H -#define RADIO_H +#define RADIO_H #define RADIO_NAME "mc3030" @@ -34,63 +34,63 @@ #define LastRadioFromPpm() {\ static uint8_t avg_cpt = 0; /* Counter for averaging */\ int16_t tmp_radio;\ - tmp_radio = ppm_pulses[RADIO_THROTTLE] - (CLOCK*1000);\ - last_radio[RADIO_THROTTLE] = tmp_radio * (MAX_PPRZ / 1 / (float)(CLOCK*(2200-1000)));\ - if (last_radio[RADIO_THROTTLE] > MAX_PPRZ) last_radio[RADIO_THROTTLE] = MAX_PPRZ;\ - else if (last_radio[RADIO_THROTTLE] < 0) last_radio[RADIO_THROTTLE] = 0; \ + tmp_radio = ppm_pulses[ RADIO_THROTTLE ] - (CLOCK*1000);\ + last_radio[ RADIO_THROTTLE ] = tmp_radio * (MAX_PPRZ / 1 / (float)(CLOCK*(2200-1000)));\ + if (last_radio[ RADIO_THROTTLE ] > MAX_PPRZ) last_radio[ RADIO_THROTTLE ] = MAX_PPRZ;\ + else if (last_radio[ RADIO_THROTTLE ] < 0) last_radio[ RADIO_THROTTLE ] = 0; \ \ - tmp_radio = ppm_pulses[RADIO_ROLL] - (CLOCK*1600);\ - last_radio[RADIO_ROLL] = tmp_radio * (tmp_radio >=0 ? (MAX_PPRZ/1/(float)(CLOCK*(2200-1600))) : (MIN_PPRZ/1/(float)(CLOCK*(1000-1600))));\ - if (last_radio[RADIO_ROLL] > MAX_PPRZ) last_radio[RADIO_ROLL] = MAX_PPRZ;\ - else if (last_radio[RADIO_ROLL] < MIN_PPRZ) last_radio[RADIO_ROLL] = MIN_PPRZ; \ + tmp_radio = ppm_pulses[ RADIO_ROLL ] - (CLOCK*1600);\ + last_radio[ RADIO_ROLL ] = tmp_radio * (tmp_radio >=0 ? (MAX_PPRZ/1/(float)(CLOCK*(2200-1600))) : (MIN_PPRZ/1/(float)(CLOCK*(1000-1600))));\ + if (last_radio[ RADIO_ROLL ] > MAX_PPRZ) last_radio[ RADIO_ROLL ] = MAX_PPRZ;\ + else if (last_radio[ RADIO_ROLL ] < MIN_PPRZ) last_radio[ RADIO_ROLL ] = MIN_PPRZ; \ \ - tmp_radio = ppm_pulses[RADIO_PITCH] - (CLOCK*1600);\ - last_radio[RADIO_PITCH] = tmp_radio * (tmp_radio >=0 ? (MAX_PPRZ/1/(float)(CLOCK*(2200-1600))) : (MIN_PPRZ/1/(float)(CLOCK*(1000-1600))));\ - if (last_radio[RADIO_PITCH] > MAX_PPRZ) last_radio[RADIO_PITCH] = MAX_PPRZ;\ - else if (last_radio[RADIO_PITCH] < MIN_PPRZ) last_radio[RADIO_PITCH] = MIN_PPRZ; \ + tmp_radio = ppm_pulses[ RADIO_PITCH ] - (CLOCK*1600);\ + last_radio[ RADIO_PITCH ] = tmp_radio * (tmp_radio >=0 ? (MAX_PPRZ/1/(float)(CLOCK*(2200-1600))) : (MIN_PPRZ/1/(float)(CLOCK*(1000-1600))));\ + if (last_radio[ RADIO_PITCH ] > MAX_PPRZ) last_radio[ RADIO_PITCH ] = MAX_PPRZ;\ + else if (last_radio[ RADIO_PITCH ] < MIN_PPRZ) last_radio[ RADIO_PITCH ] = MIN_PPRZ; \ \ - tmp_radio = ppm_pulses[RADIO_YAW] - (CLOCK*1600);\ - last_radio[RADIO_YAW] = tmp_radio * (tmp_radio >=0 ? (MAX_PPRZ/1/(float)(CLOCK*(2200-1600))) : (MIN_PPRZ/1/(float)(CLOCK*(1000-1600))));\ - if (last_radio[RADIO_YAW] > MAX_PPRZ) last_radio[RADIO_YAW] = MAX_PPRZ;\ - else if (last_radio[RADIO_YAW] < MIN_PPRZ) last_radio[RADIO_YAW] = MIN_PPRZ; \ + tmp_radio = ppm_pulses[ RADIO_YAW ] - (CLOCK*1600);\ + last_radio[ RADIO_YAW ] = tmp_radio * (tmp_radio >=0 ? (MAX_PPRZ/1/(float)(CLOCK*(2200-1600))) : (MIN_PPRZ/1/(float)(CLOCK*(1000-1600))));\ + if (last_radio[ RADIO_YAW ] > MAX_PPRZ) last_radio[ RADIO_YAW ] = MAX_PPRZ;\ + else if (last_radio[ RADIO_YAW ] < MIN_PPRZ) last_radio[ RADIO_YAW ] = MIN_PPRZ; \ \ - tmp_radio = ppm_pulses[RADIO_MODE] - (CLOCK*1600);\ - avg_last_radio[RADIO_MODE] += tmp_radio * (tmp_radio >=0 ? (MAX_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(2200-1600))) : (MIN_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(1000-1600))));\ - tmp_radio = ppm_pulses[RADIO_GAIN1] - (CLOCK*1600);\ - avg_last_radio[RADIO_GAIN1] += tmp_radio * (tmp_radio >=0 ? (MAX_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(2200-1600))) : (MIN_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(1000-1600))));\ - tmp_radio = ppm_pulses[RADIO_GAIN2] - (CLOCK*1600);\ - avg_last_radio[RADIO_GAIN2] += tmp_radio * (tmp_radio >=0 ? (MAX_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(2200-1600))) : (MIN_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(1000-1600))));\ - tmp_radio = ppm_pulses[RADIO_LLS] - (CLOCK*1600);\ - avg_last_radio[RADIO_LLS] += tmp_radio * (tmp_radio >=0 ? (MAX_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(2200-1600))) : (MIN_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(1000-1600))));\ - tmp_radio = ppm_pulses[RADIO_CALIB] - (CLOCK*1600);\ - avg_last_radio[RADIO_CALIB] += tmp_radio * (tmp_radio >=0 ? (MAX_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(2200-1600))) : (MIN_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(1000-1600))));\ + tmp_radio = ppm_pulses[ RADIO_MODE ] - (CLOCK*1600);\ + avg_last_radio[ RADIO_MODE ] += tmp_radio * (tmp_radio >=0 ? (MAX_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(2200-1600))) : (MIN_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(1000-1600))));\ + tmp_radio = ppm_pulses[ RADIO_GAIN1 ] - (CLOCK*1600);\ + avg_last_radio[ RADIO_GAIN1 ] += tmp_radio * (tmp_radio >=0 ? (MAX_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(2200-1600))) : (MIN_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(1000-1600))));\ + tmp_radio = ppm_pulses[ RADIO_GAIN2 ] - (CLOCK*1600);\ + avg_last_radio[ RADIO_GAIN2 ] += tmp_radio * (tmp_radio >=0 ? (MAX_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(2200-1600))) : (MIN_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(1000-1600))));\ + tmp_radio = ppm_pulses[ RADIO_LLS ] - (CLOCK*1600);\ + avg_last_radio[ RADIO_LLS ] += tmp_radio * (tmp_radio >=0 ? (MAX_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(2200-1600))) : (MIN_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(1000-1600))));\ + tmp_radio = ppm_pulses[ RADIO_CALIB ] - (CLOCK*1600);\ + avg_last_radio[ RADIO_CALIB ] += tmp_radio * (tmp_radio >=0 ? (MAX_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(2200-1600))) : (MIN_PPRZ/AVERAGING_PERIOD/(float)(CLOCK*(1000-1600))));\ avg_cpt++;\ if (avg_cpt == AVERAGING_PERIOD) {\ avg_cpt = 0;\ - last_radio[RADIO_MODE] = avg_last_radio[RADIO_MODE];\ - avg_last_radio[RADIO_MODE] = 0;\ - if (last_radio[RADIO_MODE] > MAX_PPRZ) last_radio[RADIO_MODE] = MAX_PPRZ;\ - else if (last_radio[RADIO_MODE] < MIN_PPRZ) last_radio[RADIO_MODE] = MIN_PPRZ; \ + last_radio[ RADIO_MODE ] = avg_last_radio[ RADIO_MODE ];\ + avg_last_radio[ RADIO_MODE ] = 0;\ + if (last_radio[ RADIO_MODE ] > MAX_PPRZ) last_radio[ RADIO_MODE ] = MAX_PPRZ;\ + else if (last_radio[ RADIO_MODE ] < MIN_PPRZ) last_radio[ RADIO_MODE ] = MIN_PPRZ; \ \ - last_radio[RADIO_GAIN1] = avg_last_radio[RADIO_GAIN1];\ - avg_last_radio[RADIO_GAIN1] = 0;\ - if (last_radio[RADIO_GAIN1] > MAX_PPRZ) last_radio[RADIO_GAIN1] = MAX_PPRZ;\ - else if (last_radio[RADIO_GAIN1] < MIN_PPRZ) last_radio[RADIO_GAIN1] = MIN_PPRZ; \ + last_radio[ RADIO_GAIN1 ] = avg_last_radio[ RADIO_GAIN1 ];\ + avg_last_radio[ RADIO_GAIN1 ] = 0;\ + if (last_radio[ RADIO_GAIN1 ] > MAX_PPRZ) last_radio[ RADIO_GAIN1 ] = MAX_PPRZ;\ + else if (last_radio[ RADIO_GAIN1 ] < MIN_PPRZ) last_radio[ RADIO_GAIN1 ] = MIN_PPRZ; \ \ - last_radio[RADIO_GAIN2] = avg_last_radio[RADIO_GAIN2];\ - avg_last_radio[RADIO_GAIN2] = 0;\ - if (last_radio[RADIO_GAIN2] > MAX_PPRZ) last_radio[RADIO_GAIN2] = MAX_PPRZ;\ - else if (last_radio[RADIO_GAIN2] < MIN_PPRZ) last_radio[RADIO_GAIN2] = MIN_PPRZ; \ + last_radio[ RADIO_GAIN2 ] = avg_last_radio[ RADIO_GAIN2 ];\ + avg_last_radio[ RADIO_GAIN2 ] = 0;\ + if (last_radio[ RADIO_GAIN2 ] > MAX_PPRZ) last_radio[ RADIO_GAIN2 ] = MAX_PPRZ;\ + else if (last_radio[ RADIO_GAIN2 ] < MIN_PPRZ) last_radio[ RADIO_GAIN2 ] = MIN_PPRZ; \ \ - last_radio[RADIO_LLS] = avg_last_radio[RADIO_LLS];\ - avg_last_radio[RADIO_LLS] = 0;\ - if (last_radio[RADIO_LLS] > MAX_PPRZ) last_radio[RADIO_LLS] = MAX_PPRZ;\ - else if (last_radio[RADIO_LLS] < MIN_PPRZ) last_radio[RADIO_LLS] = MIN_PPRZ; \ + last_radio[ RADIO_LLS ] = avg_last_radio[ RADIO_LLS ];\ + avg_last_radio[ RADIO_LLS ] = 0;\ + if (last_radio[ RADIO_LLS ] > MAX_PPRZ) last_radio[ RADIO_LLS ] = MAX_PPRZ;\ + else if (last_radio[ RADIO_LLS ] < MIN_PPRZ) last_radio[ RADIO_LLS ] = MIN_PPRZ; \ \ - last_radio[RADIO_CALIB] = avg_last_radio[RADIO_CALIB];\ - avg_last_radio[RADIO_CALIB] = 0;\ - if (last_radio[RADIO_CALIB] > MAX_PPRZ) last_radio[RADIO_CALIB] = MAX_PPRZ;\ - else if (last_radio[RADIO_CALIB] < MIN_PPRZ) last_radio[RADIO_CALIB] = MIN_PPRZ; \ + last_radio[ RADIO_CALIB ] = avg_last_radio[ RADIO_CALIB ];\ + avg_last_radio[ RADIO_CALIB ] = 0;\ + if (last_radio[ RADIO_CALIB ] > MAX_PPRZ) last_radio[ RADIO_CALIB ] = MAX_PPRZ;\ + else if (last_radio[ RADIO_CALIB ] < MIN_PPRZ) last_radio[ RADIO_CALIB ] = MIN_PPRZ; \ \ last_radio_contains_avg_channels = TRUE;\ }\ diff --git a/bench/sequential/adpcm_dec/ChangeLog.txt b/bench/sequential/adpcm_dec/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/adpcm_dec/adpcm_dec.c b/bench/sequential/adpcm_dec/adpcm_dec.c old mode 100644 new mode 100755 index 283a0d1802cef6e2f8e4a05ae5dcbebd69106847..5284bfa2db523b1d0dc2a6c20a78f7e1d1cda2f5 --- a/bench/sequential/adpcm_dec/adpcm_dec.c +++ b/bench/sequential/adpcm_dec/adpcm_dec.c @@ -10,8 +10,8 @@ Function: CCITT G.722 ADPCM (Adaptive Differential Pulse Code Modulation) algorithm. - 16khz sample rate data is stored in the array test_data[SIZE]. - Results are stored in the array compressed[SIZE] and result[SIZE]. + 16khz sample rate data is stored in the array test_data[ SIZE ]. + Results are stored in the array compressed[ SIZE ] and result[ SIZE ]. Execution time is determined by the constant SIZE (default value is 2000). @@ -70,16 +70,16 @@ int main( void ); Declaration of global variables */ -int adpcm_dec_test_data[SIZE * 2], adpcm_dec_result[SIZE * 2]; +int adpcm_dec_test_data[ SIZE * 2 ], adpcm_dec_result[ SIZE * 2 ]; /* Input data for the decoder usually generated by the encoder. */ -int adpcm_dec_compressed[SIZE] = { 0, 253, 32 }; +int adpcm_dec_compressed[ SIZE ] = { 0, 253, 32 }; /* G722 C code */ /* QMF filter coefficients: scaled by a factor of 4 compared to G722 CCITT recommendation */ -int adpcm_dec_h[24] = { +int adpcm_dec_h[ 24 ] = { 12, -44, -44, 212, 48, -624, 128, 1448, -840, -3220, 3804, 15504, 15504, 3804, -3220, -840, 1448, 128, -624, 48, 212, -44, -44, 12 @@ -88,7 +88,7 @@ int adpcm_dec_h[24] = { //int xl,xh; /* variables for receive quadrature mirror filter here */ -int adpcm_dec_accumc[11], adpcm_dec_accumd[11]; +int adpcm_dec_accumc[ 11 ], adpcm_dec_accumd[ 11 ]; /* outputs of decode() */ int adpcm_dec_xout1, adpcm_dec_xout2; @@ -99,31 +99,31 @@ int adpcm_dec_xs, adpcm_dec_xd; int adpcm_dec_il, adpcm_dec_szl, adpcm_dec_spl, adpcm_dec_sl, adpcm_dec_el; -int adpcm_dec_qq4_code4_table[16] = { +int adpcm_dec_qq4_code4_table[ 16 ] = { 0, -20456, -12896, -8968, -6288, -4240, -2584, -1200, 20456, 12896, 8968, 6288, 4240, 2584, 1200, 0 }; -int adpcm_dec_qq6_code6_table[64] = { +int adpcm_dec_qq6_code6_table[ 64 ] = { -136, -136, -136, -136, -24808, -21904, -19008, -16704, - -14984, -13512, -12280, -11192, -10232, -9360, -8576, -7856, - -7192, -6576, -6000, -5456, -4944, -4464, -4008, -3576, - -3168, -2776, -2400, -2032, -1688, -1360, -1040, -728, - 24808, 21904, 19008, 16704, 14984, 13512, 12280, 11192, - 10232, 9360, 8576, 7856, 7192, 6576, 6000, 5456, - 4944, 4464, 4008, 3576, 3168, 2776, 2400, 2032, - 1688, 1360, 1040, 728, 432, 136, -432, -136 -}; + -14984, -13512, -12280, -11192, -10232, -9360, -8576, -7856, + -7192, -6576, -6000, -5456, -4944, -4464, -4008, -3576, + -3168, -2776, -2400, -2032, -1688, -1360, -1040, -728, + 24808, 21904, 19008, 16704, 14984, 13512, 12280, 11192, + 10232, 9360, 8576, 7856, 7192, 6576, 6000, 5456, + 4944, 4464, 4008, 3576, 3168, 2776, 2400, 2032, + 1688, 1360, 1040, 728, 432, 136, -432, -136 + }; -int adpcm_dec_wl_code_table[16] = { +int adpcm_dec_wl_code_table[ 16 ] = { -60, 3042, 1198, 538, 334, 172, 58, -30, - 3042, 1198, 538, 334, 172, 58, -30, -60 -}; + 3042, 1198, 538, 334, 172, 58, -30, -60 + }; -int adpcm_dec_ilb_table[32] = { +int adpcm_dec_ilb_table[ 32 ] = { 2048, 2093, 2139, 2186, 2233, 2282, 2332, 2383, 2435, 2489, 2543, 2599, 2656, 2714, 2774, 2834, 2896, 2960, 3025, 3091, 3158, 3228, 3298, 3371, @@ -145,11 +145,11 @@ int adpcm_dec_deth; int adpcm_dec_sh; /* this comes from adaptive predictor */ int adpcm_dec_eh; -int adpcm_dec_qq2_code2_table[4] = { +int adpcm_dec_qq2_code2_table[ 4 ] = { -7408, -1616, 7408, 1616 -}; + }; -int adpcm_dec_wh_code_table[4] = { +int adpcm_dec_wh_code_table[ 4 ] = { 798, -214, 798, -214 }; @@ -158,9 +158,9 @@ int adpcm_dec_dh, adpcm_dec_ih; int adpcm_dec_nbh, adpcm_dec_szh; int adpcm_dec_sph, adpcm_dec_ph, adpcm_dec_yh, adpcm_dec_rh; -int adpcm_dec_delay_dhx[6]; +int adpcm_dec_delay_dhx[ 6 ]; -int adpcm_dec_delay_bph[6]; +int adpcm_dec_delay_bph[ 6 ]; int adpcm_dec_ah1, adpcm_dec_ah2; int adpcm_dec_ph1, adpcm_dec_ph2; @@ -170,9 +170,9 @@ int adpcm_dec_rh1, adpcm_dec_rh2; int adpcm_dec_ilr, adpcm_dec_yl, adpcm_dec_rl; int adpcm_dec_dec_deth, adpcm_dec_dec_detl, adpcm_dec_dec_dlt; -int adpcm_dec_dec_del_bpl[6]; +int adpcm_dec_dec_del_bpl[ 6 ]; -int adpcm_dec_dec_del_dltx[6]; +int adpcm_dec_dec_del_dltx[ 6 ]; int adpcm_dec_dec_plt, adpcm_dec_dec_plt1, adpcm_dec_dec_plt2; int adpcm_dec_dec_szl, adpcm_dec_dec_spl, adpcm_dec_dec_sl; @@ -182,9 +182,9 @@ int adpcm_dec_dl; int adpcm_dec_dec_nbl, adpcm_dec_dec_yh, adpcm_dec_dec_dh, adpcm_dec_dec_nbh; /* variables used in filtez */ -int adpcm_dec_dec_del_bph[6]; +int adpcm_dec_dec_del_bph[ 6 ]; -int adpcm_dec_dec_del_dhx[6]; +int adpcm_dec_dec_del_dhx[ 6 ]; int adpcm_dec_dec_szh; /* variables used in filtep */ @@ -227,7 +227,7 @@ int adpcm_dec_sin( int rad ) /* MAX dependent on rad's value, say 50 */ _Pragma( "loopbound min 0 max 0" ) while ( rad > 2 * PI ) - rad -= 2 * PI; + rad -= 2 * PI; _Pragma( "loopbound min 0 max 1999" ) while ( rad < -2 * PI ) @@ -288,12 +288,12 @@ void adpcm_dec_decode( int input ) /* invqxl: compute quantized difference signal for adaptive predic */ adpcm_dec_dec_dlt = ( ( long )adpcm_dec_dec_detl * - adpcm_dec_qq4_code4_table[adpcm_dec_ilr - >> 2] ) >> 15; + adpcm_dec_qq4_code4_table[ adpcm_dec_ilr + >> 2 ] ) >> 15; /* invqxl: compute quantized difference signal for decoder output */ adpcm_dec_dl = ( ( long )adpcm_dec_dec_detl * - adpcm_dec_qq6_code6_table[adpcm_dec_il] ) >> + adpcm_dec_qq6_code6_table[ adpcm_dec_il ] ) >> 15; adpcm_dec_rl = adpcm_dec_dl + adpcm_dec_dec_sl; @@ -345,7 +345,7 @@ void adpcm_dec_decode( int input ) /* invqah: in-place compute the quantized difference signal */ adpcm_dec_dec_dh = ( ( long )adpcm_dec_dec_deth * - adpcm_dec_qq2_code2_table[adpcm_dec_ih] ) >> 15L ; + adpcm_dec_qq2_code2_table[ adpcm_dec_ih ] ) >> 15L ; /* logsch: update logarithmic quantizer scale factor in hi sub band */ adpcm_dec_dec_nbh = adpcm_dec_logsch( adpcm_dec_ih, adpcm_dec_dec_nbh ); @@ -465,7 +465,7 @@ int adpcm_dec_logscl( int il, int nbl ) wd = ( ( long )nbl * 127L ) >> 7L; /* leak factor 127/128 */ - nbl = ( int )wd + adpcm_dec_wl_code_table[il >> 2]; + nbl = ( int )wd + adpcm_dec_wl_code_table[ il >> 2 ]; if ( nbl < 0 ) nbl = 0; @@ -484,13 +484,13 @@ int adpcm_dec_scalel( int nbl, int shift_constant ) wd1 = ( nbl >> 6 ) & 31; wd2 = nbl >> 11; - wd3 = adpcm_dec_ilb_table[wd1] >> ( shift_constant + 1 - wd2 ); + wd3 = adpcm_dec_ilb_table[ wd1 ] >> ( shift_constant + 1 - wd2 ); return ( wd3 << 3 ); } -/* upzero - inputs: dlt, dlti[0-5], bli[0-5], outputs: updated bli[0-5] */ +/* upzero - inputs: dlt, dlti[ 0-5 ], bli[ 0-5 ], outputs: updated bli[ 0-5 ] */ /* also implements delay of bli and update of dlti from dlt */ void adpcm_dec_upzero( int dlt, int *dlti, int *bli ) { @@ -501,29 +501,29 @@ void adpcm_dec_upzero( int dlt, int *dlti, int *bli ) if ( dlt == 0 ) { _Pragma( "loopbound min 6 max 6" ) for ( i = 0; i < 6; i++ ) { - bli[i] = ( int )( ( 255L * bli[i] ) >> 8L ); /* leak factor of 255/256 */ + bli[ i ] = ( int )( ( 255L * bli[ i ] ) >> 8L ); /* leak factor of 255/256 */ } } else { _Pragma( "loopbound min 6 max 6" ) for ( i = 0; i < 6; i++ ) { - if ( ( long )dlt * dlti[i] >= 0 ) + if ( ( long )dlt * dlti[ i ] >= 0 ) wd2 = 128; else wd2 = -128; - wd3 = ( int )( ( 255L * bli[i] ) >> 8L ); /* leak factor of 255/256 */ - bli[i] = wd2 + wd3; + wd3 = ( int )( ( 255L * bli[ i ] ) >> 8L ); /* leak factor of 255/256 */ + bli[ i ] = wd2 + wd3; } } /* implement delay line for dlt */ - dlti[5] = dlti[4]; - dlti[4] = dlti[3]; - dlti[3] = dlti[2]; - dlti[1] = dlti[0]; - dlti[0] = dlt; + dlti[ 5 ] = dlti[ 4 ]; + dlti[ 4 ] = dlti[ 3 ]; + dlti[ 3 ] = dlti[ 2 ]; + dlti[ 1 ] = dlti[ 0 ]; + dlti[ 0 ] = dlt; return; } @@ -591,7 +591,7 @@ int adpcm_dec_logsch( int ih, int nbh ) wd = ( ( long )nbh * 127L ) >> 7L; /* leak factor 127/128 */ - nbh = wd + adpcm_dec_wh_code_table[ih]; + nbh = wd + adpcm_dec_wh_code_table[ ih ]; if ( nbh < 0 ) nbh = 0; @@ -625,24 +625,24 @@ void adpcm_dec_reset() _Pragma( "loopbound min 6 max 6" ) for ( i = 0; i < 6; i++ ) { - ////delay_dltx[i] = 0; - adpcm_dec_delay_dhx[i] = 0; - adpcm_dec_dec_del_dltx[i] = 0; - adpcm_dec_dec_del_dhx[i] = 0; + ////delay_dltx[ i ] = 0; + adpcm_dec_delay_dhx[ i ] = 0; + adpcm_dec_dec_del_dltx[ i ] = 0; + adpcm_dec_dec_del_dhx[ i ] = 0; } _Pragma( "loopbound min 6 max 6" ) for ( i = 0; i < 6; i++ ) { - //delay_bpl[i] = 0; - adpcm_dec_delay_bph[i] = 0; - adpcm_dec_dec_del_bpl[i] = 0; - adpcm_dec_dec_del_bph[i] = 0; + //delay_bpl[ i ] = 0; + adpcm_dec_delay_bph[ i ] = 0; + adpcm_dec_dec_del_bpl[ i ] = 0; + adpcm_dec_dec_del_bph[ i ] = 0; } _Pragma( "loopbound min 11 max 11" ) for ( i = 0; i < 11; i++ ) { - adpcm_dec_accumc[i] = 0; - adpcm_dec_accumd[i] = 0; + adpcm_dec_accumc[ i ] = 0; + adpcm_dec_accumd[ i ] = 0; } return; @@ -654,7 +654,7 @@ void adpcm_dec_init() volatile int x = 0; /* read in amplitude and frequency for test data */ j = 10; - f = 2000; + f = 2000; /* reset, initialize required memory */ adpcm_dec_reset(); @@ -662,13 +662,13 @@ void adpcm_dec_init() /* 16 KHz sample rate */ /* XXmain_0, MAX: 2 */ /* Since the number of times we loop in adpcm_dec_sin depends on the - argument we add the fact: xxmain_0:[]: */ + argument we add the fact: xxmain_0:[ ]: */ _Pragma( "loopbound min 3 max 3" ) for ( i = 0 ; i < SIZE ; i++ ) { - adpcm_dec_test_data[i] = ( int ) j * adpcm_dec_cos( f * PI * i ); + adpcm_dec_test_data[ i ] = ( int ) j * adpcm_dec_cos( f * PI * i ); /* avoid constant-propagation optimizations */ - adpcm_dec_test_data[i] += x; + adpcm_dec_test_data[ i ] += x; } } @@ -676,11 +676,9 @@ int adpcm_dec_return() { int i; int check_sum = 0; - - for (i = 0; i < IN_END; i += 2) - { - check_sum += ( adpcm_dec_result[i] + adpcm_dec_result[i + 1] ); - } + _Pragma( "loopbound min 2 max 2" ) + for ( i = 0; i < IN_END; i += 2 ) + check_sum += ( adpcm_dec_result[ i ] + adpcm_dec_result[ i + 1 ] ); return check_sum != -2; } @@ -692,12 +690,12 @@ int adpcm_dec_return() void _Pragma( "entrypoint" ) adpcm_dec_main( void ) { int i; - + _Pragma( "loopbound min 2 max 2" ) for ( i = 0 ; i < IN_END ; i += 2 ) { - adpcm_dec_decode( adpcm_dec_compressed[i / 2] ); - adpcm_dec_result[i] = adpcm_dec_xout1; - adpcm_dec_result[i + 1] = adpcm_dec_xout2; + adpcm_dec_decode( adpcm_dec_compressed[ i / 2 ] ); + adpcm_dec_result[ i ] = adpcm_dec_xout1; + adpcm_dec_result[ i + 1 ] = adpcm_dec_xout2; } } diff --git a/bench/sequential/adpcm_enc/ChangeLog.txt b/bench/sequential/adpcm_enc/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/adpcm_enc/adpcm_enc.c b/bench/sequential/adpcm_enc/adpcm_enc.c old mode 100644 new mode 100755 index 6151adccdd165018eec1ecdfda3b7252fb202568..4350b64446dfd9fb193b6f7b42eb7ffba92d42bb --- a/bench/sequential/adpcm_enc/adpcm_enc.c +++ b/bench/sequential/adpcm_enc/adpcm_enc.c @@ -8,10 +8,10 @@ Author: Sung-Soo Lim Function: CCITT G.722 ADPCM (Adaptive Differential Pulse Code Modulation) - algorithm. 16khz sample rate data is stored in the array test_data[SIZE]. - Results are stored in the array compressed[SIZE]. + algorithm. 16khz sample rate data is stored in the array test_data[ SIZE ]. + Results are stored in the array compressed[ SIZE ]. Execution time is determined by the constant SIZE (default value is 2000). - + Source: C Algorithms for Real-Time DSP by P. M. Embree and SNU-RT Benchmark Suite for Worst Case Timing Analysis @@ -54,27 +54,27 @@ int adpcm_enc_fabs( int n ); int adpcm_enc_cos( int n ); int adpcm_enc_sin( int n ); int adpcm_enc_abs( int n ); -void adpcm_enc_init(void); -void adpcm_enc_main(void); -int adpcm_enc_return(void); -int main(void); +void adpcm_enc_init( void ); +void adpcm_enc_main( void ); +int adpcm_enc_return( void ); +int main( void ); /* Forward declaration of global variables */ -int adpcm_enc_test_data[SIZE * 2], adpcm_enc_compressed[SIZE]; +int adpcm_enc_test_data[ SIZE * 2 ], adpcm_enc_compressed[ SIZE ]; /* G722 C code */ /* variables for transimit quadrature mirror filter here */ -int adpcm_enc_tqmf[24]; +int adpcm_enc_tqmf[ 24 ]; /* QMF filter coefficients: -scaled by a factor of 4 compared to G722 CCITT recommendation */ -int adpcm_enc_h[24] = { - 12, -44, -44, 212, 48, -624, 128, 1448, + scaled by a factor of 4 compared to G722 CCITT recommendation */ +int adpcm_enc_h[ 24 ] = { + 12, -44, -44, 212, 48, -624, 128, 1448, -840, -3220, 3804, 15504, 15504, 3804, -3220, -840, 1448, 128, -624, 48, 212, -44, -44, 12 }; @@ -85,77 +85,77 @@ int adpcm_enc_xl, adpcm_enc_xh; int adpcm_enc_il, adpcm_enc_szl, adpcm_enc_spl, adpcm_enc_sl, adpcm_enc_el; -int adpcm_enc_qq4_code4_table[16] = { - 0, -20456, -12896, -8968, -6288, -4240, -2584, -1200, - 20456, 12896, 8968, 6288, 4240, 2584, 1200, 0 +int adpcm_enc_qq4_code4_table[ 16 ] = { + 0, -20456, -12896, -8968, -6288, -4240, -2584, -1200, + 20456, 12896, 8968, 6288, 4240, 2584, 1200, 0 }; -int adpcm_enc_qq5_code5_table[32] = { +int adpcm_enc_qq5_code5_table[ 32 ] = { -280, -280, -23352, -17560, -14120, -11664, -9752, -8184, - -6864, -5712, -4696, -3784, -2960, -2208, -1520, -880, - 23352, 17560, 14120, 11664, 9752, 8184, 6864, 5712, - 4696, 3784, 2960, 2208, 1520, 880, 280, -280 -}; + -6864, -5712, -4696, -3784, -2960, -2208, -1520, -880, + 23352, 17560, 14120, 11664, 9752, 8184, 6864, 5712, + 4696, 3784, 2960, 2208, 1520, 880, 280, -280 + }; -int adpcm_enc_qq6_code6_table[64] = { +int adpcm_enc_qq6_code6_table[ 64 ] = { -136, -136, -136, -136, -24808, -21904, -19008, -16704, --14984, -13512, -12280, -11192, -10232, -9360, -8576, -7856, - -7192, -6576, -6000, -5456, -4944, -4464, -4008, -3576, - -3168, -2776, -2400, -2032, -1688, -1360, -1040, -728, - 24808, 21904, 19008, 16704, 14984, 13512, 12280, 11192, - 10232, 9360, 8576, 7856, 7192, 6576, 6000, 5456, - 4944, 4464, 4008, 3576, 3168, 2776, 2400, 2032, - 1688, 1360, 1040, 728, 432, 136, -432, -136 -}; + -14984, -13512, -12280, -11192, -10232, -9360, -8576, -7856, + -7192, -6576, -6000, -5456, -4944, -4464, -4008, -3576, + -3168, -2776, -2400, -2032, -1688, -1360, -1040, -728, + 24808, 21904, 19008, 16704, 14984, 13512, 12280, 11192, + 10232, 9360, 8576, 7856, 7192, 6576, 6000, 5456, + 4944, 4464, 4008, 3576, 3168, 2776, 2400, 2032, + 1688, 1360, 1040, 728, 432, 136, -432, -136 + }; -int adpcm_enc_delay_bpl[6]; +int adpcm_enc_delay_bpl[ 6 ]; -int adpcm_enc_delay_dltx[6]; +int adpcm_enc_delay_dltx[ 6 ]; -int adpcm_enc_wl_code_table[16] = { - -60, 3042, 1198, 538, 334, 172, 58, -30, - 3042, 1198, 538, 334, 172, 58, -30, -60 -}; +int adpcm_enc_wl_code_table[ 16 ] = { + -60, 3042, 1198, 538, 334, 172, 58, -30, + 3042, 1198, 538, 334, 172, 58, -30, -60 + }; -int adpcm_enc_ilb_table[32] = { +int adpcm_enc_ilb_table[ 32 ] = { 2048, 2093, 2139, 2186, 2233, 2282, 2332, 2383, 2435, 2489, 2543, 2599, 2656, 2714, 2774, 2834, 2896, 2960, 3025, 3091, 3158, 3228, 3298, 3371, 3444, 3520, 3597, 3676, 3756, 3838, 3922, 4008 }; -int adpcm_enc_nbl; /* delay line */ +int adpcm_enc_nbl; /* delay line */ int adpcm_enc_al1, adpcm_enc_al2; int adpcm_enc_plt, adpcm_enc_plt1, adpcm_enc_plt2; int adpcm_enc_dlt; int adpcm_enc_rlt, adpcm_enc_rlt1, adpcm_enc_rlt2; /* decision levels - pre-multiplied by 8, 0 to indicate end */ -int adpcm_enc_decis_levl[30] = { - 280, 576, 880, 1200, 1520, 1864, 2208, 2584, +int adpcm_enc_decis_levl[ 30 ] = { + 280, 576, 880, 1200, 1520, 1864, 2208, 2584, 2960, 3376, 3784, 4240, 4696, 5200, 5712, 6288, 6864, 7520, 8184, 8968, 9752, 10712, 11664, 12896, - 14120, 15840, 17560, 20456, 23352, 32767 + 14120, 15840, 17560, 20456, 23352, 32767 }; int adpcm_enc_detl; /* quantization table 31 long to make quantl look-up easier, -last entry is for mil=30 case when wd is max */ -int adpcm_enc_quant26bt_pos[31] = { - 61, 60, 59, 58, 57, 56, 55, 54, - 53, 52, 51, 50, 49, 48, 47, 46, - 45, 44, 43, 42, 41, 40, 39, 38, - 37, 36, 35, 34, 33, 32, 32 + last entry is for mil=30 case when wd is max */ +int adpcm_enc_quant26bt_pos[ 31 ] = { + 61, 60, 59, 58, 57, 56, 55, 54, + 53, 52, 51, 50, 49, 48, 47, 46, + 45, 44, 43, 42, 41, 40, 39, 38, + 37, 36, 35, 34, 33, 32, 32 }; /* quantization table 31 long to make quantl look-up easier, -last entry is for mil=30 case when wd is max */ -int adpcm_enc_quant26bt_neg[31] = { - 63, 62, 31, 30, 29, 28, 27, 26, - 25, 24, 23, 22, 21, 20, 19, 18, - 17, 16, 15, 14, 13, 12, 11, 10, - 9, 8, 7, 6, 5, 4, 4 + last entry is for mil=30 case when wd is max */ +int adpcm_enc_quant26bt_neg[ 31 ] = { + 63, 62, 31, 30, 29, 28, 27, 26, + 25, 24, 23, 22, 21, 20, 19, 18, + 17, 16, 15, 14, 13, 12, 11, 10, + 9, 8, 7, 6, 5, 4, 4 }; @@ -163,12 +163,12 @@ int adpcm_enc_deth; int adpcm_enc_sh; /* this comes from adaptive predictor */ int adpcm_enc_eh; -int adpcm_enc_qq2_code2_table[4] = { +int adpcm_enc_qq2_code2_table[ 4 ] = { -7408, -1616, 7408, 1616 -}; + }; -int adpcm_enc_wh_code_table[4] = { - 798, -214, 798, -214 +int adpcm_enc_wh_code_table[ 4 ] = { + 798, -214, 798, -214 }; @@ -176,8 +176,8 @@ int adpcm_enc_dh, adpcm_enc_ih; int adpcm_enc_nbh, adpcm_enc_szh; int adpcm_enc_sph, adpcm_enc_ph, adpcm_enc_yh; -int adpcm_enc_delay_dhx[6]; -int adpcm_enc_delay_bph[6]; +int adpcm_enc_delay_dhx[ 6 ]; +int adpcm_enc_delay_bph[ 6 ]; int adpcm_enc_ah1, adpcm_enc_ah2; int adpcm_enc_ph1, adpcm_enc_ph2; @@ -228,28 +228,26 @@ int adpcm_enc_sin( int rad ) /* MAX dependent on rad's value, say 50 */ - _Pragma("loopbound min 0 max 0") - while ( rad > 2 * PI ) { + _Pragma( "loopbound min 0 max 0" ) + while ( rad > 2 * PI ) rad -= 2 * PI; - } /* MAX dependent on rad's value, say 50 */ - _Pragma("loopbound min 0 max 1999") - while ( rad < -2 * PI ) { + _Pragma( "loopbound min 0 max 1999" ) + while ( rad < -2 * PI ) rad += 2 * PI; - } - + diff = rad; app = diff; - diff = (diff * (-(rad*rad))) / ((2 * inc) * (2 * inc + 1)); + diff = ( diff * ( -( rad * rad ) ) ) / ( ( 2 * inc ) * ( 2 * inc + 1 ) ); app = app + diff; inc++; /* REALLY: while(my_fabs(diff) >= 0.00001) { */ /* MAX: 1000 */ - _Pragma("loopbound min 849 max 2424") + _Pragma( "loopbound min 849 max 2424" ) while ( adpcm_enc_fabs( diff ) >= 1 ) { - diff = (diff * (-(rad*rad))) / ((2 * inc) * (2 * inc + 1)); + diff = ( diff * ( -( rad * rad ) ) ) / ( ( 2 * inc ) * ( 2 * inc + 1 ) ); app = app + diff; inc++; } @@ -260,7 +258,7 @@ int adpcm_enc_sin( int rad ) int adpcm_enc_cos( int rad ) { - return( adpcm_enc_sin( PI / 2 - rad ) ); + return ( adpcm_enc_sin( PI / 2 - rad ) ); } @@ -276,35 +274,34 @@ int adpcm_enc_encode( int xin1, int xin2 ) /* transmit quadrature mirror filters implemented here */ h_ptr = adpcm_enc_h; tqmf_ptr = adpcm_enc_tqmf; - xa = (long)(*tqmf_ptr++) * (*h_ptr++); - xb = (long)(*tqmf_ptr++) * (*h_ptr++); + xa = ( long )( *tqmf_ptr++ ) * ( *h_ptr++ ); + xb = ( long )( *tqmf_ptr++ ) * ( *h_ptr++ ); /* main multiply accumulate loop for samples and coefficients */ /* MAX: 10 */ - _Pragma("loopbound min 10 max 10") + _Pragma( "loopbound min 10 max 10" ) for ( i = 0; i < 10; i++ ) { - xa += (long)(*tqmf_ptr++) * (*h_ptr++); - xb += (long)(*tqmf_ptr++) * (*h_ptr++); + xa += ( long )( *tqmf_ptr++ ) * ( *h_ptr++ ); + xb += ( long )( *tqmf_ptr++ ) * ( *h_ptr++ ); } - + /* final mult/accumulate */ - xa += (long)(*tqmf_ptr++) * (*h_ptr++); - xb += (long)(*tqmf_ptr) * (*h_ptr++); + xa += ( long )( *tqmf_ptr++ ) * ( *h_ptr++ ); + xb += ( long )( *tqmf_ptr ) * ( *h_ptr++ ); /* update delay line tqmf */ tqmf_ptr1 = tqmf_ptr - 2; /* MAX: 22 */ - _Pragma("loopbound min 22 max 22") - for ( i = 0; i < 22; i++ ) { + _Pragma( "loopbound min 22 max 22" ) + for ( i = 0; i < 22; i++ ) *tqmf_ptr-- = *tqmf_ptr1--; - } - + *tqmf_ptr-- = xin1; *tqmf_ptr = xin2; /* scale outputs */ - adpcm_enc_xl = (xa + xb) >> 15; - adpcm_enc_xh = (xa - xb) >> 15; + adpcm_enc_xl = ( xa + xb ) >> 15; + adpcm_enc_xh = ( xa - xb ) >> 15; /* end of quadrature mirror filter code */ @@ -314,7 +311,8 @@ int adpcm_enc_encode( int xin1, int xin2 ) adpcm_enc_szl = adpcm_enc_filtez( adpcm_enc_delay_bpl, adpcm_enc_delay_dltx ); /* filtep - compute predictor output signal (pole section) */ - adpcm_enc_spl = adpcm_enc_filtep( adpcm_enc_rlt1, adpcm_enc_al1, adpcm_enc_rlt2, adpcm_enc_al2 ); + adpcm_enc_spl = adpcm_enc_filtep( adpcm_enc_rlt1, adpcm_enc_al1, adpcm_enc_rlt2, + adpcm_enc_al2 ); /* compute the predictor output value in the lower sub_band encoder */ adpcm_enc_sl = adpcm_enc_szl + adpcm_enc_spl; @@ -325,7 +323,8 @@ int adpcm_enc_encode( int xin1, int xin2 ) /* invqxl: computes quantized difference signal */ /* for invqbl, truncate by 2 lsbs, so mode = 3 */ - adpcm_enc_dlt = ( (long) adpcm_enc_detl * adpcm_enc_qq4_code4_table[adpcm_enc_il >> 2] ) >> 15; + adpcm_enc_dlt = ( ( long ) adpcm_enc_detl * + adpcm_enc_qq4_code4_table[ adpcm_enc_il >> 2 ] ) >> 15; /* logscl: updates logarithmic quant. scale factor in low sub band */ adpcm_enc_nbl = adpcm_enc_logscl( adpcm_enc_il, adpcm_enc_nbl ); @@ -345,11 +344,13 @@ int adpcm_enc_encode( int xin1, int xin2 ) /* uppol2- update second predictor coefficient apl2 and delay it as al2 */ /* calling parameters: al1, al2, plt, plt1, plt2 */ - adpcm_enc_al2 = adpcm_enc_uppol2( adpcm_enc_al1, adpcm_enc_al2, adpcm_enc_plt, adpcm_enc_plt1, adpcm_enc_plt2 ); + adpcm_enc_al2 = adpcm_enc_uppol2( adpcm_enc_al1, adpcm_enc_al2, adpcm_enc_plt, + adpcm_enc_plt1, adpcm_enc_plt2 ); /* uppol1 :update first predictor coefficient apl1 and delay it as al1 */ /* calling parameters: al1, apl2, plt, plt1 */ - adpcm_enc_al1 = adpcm_enc_uppol1( adpcm_enc_al1, adpcm_enc_al2, adpcm_enc_plt, adpcm_enc_plt1); + adpcm_enc_al1 = adpcm_enc_uppol1( adpcm_enc_al1, adpcm_enc_al2, adpcm_enc_plt, + adpcm_enc_plt1 ); /* recons : compute recontructed signal for adaptive predictor */ adpcm_enc_rlt = adpcm_enc_sl + adpcm_enc_dlt; @@ -364,7 +365,8 @@ int adpcm_enc_encode( int xin1, int xin2 ) adpcm_enc_szh = adpcm_enc_filtez( adpcm_enc_delay_bph, adpcm_enc_delay_dhx ); - adpcm_enc_sph = adpcm_enc_filtep( adpcm_enc_rh1, adpcm_enc_ah1, adpcm_enc_rh2, adpcm_enc_ah2 ); + adpcm_enc_sph = adpcm_enc_filtep( adpcm_enc_rh1, adpcm_enc_ah1, adpcm_enc_rh2, + adpcm_enc_ah2 ); /* predic: sh = sph + szh */ adpcm_enc_sh = adpcm_enc_sph + adpcm_enc_szh; @@ -378,12 +380,13 @@ int adpcm_enc_encode( int xin1, int xin2 ) else adpcm_enc_ih = 1; /* 0,1 are neg codes */ - decis = ( 564L * (long)adpcm_enc_deth ) >> 12L; + decis = ( 564L * ( long )adpcm_enc_deth ) >> 12L; if ( adpcm_enc_abs( adpcm_enc_eh ) > decis ) adpcm_enc_ih--; /* mih = 2 case */ /* invqah: compute the quantized difference signal, higher sub-band*/ - adpcm_enc_dh = ( (long)adpcm_enc_deth * adpcm_enc_qq2_code2_table[adpcm_enc_ih] ) >> 15L ; + adpcm_enc_dh = ( ( long )adpcm_enc_deth * + adpcm_enc_qq2_code2_table[ adpcm_enc_ih ] ) >> 15L ; /* logsch: update logarithmic quantizer scale factor in hi sub-band*/ adpcm_enc_nbh = adpcm_enc_logsch( adpcm_enc_ih, adpcm_enc_nbh ); @@ -401,10 +404,12 @@ int adpcm_enc_encode( int xin1, int xin2 ) /* uppol2: update second predictor coef aph2 and delay as ah2 */ /* calling params: ah1, ah2, ph, ph1, ph2 */ - adpcm_enc_ah2 = adpcm_enc_uppol2( adpcm_enc_ah1, adpcm_enc_ah2, adpcm_enc_ph, adpcm_enc_ph1, adpcm_enc_ph2 ); + adpcm_enc_ah2 = adpcm_enc_uppol2( adpcm_enc_ah1, adpcm_enc_ah2, adpcm_enc_ph, + adpcm_enc_ph1, adpcm_enc_ph2 ); /* uppol1: update first predictor coef. aph2 and delay it as ah1 */ - adpcm_enc_ah1 = adpcm_enc_uppol1( adpcm_enc_ah1, adpcm_enc_ah2, adpcm_enc_ph, adpcm_enc_ph1 ); + adpcm_enc_ah1 = adpcm_enc_uppol1( adpcm_enc_ah1, adpcm_enc_ah2, adpcm_enc_ph, + adpcm_enc_ph1 ); /* recons for higher sub-band */ adpcm_enc_yh = adpcm_enc_sh + adpcm_enc_dh; @@ -416,7 +421,7 @@ int adpcm_enc_encode( int xin1, int xin2 ) adpcm_enc_ph1 = adpcm_enc_ph; /* multiplex ih and il to get signals together */ - return( adpcm_enc_il | (adpcm_enc_ih << 6) ); + return ( adpcm_enc_il | ( adpcm_enc_ih << 6 ) ); } @@ -428,15 +433,14 @@ int adpcm_enc_filtez( int *bpl, int *dlt ) long int zl; - zl = (long)(*bpl++) * (*dlt++); + zl = ( long )( *bpl++ ) * ( *dlt++ ); /* MAX: 5 */ - _Pragma("loopbound min 5 max 5") - for ( i = 1; i < 6; i++ ) { - zl += (long)(*bpl++) * (*dlt++); - } + _Pragma( "loopbound min 5 max 5" ) + for ( i = 1; i < 6; i++ ) + zl += ( long )( *bpl++ ) * ( *dlt++ ); - return( (int)(zl >> 14) ); /* x2 here */ + return ( ( int )( zl >> 14 ) ); /* x2 here */ } @@ -448,11 +452,11 @@ int adpcm_enc_filtep( int rlt1, int al1, int rlt2, int al2 ) pl = 2 * rlt1; - pl = (long) al1 * pl; + pl = ( long ) al1 * pl; pl2 = 2 * rlt2; - pl += (long) al2 * pl2; + pl += ( long ) al2 * pl2; - return( (int)(pl >> 15) ); + return ( ( int )( pl >> 15 ) ); } @@ -468,20 +472,20 @@ int adpcm_enc_quantl( int el, int detl ) /* determine mil based on decision levels and detl gain */ /* MAX: 30 */ - _Pragma("loopbound min 1 max 30") + _Pragma( "loopbound min 1 max 30" ) for ( mil = 0; mil < 30; mil++ ) { - decis = (adpcm_enc_decis_levl[mil] * (long)detl) >> 15L; + decis = ( adpcm_enc_decis_levl[ mil ] * ( long )detl ) >> 15L; if ( wd <= decis ) break; } /* if mil=30 then wd is less than all decision levels */ if ( el >= 0 ) - ril = adpcm_enc_quant26bt_pos[mil]; + ril = adpcm_enc_quant26bt_pos[ mil ]; else - ril = adpcm_enc_quant26bt_neg[mil]; + ril = adpcm_enc_quant26bt_neg[ mil ]; - return( ril ); + return ( ril ); } @@ -491,7 +495,7 @@ int adpcm_enc_quantl( int el, int detl ) /* int invqxl(int il,int detl,int *code_table,int mode) */ /* { */ /* long int dlt; */ -/* dlt = (long)detl*code_table[il >> (mode-1)]; */ +/* dlt = (long)detl*code_table[ il >> (mode-1) ]; */ /* return((int)(dlt >> 15)); */ /* } */ @@ -502,15 +506,15 @@ int adpcm_enc_logscl( int il, int nbl ) long int wd; - wd = ((long)nbl * 127L) >> 7L; /* leak factor 127/128 */ - nbl = (int)wd + adpcm_enc_wl_code_table[il >> 2]; + wd = ( ( long )nbl * 127L ) >> 7L; /* leak factor 127/128 */ + nbl = ( int )wd + adpcm_enc_wl_code_table[ il >> 2 ]; if ( nbl < 0 ) nbl = 0; if ( nbl > 18432 ) nbl = 18432; - return( nbl ); + return ( nbl ); } @@ -520,15 +524,15 @@ int adpcm_enc_scalel( int nbl, int shift_constant ) int wd1, wd2, wd3; - wd1 = (nbl >> 6) & 31; + wd1 = ( nbl >> 6 ) & 31; wd2 = nbl >> 11; - wd3 = adpcm_enc_ilb_table[wd1] >> (shift_constant + 1 - wd2); + wd3 = adpcm_enc_ilb_table[ wd1 ] >> ( shift_constant + 1 - wd2 ); - return( wd3 << 3 ); + return ( wd3 << 3 ); } -/* upzero - inputs: dlt, dlti[0-5], bli[0-5], outputs: updated bli[0-5] */ +/* upzero - inputs: dlt, dlti[ 0-5 ], bli[ 0-5 ], outputs: updated bli[ 0-5 ] */ /* also implements delay of bli and update of dlti from dlt */ void adpcm_enc_upzero( int dlt, int *dlti, int *bli ) { @@ -537,31 +541,31 @@ void adpcm_enc_upzero( int dlt, int *dlti, int *bli ) /*if dlt is zero, then no sum into bli */ if ( dlt == 0 ) { - _Pragma("loopbound min 6 max 6") + _Pragma( "loopbound min 6 max 6" ) for ( i = 0; i < 6; i++ ) { - bli[i] = (int)((255L * bli[i]) >> 8L); /* leak factor of 255/256 */ + bli[ i ] = ( int )( ( 255L * bli[ i ] ) >> 8L ); /* leak factor of 255/256 */ } } else { - _Pragma("loopbound min 6 max 6") + _Pragma( "loopbound min 6 max 6" ) for ( i = 0; i < 6; i++ ) { - if ( (long)dlt * dlti[i] >= 0 ) + if ( ( long )dlt * dlti[ i ] >= 0 ) wd2 = 128; else wd2 = -128; - wd3 = (int)((255L * bli[i]) >> 8L); /* leak factor of 255/256 */ - bli[i] = wd2 + wd3; + wd3 = ( int )( ( 255L * bli[ i ] ) >> 8L ); /* leak factor of 255/256 */ + bli[ i ] = wd2 + wd3; } - + } /* implement delay line for dlt */ - dlti[5] = dlti[4]; - dlti[4] = dlti[3]; - dlti[3] = dlti[2]; - dlti[1] = dlti[0]; - dlti[0] = dlt; + dlti[ 5 ] = dlti[ 4 ]; + dlti[ 4 ] = dlti[ 3 ]; + dlti[ 3 ] = dlti[ 2 ]; + dlti[ 1 ] = dlti[ 0 ]; + dlti[ 0 ] = dlt; return; } @@ -575,17 +579,16 @@ int adpcm_enc_uppol2( int al1, int al2, int plt, int plt1, int plt2 ) int apl2; - wd2 = 4L * (long)al1; - if ( (long)plt * plt1 >= 0L ) + wd2 = 4L * ( long )al1; + if ( ( long )plt * plt1 >= 0L ) wd2 = -wd2; /* check same sign */ - wd2 = wd2 >> 7; /* gain of 1/128 */ + wd2 = wd2 >> 7; /* gain of 1/128 */ - if ( (long)plt * plt2 >= 0L ) { - wd4 = wd2 + 128; /* same sign case */ - } else { + if ( ( long )plt * plt2 >= 0L ) { + wd4 = wd2 + 128; /* same sign case */ + } else wd4 = wd2 - 128; - } - apl2 = wd4 + (127L*(long)al2 >> 7L); /* leak factor of 127/128 */ + apl2 = wd4 + ( 127L * ( long )al2 >> 7L ); /* leak factor of 127/128 */ /* apl2 is limited to +-.75 */ if ( apl2 > 12288 ) @@ -593,7 +596,7 @@ int adpcm_enc_uppol2( int al1, int al2, int plt, int plt1, int plt2 ) if ( apl2 < -12288 ) apl2 = -12288; - return( apl2 ); + return ( apl2 ); } @@ -605,21 +608,20 @@ int adpcm_enc_uppol1( int al1, int apl2, int plt, int plt1 ) int wd3, apl1; - wd2 = ((long)al1 * 255L) >> 8L; /* leak factor of 255/256 */ - if ( (long)plt * plt1 >= 0L ) { - apl1 = (int)wd2 + 192; /* same sign case */ - } else { - apl1 = (int)wd2 - 192; - } + wd2 = ( ( long )al1 * 255L ) >> 8L; /* leak factor of 255/256 */ + if ( ( long )plt * plt1 >= 0L ) { + apl1 = ( int )wd2 + 192; /* same sign case */ + } else + apl1 = ( int )wd2 - 192; /* note: wd3= .9375-.75 is always positive */ - wd3 = 15360 - apl2; /* limit value */ + wd3 = 15360 - apl2; /* limit value */ if ( apl1 > wd3 ) apl1 = wd3; if ( apl1 < -wd3 ) apl1 = -wd3; - return( apl1 ); + return ( apl1 ); } @@ -628,7 +630,7 @@ int adpcm_enc_uppol1( int al1, int apl2, int plt, int plt1 ) /* int invqah(int ih,int deth) */ /* { */ /* long int rdh; */ -/* rdh = ((long)deth*qq2_code2_table[ih]) >> 15L ; */ +/* rdh = ((long)deth*qq2_code2_table[ ih ]) >> 15L ; */ /* return((int)(rdh )); */ /* } */ @@ -640,15 +642,15 @@ int adpcm_enc_logsch( int ih, int nbh ) int wd; - wd = ((long)nbh * 127L) >> 7L; /* leak factor 127/128 */ - nbh = wd + adpcm_enc_wh_code_table[ih]; + wd = ( ( long )nbh * 127L ) >> 7L; /* leak factor 127/128 */ + nbh = wd + adpcm_enc_wh_code_table[ ih ]; if ( nbh < 0 ) nbh = 0; if ( nbh > 22528 ) nbh = 22528; - return( nbh ); + return ( nbh ); } @@ -658,41 +660,42 @@ int adpcm_enc_logsch( int ih, int nbh ) /* clear all storage locations */ -void adpcm_enc_reset(void) +void adpcm_enc_reset( void ) { int i; adpcm_enc_detl = 32; /* reset to min scale factor */ adpcm_enc_deth = 8; - adpcm_enc_nbl = adpcm_enc_al1 = adpcm_enc_al2 = adpcm_enc_plt1 = adpcm_enc_plt2 = adpcm_enc_rlt1 = adpcm_enc_rlt2 = 0; - adpcm_enc_nbh = adpcm_enc_ah1 = adpcm_enc_ah2 = adpcm_enc_ph1 = adpcm_enc_ph2 = adpcm_enc_rh1 = adpcm_enc_rh2 = 0; + adpcm_enc_nbl = adpcm_enc_al1 = adpcm_enc_al2 = adpcm_enc_plt1 = adpcm_enc_plt2 + = adpcm_enc_rlt1 = adpcm_enc_rlt2 = 0; + adpcm_enc_nbh = adpcm_enc_ah1 = adpcm_enc_ah2 = adpcm_enc_ph1 = adpcm_enc_ph2 = + adpcm_enc_rh1 = adpcm_enc_rh2 = 0; - _Pragma("loopbound min 6 max 6") - for ( i = 0; i < 6; i++) { - adpcm_enc_delay_dltx[i] = 0; - adpcm_enc_delay_dhx[i] = 0; + _Pragma( "loopbound min 6 max 6" ) + for ( i = 0; i < 6; i++ ) { + adpcm_enc_delay_dltx[ i ] = 0; + adpcm_enc_delay_dhx[ i ] = 0; } - _Pragma("loopbound min 6 max 6") + _Pragma( "loopbound min 6 max 6" ) for ( i = 0; i < 6; i++ ) { - adpcm_enc_delay_bpl[i] = 0; - adpcm_enc_delay_bph[i] = 0; + adpcm_enc_delay_bpl[ i ] = 0; + adpcm_enc_delay_bph[ i ] = 0; } - _Pragma("loopbound min 23 max 23") - for ( i = 0; i < 23; i++ ) { - adpcm_enc_tqmf[i] = 0; - } + _Pragma( "loopbound min 23 max 23" ) + for ( i = 0; i < 23; i++ ) + adpcm_enc_tqmf[ i ] = 0; return; } -void adpcm_enc_init(void) +void adpcm_enc_init( void ) { int i, j, f; volatile int x = 0; - + /* reset, initialize required memory */ adpcm_enc_reset(); @@ -703,26 +706,26 @@ void adpcm_enc_init(void) /* 16 KHz sample rate */ /* XXmain_0, MAX: 2 */ /* Since the number of times we loop in my_sin depends on the argument we - add the fact: xxmain_0:[]: */ - _Pragma("loopbound min 3 max 3") - for ( i = 0 ; i < SIZE ; i++) { - adpcm_enc_test_data[i] = (int) j * adpcm_enc_cos( f * PI * i ); - + add the fact: xxmain_0:[ ]: */ + _Pragma( "loopbound min 3 max 3" ) + for ( i = 0 ; i < SIZE ; i++ ) { + adpcm_enc_test_data[ i ] = ( int ) j * adpcm_enc_cos( f * PI * i ); + /* avoid constant-propagation optimizations */ - adpcm_enc_test_data[i] += x; + adpcm_enc_test_data[ i ] += x; } } -int adpcm_enc_return(void) +int adpcm_enc_return( void ) { int i; int check_sum = 0; - - for ( i = 0 ; i < IN_END ; i += 2 ) { - check_sum += adpcm_enc_compressed[i/2]; - } - + + _Pragma( "loopbound min 2 max 2" ) + for ( i = 0 ; i < IN_END ; i += 2 ) + check_sum += adpcm_enc_compressed[ i / 2 ]; + return check_sum != 385; } @@ -731,21 +734,21 @@ int adpcm_enc_return(void) Main functions */ -void _Pragma( "entrypoint" ) adpcm_enc_main(void) +void _Pragma( "entrypoint" ) adpcm_enc_main( void ) { int i; /* MAX: 2 */ - _Pragma("loopbound min 2 max 2") - for ( i = 0 ; i < IN_END ; i += 2 ) { - adpcm_enc_compressed[i/2] = adpcm_enc_encode( adpcm_enc_test_data[i], adpcm_enc_test_data[i+1] ); - } - + _Pragma( "loopbound min 2 max 2" ) + for ( i = 0 ; i < IN_END ; i += 2 ) + adpcm_enc_compressed[ i / 2 ] = adpcm_enc_encode( adpcm_enc_test_data[ i ], + adpcm_enc_test_data[ i + 1 ] ); + } -int main(void) +int main( void ) { adpcm_enc_init(); adpcm_enc_main(); - + return adpcm_enc_return(); } diff --git a/bench/sequential/ammunition/ChangeLog.txt b/bench/sequential/ammunition/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/ammunition/README b/bench/sequential/ammunition/README old mode 100644 new mode 100755 diff --git a/bench/sequential/ammunition/ammunition.c b/bench/sequential/ammunition/ammunition.c old mode 100644 new mode 100755 index c9eff50570196ac3a16c5b36b9c45f7f04dd36ba..ba5e4c70f449517132335dd2fce3f3160cd9dde6 --- a/bench/sequential/ammunition/ammunition.c +++ b/bench/sequential/ammunition/ammunition.c @@ -61,8 +61,8 @@ void ammunition_reset_str_bits( char *str, char *s ) int i; _Pragma( "loopbound min 8 max 8" ) for ( i = 0; i < 8; i++ ) { - str[i] = 0; - s[i] = 0; + str[ i ] = 0; + s[ i ] = 0; } } @@ -73,26 +73,26 @@ void ammunition_reset_str_arithm( char *str, char *s, char *d, char *e, int i; _Pragma( "loopbound min 20 max 20" ) for ( i = 0; i < 20; i++ ) { - str[i] = 0; - s[i] = 0; + str[ i ] = 0; + s[ i ] = 0; } _Pragma( "loopbound min 4 max 4" ) for ( i = 0; i < 4; i++ ) { - d[i] = 0; - e[i] = 0; + d[ i ] = 0; + e[ i ] = 0; } _Pragma( "loopbound min 6 max 6" ) for ( i = 0; i < 6; i++ ) - g[i] = 0; + g[ i ] = 0; } int ammunition_bits_test() { - char str[8]; - char str1[8]; + char str[ 8 ]; + char str1[ 8 ]; int result = 0; unsigned int i, j; @@ -235,7 +235,7 @@ int ammunition_arithm_test() /* Test 1 */ int i; - char str [20], s[20], d[4], e[4], g[6]; + char str [ 20 ], s[ 20 ], d[ 4 ], e[ 4 ], g[ 6 ]; ammunition_integer_from_string ( 4, "-2147483649", d ); if ( !ammunition_overflow_bit ) diff --git a/bench/sequential/ammunition/ammunition_libc.c b/bench/sequential/ammunition/ammunition_libc.c old mode 100644 new mode 100755 index 103d6d0adf31c622552a2f7613e4c6d211165476..cd6887e92fd79bcda9c4f3b7585d8ed57bf19688 --- a/bench/sequential/ammunition/ammunition_libc.c +++ b/bench/sequential/ammunition/ammunition_libc.c @@ -29,7 +29,7 @@ void *ammunition_memcpy( void *dest, const void *src, size_t size ) size_t i; _Pragma( "loopbound min 2 max 6" ) for ( i = 0; i < size; i++ ) - ( ( unsigned char * )dest )[i] = ( ( unsigned char * )src )[i]; + ( ( unsigned char * )dest )[ i ] = ( ( unsigned char * )src )[ i ]; return dest; } @@ -40,7 +40,7 @@ void *ammunition_memset( void *s, int c, size_t n ) size_t i; _Pragma( "loopbound min 0 max 4" ) for ( i = 0; i < n; i++ ) - ( ( unsigned char * )s )[i] = ( unsigned char )c; + ( ( unsigned char * )s )[ i ] = ( unsigned char )c; return s; } @@ -48,8 +48,8 @@ void *ammunition_memset( void *s, int c, size_t n ) int ammunition_memcmp ( const void *mem1, const void *mem2, size_t size ) { - const unsigned char *p1 = (const unsigned char *) mem1, - *p2 = (const unsigned char *) mem2; + const unsigned char *p1 = ( const unsigned char * ) mem1, + *p2 = ( const unsigned char * ) mem2; _Pragma( "loopbound min 0 max 4" ) while ( size-- ) if ( *p1 != *p2 ) @@ -74,11 +74,11 @@ void *ammunition_memmove ( void *s1, const void *s2, size_t n ) if ( ( char * ) s1 < ( char * ) s2 && ( char * ) s1 + n > ( char * ) s2 ) { _Pragma( "loopbound min 0 max 4" ) for ( i = 0; ( size_t ) i < n; i++ ) - ( ( char * ) s1 ) [i] = ( ( char * ) s2 ) [i]; + ( ( char * ) s1 ) [ i ] = ( ( char * ) s2 ) [ i ]; } else { _Pragma( "loopbound min 0 max 4" ) for ( i = n - 1; i >= 0; i-- ) - ( ( char * ) s1 )[i] = ( ( char * ) s2 ) [i]; + ( ( char * ) s1 )[ i ] = ( ( char * ) s2 ) [ i ]; } return s1; } @@ -94,16 +94,16 @@ int ammunition_strcmp ( const char *str1, const char *str2 ) int ammunition_atoi ( const char *str ) { int result = 0; - int sign = ( str[0] == '-' ? -1 : 1 ); + int sign = ( str[ 0 ] == '-' ? -1 : 1 ); int readingPos = 0; - if ( str[0] == '-' || str[0] == '+' ) + if ( str[ 0 ] == '-' || str[ 0 ] == '+' ) readingPos++; _Pragma( "loopbound min 1 max 1" ) do { result *= 10; - result += str[readingPos++] - 48; - } while ( str[readingPos] != 0 ); + result += str[ readingPos++ ] - 48; + } while ( str[ readingPos ] != 0 ); return sign * result; } @@ -124,14 +124,14 @@ int ammunition_sprintf_d( char *s, int number ) writePos = digits; if ( number < 0 ) { writePos++; - s[0] = '-'; + s[ 0 ] = '-'; } - s[writePos] = 0; + s[ writePos ] = 0; copyOfNumber = number; _Pragma( "loopbound min 1 max 10" ) do { - s[--writePos] = 48 + ( ( copyOfNumber >= 0 ? + s[ --writePos ] = 48 + ( ( copyOfNumber >= 0 ? copyOfNumber : -copyOfNumber ) % 10 ); copyOfNumber /= 10; } while ( copyOfNumber != 0 ); @@ -153,12 +153,12 @@ int ammunition_sprintf_u( char *s, unsigned int number ) } while ( copyOfNumber != 0 ); writePos = digits; - s[writePos] = 0; + s[ writePos ] = 0; copyOfNumber = number; _Pragma( "loopbound min 1 max 10" ) do { - s[--writePos] = 48 + ( copyOfNumber % 10 ); + s[ --writePos ] = 48 + ( copyOfNumber % 10 ); copyOfNumber /= 10; } while ( copyOfNumber != 0 ); diff --git a/bench/sequential/ammunition/ammunition_limits.h b/bench/sequential/ammunition/ammunition_limits.h old mode 100644 new mode 100755 diff --git a/bench/sequential/ammunition/ammunition_stdio.h b/bench/sequential/ammunition/ammunition_stdio.h old mode 100644 new mode 100755 diff --git a/bench/sequential/ammunition/ammunition_stdlib.h b/bench/sequential/ammunition/ammunition_stdlib.h old mode 100644 new mode 100755 diff --git a/bench/sequential/ammunition/ammunition_string.h b/bench/sequential/ammunition/ammunition_string.h old mode 100644 new mode 100755 diff --git a/bench/sequential/ammunition/arithm.c b/bench/sequential/ammunition/arithm.c old mode 100644 new mode 100755 index b00352fd9bbf4c5e8e9cbb998ee243f821a5f213..b04ac2d5c74b4c89f25316ee59137cf41a20444d --- a/bench/sequential/ammunition/arithm.c +++ b/bench/sequential/ammunition/arithm.c @@ -46,17 +46,16 @@ int ammunition_add_unsigned_integer_without_overflow_reaction int digit_num; int carry; unsigned int sum; - _Pragma( "loopbound min 4 max 4" ) for ( digit_num = size - 1, carry = 0; digit_num >= 0; digit_num-- ) { - sum = ( ( ( unsigned char * ) op1 ) [digit_num] - + ( ( unsigned char * ) op2 ) [digit_num] + carry ); + sum = ( ( ( unsigned char * ) op1 ) [ digit_num ] + + ( ( unsigned char * ) op2 ) [ digit_num ] + carry ); if ( sum > UCHAR_MAX ) { sum -= UCHAR_MAX + 1; carry = 1; } else carry = 0; - ( ( unsigned char * ) result ) [digit_num] = sum; + ( ( unsigned char * ) result ) [ digit_num ] = sum; } return carry != 0; } @@ -75,14 +74,14 @@ int ammunition_subtract_unsigned_integer_without_overflow_reaction _Pragma( "loopbound min 4 max 4" ) for ( digit_num = size - 1, carry = 0; digit_num >= 0; digit_num-- ) { - subtraction = ( ( ( unsigned char * ) op1 ) [digit_num] - - ( ( unsigned char * ) op2 ) [digit_num] - carry ); + subtraction = ( ( ( unsigned char * ) op1 ) [ digit_num ] + - ( ( unsigned char * ) op2 ) [ digit_num ] - carry ); if ( subtraction < 0 ) { subtraction += UCHAR_MAX + 1; carry = 1; } else carry = 0; - ( ( unsigned char * ) result ) [digit_num] = subtraction; + ( ( unsigned char * ) result ) [ digit_num ] = subtraction; } return carry != 0; } @@ -99,13 +98,13 @@ void ammunition_make_complementary_code _Pragma( "loopbound min 2 max 6" ) for ( digit_num = size - 1, carry = 0; digit_num >= 0; digit_num-- ) { - subtraction = ( 0 - ( ( unsigned char * ) operand ) [digit_num] - carry ); + subtraction = ( 0 - ( ( unsigned char * ) operand ) [ digit_num ] - carry ); if ( subtraction != 0 ) { subtraction += UCHAR_MAX + 1; carry = 1; } else carry = 0; - ( ( unsigned char * ) result ) [digit_num] = subtraction; + ( ( unsigned char * ) result ) [ digit_num ] = subtraction; } } @@ -122,13 +121,13 @@ int ammunition_multiply_unsigned_integer_by_digit_without_overflow_reaction _Pragma( "loopbound min 4 max 4" ) for ( digit_num = size - 1, carry = 0; digit_num >= 0; digit_num-- ) { - sum = ( ( ( unsigned char * ) operand ) [digit_num] * digit + carry ); + sum = ( ( ( unsigned char * ) operand ) [ digit_num ] * digit + carry ); if ( sum > UCHAR_MAX ) { carry = sum / ( UCHAR_MAX + 1 ); sum %= UCHAR_MAX + 1; } else carry = 0; - ( ( unsigned char * ) operand ) [digit_num] = sum; + ( ( unsigned char * ) operand ) [ digit_num ] = sum; } return carry != 0; } @@ -183,7 +182,7 @@ ammunition_add_integer ( int size, const void *op1, const void *op2, op1_sign = INTEGER_SIGN ( op1 ); sign_equality = INTEGER_SIGN ( op1 ) == INTEGER_SIGN ( op2 ); ammunition_add_unsigned_integer_without_overflow_reaction ( - size, op1, op2, result ); + size, op1, op2, result ); ammunition_overflow_bit = sign_equality && ( op1_sign != INTEGER_SIGN ( result ) ); if ( ammunition_overflow_bit != 0 ) @@ -226,7 +225,7 @@ ammunition_subtract_integer ( int size, const void *op1, const void *op2, op1_sign = INTEGER_SIGN ( op1 ); sign_unequality = INTEGER_SIGN ( op1 ) != INTEGER_SIGN ( op2 ); ammunition_subtract_unsigned_integer_without_overflow_reaction ( - size, op1, op2, result ); + size, op1, op2, result ); ammunition_overflow_bit = sign_unequality && ( op1_sign != INTEGER_SIGN ( result ) ); if ( ammunition_overflow_bit != 0 ) @@ -250,33 +249,33 @@ int ammunition_multiply_unsigned_integer_without_overflow_reaction unsigned long int partial_sum; int result_digit_number; int overflow_flag; - unsigned char long_result [2 * MAX_INTEGER_OPERAND_SIZE]; + unsigned char long_result [ 2 * MAX_INTEGER_OPERAND_SIZE ]; ammunition_memset ( long_result + size, 0, ( size_t ) size ); _Pragma( "loopbound min 4 max 4" ) for ( op2_digit_num = size - 1; op2_digit_num >= 0; op2_digit_num-- ) { - if ( ( ( unsigned char * ) op2 ) [op2_digit_num] != 0 ) { + if ( ( ( unsigned char * ) op2 ) [ op2_digit_num ] != 0 ) { _Pragma( "loopbound min 4 max 4" ) for ( op1_digit_num = size - 1, carry = 0; op1_digit_num >= 0; op1_digit_num-- ) { partial_sum - = ( ( ( unsigned char * ) op1 ) [op1_digit_num] - * ( ( unsigned char * ) op2 ) [op2_digit_num] - + long_result [op1_digit_num + op2_digit_num + 1] + = ( ( ( unsigned char * ) op1 ) [ op1_digit_num ] + * ( ( unsigned char * ) op2 ) [ op2_digit_num ] + + long_result [ op1_digit_num + op2_digit_num + 1 ] + carry ); - long_result [op1_digit_num + op2_digit_num + 1] + long_result [ op1_digit_num + op2_digit_num + 1 ] = ( unsigned char ) ( partial_sum % ( UCHAR_MAX + 1 ) ); carry = partial_sum / ( UCHAR_MAX + 1 ); } - long_result [op2_digit_num] = carry; + long_result [ op2_digit_num ] = carry; } else - long_result [op2_digit_num] = 0; + long_result [ op2_digit_num ] = 0; } overflow_flag = 0; - _Pragma( "loopbound min 1 max 4" ) + _Pragma( "loopbound min 0 max 4" ) for ( result_digit_number = size - 1; result_digit_number >= 0; result_digit_number-- ) { - if ( long_result [result_digit_number] != 0 ) { + if ( long_result [ result_digit_number ] != 0 ) { overflow_flag = 1; break; } @@ -297,8 +296,8 @@ ammunition_multiply_unsigned_integer ( int size, const void *op1, void *result ) { ammunition_overflow_bit = - ammunition_multiply_unsigned_integer_without_overflow_reaction ( - size, op1, op2, result ); + ammunition_multiply_unsigned_integer_without_overflow_reaction ( + size, op1, op2, result ); if ( ammunition_overflow_bit ) ammunition_arithmetic_unsigned_overflow_reaction(); } @@ -313,8 +312,8 @@ ammunition_multiply_integer ( int size, const void *op1, const void *op2, void *result ) { int negative_result_flag; - unsigned char op1_complementary [MAX_INTEGER_OPERAND_SIZE]; - unsigned char op2_complementary [MAX_INTEGER_OPERAND_SIZE]; + unsigned char op1_complementary [ MAX_INTEGER_OPERAND_SIZE ]; + unsigned char op2_complementary [ MAX_INTEGER_OPERAND_SIZE ]; unsigned const char *abs_op1; unsigned const char *abs_op2; int unsigned_result_sign; @@ -335,8 +334,8 @@ ammunition_multiply_integer ( int size, const void *op1, const void *op2, } else abs_op2 = ( unsigned const char * )op2; ammunition_overflow_bit = - ammunition_multiply_unsigned_integer_without_overflow_reaction ( - size, abs_op1, abs_op2, result ); + ammunition_multiply_unsigned_integer_without_overflow_reaction ( + size, abs_op1, abs_op2, result ); unsigned_result_sign = INTEGER_SIGN ( result ); if ( negative_result_flag ) ammunition_make_complementary_code ( size, result, result ); @@ -366,13 +365,13 @@ int ammunition_divide_unsigned_integer_without_overflow_reaction int first_nonzero_digit_number; int op2_digit_number; unsigned int scale; - unsigned char scaled_op1 [MAX_INTEGER_OPERAND_SIZE + 1]; - unsigned char normalized_op2 [MAX_INTEGER_OPERAND_SIZE]; - unsigned char extended_normalized_op2 [MAX_INTEGER_OPERAND_SIZE + 1]; + unsigned char scaled_op1 [ MAX_INTEGER_OPERAND_SIZE + 1 ]; + unsigned char normalized_op2 [ MAX_INTEGER_OPERAND_SIZE ]; + unsigned char extended_normalized_op2 [ MAX_INTEGER_OPERAND_SIZE + 1 ]; - _Pragma( "loopbound min 4 max 4" ) + _Pragma( "loopbound min 3 max 4" ) for ( op2_digit_number = 0; op2_digit_number < size; op2_digit_number++ ) { - if ( ( ( unsigned char * ) op2 ) [op2_digit_number] != 0 ) + if ( ( ( unsigned char * ) op2 ) [ op2_digit_number ] != 0 ) break; } first_nonzero_digit_number = op2_digit_number; @@ -388,21 +387,21 @@ int ammunition_divide_unsigned_integer_without_overflow_reaction unsigned long divisable; unsigned long remainder; - digit = ( ( unsigned char * ) op2 ) [first_nonzero_digit_number]; + digit = ( ( unsigned char * ) op2 ) [ first_nonzero_digit_number ]; ammunition_memcpy ( result, op1, ( size_t ) size ); remainder = 0; _Pragma( "loopbound min 4 max 4" ) for ( digit_num = 0; digit_num < size; digit_num++ ) { divisable = ( remainder * ( UCHAR_MAX + 1 ) - + ( ( unsigned char * ) result ) [digit_num] ); + + ( ( unsigned char * ) result ) [ digit_num ] ); remainder = divisable % digit; - ( ( unsigned char * ) result ) [digit_num] + ( ( unsigned char * ) result ) [ digit_num ] = ( unsigned char ) ( divisable / digit ); } return 0 /* FALSE */; } /* Normalization of divisor. */ - scale = ( UCHAR_MAX + 1 ) / ( ( ( unsigned char * ) op2 ) [op2_digit_number] + + scale = ( UCHAR_MAX + 1 ) / ( ( ( unsigned char * ) op2 ) [ op2_digit_number ] + 1 ); ammunition_memcpy ( scaled_op1 + 1, op1, ( size_t ) size ); *scaled_op1 = 0; @@ -419,28 +418,28 @@ int ammunition_divide_unsigned_integer_without_overflow_reaction for ( scaled_op1_digit_num = 0; scaled_op1_digit_num <= first_nonzero_digit_number; scaled_op1_digit_num++ ) { - /* Division of `scaled_op1[scaled_op1_digit_number]..scaled_op1[size]' by - `normalized_op2[first_nonzero_digit_number]..normalized_op2[size-1]' + /* Division of `scaled_op1[ scaled_op1_digit_number ]..scaled_op1[ size ]' by + `normalized_op2[ first_nonzero_digit_number ]..normalized_op2[ size-1 ]' for evaluation of one digit of quotient - `result[size-1-first_nonzero_digit_number-scaled_op1_digit_number]'. + `result[ size-1-first_nonzero_digit_number-scaled_op1_digit_number ]'. */ - if ( scaled_op1 [scaled_op1_digit_num] - == normalized_op2 [first_nonzero_digit_number] ) + if ( scaled_op1 [ scaled_op1_digit_num ] + == normalized_op2 [ first_nonzero_digit_number ] ) q_approximation = UCHAR_MAX; else q_approximation - = ( scaled_op1 [scaled_op1_digit_num] * ( UCHAR_MAX + 1 ) - + scaled_op1 [scaled_op1_digit_num + 1] ) - / normalized_op2 [first_nonzero_digit_number]; + = ( scaled_op1 [ scaled_op1_digit_num ] * ( UCHAR_MAX + 1 ) + + scaled_op1 [ scaled_op1_digit_num + 1 ] ) + / normalized_op2 [ first_nonzero_digit_number ]; _Pragma( "loopbound min 0 max 0" ) - while ( normalized_op2 [first_nonzero_digit_number + 1] * q_approximation - > ( ( ( unsigned long int ) scaled_op1 [scaled_op1_digit_num] + while ( normalized_op2 [ first_nonzero_digit_number + 1 ] * q_approximation + > ( ( ( unsigned long int ) scaled_op1 [ scaled_op1_digit_num ] * ( UCHAR_MAX + 1 ) - + scaled_op1 [scaled_op1_digit_num + 1] + + scaled_op1 [ scaled_op1_digit_num + 1 ] - q_approximation - * normalized_op2 [first_nonzero_digit_number] ) - * ( UCHAR_MAX + 1 ) + scaled_op1 [scaled_op1_digit_num + 2] ) ) + * normalized_op2 [ first_nonzero_digit_number ] ) + * ( UCHAR_MAX + 1 ) + scaled_op1 [ scaled_op1_digit_num + 2 ] ) ) q_approximation --; /* Multiply and subtract */ @@ -468,8 +467,8 @@ int ammunition_divide_unsigned_integer_without_overflow_reaction scaled_op1 + scaled_op1_digit_num ); } - ( ( unsigned char * ) result ) [size - 1 - first_nonzero_digit_number - + scaled_op1_digit_num] = q_approximation; + ( ( unsigned char * ) result ) [ size - 1 - first_nonzero_digit_number + + scaled_op1_digit_num ] = q_approximation; } ammunition_memset ( result, 0, ( size_t ) ( size - 1 - first_nonzero_digit_number ) ); @@ -486,8 +485,8 @@ ammunition_divide_unsigned_integer ( int size, const void *op1, const void *op2, void *result ) { ammunition_overflow_bit = - ammunition_divide_unsigned_integer_without_overflow_reaction ( - size, op1, op2, result ); + ammunition_divide_unsigned_integer_without_overflow_reaction ( + size, op1, op2, result ); if ( ammunition_overflow_bit ) ammunition_arithmetic_unsigned_overflow_reaction(); } @@ -502,8 +501,8 @@ ammunition_divide_integer ( int size, const void *op1, const void *op2, void *result ) { int negative_result_flag; - unsigned char op1_complementary [MAX_INTEGER_OPERAND_SIZE]; - unsigned char op2_complementary [MAX_INTEGER_OPERAND_SIZE]; + unsigned char op1_complementary [ MAX_INTEGER_OPERAND_SIZE ]; + unsigned char op2_complementary [ MAX_INTEGER_OPERAND_SIZE ]; unsigned const char *abs_op1; unsigned const char *abs_op2; int unsigned_result_sign; @@ -524,8 +523,8 @@ ammunition_divide_integer ( int size, const void *op1, const void *op2, } else abs_op2 = ( unsigned const char * )op2; ammunition_overflow_bit = - ammunition_divide_unsigned_integer_without_overflow_reaction ( - size, abs_op1, abs_op2, result ); + ammunition_divide_unsigned_integer_without_overflow_reaction ( + size, abs_op1, abs_op2, result ); unsigned_result_sign = INTEGER_SIGN ( result ); if ( negative_result_flag ) ammunition_make_complementary_code ( size, result, result ); @@ -552,7 +551,7 @@ ammunition_unsigned_integer_remainder ( int size, const void *op1, const void *op2, void *result ) { - unsigned char temporary [MAX_INTEGER_OPERAND_SIZE]; + unsigned char temporary [ MAX_INTEGER_OPERAND_SIZE ]; ammunition_divide_unsigned_integer ( size, op1, op2, temporary ); if ( ammunition_overflow_bit ) @@ -592,13 +591,13 @@ ammunition_unsigned_integer_shift_right ( int size, const void *operand, ammunition_overflow_bit = 0; byte_shift = bits / CHAR_BIT; bit_shift = bits % CHAR_BIT; - _Pragma( "loopbound min 0 max 3" ) + _Pragma( "loopbound min 0 max 2" ) for ( byte_number = ( byte_shift >= size ? 0 : size - byte_shift ); byte_number < size; byte_number++ ) - if ( ( ( unsigned char * ) operand ) [byte_number] != 0 ) { + if ( ( ( unsigned char * ) operand ) [ byte_number ] != 0 ) { ammunition_overflow_bit = 1; break; - } + } if ( byte_shift >= size ) ammunition_memset ( result, 0, ( size_t ) size ); else { @@ -610,8 +609,8 @@ ammunition_unsigned_integer_shift_right ( int size, const void *operand, _Pragma( "loopbound min 3 max 3" ) for ( byte_number = byte_shift, carry = 0; byte_number < size; byte_number++ ) { - byte = ( ( unsigned char * ) result ) [byte_number]; - ( ( unsigned char * ) result ) [byte_number] + byte = ( ( unsigned char * ) result ) [ byte_number ]; + ( ( unsigned char * ) result ) [ byte_number ] = carry | ( byte >> bit_shift ); carry = ( byte << ( CHAR_BIT - bit_shift ) ) & UCHAR_MAX; } @@ -649,15 +648,15 @@ ammunition_integer_shift_right ( int size, const void *operand, int bits, ammunition_overflow_bit = 0; byte_shift = bits / CHAR_BIT; bit_shift = bits % CHAR_BIT; - _Pragma( "loopbound min 0 max 3" ) + _Pragma( "loopbound min 0 max 2" ) for ( byte_number = ( byte_shift >= size ? 0 : size - byte_shift ); byte_number < size; byte_number++ ) - if ( ( ( unsigned char * ) operand ) [byte_number] != 0 ) { + if ( ( ( unsigned char * ) operand ) [ byte_number ] != 0 ) { ammunition_overflow_bit = 1; break; } if ( byte_shift >= size ) - ammunition_memset ( result, + ammunition_memset ( result, ( operand_sign ? UCHAR_MAX : 0 ), ( size_t ) size ); else { ammunition_memmove ( ( char * ) result + byte_shift, operand, @@ -670,8 +669,8 @@ ammunition_integer_shift_right ( int size, const void *operand, int bits, & UCHAR_MAX ); _Pragma( "loopbound min 3 max 3" ) for ( byte_number = byte_shift; byte_number < size; byte_number++ ) { - byte = ( ( unsigned char * ) result ) [byte_number]; - ( ( unsigned char * ) result ) [byte_number] + byte = ( ( unsigned char * ) result ) [ byte_number ]; + ( ( unsigned char * ) result ) [ byte_number ] = carry | ( byte >> bit_shift ); carry = ( byte << ( CHAR_BIT - bit_shift ) ) & UCHAR_MAX; } @@ -710,7 +709,7 @@ ammunition_unsigned_integer_shift_left ( int size, const void *operand, _Pragma( "loopbound min 0 max 2" ) for ( byte_number = 0; byte_number < byte_shift && byte_number < size; byte_number++ ) - if ( ( ( unsigned char * ) operand ) [byte_number] != 0 ) { + if ( ( ( unsigned char * ) operand ) [ byte_number ] != 0 ) { ammunition_overflow_bit = 1; break; } @@ -726,8 +725,8 @@ ammunition_unsigned_integer_shift_left ( int size, const void *operand, _Pragma( "loopbound min 2 max 3" ) for ( byte_number = size - byte_shift - 1, carry = 0; byte_number >= 0; byte_number-- ) { - byte = ( ( unsigned char * ) result ) [byte_number]; - ( ( unsigned char * ) result ) [byte_number] + byte = ( ( unsigned char * ) result ) [ byte_number ]; + ( ( unsigned char * ) result ) [ byte_number ] = carry | ( byte << bit_shift ); carry = byte >> ( CHAR_BIT - bit_shift ); } @@ -768,7 +767,7 @@ ammunition_integer_shift_left ( int size, const void *operand, int bits, _Pragma( "loopbound min 0 max 2" ) for ( byte_number = 0; byte_number < byte_shift && byte_number < size; byte_number++ ) - if ( ( ( unsigned char * ) operand ) [byte_number] + if ( ( ( unsigned char * ) operand ) [ byte_number ] != ( operand_sign ? UCHAR_MAX : 0 ) ) { ammunition_overflow_bit = 1; break; @@ -785,8 +784,8 @@ ammunition_integer_shift_left ( int size, const void *operand, int bits, _Pragma( "loopbound min 2 max 3" ) for ( byte_number = size - byte_shift - 1, carry = 0; byte_number >= 0; byte_number-- ) { - byte = ( ( unsigned char * ) result ) [byte_number]; - ( ( unsigned char * ) result ) [byte_number] + byte = ( ( unsigned char * ) result ) [ byte_number ]; + ( ( unsigned char * ) result ) [ byte_number ] = carry | ( byte << bit_shift ); carry = byte >> ( CHAR_BIT - bit_shift ); } @@ -816,9 +815,9 @@ ammunition_integer_or ( int size, const void *op1, const void *op2, _Pragma( "loopbound min 4 max 4" ) for ( byte_number = 0; byte_number < size; byte_number++ ) { - ( ( unsigned char * ) result ) [byte_number] - = ( ( unsigned char * ) op1 ) [byte_number] - | ( ( unsigned char * ) op2 ) [byte_number]; + ( ( unsigned char * ) result ) [ byte_number ] + = ( ( unsigned char * ) op1 ) [ byte_number ] + | ( ( unsigned char * ) op2 ) [ byte_number ]; } } @@ -843,9 +842,9 @@ ammunition_integer_and ( int size, const void *op1, const void *op2, _Pragma( "loopbound min 4 max 4" ) for ( byte_number = 0; byte_number < size; byte_number++ ) { - ( ( unsigned char * ) result ) [byte_number] - = ( ( unsigned char * ) op1 ) [byte_number] - & ( ( unsigned char * ) op2 ) [byte_number]; + ( ( unsigned char * ) result ) [ byte_number ] + = ( ( unsigned char * ) op1 ) [ byte_number ] + & ( ( unsigned char * ) op2 ) [ byte_number ]; } } @@ -869,8 +868,8 @@ ammunition_integer_not ( int size, const void *operand, void *result ) _Pragma( "loopbound min 4 max 4" ) for ( byte_number = 0; byte_number < size; byte_number++ ) { - ( ( unsigned char * ) result ) [byte_number] - = ( ( unsigned char * ) operand ) [byte_number] ^ UCHAR_MAX; + ( ( unsigned char * ) result ) [ byte_number ] + = ( ( unsigned char * ) operand ) [ byte_number ] ^ UCHAR_MAX; } } @@ -1095,16 +1094,16 @@ ammunition_change_unsigned_integer_size ( int operand_size, const void *operand, operand, ( size_t ) operand_size ); ammunition_memset ( result, 0, ( size_t ) ( result_size - operand_size ) ); } else { - _Pragma( "loopbound min 2 max 2" ) + _Pragma( "loopbound min 1 max 2" ) for ( operand_digit_number = 0; operand_digit_number < operand_size - result_size; operand_digit_number++ ) { - if ( ( ( unsigned char * ) operand ) [operand_digit_number] != 0 ) { + if ( ( ( unsigned char * ) operand ) [ operand_digit_number ] != 0 ) { ammunition_overflow_bit = 1; break; } } - ammunition_memmove ( result, + ammunition_memmove ( result, ( char * ) operand + operand_size - result_size, ( size_t ) result_size ); } @@ -1135,13 +1134,13 @@ ammunition_change_integer_size ( int operand_size, const void *operand, for ( operand_digit_number = 0; operand_digit_number < operand_size - result_size; operand_digit_number++ ) { - if ( ( ( unsigned char * ) operand ) [operand_digit_number] + if ( ( ( unsigned char * ) operand ) [ operand_digit_number ] != ( operand_sign ? UCHAR_MAX : 0 ) ) { ammunition_overflow_bit = 1; break; } } - ammunition_memmove ( result, + ammunition_memmove ( result, ( char * ) operand + operand_size - result_size, ( size_t ) result_size ); if ( operand_sign != INTEGER_SIGN ( result ) ) @@ -1174,7 +1173,7 @@ ammunition_unsigned_integer_to_based_string ( int size, const void *operand, int nonzero_flag; int length; int temporary; - unsigned char operand_copy [MAX_INTEGER_OPERAND_SIZE]; + unsigned char operand_copy [ MAX_INTEGER_OPERAND_SIZE ]; ammunition_memcpy ( operand_copy, operand, ( size_t ) size ); length = 0; @@ -1183,21 +1182,21 @@ ammunition_unsigned_integer_to_based_string ( int size, const void *operand, nonzero_flag = 0 /* FALSE */; _Pragma( "loopbound min 2 max 6" ) for ( digit_num = 0, remainder = 0; digit_num < size; digit_num++ ) { - divisable = remainder * ( UCHAR_MAX + 1 ) + operand_copy [digit_num]; + divisable = remainder * ( UCHAR_MAX + 1 ) + operand_copy [ digit_num ]; remainder = divisable % base; - operand_copy [digit_num] = ( unsigned char ) ( divisable / base ); - if ( operand_copy [digit_num] != 0 ) + operand_copy [ digit_num ] = ( unsigned char ) ( divisable / base ); + if ( operand_copy [ digit_num ] != 0 ) nonzero_flag = 1 /* TRUE */; } - result [length++] = ( unsigned char ) ( remainder < 10 ? '0' + remainder + result [ length++ ] = ( unsigned char ) ( remainder < 10 ? '0' + remainder : 'a' + remainder - 10 ); - } while ( nonzero_flag ); - result [length] = '\0'; + } while ( nonzero_flag ); + result [ length ] = '\0'; _Pragma( "loopbound min 0 max 5" ) for ( i = 0; i < length / 2; i++ ) { - temporary = result [i]; - result [i] = result [length - i - 1]; - result [length - i - 1] = temporary; + temporary = result [ i ]; + result [ i ] = result [ length - i - 1 ]; + result [ length - i - 1 ] = temporary; } return result; } @@ -1226,7 +1225,7 @@ char * ammunition_integer_to_based_string ( int size, const void *operand, int base, char *result ) { - unsigned char operand_copy [MAX_INTEGER_OPERAND_SIZE]; + unsigned char operand_copy [ MAX_INTEGER_OPERAND_SIZE ]; if ( !INTEGER_SIGN ( operand ) ) return ammunition_unsigned_integer_to_based_string ( size, operand, base, @@ -1269,13 +1268,13 @@ int ammunition_add_digit_to_unsigned_integer_without_overflow_reaction _Pragma( "loopbound min 4 max 4" ) for ( digit_num = size - 1, carry = digit; digit_num >= 0; digit_num-- ) { - sum = ( ( unsigned char * ) operand ) [digit_num] + carry; + sum = ( ( unsigned char * ) operand ) [ digit_num ] + carry; if ( sum > UCHAR_MAX ) { carry = sum / ( UCHAR_MAX + 1 ); sum %= UCHAR_MAX + 1; } else carry = 0; - ( ( unsigned char * ) operand ) [digit_num] = sum; + ( ( unsigned char * ) operand ) [ digit_num ] = sum; } return carry != 0; } @@ -1294,11 +1293,11 @@ int ammunition_string_to_unsigned_integer_without_overflow_reaction int overflow_flag; ammunition_memset ( result, 0, ( size_t ) size ); - _Pragma( "loopbound min 0 max 10" ) + _Pragma( "loopbound min 1 max 10" ) for ( overflow_flag = 0; ammunition_isdigit ( *operand ); operand++ ) { overflow_flag = overflow_flag || - ammunition_multiply_unsigned_integer_by_digit_without_overflow_reaction + ammunition_multiply_unsigned_integer_by_digit_without_overflow_reaction ( size, result, 10 ); overflow_flag = overflow_flag @@ -1373,9 +1372,9 @@ ammunition_integer_from_string ( int size, const char *operand, void *result ) is correct because it is unsigned. */ ammunition_make_complementary_code ( size, result, result ); ammunition_overflow_bit - = ammunition_overflow_bit - || ( unsigned_result_sign - && ( !negative_number_flag + = ammunition_overflow_bit + || ( unsigned_result_sign + && ( !negative_number_flag || INTEGER_SIGN ( result ) != unsigned_result_sign ) ); if ( ammunition_overflow_bit ) ammunition_arithmetic_unsigned_overflow_reaction(); diff --git a/bench/sequential/ammunition/arithm.h b/bench/sequential/ammunition/arithm.h old mode 100644 new mode 100755 diff --git a/bench/sequential/ammunition/bits.c b/bench/sequential/ammunition/bits.c old mode 100644 new mode 100755 index 916965694bede39ee8b18c7d7e26bcf0e501fc9a..321f753cf947ff135c57de659536969f74e34f3b --- a/bench/sequential/ammunition/bits.c +++ b/bench/sequential/ammunition/bits.c @@ -115,12 +115,12 @@ ammunition_bit_string_copy ( void *to, int to_bit_displacement, to_bit_displacement %= CHAR_BIT; current_from_byte += from_bit_displacement / CHAR_BIT; from_bit_displacement %= CHAR_BIT; - _Pragma( "loopbound min 1 max 8" ) + _Pragma( "loopbound min 0 max 7" ) while ( 1 ) { byte = ( ( ( *current_from_byte << from_bit_displacement ) & UCHAR_MAX ) | ( from_bit_displacement != 0 && bit_length > ( CHAR_BIT - from_bit_displacement ) - ? current_from_byte [1] >> ( CHAR_BIT - from_bit_displacement ) + ? current_from_byte [ 1 ] >> ( CHAR_BIT - from_bit_displacement ) : 0 ) ); if ( bit_length <= CHAR_BIT ) break; @@ -131,8 +131,8 @@ ammunition_bit_string_copy ( void *to, int to_bit_displacement, & ( UCHAR_MAX << ( CHAR_BIT - to_bit_displacement ) ) ) | ( byte >> to_bit_displacement ); if ( to_bit_displacement != 0 ) - current_to_byte [1] - = ( current_to_byte [1] & ( UCHAR_MAX >> to_bit_displacement ) ) + current_to_byte [ 1 ] + = ( current_to_byte [ 1 ] & ( UCHAR_MAX >> to_bit_displacement ) ) | ( byte << ( CHAR_BIT - to_bit_displacement ) ); bit_length -= CHAR_BIT; current_from_byte++; @@ -146,8 +146,8 @@ ammunition_bit_string_copy ( void *to, int to_bit_displacement, = ( *current_to_byte & mask ) | ( ( byte >> to_bit_displacement ) & ~mask ); bit_length -= CHAR_BIT - to_bit_displacement; if ( bit_length > 0 ) - current_to_byte [1] - = ( current_to_byte [1] & ( UCHAR_MAX >> bit_length ) ) + current_to_byte [ 1 ] + = ( current_to_byte [ 1 ] & ( UCHAR_MAX >> bit_length ) ) | ( ( byte << ( CHAR_BIT - to_bit_displacement ) ) & ( UCHAR_MAX << ( CHAR_BIT - bit_length ) ) ); } @@ -176,15 +176,15 @@ void ammunition_reverse_bit_string_copy ( void *to, int to_bit_displacement, from_bit_displacement += bit_length - 1; current_from_byte += from_bit_displacement / CHAR_BIT; /* last byte */ from_bit_displacement %= CHAR_BIT; /* last bit */ - _Pragma( "loopbound min 1 max 8" ) + _Pragma( "loopbound min 0 max 7" ) while ( 1 ) { /* Shift is correct when to_bit_displacement == 0 because its value is less than word bit size. */ byte = ( ( *current_from_byte >> ( CHAR_BIT - 1 - from_bit_displacement ) ) | ( ( from_bit_displacement != CHAR_BIT - 1 && bit_length > from_bit_displacement + 1 - ? current_from_byte [ -1 ] << ( from_bit_displacement + 1 ) - : 0 ) + ? current_from_byte [ -1 ] << ( from_bit_displacement + 1 ) + : 0 ) & UCHAR_MAX ) ); if ( bit_length <= CHAR_BIT ) break; @@ -194,8 +194,8 @@ void ammunition_reverse_bit_string_copy ( void *to, int to_bit_displacement, = ( *current_to_byte & ( UCHAR_MAX >> ( to_bit_displacement + 1 ) ) ) | ( byte << ( CHAR_BIT - 1 - to_bit_displacement ) ); if ( to_bit_displacement != CHAR_BIT - 1 ) - current_to_byte [-1] - = ( current_to_byte [-1] + current_to_byte [ -1 ] + = ( current_to_byte [ -1 ] & ( UCHAR_MAX << ( CHAR_BIT - 1 - to_bit_displacement ) ) ) | ( byte >> ( to_bit_displacement + 1 ) ); bit_length -= CHAR_BIT; @@ -212,8 +212,8 @@ void ammunition_reverse_bit_string_copy ( void *to, int to_bit_displacement, | ( ( byte << ( CHAR_BIT - 1 - to_bit_displacement ) ) & ~mask ); bit_length -= to_bit_displacement + 1; if ( bit_length > 0 ) - current_to_byte [-1] - = ( current_to_byte [-1] & ( UCHAR_MAX << bit_length ) ) + current_to_byte [ -1 ] + = ( current_to_byte [ -1 ] & ( UCHAR_MAX << bit_length ) ) | ( byte >> ( to_bit_displacement + 1 ) & ( UCHAR_MAX >> ( CHAR_BIT - bit_length ) ) ); } @@ -275,19 +275,19 @@ ammunition_bit_string_comparison ( const void *str1, int bit_displacement1, bit_displacement1 %= CHAR_BIT; current_byte2 += bit_displacement2 / CHAR_BIT; bit_displacement2 %= CHAR_BIT; - _Pragma( "loopbound min 1 max 284" ) + _Pragma( "loopbound min 0 max 7" ) while ( 1 ) { byte1 = ( ( ( *current_byte1 << bit_displacement1 ) & UCHAR_MAX ) | ( bit_displacement1 != 0 /* Shift is correct when to_bit_displacement == 0 because its value is less than word bit size. */ && bit_length > CHAR_BIT - bit_displacement1 - ? current_byte1 [1] >> ( CHAR_BIT - bit_displacement1 ) + ? current_byte1 [ 1 ] >> ( CHAR_BIT - bit_displacement1 ) : 0 ) ); byte2 = ( ( ( *current_byte2 << bit_displacement2 ) & UCHAR_MAX ) | ( bit_displacement2 != 0 && bit_length > CHAR_BIT - bit_displacement2 - ? current_byte2 [1] >> ( CHAR_BIT - bit_displacement2 ) + ? current_byte2 [ 1 ] >> ( CHAR_BIT - bit_displacement2 ) : 0 ) ); if ( bit_length <= CHAR_BIT ) break; diff --git a/bench/sequential/ammunition/bits.h b/bench/sequential/ammunition/bits.h old mode 100644 new mode 100755 diff --git a/bench/sequential/anagram/ChangeLog.txt b/bench/sequential/anagram/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/anagram/anagram.c b/bench/sequential/anagram/anagram.c old mode 100644 new mode 100755 index f65e9a63de6cc5ea62615a274a9f5258f7394b53..e356a1089af02b5904b30d7b2b1f9ab9465db592 --- a/bench/sequential/anagram/anagram.c +++ b/bench/sequential/anagram/anagram.c @@ -156,13 +156,13 @@ If you increase it beyond 4, you'll have to add a few more loop unrolling steps to FindAnagram. */ - +int printf(const char * restrict format, ... ); #include "anagram_ctype.h" #include "anagram_stdlib.h" #include "anagram_strings.h" #include "anagram_compare.h" - +int counter1 = 0; /* Defines @@ -193,7 +193,7 @@ typedef struct { char *pchWord; /* the word itself */ anagram_Quad aqMask[ anagram_MAX_QUADS ]; /* the word's mask */ unsigned cchLength; /* letters in the word */ - char padding[4]; + char padding[ 4 ]; } anagram_Word; typedef anagram_Word *anagram_PWord; typedef anagram_Word **anagram_PPWord; @@ -270,7 +270,7 @@ static anagram_PWord anagram_apwSol[ anagram_MAXSOL ]; static int anagram_cpwLast; /* buffer to write an answer */ -static char anagram_buffer[30]; +static char anagram_buffer[ 30 ]; /* Initialization- and return-value-related functions @@ -345,6 +345,7 @@ int anagram_return( void ) int i; char const *answer = "duke rip amy"; + _Pragma( "loopbound min 12 max 12" ) for ( i = 0; i < 12; i++ ) if ( answer[ i ] != anagram_buffer[ i ] ) return 1; @@ -366,11 +367,11 @@ int anagram_ch2i( int ch ) int anagram_CompareFrequency( char *pch1, char *pch2 ) { - return anagram_auGlobalFrequency[ ( (int) *pch1 ) ] < - anagram_auGlobalFrequency[ ( (int) *pch2 ) ] + return anagram_auGlobalFrequency[ ( ( int ) * pch1 ) ] < + anagram_auGlobalFrequency[ ( ( int ) * pch2 ) ] ? -1 : - anagram_auGlobalFrequency[ ( (int) *pch1 ) ] == - anagram_auGlobalFrequency[ ( (int) *pch2 ) ] + anagram_auGlobalFrequency[ ( ( int ) * pch1 ) ] == + anagram_auGlobalFrequency[ ( ( int ) * pch2 ) ] ? 0 : 1; } @@ -405,7 +406,7 @@ void anagram_BuildMask( char const *pchPhrase ) /* Tabulate letter frequencies in the phrase */ anagram_cchPhraseLength = 0; - _Pragma( "loopbound min 11 max 12" ) + _Pragma( "loopbound min 11 max 11" ) while ( ( ch = *pchPhrase ++ ) != '\0' ) { if ( anagram_isalpha( ch ) ) { ch = anagram_tolower( ch ); @@ -480,7 +481,7 @@ void anagram_BuildWord( char *pchWord ) sizeof( unsigned char ) * anagram_ALPHABET ); /* Build frequency table */ - _Pragma( "loopbound min 3 max 636" ) + _Pragma( "loopbound min 3 max 5" ) while ( ( i = *pch ++ ) != '\0' ) { if ( !anagram_isalpha( i ) ) continue; @@ -533,7 +534,7 @@ void anagram_DumpWords( void ) { int i, j; int offset = 0; - _Pragma( "loopbound min 3 max 3" ) + _Pragma( "loopbound min 3 max 3" ) for ( i = 0; i < anagram_cpwLast; i ++ ) { _Pragma( "loopbound min 3 max 5" ) for ( j = 0; anagram_apwSol[ i ]->pchWord[ j ] != '\0'; j ++ ) @@ -541,7 +542,7 @@ void anagram_DumpWords( void ) offset += j; anagram_buffer[ offset ++ ] = ' '; - } + } anagram_buffer[ offset ++ ] = '\0'; } @@ -549,6 +550,7 @@ void anagram_DumpWords( void ) void anagram_FindAnagram( anagram_Quad *pqMask, anagram_PPWord ppwStart, int iLetter ) { + counter1++; anagram_Quad aqNext[ anagram_MAX_QUADS ]; register anagram_PWord pw; anagram_Quad qMask; @@ -556,7 +558,7 @@ void anagram_FindAnagram( anagram_Quad *pqMask, anagram_PPWord ppwStart, anagram_PPWord ppwEnd = &anagram_apwCand[ 0 ]; ppwEnd += anagram_cpwCand; - _Pragma( "loopbound min 1 max 7" ) + _Pragma( "loopbound min 0 max 6" ) while ( 1 ) { iq = anagram_alPhrase[ anagram_achByFrequency[iLetter] ].iq; qMask = anagram_alPhrase[ anagram_achByFrequency[iLetter] ].uBits << @@ -566,7 +568,7 @@ void anagram_FindAnagram( anagram_Quad *pqMask, anagram_PPWord ppwStart, iLetter ++; } - _Pragma( "loopbound min 0 max 114" ) + _Pragma( "loopbound min 0 max 11" ) while ( ppwStart < ppwEnd ) { pw = *ppwStart; @@ -605,9 +607,8 @@ void anagram_FindAnagram( anagram_Quad *pqMask, anagram_PPWord ppwStart, ppwEnd = &anagram_apwCand[ 0 ]; ppwEnd += anagram_cpwCand; anagram_FindAnagram( &aqNext[ 0 ], ppwStart, iLetter ); - } else { /* found one */ + } else /* found one */ anagram_DumpWords(); - } anagram_cchPhraseLength += pw->cchLength; -- anagram_cpwLast; ppwStart ++; @@ -646,6 +647,7 @@ void _Pragma( "entrypoint" ) anagram_main( void ) anagram_FindAnagram( anagram_aqMainMask, anagram_apwCand, 0 ); _Pragma( "flowrestriction 1*anagram_FindAnagram <= 51*call_find" ) } + printf("1: %d\n", counter1); } diff --git a/bench/sequential/anagram/anagram_compare.h b/bench/sequential/anagram/anagram_compare.h old mode 100644 new mode 100755 diff --git a/bench/sequential/anagram/anagram_ctype.h b/bench/sequential/anagram/anagram_ctype.h old mode 100644 new mode 100755 diff --git a/bench/sequential/anagram/anagram_input.c b/bench/sequential/anagram/anagram_input.c old mode 100644 new mode 100755 diff --git a/bench/sequential/anagram/anagram_stdlib.c b/bench/sequential/anagram/anagram_stdlib.c old mode 100644 new mode 100755 index 994350b749e2ef32ff94ff821fc0b1393f60fd1a..6cf60ec359a346b13b26b63b3a6cedebc4c44ebb --- a/bench/sequential/anagram/anagram_stdlib.c +++ b/bench/sequential/anagram/anagram_stdlib.c @@ -18,7 +18,7 @@ License: See anagram.c */ - +int counter2 = 0; #include "anagram_stdlib.h" #include "anagram_strings.h" @@ -26,7 +26,7 @@ /* This function is included here because the WCC does not */ /* support function pointers */ #include "anagram_compare.h" - +int printf(const char * restrict format, ... ); void anagram_swapi( char *ii, char *ij, unsigned long es ) { @@ -34,7 +34,7 @@ void anagram_swapi( char *ii, char *ij, unsigned long es ) i = ( char * )ii; j = ( char * )ij; - _Pragma( "loopbound min 1 max 1" ) + _Pragma( "loopbound min 4 max 4" ) do { c = *i; *i ++ = *j; @@ -74,8 +74,8 @@ void anagram_qsorts( char *a, unsigned long n, unsigned long es ) unsigned long j; char *pi, *pj, *pn; volatile unsigned int flowfactdummy = 0; - - _Pragma( "loopbound min 0 max 6" ) + counter2++; + _Pragma( "loopbound min 0 max 3" ) while ( n > 1 ) { if ( n > 10 ) pi = anagram_pivot( a, n, es ); @@ -86,16 +86,16 @@ void anagram_qsorts( char *a, unsigned long n, unsigned long es ) pi = a; pn = a + n * es; pj = pn; - _Pragma( "loopbound min 1 max 11" ) + _Pragma( "loopbound min 0 max 10" ) while ( 1 ) { /* wcc note: this assignment expression was added to avoid assignment of multiple loop bound annotations to same loop (cf. Ticket #0002323). */ flowfactdummy ++; - _Pragma( "loopbound min 1 max 5" ) + _Pragma( "loopbound min 1 max 6" ) do { pi += es; } while ( pi < pn && anagram_CompareFrequency( pi, a ) < 0 ); - _Pragma( "loopbound min 1 max 4" ) + _Pragma( "loopbound min 1 max 7" ) do { pj -= es; } while ( pj > a && anagram_CompareFrequency( pj, a ) > 0 ); @@ -105,7 +105,6 @@ void anagram_qsorts( char *a, unsigned long n, unsigned long es ) } anagram_swapi( a, pj, es ); j = ( unsigned long )( pj - a ) / es; - n = n - j - 1; if ( j >= n ) { anagram_qsorts( a, j, es ); @@ -122,6 +121,7 @@ void anagram_qsort( void *va, unsigned long n, unsigned long es ) _Pragma( "marker call_qsorts" ) anagram_qsorts( ( char * )va, n, es ); _Pragma( "flowrestriction 1*anagram_qsorts <= 17*call_qsorts" ) + printf("2: %d\n", counter2); } @@ -136,7 +136,7 @@ void *anagram_malloc( unsigned int numberOfBytes ) void *currentPos = ( void * )&anagram_simulated_heap[ anagram_freeHeapPos ]; /* Get a 4-byte address for alignment purposes */ //anagram_freeHeapPos += ( ( numberOfBytes + 4 ) & ( unsigned int )0xfffffffc ); - unsigned int rem = (numberOfBytes & ( unsigned int )0x3 ); + unsigned int rem = ( numberOfBytes & ( unsigned int )0x3 ); unsigned int adjustment = rem ? 4 - rem : 0; anagram_freeHeapPos += numberOfBytes + adjustment; return currentPos; @@ -146,8 +146,8 @@ void anagram_bzero( char *p, unsigned long len ) { unsigned long i; - _Pragma( "loopbound min 8 max 416" ) - for ( i = 0; i < len; ++ i ) - *p ++ = '\0'; + _Pragma( "loopbound min 8 max 800" ) + for ( i = 0; i < len; ++ i ){ + *p ++ = '\0';} } diff --git a/bench/sequential/anagram/anagram_stdlib.h b/bench/sequential/anagram/anagram_stdlib.h old mode 100644 new mode 100755 diff --git a/bench/sequential/anagram/anagram_strings.h b/bench/sequential/anagram/anagram_strings.h old mode 100644 new mode 100755 diff --git a/bench/sequential/audiobeam/README b/bench/sequential/audiobeam/README old mode 100644 new mode 100755 diff --git a/bench/sequential/audiobeam/audiobeam.c b/bench/sequential/audiobeam/audiobeam.c old mode 100644 new mode 100755 index 04900a8b6403a1a399019ae09f388602828469a2..3d7ee151a9af608c632ec8f9c239d61a763819e8 --- a/bench/sequential/audiobeam/audiobeam.c +++ b/bench/sequential/audiobeam/audiobeam.c @@ -36,7 +36,7 @@ int audiobeam_return(); void audiobeam_main( void ); int main( void ); void audiobeam_preprocess_delays( struct audiobeam_PreprocessedDelays - prep_delays[], float *delays ); + prep_delays[ ], float *delays ); float *audiobeam_parse_line( float *float_arr, int num_mic ); long int audiobeam_find_max_in_arr( float *arr, int size ); long int audiobeam_find_min_in_arr( float *arr, int size ); @@ -48,7 +48,7 @@ struct audiobeam_DataQueue *audiobeam_init_data_queue( int max_delay, int num_mic ); struct audiobeam_Delays *audiobeam_init_delays ( int num_angles, int num_mic ); void audiobeam_calc_distances( float *source_location, - float audiobeam_mic_locations[15][3], + float audiobeam_mic_locations[ 15 ][ 3 ], float *distances, int num_mic ); void audiobeam_calc_delays( float *distances, float *delays, int sound_speed, @@ -58,7 +58,7 @@ float *audiobeam_calc_weights_lr ( int num_mic ); float *audiobeam_calc_weights_left_only ( int num_mic ); float audiobeam_calculate_energy( float *samples, int num_samples ); float audiobeam_do_beamforming( struct audiobeam_PreprocessedDelays - preprocessed_delays[], + preprocessed_delays[ ], float **sample_queue, int queue_head, long int max_delay, @@ -74,8 +74,8 @@ int audiobeam_calc_beamforming_result( struct audiobeam_Delays *delays, struct audiobeam_DataQueue *queue, int num_beams, int window, int hamming ); -void audiobeam_calc_single_pos( float source_location[3], - float audiobeam_mic_locations[15][3], +void audiobeam_calc_single_pos( float source_location[ 3 ], + float audiobeam_mic_locations[ 15 ][ 3 ], int hamming ); @@ -83,10 +83,10 @@ void audiobeam_calc_single_pos( float source_location[3], Declaration of global variables */ -extern float audiobeam_input[5760]; -extern float audiobeam_mic_locations[15][3]; -extern float audiobeam_source_location[3]; -extern float audiobeam_origin_location[3]; +extern float audiobeam_input[ 5760 ]; +extern float audiobeam_mic_locations[ 15 ][ 3 ]; +extern float audiobeam_source_location[ 3 ]; +extern float audiobeam_origin_location[ 3 ]; int audiobeam_input_pos; int audiobeam_checksum; @@ -107,22 +107,22 @@ void audiobeam_init() /* Apply volatile XOR-bitmask to entire input array. */ - p = ( unsigned char * ) &audiobeam_input[ 0 ]; + p = ( unsigned char * ) &audiobeam_input[ 0 ]; _Pragma( "loopbound min 23040 max 23040" ) for ( i = 0; i < sizeof( audiobeam_input ); ++i, ++p ) *p ^= bitmask; - p = ( unsigned char * ) &audiobeam_mic_locations[ 0 ]; + p = ( unsigned char * ) &audiobeam_mic_locations[ 0 ]; _Pragma( "loopbound min 180 max 180" ) for ( i = 0; i < sizeof( audiobeam_mic_locations ); ++i, ++p ) *p ^= bitmask; - p = ( unsigned char * ) &audiobeam_source_location[ 0 ]; + p = ( unsigned char * ) &audiobeam_source_location[ 0 ]; _Pragma( "loopbound min 12 max 12" ) for ( i = 0; i < sizeof( audiobeam_source_location ); ++i, ++p ) *p ^= bitmask; - p = ( unsigned char * ) &audiobeam_origin_location[ 0 ]; + p = ( unsigned char * ) &audiobeam_origin_location[ 0 ]; _Pragma( "loopbound min 12 max 12" ) for ( i = 0; i < sizeof( audiobeam_origin_location ); ++i, ++p ) *p ^= bitmask; @@ -131,7 +131,7 @@ void audiobeam_init() int audiobeam_return() { - return ( audiobeam_checksum +1!= 0 ); + return ( audiobeam_checksum + 1 != 0 ); } @@ -140,16 +140,16 @@ int audiobeam_return() */ void audiobeam_preprocess_delays( struct audiobeam_PreprocessedDelays - prep_delays[], float *delays ) + prep_delays[ ], float *delays ) { int i; _Pragma( "loopbound min 15 max 15" ) for ( i = 0; i < 15; i++ ) { - prep_delays[i].delay = delays[i]; - prep_delays[i].high = ( int ) audiobeam_ceil( delays[i] ); - prep_delays[i].low = ( int ) audiobeam_floor( delays[i] ); - prep_delays[i].offset = delays[i] - prep_delays[i].low; + prep_delays[ i ].delay = delays[ i ]; + prep_delays[ i ].high = ( int ) audiobeam_ceil( delays[ i ] ); + prep_delays[ i ].low = ( int ) audiobeam_floor( delays[ i ] ); + prep_delays[ i ].offset = delays[ i ] - prep_delays[ i ].low; } } @@ -160,7 +160,7 @@ float *audiobeam_parse_line( float *float_arr, int num_mic ) _Pragma( "loopbound min 15 max 15" ) for ( i = 0; i < num_mic; i++ ) - float_arr[i] = audiobeam_input[audiobeam_input_pos++]; + float_arr[ i ] = audiobeam_input[ audiobeam_input_pos++ ]; return float_arr; } @@ -173,8 +173,8 @@ long int audiobeam_find_max_in_arr( float *arr, int size ) _Pragma( "loopbound min 15 max 15" ) for ( i = 0; i < size; i++ ) { - if ( arr[i] > max ) - max = arr[i]; + if ( arr[ i ] > max ) + max = arr[ i ]; } return audiobeam_ceil( max ); @@ -184,12 +184,12 @@ long int audiobeam_find_max_in_arr( float *arr, int size ) long int audiobeam_find_min_in_arr( float *arr, int size ) { int i; - float min = arr[0]; + float min = arr[ 0 ]; _Pragma( "loopbound min 15 max 15" ) for ( i = 0; i < size; i++ ) { - if ( arr[i] < min ) - min = arr[i]; + if ( arr[ i ] < min ) + min = arr[ i ]; } return audiobeam_floor( min ); @@ -239,11 +239,11 @@ struct audiobeam_DataQueue *audiobeam_init_data_queue( int max_delay, _Pragma( "loopbound min 15 max 15" ) for ( i = 0; i < ( max_delay + 1 ); i++ ) { - ( queue->sample_queue )[i] = ( float * ) audiobeam_malloc( num_mic + ( queue->sample_queue )[ i ] = ( float * ) audiobeam_malloc( num_mic * sizeof( float ) ); _Pragma( "loopbound min 15 max 15" ) for ( j = 0; j < num_mic; j++ ) { - ( queue->sample_queue )[i][j] = 0.0; // Initialize values to 0 + ( queue->sample_queue )[ i ][ j ] = 0.0; // Initialize values to 0 } } @@ -269,7 +269,7 @@ struct audiobeam_Delays *audiobeam_init_delays ( int num_angles, int num_mic ) _Pragma( "loopbound min 1 max 1" ) for ( i = 0; i < ( num_angles ); i++ ) { - delays->delay_values[i] = ( float * ) audiobeam_malloc( num_mic + delays->delay_values[ i ] = ( float * ) audiobeam_malloc( num_mic * sizeof( float ) ); } @@ -277,7 +277,7 @@ struct audiobeam_Delays *audiobeam_init_delays ( int num_angles, int num_mic ) } void audiobeam_calc_distances( float *source_location, - float audiobeam_mic_locations[15][3], + float audiobeam_mic_locations[ 15 ][ 3 ], float *distances, int num_mic ) { @@ -285,18 +285,18 @@ void audiobeam_calc_distances( float *source_location, _Pragma( "loopbound min 15 max 15" ) for ( i = 0; i < num_mic; i++ ) { - distances[i] = ( audiobeam_sqrt( ( audiobeam_mic_locations[i][0] - - source_location[0] ) * - ( audiobeam_mic_locations[i][0] - - source_location[0] ) + - ( audiobeam_mic_locations[i][1] - - source_location[1] ) * - ( audiobeam_mic_locations[i][1] - - source_location[1] ) + - ( audiobeam_mic_locations[i][2] - - source_location[2] ) * - ( audiobeam_mic_locations[i][2] - - source_location[2] ) ) ); + distances[ i ] = ( audiobeam_sqrt( ( audiobeam_mic_locations[ i ][ 0 ] + - source_location[ 0 ] ) * + ( audiobeam_mic_locations[ i ][ 0 ] + - source_location[ 0 ] ) + + ( audiobeam_mic_locations[ i ][ 1 ] + - source_location[ 1 ] ) * + ( audiobeam_mic_locations[ i ][ 1 ] + - source_location[ 1 ] ) + + ( audiobeam_mic_locations[ i ][ 2 ] + - source_location[ 2 ] ) * + ( audiobeam_mic_locations[ i ][ 2 ] + - source_location[ 2 ] ) ) ); } } @@ -308,7 +308,7 @@ void audiobeam_calc_delays( float *distances, float *delays, int sound_speed, _Pragma( "loopbound min 15 max 15" ) for ( i = 0; i < num_mic; i++ ) - delays[i] = ( distances[i] / sound_speed ) * sampling_rate; + delays[ i ] = ( distances[ i ] / sound_speed ) * sampling_rate; } @@ -319,7 +319,7 @@ void audiobeam_adjust_delays( float *delays, int num_mic ) _Pragma( "loopbound min 15 max 15" ) for ( i = 0; i < num_mic; i++ ) - delays[i] -= min_delay; + delays[ i ] -= min_delay; } @@ -335,13 +335,13 @@ float *audiobeam_calc_weights_lr ( int num_mic ) for ( z = 1; z >= -1; z -= 2 ) { _Pragma( "loopbound min 0 max 0" ) for ( y = 0; y < half; y++ ) { - weights[index] = 0.54 + 0.46 * audiobeam_cos( audiobeam_M_PI * y + weights[ index ] = 0.54 + 0.46 * audiobeam_cos( audiobeam_M_PI * y / half ); index++; } _Pragma( "loopbound min 0 max 0" ) for ( y = 0; y < half; y++ ) { - weights[index] = 0.54 + 0.46 * audiobeam_cos( audiobeam_M_PI * ( -y ) + weights[ index ] = 0.54 + 0.46 * audiobeam_cos( audiobeam_M_PI * ( -y ) / half ); index++; } @@ -361,7 +361,7 @@ float *audiobeam_calc_weights_left_only ( int num_mic ) _Pragma( "loopbound min 15 max 15" ) for ( y = -half; y <= half; y++ ) { - weights[index] = 0.54 + 0.46 * audiobeam_cos( audiobeam_M_PI * y / half ); + weights[ index ] = 0.54 + 0.46 * audiobeam_cos( audiobeam_M_PI * y / half ); index++; } @@ -376,14 +376,14 @@ float audiobeam_calculate_energy( float *samples, int num_samples ) _Pragma( "loopbound min 0 max 0" ) for ( i = 0; i < num_samples; i++ ) - sum += ( samples[i] * samples[i] ); + sum += ( samples[ i ] * samples[ i ] ); return sum; } float audiobeam_do_beamforming( struct audiobeam_PreprocessedDelays - preprocessed_delays[], + preprocessed_delays[ ], float **sample_queue, int queue_head, long int max_delay, @@ -401,8 +401,8 @@ float audiobeam_do_beamforming( struct audiobeam_PreprocessedDelays // add up all the num_mic delayed samples _Pragma( "loopbound min 15 max 15" ) for ( i = 0; i < num_mic; i++ ) { - delay_floor = preprocessed_delays[i].low; - delay_ceil = preprocessed_delays[i].high; + delay_floor = preprocessed_delays[ i ].low; + delay_ceil = preprocessed_delays[ i ].high; // Inline wrap around here // Low index gets index of sample right before desired sample @@ -419,14 +419,14 @@ float audiobeam_do_beamforming( struct audiobeam_PreprocessedDelays // the array only has microphones first_mic to last_mic, we // need to offset our index by first_mic - interpolated_value = ( ( ( sample_queue[high_index][i] - - sample_queue[low_index][i] ) - * ( preprocessed_delays[i].offset ) ) - + sample_queue[low_index][i] ); + interpolated_value = ( ( ( sample_queue[ high_index ][ i ] - + sample_queue[ low_index ][ i ] ) + * ( preprocessed_delays[ i ].offset ) ) + + sample_queue[ low_index ][ i ] ); // If we have microphone weights, multiply the value by the weight if ( weights != 0 ) - sum += ( interpolated_value * weights[i] ); + sum += ( interpolated_value * weights[ i ] ); else sum += interpolated_value; } @@ -449,14 +449,14 @@ int audiobeam_process_signal( struct audiobeam_Delays *delays, int num_mic, int done = 0; - struct audiobeam_PreprocessedDelays preprocessed_delays[15]; + struct audiobeam_PreprocessedDelays preprocessed_delays[ 15 ]; - audiobeam_preprocess_delays( preprocessed_delays, delays->delay_values[0] ); + audiobeam_preprocess_delays( preprocessed_delays, delays->delay_values[ 0 ] ); _Pragma( "loopbound min 13 max 13" ) for ( i = 0; i < delays->max_delay - 1; i++ ) { if ( audiobeam_input_pos < 5760 ) - audiobeam_parse_line( ( queue->sample_queue )[queue->head], 15 ); + audiobeam_parse_line( ( queue->sample_queue )[ queue->head ], 15 ); else return -1; queue->head = audiobeam_wrapped_inc( queue->head, delays->max_delay ); @@ -464,7 +464,7 @@ int audiobeam_process_signal( struct audiobeam_Delays *delays, int num_mic, _Pragma( "loopbound min 371 max 371" ) for ( i = 0; ( i < window ) || ( window < 0 ) ; i++ ) { if ( audiobeam_input_pos < 5760 ) - audiobeam_parse_line( ( queue->sample_queue )[queue->head], 15 ); + audiobeam_parse_line( ( queue->sample_queue )[ queue->head ], 15 ); else { done = 1; break; @@ -482,7 +482,7 @@ int audiobeam_process_signal( struct audiobeam_Delays *delays, int num_mic, value = value / num_mic; if ( beamform_results != 0 ) - beamform_results[j][i] = value; + beamform_results[ j ][ i ] = value; } queue->tail = queue->head; @@ -520,17 +520,17 @@ int audiobeam_calc_beamforming_result( struct audiobeam_Delays *delays, if ( beamform_results != 0 ) { _Pragma( "loopbound min 1 max 1" ) for ( i = 0; i < num_beams; i++ ) - energies[i] = audiobeam_calculate_energy( beamform_results[i], window ); + energies[ i ] = audiobeam_calculate_energy( beamform_results[ i ], window ); } return done; } -void audiobeam_calc_single_pos( float source_location[3], - float audiobeam_mic_locations[15][3], +void audiobeam_calc_single_pos( float source_location[ 3 ], + float audiobeam_mic_locations[ 15 ][ 3 ], int hamming ) { - float mic_distances[15]; + float mic_distances[ 15 ]; struct audiobeam_Delays *delays = audiobeam_init_delays( 1, 15 ); struct audiobeam_DataQueue *queue; @@ -538,7 +538,7 @@ void audiobeam_calc_single_pos( float source_location[3], float *energies; beamform_results = ( float ** ) audiobeam_malloc( 1 * sizeof( float * ) ); - beamform_results[0] = ( float * ) audiobeam_malloc( 384 * sizeof( float ) ); + beamform_results[ 0 ] = ( float * ) audiobeam_malloc( 384 * sizeof( float ) ); energies = ( float * ) audiobeam_malloc( 1 * sizeof( float * ) ); // Calculate distances from source to each of mics @@ -546,19 +546,19 @@ void audiobeam_calc_single_pos( float source_location[3], mic_distances, 15 ); audiobeam_calc_delays( mic_distances, - delays->delay_values[0], + delays->delay_values[ 0 ], 342, 16000, 15 ); - audiobeam_adjust_delays( delays->delay_values[0], 15 ); + audiobeam_adjust_delays( delays->delay_values[ 0 ], 15 ); - delays->max_delay = audiobeam_find_max_in_arr ( delays->delay_values[0], 15 ); + delays->max_delay = audiobeam_find_max_in_arr ( delays->delay_values[ 0 ], 15 ); queue = audiobeam_init_data_queue( delays->max_delay, 15 ); audiobeam_calc_beamforming_result( delays, beamform_results, energies, queue, 1, -1, hamming ); - audiobeam_checksum += beamform_results[0][0] * 1000; + audiobeam_checksum += beamform_results[ 0 ][ 0 ] * 1000; } diff --git a/bench/sequential/audiobeam/audiobeam.h b/bench/sequential/audiobeam/audiobeam.h old mode 100644 new mode 100755 diff --git a/bench/sequential/audiobeam/audiobeaminput.c b/bench/sequential/audiobeam/audiobeaminput.c old mode 100644 new mode 100755 index efcd06741647cc52113dd2ec61163ce47a959945..52dc3f0fa59c46dfed040108a79e9c3a1df329ab --- a/bench/sequential/audiobeam/audiobeaminput.c +++ b/bench/sequential/audiobeam/audiobeaminput.c @@ -1,5767 +1,5767 @@ -float audiobeam_input[5760] = { +float audiobeam_input[ 5760 ] = { -2.1628241e-002, - -6.1782300e-002, - 1.2674258e-002, - 4.5557573e-002, - -3.1999024e-002, - 1.5042214e-002, - -2.2025290e-002, - -1.1691264e-001, - -1.1481735e-002, - -1.4446880e-002, - -1.5755706e-002, - -8.0576309e-002, - 2.0622295e-002, - -1.9724793e-003, - -1.2299200e-001, - -8.3279195e-002, - -1.0825949e-002, - 7.5347056e-002, - -3.6992287e-003, - 1.2980213e-002, - 5.9641118e-002, - 1.8884644e-002, - -5.5868450e-002, - 4.1899706e-002, - -2.0939881e-002, - 2.0535662e-002, - -9.9773254e-002, - -1.5328980e-002, - 2.1354349e-002, - 1.3485441e-002, - 6.2665707e-003, - -1.0335293e-002, - -4.1743319e-002, - 4.3513189e-002, - -4.2254620e-002, - -2.7446285e-002, - 4.5134873e-002, - 5.6054726e-002, - 6.2557771e-002, - 4.2653265e-002, - 7.6308850e-003, - 1.4700700e-002, - 5.4820763e-002, - -1.3939644e-002, - -8.8708573e-002, - 1.4383734e-002, - 4.0463345e-003, - 3.5856296e-002, - 2.7271902e-002, - 2.0721019e-002, - 3.5167562e-002, - -2.7007340e-002, - -1.3367771e-002, - -6.8606571e-002, - -1.1089227e-001, - 7.3041941e-002, - -5.2066383e-002, - -5.1117839e-003, - -3.7742692e-002, - -1.1895006e-002, - -5.7323089e-002, - -5.4802003e-003, - -8.4072455e-003, - 1.5633496e-002, - 4.6059069e-002, - -6.1861422e-002, - -3.3034801e-002, - 1.7182310e-002, - 1.1807449e-001, - 8.2171643e-003, - -1.4691311e-002, - -7.2660364e-004, - 4.6637366e-002, - -6.9687813e-004, - -2.7780373e-002, - 5.9544506e-002, - -5.6050055e-003, - -3.5444498e-002, - 1.2845303e-002, - -1.0379076e-001, - -8.5864760e-002, - 1.9192324e-002, - -2.6644473e-003, - 5.4431089e-003, - -9.2110237e-003, - 7.9344657e-002, - 4.7203951e-002, - 9.6834909e-002, - -1.0553527e-001, - -8.5097540e-004, - 5.9460688e-002, - 4.4844228e-002, - -2.8858692e-002, - 4.4496937e-002, - -3.9902243e-002, - 5.5557069e-002, - -1.1814152e-002, - -5.8464847e-002, - -1.0753965e-002, - 5.7336183e-002, - 2.6582677e-002, - 2.2119089e-002, - -1.4469086e-002, - 3.2141585e-002, - -1.0303352e-001, - -1.8856419e-003, - 3.8161312e-002, - -3.7091166e-002, - -5.1262587e-003, - 4.2556931e-002, - -5.8465556e-002, - 4.2193534e-002, - -1.4951154e-002, - 1.7423551e-002, - 2.7519487e-002, - -9.0048353e-002, - -2.6206603e-002, - -1.1536221e-002, - 4.5418578e-002, - -9.1746774e-002, - 1.6370112e-002, - 8.2439024e-003, - -1.7961312e-002, - -7.5403629e-002, - -6.6798880e-003, - -9.2569474e-003, - -1.8133432e-002, - -6.7922929e-002, - -3.3209516e-002, - 4.7587886e-002, - -4.4354675e-002, - -7.9939507e-002, - -1.0312521e-001, - -4.6389013e-002, - -6.8492137e-002, - 8.7253275e-003, - -1.0040243e-002, - -2.3972856e-002, - 1.9377428e-003, - -1.2364076e-002, - -3.3033927e-002, - 6.2238030e-002, - -4.7879158e-002, - -1.9680886e-002, - -3.2198806e-002, - -4.0721657e-003, - -1.7973043e-002, - 9.3910391e-003, - -9.1117967e-002, - 3.6036154e-002, - -9.3285589e-003, - -3.9239303e-002, - -1.4022387e-001, - 1.1102588e-001, - -9.1222642e-002, - -4.0301199e-002, - 7.1912258e-002, - 1.5040754e-002, - 8.1648312e-002, - 3.9995645e-002, - -1.3388074e-002, - 1.9629547e-002, - 3.5710780e-003, - 1.1166215e-002, - -4.0137762e-002, - 3.6284046e-002, - 4.1404491e-002, - -5.8754380e-002, - -7.8104994e-003, - -5.3507568e-002, - 1.3005354e-002, - -1.6914462e-002, - 8.5270739e-002, - 3.9979512e-002, - 4.5752537e-002, - -3.1159018e-002, - 4.9213792e-002, - 6.1313765e-002, - 4.3386180e-002, - -1.1103888e-002, - -2.9414395e-002, - -1.2976305e-002, - 6.2751925e-002, - 2.6120284e-002, - -2.4616119e-002, - -3.6435894e-002, - 7.1182254e-002, - 2.2753153e-002, - 3.0188200e-002, - -3.1009759e-002, - -8.5616927e-002, - -4.6712075e-002, - 1.0069141e-002, - -1.2036765e-001, - 3.4740635e-002, - 1.0916700e-001, - -7.5289504e-002, - -5.3676914e-002, - -1.6396310e-002, - 5.2259303e-002, - -2.2119146e-002, - 4.3186864e-002, - 5.1169779e-002, - 6.6785827e-002, - 8.4849447e-002, - -5.2696816e-002, - -6.5414943e-003, - 8.6775788e-002, - 8.7802920e-003, - 2.8938998e-002, - -6.8520041e-003, - 5.1510683e-002, - -2.9026553e-002, - 3.8173521e-002, - 2.2338277e-002, - 3.0163548e-002, - -4.3077452e-002, - 7.9805371e-002, - 4.7317864e-002, - -3.1363067e-002, - 3.0903885e-002, - -1.3112581e-002, - 4.6251235e-002, - 2.5813919e-002, - -5.2188163e-002, - 5.9587326e-003, - 1.0092254e-002, - 1.2104228e-002, - 2.7865320e-002, - 3.4901635e-002, - -2.5736803e-002, - 1.3229570e-002, - 3.6694281e-003, - 3.3012708e-002, - 2.9284882e-002, - 3.0060870e-002, - 4.5508139e-002, - -3.6974026e-002, - 7.7034396e-002, - -6.8227707e-002, - 5.3618194e-002, - -6.1636629e-002, - 4.1438304e-002, - 1.1367451e-002, - -4.4009108e-002, - -2.3843912e-002, - -1.6703032e-002, - 3.7265590e-002, - -7.8425072e-003, - 7.0384481e-002, - -2.4218783e-002, - -3.5625536e-002, - 1.8010625e-002, - 1.1966647e-002, - 2.5491626e-003, - 3.1251434e-003, - -2.6075724e-002, - -4.3802442e-002, - -1.2920483e-002, - 3.3085779e-002, - -3.9037317e-003, - -2.8269926e-002, - 4.1542553e-002, - -8.2930418e-002, - 5.6657974e-002, - 3.4391329e-002, - -5.5825221e-002, - 6.8989268e-002, - 1.2541652e-003, - -7.7722092e-002, - -4.6334370e-003, - 3.1744148e-002, - -5.5503811e-002, - -3.4445949e-002, - -9.4038308e-003, - -2.7828988e-002, - 1.0887660e-001, - 1.3636863e-002, - -3.7585580e-002, - 4.0418722e-002, - -1.3737476e-002, - -5.0488197e-003, - 1.3194491e-001, - 7.2649277e-002, - -3.6200249e-002, - -4.1687712e-002, - -1.7974402e-001, - -9.9629449e-002, - -8.8510199e-002, - -3.2055261e-002, - 1.7036375e-002, - 1.8071052e-002, - 4.4934493e-002, - -1.0864015e-002, - 9.9226525e-003, - -1.6564939e-002, - -3.4734325e-002, - 3.5725355e-002, - 3.0344723e-002, - -3.6905057e-002, - 1.4666105e-002, - -9.1517247e-002, - -3.3012325e-002, - 5.8220711e-002, - -6.8047909e-003, - 3.6517819e-002, - 8.7157879e-002, - -1.4120887e-002, - 5.4666271e-002, - 2.0673658e-002, - -5.8489896e-002, - -1.0321028e-001, - 1.7051732e-002, - -4.4728363e-003, - 7.1522488e-004, - -6.6825032e-002, - -3.0624456e-002, - 5.7023563e-002, - -1.1878060e-002, - 1.7099754e-002, - 4.3931414e-002, - 6.1445253e-002, - 3.9676417e-002, - 7.7224665e-002, - 6.4921134e-002, - -5.6517669e-003, - 5.5906816e-002, - -2.1154100e-002, - 2.4198912e-002, - 1.2288710e-002, - 3.5640310e-002, - -3.7175887e-002, - -6.0273241e-002, - 6.4682700e-003, - 2.1266448e-002, - -6.8591151e-002, - 1.1184946e-002, - 4.6699013e-003, - -1.0346103e-001, - -7.7362572e-002, - 4.7383361e-003, - -1.4630850e-002, - 3.7812788e-002, - 1.6292353e-002, - -4.8009838e-002, - 8.0999615e-002, - 2.1004391e-003, - 1.5541126e-001, - -6.1366286e-003, - -7.1757358e-002, - -1.8036409e-002, - 4.4754181e-002, - 8.4250625e-003, - 2.0321052e-002, - 2.3096646e-002, - -4.7739081e-002, - -3.6540263e-002, - -1.3962473e-002, - -1.4429499e-002, - 5.4134628e-002, - -3.4826503e-002, - -9.5953591e-002, - -2.5723076e-003, - 2.5258029e-002, - -1.7985838e-002, - -3.2436879e-002, - 7.4368827e-002, - 7.8647624e-002, - 1.0656742e-002, - 8.4282290e-003, - 2.5266494e-002, - 1.0782181e-002, - 7.0122588e-002, - 4.5656108e-002, - -1.7103947e-002, - 4.2780530e-002, - -9.6794177e-003, - -6.4130219e-003, - -9.2925547e-002, - 5.4742908e-002, - -7.5128799e-002, - -7.3489810e-002, - -3.0056779e-003, - -7.9295585e-003, - -2.1268989e-002, - -1.8030581e-002, - 1.8197354e-002, - -9.1941398e-002, - -6.5053760e-002, - -2.8177888e-002, - 6.2682028e-002, - -2.5915727e-002, - -1.5832074e-002, - 6.8064152e-002, - 7.3910585e-003, - 9.9715351e-003, - 1.4832463e-002, - -8.5346638e-004, - 1.7638664e-002, - 3.0446443e-002, - -1.2396491e-002, - -5.8601288e-002, - -5.7627198e-003, - -7.1554886e-003, - -6.3799636e-003, - -7.9695655e-002, - 2.4753204e-002, - 8.6758471e-003, - -4.9728861e-002, - 2.0786272e-002, - -7.6560881e-002, - 1.8730544e-002, - 2.1715688e-002, - 4.1880687e-002, - -4.0154045e-002, - -3.0255220e-002, - 7.5668890e-002, - 2.6577586e-002, - 6.0758844e-002, - 4.1263811e-002, - -7.2132197e-002, - -5.4040115e-002, - 4.5831681e-002, - 2.9148772e-002, - -9.9761159e-002, - -2.4308664e-002, - -5.9443444e-002, - 3.9842573e-002, - -4.8058590e-002, - -1.6081315e-002, - 5.2772543e-002, - 1.9132275e-002, - 1.3499840e-002, - -2.5313375e-002, - 4.1852174e-002, - 2.8461234e-002, - 3.5598046e-002, - -4.2019346e-002, - 3.0022497e-002, - 1.3199080e-003, - 8.3394564e-002, - 2.2949521e-002, - 4.1566899e-002, - 1.1383869e-002, - -2.6939783e-002, - -1.8963007e-002, - -6.3268458e-002, - 5.8324716e-002, - 4.8789982e-002, - 5.6035385e-002, - -2.0057577e-002, - 4.8354809e-002, - 6.4102491e-002, - 8.5367473e-003, - -4.4917671e-003, - 5.3137245e-002, - -3.4406597e-003, - -2.5126308e-002, - 3.6564998e-003, - 9.6593471e-002, - 7.4728111e-002, - -6.7266129e-002, - -4.9014918e-002, - 7.2046324e-005, - 1.0162088e-001, - 3.4409693e-002, - 7.3462774e-003, - -8.0225074e-002, - 4.8609099e-002, - 3.2217993e-002, - -2.8071970e-002, - -3.6815087e-002, - 3.0467444e-002, - 4.3287817e-002, - -1.3733658e-002, - 2.5769175e-002, - 2.6532442e-002, - 6.3705272e-002, - 9.0108580e-004, - -8.9331571e-003, - 4.0743375e-002, - 2.1807528e-002, - 7.9702732e-002, - -7.5750752e-003, - 7.0674335e-002, - 3.7582849e-002, - 3.9334641e-003, - -2.5679423e-002, - 2.2647574e-002, - -6.4712014e-002, - 2.4315794e-002, - 1.5494849e-002, - -3.9942923e-002, - 3.3496104e-002, - -5.9740340e-002, - 3.5474677e-002, - 6.6577221e-002, - 6.8351408e-002, - -7.7174045e-002, - -3.3267903e-002, - -4.3616992e-002, - 1.2970427e-001, - 6.0899210e-002, - 4.3444379e-003, - -1.0402039e-001, - 4.3108587e-002, - 1.3577371e-002, - 3.3900628e-002, - 7.3707838e-003, - -1.5925799e-002, - 6.4439821e-002, - 1.7075281e-003, - 1.0684273e-001, - 1.3675111e-002, - -1.8111888e-003, - -2.8508186e-002, - -6.5596762e-002, - 1.8536230e-002, - 2.3318748e-002, - 4.7302415e-002, - 7.7239329e-003, - -2.4929896e-002, - -3.5669784e-002, - 4.8605025e-002, - 9.7598834e-002, - 3.3591893e-002, - 1.3978895e-002, - 2.2590039e-002, - -5.5155328e-002, - -2.3844007e-002, - -2.8932963e-002, - -4.5784933e-002, - -2.5579789e-002, - 8.6706332e-002, - 8.5991126e-002, - -4.4830492e-002, - 1.7419718e-002, - 1.4916965e-002, - -6.2744229e-002, - -2.1218715e-002, - 5.9749921e-002, - 2.6471628e-003, - 1.4696082e-002, - -1.1916464e-001, - -7.4054943e-002, - 3.3702032e-002, - -7.2744375e-002, - 2.0153878e-002, - -4.7562683e-002, - -3.2418295e-002, - 1.8784044e-002, - 9.4509719e-002, - 8.6064590e-002, - -1.2657551e-002, - -3.8219708e-002, - -5.9906689e-002, - 3.8677878e-002, - 3.2909039e-002, - 1.3356926e-002, - -1.9001381e-002, - -3.9834512e-002, - 1.6185466e-002, - -2.1554965e-002, - -1.0883439e-001, - -2.9635956e-002, - 1.2873885e-002, - 2.7852743e-002, - 3.5614484e-003, - -4.7306763e-002, - -1.0771995e-001, - -7.9289260e-004, - 1.1021590e-001, - -6.1261912e-003, - 5.2735506e-002, - -5.0261529e-002, - 3.2092184e-002, - 3.1401447e-002, - 2.6629993e-002, - -2.9882337e-003, - -6.0317700e-002, - -3.0940994e-002, - -3.8375379e-002, - -1.0663192e-001, - -1.1058175e-002, - -5.6424824e-002, - -7.7026313e-003, - -4.1079471e-002, - -2.1629167e-002, - -2.6973772e-002, - -4.5878364e-002, - 1.5542578e-002, - -4.9103021e-002, - -1.0554701e-002, - -5.0947614e-002, - -3.1865395e-002, - 9.0008999e-002, - 4.5801038e-002, - 1.5787324e-002, - 6.1816926e-002, - 3.9975029e-002, - -8.0101743e-002, - 3.6589676e-002, - -4.0044532e-002, - -5.4152676e-003, - -2.7100833e-002, - 2.0669295e-003, - 4.2072166e-002, - -4.8541169e-002, - -6.0994910e-002, - 7.2269246e-002, - 1.8547974e-002, - 3.2317037e-002, - -3.7668570e-002, - 2.3090187e-002, - -8.4282566e-003, - 1.2909956e-002, - -4.6799208e-003, - -7.5882838e-002, - -4.5005968e-002, - 6.0924318e-002, - 1.5170746e-002, - -8.0718858e-003, - -3.1913614e-002, - 2.9448478e-002, - 5.6982375e-002, - -2.2421475e-002, - 2.7408554e-002, - -1.0052456e-001, - -3.0342741e-002, - -8.0221320e-002, - -5.2820631e-002, - 1.4287569e-002, - -3.5261023e-002, - -1.2712299e-002, - 1.0298138e-002, - -7.4545734e-002, - -7.1662807e-003, - -6.3049311e-002, - -3.3128714e-003, - -3.7018937e-002, - -9.2155629e-002, - 4.4295353e-003, - -2.5345078e-002, - -5.0175815e-004, - -2.2425974e-002, - 7.0790673e-002, - 4.6067398e-002, - 1.3356450e-002, - -7.5350427e-002, - 9.2272647e-002, - -6.0388207e-002, - 6.2880311e-002, - -4.6813092e-002, - 6.4358587e-002, - 6.5476593e-002, - -5.0385005e-002, - 1.1259635e-002, - -2.8642227e-002, - 6.0591769e-003, - 7.8259699e-003, - -4.0086083e-002, - -1.3107082e-002, - -2.5073934e-002, - 1.5301678e-002, - -6.1350007e-002, - -4.0860320e-002, - 4.5224779e-002, - -4.4892524e-002, - 8.8006431e-002, - -3.3282403e-002, - -5.6195537e-002, - -1.1931638e-001, - -6.8019421e-002, - -7.0651820e-003, - 1.0114029e-001, - 2.6799939e-002, - -4.5414349e-002, - 7.3662653e-002, - 2.6023897e-002, - -7.7197973e-002, - 1.8472004e-002, - 6.4325310e-003, - 1.0535758e-001, - -8.2482506e-002, - -1.0868944e-001, - 8.7186828e-002, - 4.2331149e-003, - 6.6302594e-003, - 5.0652627e-002, - -2.6295176e-002, - 1.1319735e-002, - -5.3688488e-002, - -8.3685938e-002, - 3.8054233e-002, - -2.5923609e-002, - 8.7603907e-002, - 4.4975322e-002, - 2.0615118e-002, - 3.7674950e-002, - 5.6434838e-002, - 1.0977012e-001, - 2.1349762e-003, - -1.4936346e-004, - 6.7930892e-002, - 3.2086590e-003, - -4.5878929e-002, - -4.4181125e-002, - 2.4715658e-002, - 7.9994617e-002, - 5.2384101e-002, - -9.5190518e-003, - -3.7239495e-002, - 1.9883359e-002, - 4.0730677e-003, - -1.1677479e-001, - -2.6374780e-002, - -7.9398641e-002, - -3.5523570e-002, - -1.8151457e-002, - -3.7191923e-002, - -1.0831981e-001, - 5.5198514e-002, - 8.2754639e-002, - -5.5996264e-002, - -6.5431323e-002, - 1.6211145e-002, - -6.8206035e-002, - -2.9416838e-002, - 5.3307249e-002, - 1.7472763e-002, - 3.7312882e-003, - -5.1498829e-002, - -6.2257189e-002, - -2.9692831e-002, - -2.4493198e-002, - -2.7319437e-003, - 5.8815114e-002, - -6.3249182e-002, - 2.0730820e-002, - 9.5563463e-003, - -2.2720249e-002, - 2.5296131e-002, - -1.9878781e-002, - -3.4238910e-002, - -2.4677844e-002, - 6.9236841e-002, - -3.4704441e-002, - -3.9318071e-002, - 5.7750083e-002, - 3.4211433e-002, - -5.0475709e-002, - 2.5174181e-002, - -4.6996048e-002, - 1.6221876e-002, - -2.6204170e-002, - 1.0630488e-002, - 4.5517196e-003, - 8.3863415e-002, - 4.8780028e-002, - 2.3656142e-002, - -8.5385372e-002, - -7.6803464e-003, - 1.3583644e-002, - 1.0156741e-001, - 1.1623477e-001, - 3.0703572e-002, - -1.8790478e-002, - -2.5434562e-002, - 2.6081461e-002, - -8.0973679e-002, - 4.7528492e-003, - 5.1709027e-002, - -2.7152886e-002, - 3.3078882e-002, - 9.5807816e-002, - -1.6742069e-002, - 5.2847289e-002, - 7.4190627e-002, - 8.4661383e-003, - -1.7127745e-002, - 2.5387176e-002, - -2.4425657e-002, - 1.0363293e-002, - 3.2901544e-002, - 2.4049224e-002, - -3.6364045e-002, - -1.8374024e-002, - 1.9170206e-002, - 3.5899319e-002, - 2.2884438e-002, - -4.2986435e-004, - -3.7263522e-002, - -2.4107817e-002, - -1.0160656e-002, - -5.2244378e-003, - 8.4713192e-002, - -3.3175117e-003, - -6.8918873e-002, - -1.0757423e-001, - 1.9995005e-002, - 1.0018587e-002, - -1.0031442e-003, - -2.6646668e-002, - -1.4140223e-002, - -1.9093589e-002, - 8.2412659e-002, - 5.0569231e-002, - -1.9249580e-003, - 1.6857775e-002, - 4.4516048e-002, - 2.9634803e-002, - -7.4675793e-002, - 6.9128286e-002, - 1.7838807e-002, - -1.5706998e-002, - 2.3497836e-002, - -2.7256676e-002, - -1.6892391e-002, - -6.2498894e-002, - 1.8814550e-002, - 6.7802861e-002, - -4.5010985e-002, - -7.9693020e-004, - -1.6417629e-002, - -1.6571552e-002, - -3.2170429e-002, - -3.1451461e-002, - 5.9127646e-002, - 4.2496269e-002, - 5.8440594e-002, - -3.7761868e-002, - 1.4543937e-001, - 4.6291259e-003, - -8.8031773e-003, - -3.7376149e-002, - 4.4444334e-002, - -3.2946165e-002, - 2.7709611e-002, - -4.6454274e-002, - -5.4184987e-003, - 1.9082159e-002, - 1.1097683e-003, - -7.1272377e-002, - 1.8112885e-003, - 2.6898226e-003, - -3.0686681e-002, - -1.9829229e-002, - 3.0867601e-002, - -6.2758817e-002, - -2.2846248e-002, - 6.0573296e-002, - 3.7414532e-002, - 3.6169907e-002, - -2.3442499e-003, - 2.5963449e-002, - -5.0418274e-002, - -7.0858380e-003, - 2.2793366e-002, - -4.5274123e-002, - 4.4264571e-002, - -5.5435866e-002, - -6.0444822e-002, - -4.4730927e-002, - -2.6702128e-003, - 3.0721521e-002, - 3.9441000e-003, - 8.3714830e-002, - -1.2824805e-002, - 8.9065027e-002, - -4.1791317e-002, - -9.6506591e-004, - -2.2150161e-002, - -5.4266803e-002, - -7.9756811e-002, - 2.9723999e-003, - -5.4652294e-004, - -8.3350132e-002, - 1.0241351e-002, - -9.6004506e-002, - 1.1043342e-002, - -1.0036827e-001, - 5.4166215e-002, - 5.3435462e-002, - 1.0602215e-002, - 2.9868847e-002, - -2.4597423e-003, - 1.1437786e-002, - -4.2279579e-002, - -8.8732642e-003, - -2.9476925e-002, - 3.6694209e-002, - 3.3176455e-005, - -7.3778252e-003, - -3.9144818e-002, - -8.3308862e-003, - 4.6791993e-002, - -1.7037485e-003, - 4.5892237e-002, - 1.5597981e-002, - -5.6087508e-002, - -4.1107610e-005, - -1.0683418e-002, - -2.6103976e-002, - -8.4348999e-003, - 3.2082383e-002, - 1.4938214e-001, - 3.9964806e-002, - -7.8254583e-003, - 4.6722479e-002, - 9.3200915e-002, - 2.4464994e-002, - 8.3718835e-004, - 1.5250387e-002, - -1.2400454e-001, - -2.8639656e-002, - -1.5938766e-002, - -2.5676238e-002, - -5.1847115e-002, - 1.7639941e-003, - 4.9326733e-003, - -1.5856443e-002, - -9.1307767e-004, - -1.5554562e-002, - 2.5941199e-002, - -2.9757970e-002, - 1.2201936e-001, - 8.0973215e-002, - 1.7146982e-002, - 1.4736881e-002, - 6.0467585e-002, - 5.4698972e-002, - 2.5876279e-002, - 1.0164087e-002, - 3.8201202e-002, - -6.0518215e-002, - -1.3895876e-002, - 3.4728204e-002, - -1.1711300e-001, - -1.1216734e-002, - -3.9340786e-002, - -2.7309751e-002, - 5.9063770e-003, - 2.0738498e-002, - -1.3812395e-002, - -5.7982126e-002, - -9.3680977e-002, - -4.9666791e-002, - -2.6529709e-002, - 5.2766295e-002, - -2.1506279e-002, - 9.3091830e-002, - -3.5081971e-002, - 1.4449703e-002, - 5.8269304e-002, - 1.0329005e-001, - -3.4264617e-002, - -1.9998674e-002, - 4.0219340e-002, - 2.0651887e-002, - 5.2208561e-003, - 2.1487670e-002, - 2.4204968e-002, - 3.0673837e-002, - -8.5293543e-003, - -5.3952186e-002, - 8.9865270e-002, - 1.0436717e-001, - -9.7344984e-003, - -9.7393746e-003, - 5.2162345e-002, - 6.8291250e-003, - -3.3926390e-002, - -3.5345884e-002, - -2.1419424e-002, - 2.4503709e-002, - 4.4872568e-002, - -3.6811060e-002, - 4.6761401e-002, - 4.9242905e-002, - 2.9535711e-002, - -7.5315008e-003, - 8.4931550e-003, - 1.3235857e-001, - 8.4181971e-002, - -6.3526263e-002, - 4.1655473e-003, - 6.3417279e-003, - -1.3065747e-002, - -5.7645495e-002, - 1.8950407e-002, - 3.6717958e-002, - 1.2058270e-001, - 2.9698808e-002, - 6.3712863e-002, - -7.8927013e-002, - -1.1092228e-001, - 7.5127329e-002, - 3.6792936e-002, - 1.8047426e-002, - 1.6372435e-002, - -1.1358573e-002, - -1.1114199e-002, - -3.1011890e-003, - 1.2753148e-001, - -1.3063278e-003, - 2.9175038e-002, - 1.0744000e-002, - 8.5396074e-003, - 3.0555550e-002, - 1.9846964e-002, - -2.0887290e-003, - 7.4108765e-004, - -6.8980202e-002, - -6.9539294e-002, - -7.1891402e-002, - 2.6483042e-002, - -1.0604522e-001, - 1.4946154e-002, - -2.0885875e-002, - 8.1620406e-002, - 2.2391518e-003, - -4.3108583e-002, - -2.8345459e-002, - 2.1767961e-002, - -4.1509277e-002, - 5.0332798e-002, - -3.0747398e-003, - 8.1280247e-003, - -2.8574311e-002, - -3.7557299e-002, - 4.6116535e-002, - -7.5548776e-002, - 4.2485208e-002, - -1.2735059e-002, - -4.8713882e-002, - 3.4080268e-002, - 3.8109829e-002, - -7.9933234e-002, - 5.0868655e-003, - -3.6956005e-002, - -6.5608678e-003, - 6.1566793e-002, - 3.9747615e-002, - -7.0776849e-003, - -1.0039001e-002, - 1.0635588e-001, - -3.2262564e-002, - 6.6284637e-002, - -1.5602956e-002, - 9.8826341e-002, - 2.8765472e-002, - 4.9988770e-002, - 2.8083188e-002, - 3.7850396e-003, - 3.8099036e-002, - -6.2803094e-002, - -8.0284071e-003, - 1.7678623e-002, - 1.5384533e-001, - 3.0604908e-002, - -2.2938654e-002, - -6.6147444e-003, - 8.0228244e-003, - 6.3229249e-002, - 1.9888120e-002, - -1.2483914e-002, - -3.3020847e-002, - 5.4285124e-002, - -2.2046600e-002, - 7.6270296e-002, - -3.8125981e-002, - 4.2116981e-002, - 6.8249119e-002, - 4.9569658e-002, - -1.2181580e-002, - -3.3950151e-002, - -3.3512560e-002, - -4.0037716e-002, - 3.8517111e-002, - -3.0444190e-002, - -1.8608773e-002, - 1.5643509e-002, - 4.0250976e-002, - 1.9776990e-002, - -3.1560979e-002, - -3.1229293e-003, - -2.5832801e-003, - 2.7968081e-002, - -5.6392681e-002, - 4.7360525e-002, - 3.8619319e-003, - 9.9891506e-002, - -1.8199130e-003, - 3.1119514e-003, - -9.1106029e-002, - -1.4519250e-002, - 3.7010312e-002, - -1.1213690e-002, - 2.1256532e-002, - -5.3987387e-002, - 5.7866117e-002, - -4.2626330e-002, - -3.3483769e-002, - -5.2898877e-002, - -6.7225352e-002, - 5.1417756e-002, - 1.3929020e-003, - 5.2022234e-002, - 1.0592230e-001, - -6.8998892e-002, - -7.3435118e-002, - 3.0523655e-002, - -5.7162591e-003, - -3.2771503e-002, - 9.2367770e-003, - -6.7747716e-003, - 1.0333099e-002, - -1.5577876e-002, - -6.7817347e-002, - -6.6533637e-002, - -6.3984097e-002, - 5.6216531e-002, - 1.5579751e-002, - -2.7104760e-003, - 2.0901166e-002, - -1.1389339e-002, - 2.4314314e-002, - 9.6320945e-003, - -3.5425250e-002, - 2.9816167e-002, - -1.0582802e-001, - 7.9031755e-002, - 5.8936482e-002, - 4.9235081e-002, - -2.0598427e-002, - 2.7257218e-002, - 8.3473318e-002, - 1.0047121e-001, - 7.7116867e-002, - 3.9518492e-002, - 6.3112265e-003, - -6.8158283e-002, - 8.2755720e-003, - -1.4671408e-002, - 1.0928921e-001, - -5.3580922e-002, - -4.9000311e-002, - 9.9920986e-002, - 3.5724099e-002, - 3.0645803e-002, - 2.1810846e-003, - -3.5472111e-002, - -5.8047398e-002, - 4.6521237e-002, - 5.3030675e-002, - 1.6183593e-002, - 4.7161315e-002, - 1.5496372e-002, - -2.6065334e-002, - 5.4108355e-002, - 1.1113747e-001, - -4.3256641e-002, - 1.6776514e-002, - -9.2777987e-002, - 1.0831881e-001, - 2.6550297e-002, - 5.6809097e-002, - 4.1708284e-003, - -9.3188930e-002, - -3.7166019e-002, - 7.2595776e-002, - -5.8774162e-002, - -8.4078954e-003, - -8.3732623e-002, - -1.4874571e-002, - 4.1882968e-002, - -3.2712401e-002, - -2.7953154e-002, - 1.1313205e-002, - 4.9524990e-002, - 2.0294329e-003, - 3.8285760e-002, - -1.4648978e-002, - -3.5010308e-002, - 3.2018027e-002, - -1.7151604e-002, - -9.6536966e-002, - -4.6726273e-002, - 1.7288478e-002, - 1.5788740e-002, - 5.2848095e-003, - 4.1795447e-002, - 4.6331282e-002, - 7.0958286e-002, - -3.3004895e-002, - -1.5541634e-002, - -6.4899819e-002, - 4.4813983e-002, - 2.1314689e-002, - 2.5903378e-002, - 3.1412995e-002, - 2.7655815e-002, - 7.0916690e-003, - 3.6198660e-002, - -2.9768515e-002, - 5.8014817e-002, - -5.8727472e-002, - -1.2787628e-002, - 1.2855854e-001, - -7.0659467e-002, - -9.9019211e-002, - -3.2969432e-002, - 3.1190632e-002, - 6.5956753e-003, - -1.6987652e-002, - 4.0088843e-002, - -1.0857916e-001, - 1.1385790e-002, - 6.8736591e-002, - 9.1859027e-003, - -2.2753959e-002, - 6.5639798e-002, - 4.4619698e-002, - -5.3424194e-004, - 3.2475239e-002, - -5.5982848e-002, - -5.9416171e-003, - -2.6137328e-002, - 4.7534015e-002, - -4.3905563e-002, - 4.7139261e-002, - -5.0539423e-002, - -5.2509019e-003, - -8.4340990e-003, - 1.7266091e-002, - -6.5954891e-002, - -1.1344100e-001, - -2.5794929e-002, - 5.3678895e-002, - -1.0500180e-002, - 5.6847837e-002, - -3.0370988e-002, - -9.2272021e-004, - -1.1716566e-002, - -6.7153889e-002, - -4.9491944e-002, - -2.7151079e-002, - 4.9084906e-003, - -3.3137805e-002, - -5.7067625e-002, - -3.5807416e-003, - -1.9012110e-002, - -2.3489886e-002, - -6.6147208e-002, - -1.9730903e-002, - -5.7617192e-002, - -1.7743738e-002, - 6.2747755e-002, - 3.0746059e-002, - -2.1208817e-002, - 1.0724738e-002, - -9.5295048e-002, - -8.3696293e-003, - 2.8928609e-002, - 7.7547429e-002, - -2.8433474e-002, - 3.9000811e-002, - 1.8594177e-002, - 7.3604845e-002, - -4.0570215e-002, - 4.0428101e-002, - 5.2162122e-002, - 6.9720490e-002, - 1.3917348e-003, - -4.1967149e-002, - 1.2040326e-002, - -9.0859684e-002, - 3.0619641e-002, - 7.9828021e-002, - -9.5582231e-002, - 4.4977158e-003, - 5.3050166e-002, - -3.9280557e-002, - 2.1825815e-003, - 2.6836286e-002, - -1.0693240e-002, - 1.2507669e-002, - 8.7551531e-002, - -4.2170924e-002, - 7.4021050e-002, - -5.0257861e-002, - 4.2440318e-003, - 2.8498362e-002, - 4.0712278e-002, - 1.3630666e-002, - 3.7506385e-002, - 2.9021782e-002, - 9.4969857e-003, - 7.3668316e-002, - -1.0430524e-002, - 7.8640111e-003, - -1.9579539e-002, - -1.3354780e-002, - 4.6553749e-002, - -1.5359398e-002, - -3.6958328e-002, - 3.9183126e-002, - 9.0763364e-002, - -5.7310947e-002, - 6.8567752e-002, - 3.0379537e-002, - -1.7131879e-002, - -4.9845297e-002, - 6.6236979e-002, - -3.5226094e-002, - 4.1319436e-002, - -1.0414640e-002, - -7.3110434e-002, - -6.7060543e-003, - -2.2661736e-003, - 5.4214708e-002, - -5.6731971e-002, - 8.0169623e-002, - 6.8708173e-002, - 5.1555900e-002, - -2.3028383e-002, - 2.3845756e-003, - 4.3290569e-002, - -5.0088302e-003, - -8.5495950e-003, - -2.2929081e-002, - -1.4934858e-002, - -1.9331882e-002, - 3.1952820e-002, - 2.2837591e-002, - -6.5833588e-003, - 9.3564125e-002, - -5.3479061e-002, - -4.7856971e-003, - 7.8291548e-002, - -6.4278719e-002, - 5.2534052e-002, - -8.4991604e-003, - -2.5331472e-002, - -1.1670703e-004, - -1.6794583e-002, - -3.6946100e-005, - 7.9706385e-002, - 1.8011858e-002, - 4.5273832e-002, - 1.9568899e-002, - 4.5061760e-002, - -2.6682717e-002, - -1.8814340e-002, - -8.5389413e-003, - -4.6897567e-002, - -7.9016702e-002, - -2.1058150e-005, - 5.8849807e-002, - -2.5161493e-002, - 6.0245233e-002, - -8.2636501e-002, - -6.9368318e-002, - -1.5064100e-002, - -3.4932382e-002, - 4.4579915e-003, - -5.9080060e-003, - 8.9889824e-002, - 8.1831512e-002, - 1.6338686e-002, - -5.4180978e-002, - -5.3267629e-003, - -2.8476462e-003, - 1.7450439e-002, - -2.4213885e-002, - 7.1383978e-003, - -8.5575620e-002, - -9.7688859e-002, - 5.4026353e-002, - 6.8738257e-002, - -3.1782928e-002, - 2.9354257e-002, - -1.6843133e-002, - -3.4228093e-002, - -4.9087072e-002, - -8.8609944e-003, - -4.2395609e-002, - 6.0299570e-002, - -3.9805763e-002, - -3.9969178e-002, - -1.0972287e-002, - -3.1903343e-002, - -2.3021388e-002, - 9.5381824e-002, - -3.8131819e-002, - -2.7944014e-002, - 7.9797347e-002, - 1.5055618e-002, - -6.0223999e-002, - 2.1349786e-002, - 1.4010766e-001, - -7.0365161e-002, - 9.5470745e-002, - -5.5280731e-002, - 9.0676740e-002, - 8.0165216e-003, - 3.8071961e-002, - 3.4452332e-002, - 1.2608974e-001, - 7.4568874e-003, - 2.2179776e-002, - -5.1449927e-003, - -1.5259731e-003, - 2.4388062e-002, - 2.8159902e-002, - 6.3528510e-002, - 7.2459203e-002, - -6.6724867e-002, - 4.9840343e-002, - 1.0288982e-002, - -3.7523292e-003, - 2.4660586e-002, - 1.0905181e-001, - 2.0534327e-002, - -1.6624929e-002, - -4.7427409e-002, - 7.1932143e-002, - 2.4785276e-002, - -1.2656870e-002, - -4.3142163e-003, - -8.5065080e-002, - 1.1401731e-002, - 4.2186129e-002, - 1.7953548e-002, - -9.5471407e-003, - -2.7867915e-002, - 7.5845281e-003, - 3.6129267e-002, - -1.2896952e-001, - -1.4991468e-002, - 3.9146522e-002, - -7.6952239e-002, - 2.3154057e-002, - 3.2631339e-002, - 3.6032235e-003, - 2.4348659e-002, - -5.0004772e-003, - -3.9711602e-002, - -2.5957781e-002, - -8.4744957e-003, - -6.8234352e-002, - -2.8744676e-002, - 2.3341254e-002, - 4.3007108e-002, - 1.2712390e-002, - 2.8427956e-002, - -1.5923634e-002, - 4.4011784e-002, - -1.5711433e-002, - 4.4606989e-002, - -1.7483925e-002, - -1.2423254e-001, - 6.2454024e-003, - 6.6168154e-002, - 2.1085300e-002, - 9.0749477e-003, - -2.0534154e-002, - 6.9048807e-002, - -9.2613632e-003, - -2.7695812e-003, - -4.1107764e-002, - 2.1935377e-002, - -8.4933698e-003, - 7.9754080e-002, - 2.8930188e-002, - -1.5746665e-002, - -5.5368360e-002, - 4.8760088e-002, - -2.3262447e-002, - 1.9970261e-003, - 1.7181455e-002, - -2.6662315e-002, - 2.9476649e-003, - 3.6398404e-002, - -1.0718664e-002, - -1.3419702e-002, - -1.4303328e-002, - -5.1753021e-002, - -8.8633620e-003, - -6.6385388e-002, - -1.8360778e-002, - 4.0996838e-002, - -2.1821426e-002, - 1.9446502e-002, - 7.8258137e-002, - 1.1935359e-003, - 1.2671015e-001, - 5.4051017e-003, - 8.9554422e-002, - 5.1612989e-002, - -5.9613506e-002, - 1.0465684e-001, - 3.5325477e-002, - -7.4798564e-002, - -6.6674861e-002, - 2.8210488e-002, - 3.9519939e-003, - 4.2419282e-002, - 4.8733699e-002, - 4.9734069e-002, - -8.2263082e-002, - -1.0431084e-003, - 6.5382265e-003, - 2.7104024e-002, - -6.1504411e-002, - -1.1030328e-001, - -1.1088406e-001, - 4.6883361e-002, - -4.8929726e-002, - -1.1842483e-002, - -3.2343663e-002, - 2.8083963e-002, - 6.5341653e-003, - 6.4197433e-003, - -5.1922064e-002, - 5.9610106e-002, - -3.0492144e-003, - -2.0038627e-002, - 6.6832718e-003, - 3.5125897e-002, - 4.9157559e-002, - -1.1599903e-002, - -8.6904299e-004, - -8.6599262e-002, - 6.2299405e-002, - 9.4208251e-003, - 7.3197513e-002, - 7.5060589e-003, - 1.5188546e-002, - 8.4467481e-003, - 1.6309540e-002, - -3.6380831e-002, - -1.5684802e-002, - -1.2750901e-004, - -3.9540578e-002, - -2.6086647e-002, - 5.0982353e-002, - -3.8994541e-002, - -7.8152817e-002, - -2.1288151e-002, - 3.2125646e-002, - -4.9028664e-002, - -5.2017685e-002, - 4.8786860e-003, - 8.7710015e-002, - 3.7430190e-002, - 3.6962894e-002, - -1.4930609e-003, - -6.6490921e-002, - 1.1278370e-001, - 1.6259975e-002, - -1.1381280e-001, - 3.0235399e-002, - 7.9035487e-004, - -3.8638327e-002, - 4.3147897e-002, - 8.8130106e-002, - -1.4913096e-002, - 3.9678262e-003, - 3.6966598e-002, - 6.3040724e-002, - -4.9035837e-002, - -3.0293084e-003, - 7.2467143e-002, - 3.3553250e-003, - 1.1619490e-002, - 2.5048420e-002, - -1.3875509e-003, - 4.3384801e-003, - -1.9225635e-002, - -3.4205233e-002, - -6.1043519e-002, - 2.7920233e-002, - 1.5845125e-002, - -3.1788360e-002, - 5.5265277e-003, - -8.8053862e-003, - 5.1596808e-002, - -2.6382888e-002, - 1.3528723e-002, - 9.7188179e-004, - 4.5393222e-002, - 1.4350879e-001, - -8.3970455e-002, - -5.3058686e-002, - -1.7168532e-002, - 5.2123339e-002, - -1.0874975e-001, - -8.4692593e-002, - 2.0470836e-002, - 1.3786291e-002, - -4.3504389e-002, - -5.5751144e-003, - -9.6933329e-002, - -6.0058163e-002, - -5.0236621e-002, - 2.1957145e-002, - 4.6918366e-002, - 5.4757597e-003, - -1.2851732e-001, - 5.3503448e-002, - -7.8722951e-002, - 2.5143808e-002, - 3.8130327e-002, - 1.1190727e-001, - -2.2211112e-003, - 3.4395397e-003, - -6.6144203e-002, - -1.3250907e-002, - 1.4285490e-002, - -4.7426798e-002, - 4.3459402e-002, - 1.9567583e-002, - -3.2933903e-002, - 7.9884585e-003, - -3.6921691e-002, - -5.2601711e-002, - -3.7588436e-002, - -5.7858993e-002, - -3.9355983e-003, - -1.9668686e-002, - 1.7962753e-002, - 7.1980552e-002, - -1.2059618e-002, - 3.4579944e-002, - -1.8839556e-002, - -1.7604317e-002, - 7.8825547e-002, - 8.4168663e-003, - -1.6198144e-002, - 7.7326058e-003, - -1.4566324e-001, - 7.0918323e-002, - 2.7943557e-002, - 1.5952735e-002, - 5.3303709e-002, - -8.3804957e-002, - -6.6985571e-002, - -1.3191151e-002, - -4.2864677e-002, - -5.9477390e-002, - 4.9906263e-002, - 4.4401362e-002, - 4.7588494e-002, - 2.5451538e-002, - -3.7015590e-002, - 1.8897192e-002, - 8.5686801e-002, - 5.1878702e-003, - 4.3894402e-003, - 1.8570041e-002, - 5.5022301e-002, - -4.0645765e-002, - -5.0799009e-002, - -2.3060691e-002, - -5.3046714e-002, - -2.9921308e-002, - -4.2374683e-002, - -2.0684933e-003, - -3.1561538e-002, - -2.6520727e-002, - 2.2842715e-002, - 4.7241369e-002, - 1.5938051e-003, - -3.1393040e-002, - -2.2067479e-002, - 1.3659794e-002, - -3.1810808e-002, - 5.2038109e-002, - 5.5282333e-002, - 7.3406997e-002, - -8.5669402e-002, - 3.0521734e-002, - 1.3090940e-005, - -4.7165506e-002, - 4.8765186e-003, - -2.9407043e-002, - 1.9843096e-002, - -2.7632043e-002, - 1.4379705e-002, - 3.2263917e-002, - 5.4751887e-002, - -3.4032149e-002, - -9.9526757e-003, - 2.5634676e-002, - 2.5738815e-003, - -5.5256747e-003, - 4.1466343e-002, - -2.8007927e-002, - 8.2962880e-002, - 5.3608424e-002, - -6.6232246e-003, - -1.1529210e-001, - -3.5498392e-002, - 2.0099626e-002, - 4.5948750e-002, - 1.7926143e-002, - -5.9056747e-002, - -9.6797251e-002, - -2.4358114e-002, - -6.1063654e-002, - 2.0158520e-003, - 8.7163319e-002, - -8.9921518e-002, - -9.8666202e-003, - -9.3794619e-004, - 4.5791584e-002, - 8.5254269e-003, - 3.7372616e-002, - -5.3279812e-002, - 7.8030247e-004, - 1.1843336e-002, - -7.4212330e-002, - 1.1414296e-001, - -4.1485582e-002, - -2.2089769e-003, - -6.1672113e-003, - 9.8929283e-003, - -7.8207292e-002, - -4.8161136e-003, - -7.2059255e-002, - -3.5922784e-002, - -1.9786275e-002, - 1.5833828e-002, - 5.2545743e-002, - 9.9962946e-003, - 1.0473584e-001, - -2.6380727e-002, - 6.2664438e-002, - -1.0710067e-002, - -5.6621248e-002, - -6.2640861e-002, - 2.4906349e-002, - 4.9470811e-002, - 1.5582134e-002, - -1.1034795e-002, - 3.7179257e-002, - -7.9083587e-002, - 3.1086424e-002, - -1.3685837e-002, - -3.7552842e-002, - -2.9528094e-002, - -1.7008381e-002, - 3.7137697e-002, - 4.5722891e-002, - -6.7639973e-002, - 1.0411136e-002, - -9.5948463e-002, - -7.6491282e-002, - 1.0515447e-001, - -7.2395284e-002, - 2.6384356e-002, - -9.7803448e-004, - -1.2178894e-002, - -4.3298010e-002, - -1.4118456e-002, - -6.3811250e-003, - 3.5987445e-002, - -8.0165530e-003, - -2.0932915e-002, - -1.3187860e-002, - -4.3430054e-002, - -3.0586505e-002, - 9.8974586e-002, - 5.5685044e-002, - -1.1098877e-001, - 3.4420705e-002, - 2.6632342e-002, - 2.8768821e-002, - -5.6656185e-002, - -2.4035643e-002, - 4.4599132e-002, - 5.2401286e-002, - -3.1991215e-002, - 3.8827361e-003, - 4.7437513e-002, - 6.7940056e-002, - -2.3003581e-002, - -6.3955657e-002, - 1.0081807e-001, - -4.4211577e-003, - -4.1263060e-002, - -5.8970926e-002, - -2.4349696e-002, - 3.2867209e-002, - -2.4008048e-004, - 6.9810225e-002, - 1.5450610e-002, - 2.3319726e-002, - -1.0005801e-001, - 6.2685066e-003, - 3.3200964e-003, - -6.0496946e-002, - -8.8884008e-003, - 1.6134449e-003, - -7.2506916e-002, - 1.8835241e-003, - -9.1372012e-003, - -3.9166883e-002, - -3.0408037e-002, - 1.3371700e-001, - -8.4833604e-002, - -2.0082991e-002, - -6.7833227e-002, - 2.8939942e-002, - 3.2760884e-002, - -1.1389661e-004, - -4.3484404e-002, - -5.9579661e-002, - 8.5932179e-002, - -1.2312202e-001, - 4.5080645e-002, - 7.8749960e-002, - 8.5343585e-002, - 8.3452328e-003, - 3.8885343e-002, - -5.4756855e-002, - -5.2942923e-002, - -8.5138845e-003, - 6.6560990e-002, - -5.8418572e-002, - 2.3870988e-002, - 1.8931370e-002, - 5.9471104e-002, - -8.6742031e-002, - -4.4123808e-002, - 1.7375058e-002, - -6.3987147e-002, - 6.3031471e-003, - -5.2766788e-002, - 1.6462106e-001, - 3.4654166e-002, - 1.8664640e-002, - 2.0932790e-002, - -4.3515283e-003, - -2.2953377e-002, - -4.1758215e-002, - 5.7430654e-002, - -5.3591655e-002, - -4.6850896e-002, - 4.1910973e-002, - 1.1157103e-004, - -2.2629752e-002, - 6.5200275e-002, - -2.2924410e-003, - -1.0436647e-002, - -5.9483696e-002, - -3.6216756e-003, - -1.3438807e-002, - 1.2187937e-002, - -1.3021007e-002, - 3.3878909e-002, - -2.2899083e-002, - -2.3054076e-002, - 4.7348343e-002, - 2.8499078e-002, - -1.7052032e-003, - -1.3753287e-002, - -2.9609163e-002, - -1.3025597e-002, - -6.1569574e-003, - 8.8234767e-003, - -4.4598847e-002, - -7.8588213e-002, - -1.8194816e-002, - -6.0633228e-002, - 3.4385559e-003, - 5.9361395e-002, - 8.2140593e-002, - 1.4939745e-002, - -3.1639344e-002, - -1.2825312e-002, - -3.5217707e-002, - -1.9635520e-002, - 3.1739325e-002, - -2.7107236e-002, - 4.2299225e-002, - 1.9675302e-002, - -2.6289167e-002, - -3.7438885e-002, - -6.5984833e-002, - 4.2748691e-003, - -3.3482818e-002, - -2.6690228e-002, - -3.6330879e-002, - -4.4149481e-002, - -1.5138292e-002, - 2.8942426e-002, - -1.6976163e-002, - -5.9543856e-002, - 7.4778255e-002, - 2.8451870e-002, - 6.2164171e-002, - -4.0415989e-002, - -4.2244492e-002, - 4.6573272e-002, - -1.8520798e-002, - -6.9907182e-002, - 1.1254468e-002, - 7.4484796e-002, - 2.3774997e-003, - -1.9725799e-002, - -1.1798209e-002, - -4.5521440e-002, - 2.7514728e-002, - -7.2190342e-002, - -2.9948385e-002, - -4.6214661e-003, - -7.9002112e-004, - 5.0066640e-002, - 5.3029490e-004, - -1.8871680e-002, - -1.9149132e-002, - 1.4202910e-002, - 3.0816823e-002, - -9.0922658e-002, - 2.0531126e-002, - -6.7237163e-002, - 3.5264507e-002, - -4.3345885e-002, - 4.3736504e-002, - -5.0592953e-002, - -1.9560698e-002, - 7.4759581e-002, - -1.5500722e-002, - -3.2266454e-002, - -1.4974813e-002, - -3.1814004e-003, - 7.1627759e-002, - -1.0014999e-002, - -4.4711458e-002, - 8.7059742e-002, - -6.6573462e-002, - 6.3231174e-002, - -3.9306487e-002, - -2.8763870e-002, - -3.4594112e-002, - -1.7333119e-002, - 2.7978317e-002, - -4.4558274e-002, - 4.0316504e-002, - -9.8056766e-003, - -1.1169830e-001, - 2.6367365e-003, - -6.3107346e-002, - -4.7852804e-002, - 1.4822515e-002, - -5.5825883e-002, - 8.4652163e-002, - 3.7276497e-002, - 5.8380260e-002, - 1.0308762e-003, - -1.7541914e-002, - -8.1294365e-002, - 2.6500601e-002, - 1.1576202e-002, - -2.8475597e-002, - -3.6427135e-002, - 1.0486963e-002, - 3.5852026e-002, - 1.7207452e-002, - -4.2250927e-002, - 9.2791032e-002, - 2.0848079e-002, - -1.0474350e-002, - -1.8906142e-002, - -3.9285383e-004, - -1.0622005e-001, - 3.0895699e-002, - 7.2310785e-002, - -4.9338252e-002, - -6.6112754e-002, - 1.7508514e-002, - 1.1321926e-003, - -2.4713477e-002, - -4.2692403e-002, - 3.6496772e-002, - -8.7503250e-003, - -2.3071223e-002, - 6.0697872e-002, - -1.6211612e-002, - 2.7467415e-002, - -2.3241079e-002, - 7.6276171e-003, - -6.3827211e-002, - 6.7257864e-002, - 2.2947393e-002, - 1.7785758e-002, - 4.1818868e-003, - 3.5410854e-002, - 1.0202987e-003, - -7.0561943e-003, - -2.0778987e-002, - 3.2302118e-002, - 4.8279751e-003, - -2.3094511e-002, - -5.9461961e-002, - 4.2486021e-002, - -8.3970460e-002, - 3.1847805e-002, - 1.4792567e-002, - 8.3035216e-002, - -1.9097569e-002, - -3.7566345e-002, - -1.9294024e-002, - -2.9735991e-002, - -1.6259656e-002, - 8.7230220e-003, - 1.5761104e-002, - 1.1869692e-002, - 3.3119792e-002, - -1.4862967e-002, - 1.1372784e-002, - -3.2009087e-002, - -2.9738311e-002, - 7.4243184e-002, - 4.4110110e-002, - -2.6555813e-002, - -1.4281194e-002, - -3.1948659e-002, - 2.7573051e-002, - 4.3762921e-003, - -1.5129696e-002, - -1.7735857e-002, - -4.4445686e-003, - -5.8616688e-002, - -2.7569930e-002, - -4.5140779e-002, - -7.2200604e-002, - 1.3667304e-002, - 5.7192972e-002, - -6.3690024e-002, - 5.5174808e-003, - -5.8892530e-002, - -3.6233013e-002, - 8.6180660e-002, - -6.4381045e-002, - 8.1908618e-002, - -8.2615195e-003, - -8.7344886e-002, - -3.6686884e-002, - -4.3487249e-002, - -2.7761943e-002, - -4.3954059e-002, - 1.0761718e-001, - -3.3942906e-002, - -5.6751929e-002, - 5.3761364e-002, - -8.2361460e-002, - -2.0107493e-002, - -1.3391457e-001, - -2.7865675e-002, - -3.7665218e-003, - 2.6626941e-003, - 2.1434427e-002, - 4.9598442e-002, - -9.1795559e-002, - 5.6763841e-002, - -7.2345509e-002, - 4.3385691e-002, - -6.4303252e-002, - -2.6067521e-002, - 3.1430980e-002, - -4.8380081e-002, - -1.7143742e-003, - 3.8524956e-002, - 4.7310190e-002, - -8.4985104e-003, - 2.5096835e-002, - -2.2478417e-003, - 4.8128123e-002, - 3.7762949e-002, - 1.4420063e-003, - -4.4095518e-002, - 4.5456933e-003, - -3.2426183e-003, - -1.2533115e-002, - 4.7767545e-002, - -2.8620801e-002, - 7.8751032e-002, - -1.6406002e-002, - 6.0648681e-002, - -5.7970442e-002, - -1.7637331e-002, - -6.9358645e-002, - -3.7997615e-002, - 3.9156091e-002, - 1.1321921e-001, - 8.4415942e-002, - -1.1387462e-002, - -1.6199663e-002, - -2.9916549e-002, - -2.7917984e-003, - -7.9695543e-002, - 8.2671498e-002, - 1.3319799e-002, - -1.7930240e-002, - -9.1601668e-003, - 4.1019127e-002, - 7.5932944e-002, - 1.0036314e-001, - 3.8966354e-002, - 4.6995786e-003, - -4.5149567e-002, - -4.8486656e-002, - -4.1927255e-002, - 1.1311800e-002, - 3.6819401e-002, - 1.7973596e-002, - 6.7898952e-003, - 1.5963322e-002, - -4.9877456e-002, - -3.7059174e-002, - 1.4450399e-002, - 2.0093318e-002, - 3.4367981e-002, - -5.5058558e-003, - -6.7143431e-002, - -4.8644499e-002, - -6.9472431e-002, - 2.5107776e-002, - -4.6781145e-002, - -2.7352285e-002, - -4.7986822e-002, - -7.1934644e-003, - -2.3173127e-002, - 6.4055565e-002, - -1.9370286e-002, - -4.9411717e-003, - 3.4615802e-002, - -5.2643368e-002, - -3.4227554e-002, - 5.9084487e-002, - -6.7507249e-002, - 1.4470533e-003, - 7.4639509e-002, - -3.9766965e-002, - 3.5756960e-002, - -7.0471549e-003, - -3.9222635e-003, - 7.3001614e-002, - 2.3197043e-002, - -2.5701022e-003, - -6.5877930e-002, - 2.7559657e-003, - 1.9592050e-002, - -9.3462547e-002, - -1.0871925e-002, - -2.9680792e-002, - -1.9738425e-002, - -2.7152604e-002, - 2.3876803e-002, - 4.5884118e-002, - -2.4799389e-002, - -2.0581584e-002, - -5.4267497e-002, - -2.6460954e-003, - 5.1362202e-002, - -6.9012380e-002, - 4.4005296e-002, - 6.3975781e-002, - -2.6047622e-003, - 1.2042036e-002, - 1.6037381e-002, - -5.1284209e-002, - -4.2194785e-002, - -1.6515324e-003, - 2.8902550e-002, - 2.6850380e-002, - -6.0423448e-002, - 5.8605766e-003, - 1.2158635e-002, - 7.2552454e-002, - 3.1314062e-002, - -9.3072204e-002, - 3.1162922e-002, - 1.3286605e-002, - 3.9595454e-002, - 4.0202073e-002, - 6.5767605e-002, - -1.2155519e-002, - 3.3751439e-002, - -3.2171914e-002, - 4.8066982e-002, - -3.9282293e-002, - 8.3241192e-003, - 6.9639890e-002, - 2.7334229e-002, - -1.5479579e-001, - 1.6788538e-002, - -3.1497022e-002, - -4.2282993e-002, - 6.3590085e-002, - 2.5116069e-002, - -8.6396723e-003, - 3.3260424e-002, - -8.4721611e-002, - -3.3390999e-003, - -1.1246017e-001, - 4.1668358e-002, - -5.8633451e-002, - 1.8811584e-002, - -2.6955831e-002, - 3.4502149e-002, - -1.5140931e-002, - -1.1615508e-001, - 1.9473941e-002, - -2.4164678e-002, - -4.7663500e-002, - 2.5149605e-002, - -4.2667606e-002, - -3.0691488e-002, - -6.2397484e-002, - -2.2317443e-002, - 7.1583564e-002, - -1.7501358e-002, - -7.4035381e-003, - 3.6729476e-002, - -1.1245837e-002, - 2.6520782e-002, - -8.1593552e-002, - -6.9408470e-002, - 1.4619786e-003, - 3.8453478e-003, - -6.3397206e-003, - -6.0058523e-002, - -4.8251718e-003, - 3.8074781e-002, - -7.8163411e-002, - 2.1385600e-002, - -2.1922130e-002, - -4.0160455e-002, - -6.8293755e-002, - 9.0554557e-004, - 2.6664980e-002, - 7.1501149e-004, - 2.0586511e-002, - 3.8317298e-002, - 1.2622402e-002, - 3.0425320e-002, - -5.9992562e-003, - -3.2448647e-002, - -8.4599232e-002, - 2.0966498e-002, - 3.0616978e-002, - -4.1909029e-003, - 4.3755380e-002, - 3.5853709e-002, - 8.2636139e-002, - 5.2616538e-002, - -4.4023308e-002, - -4.5906585e-002, - 2.5247372e-002, - 1.5587727e-002, - -2.8171046e-002, - -3.2571994e-003, - 3.1224580e-002, - 2.3534457e-002, - 2.4495916e-002, - 2.3711856e-002, - 4.4990479e-002, - 2.4656755e-002, - 1.2819956e-002, - 5.7528241e-002, - -6.3140487e-003, - -9.8533686e-002, - -5.9046861e-002, - 4.5919961e-002, - 4.9303678e-002, - -5.1366348e-002, - 2.4237326e-002, - -3.5253937e-002, - 7.6315728e-002, - -6.2809404e-002, - -1.1060411e-002, - 1.2072602e-002, - 8.1692168e-002, - 8.2459510e-002, - 1.2056340e-003, - -1.0799649e-001, - -7.2058599e-002, - 5.1223849e-002, - 1.1635586e-001, - 6.3237829e-002, - 4.1510274e-002, - -2.9788578e-002, - 4.8771019e-002, - -5.6674600e-002, - 1.9869930e-002, - -1.2678819e-002, - -2.7919754e-002, - 2.8331693e-002, - 3.1691790e-002, - 1.1562239e-002, - -2.8202192e-002, - 2.1270404e-002, - -4.2846202e-002, - -3.2805821e-002, - 1.5184402e-002, - 5.4017276e-002, - -7.4480916e-003, - 3.9322390e-002, - 8.8590506e-002, - 1.8869046e-002, - -4.8504749e-002, - 1.9943452e-002, - -4.0731200e-002, - -1.2975217e-003, - -1.6745164e-003, - 4.7281664e-002, - -2.7791569e-002, - 8.0857121e-003, - -4.8178120e-002, - -5.8281241e-002, - -3.2593209e-002, - -2.1746188e-002, - -1.0017483e-002, - 2.9529554e-002, - -1.4875157e-002, - -4.5985303e-002, - 4.9477795e-002, - -2.8808805e-002, - -1.3613209e-002, - -3.2427996e-002, - -7.3709623e-002, - 2.9008787e-003, - -2.4949574e-002, - 2.9417830e-002, - -5.0911040e-002, - 7.2199223e-002, - -3.8502572e-003, - -9.9986041e-002, - -1.0110846e-001, - 2.7240523e-002, - 3.7231607e-004, - -4.8403626e-002, - -4.2828865e-002, - -4.0941132e-002, - 2.1262003e-002, - 2.8579653e-002, - -3.8107106e-002, - -2.5403299e-002, - 4.0409634e-002, - -1.3506783e-001, - 6.7020935e-002, - 7.6919909e-002, - -6.2598829e-002, - -4.4526445e-002, - 1.2270630e-001, - 2.3974241e-002, - -3.6434038e-003, - 4.6607563e-002, - 8.1524293e-002, - -3.0664049e-002, - 4.4022028e-002, - 8.6563738e-002, - 6.5752991e-002, - -6.7108146e-002, - -1.0342413e-001, - -1.8539076e-002, - -3.0153611e-002, - 6.7396260e-003, - -4.4950103e-002, - -1.2515800e-003, - 3.0646680e-002, - 5.5510478e-002, - -5.2142526e-002, - -6.6687624e-002, - 1.5134636e-002, - 1.3498064e-002, - -5.4450472e-002, - -8.9529836e-003, - 3.0094154e-002, - 3.2202481e-002, - 1.3948693e-002, - -6.7197034e-002, - -8.5015250e-002, - 6.3266660e-002, - 4.2798636e-002, - -2.0333357e-002, - -4.0383900e-002, - -1.3841616e-002, - 6.3539401e-002, - -1.4953539e-002, - 7.3749647e-003, - 4.6124894e-002, - -3.3099545e-002, - 1.6994609e-003, - 3.1756119e-002, - 1.1361146e-001, - 2.3601853e-002, - -6.1163866e-003, - 1.4640892e-002, - -1.3002994e-001, - -5.9991837e-002, - -2.2185968e-002, - -3.5202454e-003, - -3.2725772e-002, - -1.6788319e-002, - -6.9143762e-002, - -3.0097649e-002, - 1.2429939e-001, - 3.2580395e-002, - -5.0115073e-002, - 5.0306592e-003, - -4.4954061e-002, - 3.6014498e-002, - -1.3451790e-002, - 1.6399117e-002, - 1.3923416e-001, - -4.9725951e-003, - 6.2052260e-003, - -1.1645022e-001, - -3.5608026e-003, - 6.4542089e-002, - 2.5646928e-002, - -3.9385217e-002, - 3.4619781e-002, - -5.5728973e-002, - -4.1560782e-002, - 1.8601185e-003, - -7.7632154e-002, - -1.1198136e-001, - 1.7871366e-003, - 3.2749909e-002, - 6.3402834e-002, - -5.4553077e-002, - -5.3258342e-002, - 3.3343720e-002, - 5.6556702e-002, - -2.8265688e-002, - -2.3372050e-002, - -7.1953496e-002, - 4.9907070e-002, - -2.6195346e-002, - -3.1269328e-002, - -2.2738778e-002, - -3.6952069e-003, - 2.3055605e-002, - 3.7713246e-002, - -3.3123125e-002, - 6.3977198e-002, - 1.2888268e-002, - -6.4863602e-002, - -4.6370451e-002, - -1.2762725e-002, - -1.1385579e-002, - 5.3278522e-002, - 4.0903155e-003, - 2.4856544e-003, - 2.6887809e-002, - -3.6020834e-002, - 1.7437443e-002, - 2.0139602e-002, - 2.9239905e-002, - 3.8038669e-002, - -9.6656754e-002, - 1.5283078e-002, - -9.4684237e-002, - 3.5509017e-002, - -2.3867173e-002, - 4.9278727e-003, - -3.9793551e-002, - -1.1285602e-002, - -1.1809578e-002, - 2.7623350e-002, - 2.1829332e-003, - 2.9116516e-002, - -2.3743110e-002, - -3.6766547e-002, - 2.0571789e-002, - 5.6084571e-002, - 1.3024358e-001, - -7.5886589e-002, - 2.7947551e-002, - 2.3155403e-002, - -3.1278004e-002, - -1.4436652e-002, - -2.4776289e-002, - -6.8540264e-003, - -1.0098350e-002, - -8.8675200e-002, - 1.5859746e-001, - -9.1002037e-002, - 1.2604720e-002, - -1.0483836e-002, - -2.8280415e-002, - 7.1881441e-002, - -5.6741201e-002, - 6.6804943e-002, - 6.1990105e-002, - 8.1565279e-002, - 2.2720394e-002, - -1.2405569e-002, - 7.1876233e-002, - -1.0267524e-001, - -3.0958839e-002, - 7.9476530e-002, - 2.1440879e-002, - -3.6594375e-002, - 1.2693478e-002, - -3.5996147e-002, - -4.4807775e-002, - 3.0175162e-002, - 6.0207188e-002, - -4.4551692e-003, - 5.2444239e-002, - -6.7182348e-002, - 3.4282089e-002, - 1.2050117e-002, - 6.7343302e-003, - -3.4597852e-002, - 6.2799536e-002, - 9.0535361e-002, - 4.6750855e-002, - 4.5616156e-002, - -4.7775494e-002, - 3.3437120e-002, - 6.3247569e-002, - -2.5086044e-002, - 6.0392800e-002, - -1.0344192e-001, - 1.0532757e-002, - 8.0919299e-003, - -2.0549100e-002, - 7.9851230e-002, - 5.9509621e-002, - -1.0304151e-002, - -3.6671778e-003, - 1.0290329e-002, - -3.6286054e-002, - -1.1732592e-002, - -8.4237566e-002, - 3.3390752e-002, - -5.1523669e-002, - -7.7703392e-002, - 7.2951732e-002, - 5.5907824e-002, - 5.5894272e-003, - 5.4254663e-002, - 5.1024916e-002, - -5.6879548e-002, - -6.2027367e-002, - -5.6508306e-002, - -4.3199186e-002, - -7.0858160e-002, - -2.7514315e-002, - -1.0304944e-002, - 9.7007038e-004, - -6.7224049e-003, - 9.2200691e-003, - 3.8879401e-003, - -6.5395433e-002, - 6.6739257e-002, - 6.1434975e-002, - -7.8933867e-002, - -8.4834779e-002, - -2.7405250e-002, - -2.6177970e-002, - -3.3974921e-002, - -3.5379505e-003, - 5.0807223e-002, - -6.0485730e-002, - -7.1839018e-003, - 2.6693750e-002, - 5.3186567e-002, - 1.4183779e-002, - -2.2116051e-002, - -1.3741848e-002, - 6.1342417e-002, - -3.7993387e-003, - 3.7238204e-002, - -1.0739599e-001, - -1.4549117e-002, - 4.0386015e-002, - 1.2569153e-002, - 3.5445067e-002, - -3.8437920e-002, - -1.4546469e-002, - 2.3252293e-002, - 5.8740276e-002, - -4.5320281e-002, - 4.8086444e-002, - -4.6158419e-003, - -5.5124482e-002, - -3.3884263e-002, - -1.6266463e-002, - -1.6153097e-002, - -7.1902422e-004, - 4.7423985e-002, - 4.5522942e-002, - 5.8189486e-002, - -1.6178881e-002, - -8.5068904e-003, - -2.1481593e-002, - 5.9052882e-002, - 7.6940824e-002, - -4.1182363e-002, - 9.3889318e-002, - 3.2541071e-002, - -5.0966470e-002, - 1.1989934e-002, - 1.3485465e-002, - 1.1716420e-002, - -3.3544036e-002, - 1.0756654e-001, - 2.3665782e-002, - 5.1632941e-002, - 3.3393177e-002, - 2.6965276e-002, - -9.3765636e-003, - -4.0374893e-002, - -7.6274872e-002, - 1.8358287e-002, - -5.4971891e-002, - -6.1388507e-002, - 4.0747836e-002, - -3.0364737e-002, - -3.8176810e-002, - 2.1957238e-003, - 1.5046955e-002, - -4.6671984e-003, - -3.7148168e-002, - -3.7455685e-002, - 3.7180183e-003, - -8.5869921e-003, - 3.5823221e-002, - 2.0854178e-002, - -5.6165218e-002, - -9.2879840e-002, - 1.4952542e-002, - -1.6637472e-002, - 2.7553373e-002, - 1.1493587e-001, - -3.5352769e-002, - -6.9065396e-002, - 7.7929176e-002, - -5.9205594e-002, - -1.8989624e-002, - 1.1827864e-002, - -3.8579019e-002, - 1.6537438e-002, - -4.5152596e-002, - -8.0801346e-002, - -3.4708707e-002, - -2.0902185e-002, - 3.5484478e-002, - -7.2048970e-002, - 3.9760809e-002, - -2.1048159e-002, - 2.9412146e-003, - -1.2228266e-002, - -1.0549788e-002, - -1.3705371e-002, - -4.2308328e-002, - -8.5322508e-002, - 5.6722120e-004, - 3.8264621e-002, - 4.3257303e-002, - 2.8754160e-002, - 3.3445727e-003, - 2.9282907e-002, - 4.8556817e-002, - -3.3795246e-002, - 4.0977665e-002, - 3.6274969e-002, - 3.3552753e-002, - 2.9872002e-002, - 6.3307072e-002, - 1.4992383e-002, - -5.8203262e-002, - -3.0168145e-002, - -3.2352139e-002, - 7.6165643e-002, - 7.1774864e-002, - -1.7731640e-002, - 3.7646033e-002, - 5.8535492e-003, - 8.3961663e-002, - -7.6352210e-003, - -3.6557713e-003, - -6.1713535e-002, - -4.8057903e-002, - -4.6264109e-002, - -3.4792201e-002, - -2.7416585e-002, - -1.3744116e-003, - -1.9306191e-002, - -5.0539515e-002, - 2.7677455e-002, - -2.2617917e-002, - -8.4784776e-002, - 7.3259229e-002, - 5.9548509e-002, - -7.2282648e-002, - -5.0784237e-002, - 9.1028580e-002, - 1.6823871e-001, - 4.3922313e-002, - 2.0660018e-002, - 1.2905801e-003, - -5.9644574e-003, - -6.6967719e-003, - 2.1111482e-002, - 4.5767224e-002, - 1.9131948e-002, - 2.6813139e-002, - -4.6825266e-002, - 1.1768354e-002, - -3.0426377e-002, - -7.0347178e-003, - -7.6017599e-002, - 2.1078534e-002, - -9.1780175e-002, - 2.7352079e-002, - 2.7780454e-002, - 8.3826886e-003, - -1.5967673e-002, - -1.0580313e-002, - 3.8124734e-002, - 3.6951219e-002, - -2.5011240e-002, - 2.9019645e-002, - 3.3574092e-002, - 1.2199007e-002, - -6.3328122e-002, - -1.0293542e-001, - 6.2316941e-002, - -1.1529230e-003, - 1.0592972e-001, - -2.3803313e-002, - -4.2884377e-002, - -2.3136181e-002, - 9.6100002e-003, - -3.8942235e-002, - 1.0613309e-001, - 1.1584978e-002, - -2.8945108e-002, - 1.1978745e-001, - 3.3535039e-002, - -3.3192905e-002, - 6.4322894e-002, - 4.3326082e-002, - 2.2661431e-002, - 2.1067896e-002, - -1.6775258e-002, - -1.1513173e-001, - 1.6050052e-002, - 3.6844183e-002, - 2.9072793e-002, - -6.7255761e-002, - 5.7102385e-002, - 7.0546617e-002, - -2.0826937e-002, - -5.7583856e-002, - 3.0146035e-002, - -1.9649341e-002, - 5.1108010e-002, - -1.2049234e-001, - 9.1604975e-003, - -4.4366320e-002, - 1.0940581e-002, - -7.4110213e-002, - 1.0027252e-001, - 8.3559986e-002, - -5.0547965e-002, - 3.0123395e-002, - 7.0196532e-002, - -8.3469946e-002, - 3.3882963e-002, - 6.1607561e-002, - 4.4793665e-002, - -9.6577712e-002, - -5.0411980e-003, - -1.5066601e-002, - 2.4904787e-002, - 1.1340361e-002, - 2.9052246e-002, - 2.6840614e-002, - -1.9931112e-002, - 5.2525978e-002, - -4.9751069e-002, - -7.9276887e-002, - 2.8081748e-002, - -4.1223168e-002, - 1.3105117e-002, - -2.6569475e-003, - -3.2102570e-002, - -2.6357544e-002, - 2.2152608e-002, - -3.1539891e-003, - -3.4785718e-002, - -1.0592171e-002, - -4.0300905e-002, - -1.5702723e-002, - -1.8712957e-002, - 3.3197549e-002, - -3.6279117e-002, - 4.2838238e-002, - -1.6489429e-002, - 2.4648914e-002, - 5.1252616e-003, - -8.1225473e-002, - -5.6459253e-002, - -5.2348110e-002, - -7.0335906e-002, - -3.3338823e-005, - -3.2311169e-002, - 7.4676135e-002, - -3.7143822e-002, - -6.8303532e-002, - -7.0033274e-004, - -3.7552999e-002, - -6.6305361e-002, - 1.2196684e-001, - 2.2084222e-002, - 4.1475857e-002, - -1.0862949e-003, - -4.0143874e-002, - -3.7947485e-002, - 2.3605616e-002, - 2.3128901e-002, - 1.6999557e-001, - 8.7507268e-003, - -1.6086519e-002, - 1.6438629e-002, - 5.3086378e-002, - 4.2778341e-002, - -5.1411551e-002, - -9.1155004e-003, - 7.1703894e-002, - -6.2919585e-002, - -4.1252239e-003, - -2.7800338e-002, - 1.3406385e-002, - -1.9639614e-002, - 2.0766865e-002, - -8.0707557e-002, - -7.9126401e-003, - 1.2061087e-002, - 7.8233420e-002, - 2.5787108e-003, - 9.6325419e-002, - 4.2169871e-002, - 4.5779560e-002, - 1.1692399e-002, - 3.6624616e-002, - -2.1368960e-002, - 8.6087403e-002, - -3.9290515e-002, - -9.1694613e-003, - 3.1814092e-002, - 2.4160765e-002, - -1.1817798e-003, - 1.1293805e-001, - 3.5901275e-002, - 2.3964131e-002, - 1.4594516e-002, - 8.3442765e-002, - 2.7873584e-003, - 9.2888387e-002, - 5.6597406e-002, - 3.3678386e-002, - 1.1285883e-002, - -1.3345965e-002, - -3.7971276e-002, - 3.8853868e-002, - 4.0434589e-002, - -3.5457626e-002, - 3.4183998e-002, - 9.8248684e-002, - -7.6115939e-002, - -1.1769491e-002, - -3.8386164e-002, - -1.8975843e-002, - -9.3988535e-002, - -5.5576121e-003, - -1.8636003e-002, - 2.8386234e-002, - -2.4200578e-002, - 4.1252766e-002, - -6.8000375e-002, - -3.7388633e-002, - -3.0010634e-002, - -2.0049886e-002, - 2.5499201e-002, - -3.7598273e-002, - -4.4794045e-002, - 4.9668753e-002, - 2.8526404e-002, - -7.6218361e-003, - -1.0150563e-001, - -3.1635380e-002, - 6.0899411e-002, - -4.0702573e-003, - 3.6908492e-002, - 6.0695811e-002, - -8.5097943e-002, - 5.3730269e-002, - 3.7528389e-003, - 9.3525516e-002, - -1.4898976e-002, - 2.7723761e-002, - -1.3087617e-002, - -8.5905788e-003, - -4.0551186e-003, - 5.2805805e-003, - 6.8736269e-002, - 1.5477601e-003, - 4.0766710e-003, - 2.4948069e-002, - -2.3695927e-002, - 2.0778232e-002, - 7.7785189e-002, - -6.5214959e-002, - -1.6680307e-002, - -5.1966107e-002, - 7.5663630e-003, - -1.3256079e-002, - 2.9625848e-002, - -3.9745297e-002, - 2.5236371e-002, - -3.2270585e-002, - 6.2655107e-002, - 3.3731838e-002, - 2.2075588e-003, - -2.9591354e-002, - 3.1341479e-002, - -7.6083655e-002, - 6.1296972e-002, - -5.6695620e-002, - 2.2323220e-002, - 2.3643317e-003, - 2.5031378e-002, - 5.5413805e-002, - 6.0973843e-002, - -7.3883029e-002, - 1.3029020e-002, - 6.5448736e-002, - -2.3732566e-002, - -1.6089444e-002, - -2.1074484e-002, - 5.7948843e-002, - 8.6615559e-002, - -9.1319744e-002, - -1.0161538e-002, - 1.9629470e-002, - 1.9360651e-002, - -2.8093541e-002, - -4.2935479e-002, - 1.0709420e-002, - 7.8669934e-002, - 2.3835887e-002, - 1.8165279e-002, - -5.4214119e-003, - -7.9902014e-003, - 4.5058379e-002, - -3.2063499e-002, - -5.8672800e-002, - 1.2173177e-002, - 5.9993154e-002, - 2.3138893e-002, - 8.0998931e-003, - -4.4800380e-002, - -2.4859361e-002, - -1.5868492e-002, - -5.2323712e-002, - -4.5973299e-002, - -2.3052455e-003, - 8.1582903e-003, - 6.8065483e-002, - 7.6438296e-004, - 4.0392238e-002, - -6.5966937e-002, - -5.0614520e-002, - -5.5301523e-002, - -4.2561773e-003, - 5.9937931e-002, - -2.1382190e-002, - -2.0676084e-002, - -3.5839724e-002, - -1.2403270e-002, - -1.8285642e-002, - -4.5681905e-002, - 2.5535673e-002, - 1.4234783e-002, - -1.9259208e-002, - -2.5661378e-002, - 3.0184961e-002, - -5.6818389e-002, - 3.2310662e-002, - -2.4301821e-003, - -1.2328487e-002, - -5.4786335e-002, - -4.8916330e-002, - 4.8190116e-002, - -6.0850449e-002, - 7.7620003e-002, - -6.6473044e-002, - 5.1361693e-002, - -4.4367608e-002, - 5.9245756e-002, - 5.3474787e-003, - 3.8059821e-003, - -6.1171918e-002, - -2.9543201e-002, - -8.3560612e-003, - -4.1202373e-002, - -5.3271164e-002, - 7.6473415e-002, - 1.3747330e-002, - -4.2692942e-002, - -4.7688735e-002, - 9.0017757e-002, - -5.5124068e-002, - -4.9430822e-002, - 1.9839950e-002, - 6.1066303e-002, - -1.3518935e-001, - 4.5758030e-002, - 2.8061894e-002, - 2.2738266e-002, - -9.3128822e-003, - 7.9618280e-002, - -1.2187199e-001, - 4.5605462e-002, - -3.0479221e-002, - 3.8694000e-002, - -1.8124762e-002, - 3.7759175e-002, - 1.8158014e-003, - -2.7070632e-002, - -2.3634825e-002, - 5.2676876e-002, - -5.2016000e-003, - -5.4593248e-002, - -1.6338775e-002, - -8.0919891e-002, - 8.7671746e-003, - 5.8316283e-002, - -6.9144058e-002, - -4.6936119e-002, - 1.6594244e-002, - -7.6784768e-002, - -6.3547981e-003, - 4.8236469e-002, - 1.6578926e-002, - -2.8223303e-002, - -8.7243754e-002, - 5.5790867e-002, - 4.5976330e-003, - -4.0593161e-003, - -7.1609202e-002, - 3.6451850e-002, - -3.6051938e-002, - 1.0343606e-004, - 4.0493147e-002, - 2.1330427e-002, - -3.3170735e-002, - -4.4584020e-003, - 3.1555313e-002, - -1.1414545e-001, - 5.6867307e-002, - 4.0626699e-002, - -5.8860350e-002, - -1.0003188e-001, - -4.8326893e-002, - -1.2614691e-002, - -2.1586874e-002, - -3.1935606e-002, - 2.4103451e-002, - 1.4488790e-002, - -8.0859096e-004, - -3.8980020e-003, - 7.4909148e-002, - -2.8049185e-002, - -2.0918789e-002, - -2.4711940e-002, - 5.3455068e-002, - -9.7517045e-003, - -2.4433675e-002, - 3.7640959e-002, - 2.4437924e-002, - 4.6113770e-003, - -2.1101125e-002, - -2.2852117e-002, - -7.2572348e-002, - 3.6761328e-002, - 2.6652183e-002, - -4.3100149e-002, - -5.4098286e-002, - 8.2220041e-002, - 5.5613895e-002, - 5.4603855e-002, - -1.3589191e-001, - 2.3347518e-002, - 4.6453611e-002, - 2.2623921e-003, - 6.0644536e-002, - -7.5601564e-002, - -8.9194042e-002, - -3.4410351e-002, - -3.4360013e-003, - 5.1666691e-002, - 1.2464056e-002, - -2.3030505e-003, - -3.9004649e-002, - 1.1817405e-002, - -3.4117635e-002, - -2.8693035e-002, - -1.5931261e-002, - 8.0677220e-004, - 1.8397691e-002, - -3.1052320e-002, - 4.9726240e-002, - -2.0747799e-002, - -6.0637710e-003, - -7.9396747e-002, - 4.8372461e-002, - -7.1979765e-002, - 2.6832942e-002, - 2.9273777e-002, - -4.8337996e-003, - 4.0391770e-003, - -9.4918066e-002, - 6.2066596e-002, - 4.9875577e-002, - -3.3753903e-002, - -2.4500392e-002, - 9.0658929e-002, - -9.8343476e-002, - -6.2504733e-003, - 1.1991216e-001, - 2.8944337e-002, - 2.6898626e-003, - -6.4267875e-002, - 2.9019187e-002, - 1.9971213e-002, - 8.0684873e-003, - 1.3081097e-002, - -3.1283754e-002, - -2.8489269e-002, - -1.1686268e-001, - -1.3745347e-002, - 5.3686243e-002, - -5.2197217e-002, - -3.3465705e-002, - -3.5083431e-002, - 1.6015164e-002, - 2.4493466e-002, - -2.3306198e-002, - -1.9672026e-002, - -7.6748565e-002, - -7.1159132e-002, - -3.6831968e-002, - -1.1592501e-001, - -1.1802673e-001, - 2.8843104e-002, - -5.9118430e-002, - -1.1106526e-002, - -4.0643480e-002, - -3.3903934e-002, - 6.9026642e-002, - -3.3357058e-002, - 3.1574083e-002, - 4.0538895e-002, - 4.3133551e-002, - 3.7814770e-002, - 6.4315631e-002, - -5.5887205e-002, - -6.1198396e-002, - 7.2376501e-002, - -4.4847288e-002, - 4.4972439e-002, - 8.9532496e-002, - 2.7491210e-002, - 3.5765916e-002, - -5.8314299e-002, - -1.5996091e-002, - -4.3521287e-002, - -2.8304205e-002, - -4.3486571e-002, - 1.0849438e-001, - 2.2361367e-002, - -6.1362009e-003, - 5.3111507e-002, - -8.8565282e-002, - 8.4842988e-002, - 1.0627885e-002, - 4.4828472e-003, - 7.7250566e-003, - -3.5888413e-002, - 4.5405946e-002, - 9.5357093e-003, - 3.8049221e-002, - 1.1798868e-002, - 8.5901681e-002, - 7.2651393e-002, - -1.0648259e-002, - -3.5412792e-002, - -5.2852119e-003, - -2.8006256e-002, - -5.8455622e-003, - 9.2263862e-003, - 1.4651709e-002, - -1.1429416e-001, - 8.0368439e-002, - 2.6278264e-002, - 2.0947848e-002, - 5.9186459e-002, - 3.0967487e-002, - -1.1507298e-001, - -3.4239562e-004, - -2.0939429e-002, - 6.9101989e-002, - 1.9188787e-002, - -1.7007634e-002, - -1.4226805e-002, - 2.0497813e-003, - 4.8643630e-003, - -5.0243128e-002, - 2.6571757e-002, - -2.5756622e-002, - -6.2136271e-002, - 3.0876774e-002, - -3.2966648e-002, - -4.6798326e-002, - -7.2864522e-002, - -7.0620327e-002, - 3.1514440e-002, - 4.7419175e-002, - -2.9639040e-002, - -7.4872381e-002, - 1.0268214e-001, - -6.4408455e-002, - -5.1714244e-002, - -1.4811842e-002, - -2.6652795e-002, - -3.3398841e-002, - -9.1093311e-002, - -2.9613673e-002, - -3.2849316e-002, - -2.1792627e-002, - -4.8905018e-002, - 3.8278002e-002, - -1.0578267e-001, - 3.9883500e-002, - -4.0322452e-002, - -7.7085856e-002, - -1.1560340e-002, - -9.6078464e-003, - -5.2790120e-003, - -1.7445510e-002, - 4.1210396e-002, - -3.1966850e-002, - -4.2623715e-002, - -3.8224686e-002, - -2.3460384e-002, - -1.8322700e-002, - 1.5049174e-001, - -3.1993543e-002, - 4.3014183e-002, - -4.4366020e-002, - -1.9251396e-002, - -1.2898947e-002, - -6.0899923e-002, - -5.9898591e-002, - -5.6557253e-002, - 4.6067919e-002, - 2.0882012e-002, - -7.1937529e-002, - -9.5914837e-002, - -1.2626698e-001, - -3.6792717e-002, - 2.8022409e-002, - -3.4921767e-002, - -2.2305614e-002, - -3.2328726e-002, - -4.8809030e-002, - -2.6925977e-002, - -4.2114647e-002, - 8.7023862e-002, - -3.7654336e-003, - 6.9322688e-002, - 9.2912513e-003, - 5.7435044e-002, - 1.9609569e-002, - -1.1570562e-002, - 6.1049764e-002, - -6.4977165e-002, - -5.0641683e-002, - -4.9830239e-002, - 2.9619165e-002, - -4.3292073e-002, - -6.2860680e-002, - 6.3449012e-002, - 6.3302743e-002, - -3.7096028e-002, - -4.6860354e-002, - 1.6643809e-002, - -2.8812456e-002, - -1.2949017e-004, - -5.0303595e-003, - -5.1531111e-002, - 1.0185519e-001, - -8.8467370e-003, - -6.4260237e-002, - 2.2972796e-002, - -8.7208177e-003, - 2.1703090e-002, - -3.2583688e-002, - 1.9180369e-002, - -4.6604492e-002, - 5.9620323e-002, - -2.3169309e-002, - 1.7923404e-002, - 7.0399591e-002, - -6.3632676e-003, - -6.2662420e-002, - -5.0818406e-003, - 7.6310034e-002, - 3.8440333e-002, - 2.3108218e-002, - 1.0992061e-001, - -6.6023131e-002, - 1.0339039e-002, - -1.2454926e-002, - 3.0748449e-002, - 3.8733454e-002, - -8.1029526e-002, - -6.3890932e-003, - -1.7310614e-003, - -6.5448180e-002, - -1.3567927e-002, - -1.4651225e-002, - -1.6402517e-003, - -4.0889024e-002, - 3.3267739e-002, - -8.7669631e-002, - -1.1762527e-001, - -3.0337637e-003, - -1.0579264e-001, - 3.8458061e-002, - 6.1506618e-002, - -1.2438319e-002, - -2.0981512e-002, - 8.6707387e-003, - 4.1305048e-002, - 5.8010222e-002, - 3.4177414e-002, - 6.1614068e-002, - 3.7742022e-002, - 2.2274616e-003, - -3.3374053e-002, - -1.3841013e-002, - -1.5519456e-002, - -1.1770865e-001, - -4.0589703e-002, - 1.1432496e-001, - -2.8665001e-002, - -9.7087434e-002, - 2.8739815e-002, - 9.2917531e-002, - 1.1938896e-001, - -2.9010572e-002, - -3.4721428e-002, - -3.4855927e-002, - -1.2121671e-002, - -1.0158399e-001, - 9.7895131e-002, - -7.8712576e-002, - -7.9976995e-002, - 7.6185673e-002, - -2.8833935e-002, - 1.8354206e-002, - -1.7587259e-001, - -7.8647771e-002, - 2.2256759e-002, - -2.1611016e-002, - 2.4071583e-002, - 4.5227886e-004, - -7.2657111e-002, - -7.2168746e-002, - -1.1452740e-002, - 1.6181869e-002, - 4.5831060e-002, - -2.3369801e-003, - -2.8727581e-002, - 7.5005238e-003, - -8.9739571e-003, - -4.1100109e-002, - -1.6087343e-002, - 7.4606898e-003, - 2.9933544e-002, - -1.2690286e-001, - -3.9049832e-002, - 2.7720568e-002, - 1.7947841e-002, - 3.4410773e-002, - 5.5729818e-003, - -1.8016513e-002, - -4.8830323e-002, - 3.2716530e-002, - -3.4232512e-002, - -1.6426973e-002, - 5.0795800e-002, - -3.1791729e-002, - 3.7707010e-002, - 4.5092581e-002, - -4.8603247e-002, - 2.9459071e-002, - -4.6422186e-002, - 3.9296295e-003, - -2.8900220e-002, - 1.1207343e-002, - -3.5131485e-002, - 3.0510860e-002, - 1.0155622e-001, - 6.2187792e-003, - 6.7503241e-002, - 4.7232070e-002, - -2.1226837e-002, - -8.4154353e-003, - 2.0913858e-002, - 7.0127327e-003, - -1.2448522e-002, - 1.6449412e-002, - 4.5151926e-002, - 4.6836548e-002, - -2.0687186e-002, - -7.3644538e-002, - -1.0260562e-001, - 4.1594354e-004, - 2.2962943e-002, - -3.6753478e-002, - -3.6656754e-002, - -3.9912894e-002, - 1.1998781e-002, - 1.2228691e-002, - 6.9910277e-002, - 2.4035919e-002, - 7.1080248e-003, - 3.6471267e-002, - -1.5899153e-003, - -6.2981316e-002, - -4.8019402e-003, - 9.9610031e-002, - 3.4685502e-002, - -1.4906597e-001, - 6.2799402e-002, - -3.8932025e-003, - 3.5313345e-002, - 6.4080127e-003, - 7.7712074e-002, - 1.9652177e-002, - 3.3529556e-002, - 6.7998095e-002, - 4.0481914e-002, - -4.5148562e-002, - 1.2390995e-001, - 6.0472177e-002, - -4.0537793e-002, - -2.9016904e-002, - 1.0069785e-002, - -4.3630516e-002, - 1.6317010e-002, - -8.1563635e-003, - -2.9428878e-002, - -1.0007097e-002, - 1.1748494e-003, - -3.7584384e-003, - -1.0136314e-002, - 6.9501199e-002, - -6.2079897e-002, - 5.6550846e-002, - -3.1224895e-004, - 1.5172074e-002, - 3.5494228e-002, - -2.8525286e-002, - 7.0934847e-002, - -2.1855207e-002, - -9.0589689e-002, - -5.0420263e-002, - -6.4220854e-002, - 8.0572534e-002, - 4.4657936e-002, - 3.8900053e-002, - 2.3038306e-002, - -2.9059798e-002, - 4.1790833e-002, - -1.4498459e-003, - -1.4247977e-002, - -7.2557019e-003, - 7.0209000e-002, - 7.1292433e-002, - -1.0914340e-002, - 1.0671194e-001, - -3.9136244e-002, - -1.3175217e-002, - 1.3764681e-002, - 1.1563616e-001, - -6.3896840e-003, - -6.2527708e-002, - 8.8512912e-002, - -2.9045669e-002, - 1.5227173e-002, - -5.0667751e-002, - 1.2560643e-001, - 7.4986299e-002, - 3.3825251e-002, - 1.5514266e-003, - -5.2532720e-002, - 1.7029297e-002, - -3.2944301e-002, - -6.1748947e-002, - 2.6402422e-002, - -2.6902014e-002, - -1.1054785e-001, - 4.5217579e-002, - 7.2634916e-002, - 4.7126396e-003, - 5.3388646e-002, - 1.4724645e-002, - 4.8733852e-002, - -2.4509080e-002, - -9.1580431e-002, - 5.2106999e-003, - -1.5643665e-001, - -4.8892928e-003, - -5.3026671e-002, - -4.4146053e-004, - 3.2444612e-002, - -2.3101994e-003, - 9.4890488e-002, - -7.8052719e-002, - 6.0338172e-003, - -4.0433742e-002, - -3.9104783e-002, - 4.0994343e-002, - 7.7513705e-002, - -1.8133412e-002, - -1.8801315e-002, - 9.9180571e-002, - 5.9051814e-002, - 3.2637953e-002, - 4.5773237e-002, - 9.2868125e-003, - -4.4946634e-002, - -5.0590403e-002, - -3.3365865e-002, - 3.5527025e-002, - 7.4204867e-003, - 1.5004459e-002, - -3.4647091e-003, - 5.5465088e-002, - 1.1416662e-001, - -2.6462288e-002, - 6.8671916e-002, - -6.3002510e-003, - 1.1583924e-002, - 3.1050102e-003, - -1.0105237e-001, - -1.0657225e-002, - -9.8132990e-002, - -2.8254118e-002, - 5.8377956e-002, - -2.3015648e-002, - -1.7437864e-002, - -2.2634945e-002, - -4.8192213e-002, - -4.7584233e-002, - 1.9414654e-002, - -2.7057831e-002, - 1.7158611e-002, - 1.3317117e-001, - -5.5081291e-002, - -5.0017430e-002, - 7.6813579e-002, - 9.4583304e-002, - -6.9067814e-002, - 1.9120563e-002, - 2.1258087e-002, - 7.2055539e-002, - -4.4266255e-002, - -3.2205709e-002, - -2.8779031e-002, - -2.3481940e-002, - 1.7708910e-002, - -1.9311139e-002, - 5.3418240e-002, - 2.4606925e-002, - 5.0846628e-003, - -2.0453302e-002, - 3.5461384e-002, - 1.3245649e-002, - -1.4856256e-002, - -4.1995487e-002, - -6.8461842e-003, - 4.3425178e-002, - -4.2381240e-002, - -1.2470922e-001, - -6.6566711e-002, - -1.5328279e-003, - 2.1121820e-002, - -8.9850510e-002, - 2.0682240e-004, - -5.8686388e-002, - 7.1519107e-002, - 2.7049268e-002, - 4.3271736e-003, - -1.8990188e-002, - 4.1744154e-003, - -6.7617528e-002, - -1.5982309e-002, - -8.6739389e-003, - 6.8767245e-003, - -7.0052976e-003, - 8.3718019e-002, - 5.8127315e-002, - -9.4223672e-002, - -1.3478363e-002, - -3.2457089e-002, - -1.7549472e-001, - 2.8493349e-002, - 1.0412304e-001, - -1.1173210e-003, - 7.1447946e-003, - 2.7052018e-002, - 2.1816972e-003, - -8.8630176e-002, - -1.0701357e-001, - -4.1207617e-002, - 3.7077898e-003, - 8.7053488e-002, - 1.4283129e-002, - 6.4010086e-002, - -3.7679928e-002, - 8.3111383e-002, - 5.6677718e-002, - 1.4063916e-003, - -1.0364232e-001, - 3.6312049e-002, - -2.6135054e-002, - 3.1703422e-002, - -3.5189144e-002, - 1.6030282e-002, - -7.0953448e-002, - -1.6409520e-002, - 1.5861113e-002, - -4.0344599e-002, - 9.3345150e-002, - -3.2385751e-002, - 2.9194015e-002, - -5.3074056e-002, - -5.8395538e-002, - 1.4711047e-002, - 1.6754312e-002, - -4.1092096e-002, - -5.7509643e-002, - 5.8321957e-003, - 3.4401437e-002, - 3.5235160e-002, - 6.4540634e-003, - 6.8538944e-003, - -1.0143565e-001, - -2.5820489e-002, - -2.0821741e-002, - 4.4652423e-002, - -3.4072854e-002, - -2.6609349e-002, - 3.3889860e-002, - -5.3220787e-002, - -2.4894595e-002, - -9.6139329e-002, - -3.3024922e-002, - 1.7823306e-002, - -4.2192663e-003, - -5.3704045e-002, - 1.1044474e-002, - 1.4159169e-002, - 5.6261779e-003, - 1.4544719e-001, - -4.2079631e-003, - -9.5725344e-002, - -3.6408815e-003, - 6.0200088e-002, - 2.9998960e-002, - -7.3398314e-002, - -4.8228886e-002, - 3.3208412e-002, - -5.6677275e-003, - -6.6855312e-003, - -3.0785426e-002, - 4.2126629e-003, - 7.0115500e-002, - -3.9919529e-002, - 4.0614066e-002, - -3.0371460e-002, - 7.2891063e-002, - 2.3537099e-002, - 2.9755936e-002, - -3.7706444e-002, - -8.3470665e-003, - 7.6886063e-003, - -8.4313321e-002, - -2.9399720e-002, - -1.4589921e-002, - 1.7944446e-002, - -1.1460170e-001, - -6.2017760e-002, - 3.4407222e-002, - -2.7741014e-002, - -4.6295413e-002, - -2.7812656e-002, - -3.0886235e-002, - 1.1995511e-002, - -3.2969544e-002, - -6.9191631e-003, - -2.9791556e-002, - 2.0392531e-002, - -4.7567313e-003, - -9.8443940e-002, - -1.2686039e-002, - -2.1886631e-002, - -1.5455907e-002, - -1.1782002e-001, - 6.1301396e-002, - 2.1872915e-002, - -1.0561240e-002, - -2.3193915e-002, - 6.9727656e-002, - 1.4693869e-003, - -1.3543614e-001, - -4.0815903e-004, - 5.6251246e-002, - -9.1505709e-002, - 5.7185400e-003, - 7.1033142e-002, - -7.9002590e-002, - -4.1318689e-002, - 4.9841764e-002, - 1.7309114e-002, - 5.7136005e-002, - -2.1199613e-002, - -6.1231140e-002, - 7.2177738e-002, - 2.5816325e-002, - -3.9691591e-002, - -8.4077105e-002, - 1.8921121e-002, - 4.0273842e-002, - -5.0316912e-002, - -1.2301284e-002, - 1.4068218e-003, - 3.9074162e-002, - 1.1140969e-002, - -9.0100129e-002, - 1.6566978e-002, - 2.2387085e-002, - -5.5267138e-003, - -1.4053472e-002, - 8.5720676e-002, - 6.6003080e-003, - -3.4558594e-002, - -2.1528224e-002, - 3.4199928e-002, - 8.3291659e-003, - -3.4104982e-002, - 7.5554591e-003, - 1.0701557e-001, - 1.3371029e-002, - -5.4777395e-002, - -5.4878162e-002, - -4.1852588e-002, - -4.0276462e-003, - 1.0933072e-002, - 3.1101256e-002, - -4.6169830e-002, - -7.8623398e-002, - -4.0709650e-002, - -2.2176445e-002, - -6.1230977e-002, - 1.6368772e-002, - -1.0741991e-001, - -3.4277843e-002, - 6.1009971e-002, - -8.3667710e-002, - 1.1309839e-002, - 5.4127285e-004, - 8.4633157e-002, - -6.3130402e-002, - -1.1137924e-002, - -5.0412645e-002, - -5.4166796e-002, - -4.6504636e-002, - 7.8517633e-002, - 3.1626107e-002, - -1.8210994e-002, - -3.5098136e-003, - -1.2130004e-002, - -1.3464374e-002, - 5.0731507e-002, - -4.3012235e-003, - 8.2720477e-002, - -1.3193101e-002, - -1.3778387e-002, - 5.5452531e-003, - -9.3586936e-003, - -8.6317405e-003, - -3.6862811e-002, - -3.2830740e-002, - 8.4783068e-003, - -1.5330067e-002, - 1.1130119e-001, - 7.3688984e-003, - -6.4062197e-003, - 3.9423451e-002, - 8.1626914e-002, - -2.2657562e-002, - 7.7429063e-002, - -1.7196394e-003, - -5.1547799e-002, - 8.5550269e-002, - 1.0233102e-003, - -2.7193777e-002, - 5.8490358e-002, - 6.2673818e-002, - -3.9346043e-002, - -3.9066234e-002, - -1.2783050e-002, - -6.3166376e-002, - 2.7608238e-003, - -4.7437497e-003, - 4.1786886e-003, - -3.2351866e-003, - -3.3156438e-002, - -5.4098732e-002, - -5.6553182e-002, - 5.8110628e-002, - 1.1522620e-002, - -5.4533062e-003, - -1.6040357e-002, - -5.2050007e-002, - 1.1068723e-002, - 7.0599072e-002, - -8.2637140e-002, - -3.3101999e-002, - -1.7103108e-002, - -5.2723510e-002, - 1.1424693e-004, - -2.0451276e-002, - -3.8451163e-002, - -3.9178471e-002, - 1.0882970e-001, - -5.9520509e-002, - -1.6406338e-002, - -3.7464624e-002, - -1.5850757e-002, - 2.8142632e-003, - 8.5106236e-003, - -3.4606452e-002, - 2.1538352e-002, - -5.1542008e-002, - -6.0556592e-002, - -3.0525775e-003, - 1.0188123e-001, - -1.6159393e-002, - -4.6398817e-003, - -3.4883594e-002, - 5.7383438e-003, - 7.6872944e-002, - 1.6904979e-002, - -3.9974367e-004, - -6.4651835e-002, - 2.0519546e-002, - 1.4600580e-002, - 9.3830207e-002, - 1.1815421e-001, - 8.2952538e-002, - 1.3580903e-004, - -4.5583612e-002, - -8.4369787e-002, - 1.0032836e-002, - 7.8411529e-002, - 4.3200604e-002, - -1.5040485e-001, - -1.2045753e-001, - -3.0628967e-002, - 4.6612260e-003, - 6.4710750e-002, - -2.6463384e-002, - 8.0467496e-002, - 1.5772806e-002, - -9.0031337e-002, - 3.8140960e-002, - 2.4067996e-002, - -1.4456479e-002, - 2.5044977e-002, - -5.5023682e-002, - -3.1476503e-002, - 4.6154417e-002, - 4.1969567e-002, - -2.1537004e-002, - -1.3892791e-002, - -7.9877470e-002, - -6.6130095e-002, - -3.3971108e-002, - 4.9723852e-004, - -2.3332777e-002, - 4.4957143e-002, - 4.5955566e-002, - 7.3085106e-002, - 1.4327863e-002, - 4.4882884e-002, - -4.5453744e-002, - 3.2494203e-002, - -3.5223572e-004, - -3.4399985e-002, - -5.9070327e-002, - -2.4763167e-002, - 5.4170280e-002, - -9.3797557e-002, - -2.4345173e-002, - 7.5789539e-003, - 6.5847677e-003, - -1.1035459e-001, - 6.4245815e-002, - -6.3677641e-002, - -2.7625955e-002, - -4.9760945e-002, - 1.9438298e-002, - -2.0183031e-003, - 3.9238472e-002, - 7.3801148e-002, - -7.4626808e-003, - -3.5100675e-002, - 1.1826910e-002, - -5.0622844e-002, - 4.3419831e-002, - -2.2438311e-002, - 4.0482870e-002, - -2.5746508e-002, - -4.5886738e-003, - -4.2692344e-002, - 6.0214404e-003, - -4.9494823e-002, - -6.9637679e-002, - -6.0074768e-002, - -1.3792535e-002, - 5.8374139e-002, - 4.0942951e-006, - -4.1381257e-002, - 5.5951370e-002, - -2.9628877e-002, - 1.2189054e-002, - 9.2356783e-003, - 1.9097401e-002, - 5.8341964e-002, - -5.8640330e-002, - -4.0346416e-002, - -2.0148478e-002, - -7.3979491e-002, - -7.6507173e-003, - -2.6376789e-002, - 9.3631448e-003, - 5.7075337e-004, - -1.7237147e-002, - -1.4088176e-002, - -6.5722025e-002, - 1.7734913e-001, - 3.9188355e-002, - -5.3138441e-003, - 6.6012838e-004, - -3.7635320e-002, - 8.6939560e-002, - 2.5457618e-002, - -5.3643902e-003, - -3.5072285e-002, - 1.7654459e-002, - -1.7002417e-002, - -1.1934297e-002, - 1.0909989e-001, - -4.5341914e-002, - 2.9654212e-002, - -7.3979691e-002, - 8.1855730e-002, - -4.1111527e-002, - 2.8178913e-002, - 3.0990023e-002, - -3.8439631e-002, - 4.6092851e-002, - 2.0499136e-002, - -4.0078674e-002, - -7.5298075e-002, - 8.6249420e-002, - 2.0413103e-002, - 1.4283415e-002, - 3.3364666e-003, - 4.5625551e-002, - 2.8593452e-002, - 1.0294208e-001, - 4.6237012e-002, - 2.3737104e-002, - 1.4850043e-003, - 4.5627026e-002, - -3.1300170e-002, - 2.7232389e-002, - -2.5581725e-002, - -4.2382451e-002, - -4.1639602e-002, - -1.2685580e-002, - -6.8348575e-002, - -3.5070023e-002, - -1.9126421e-002, - -5.1202221e-002, - -2.1697346e-002, - 6.3981805e-003, - 6.1889782e-002, - -9.5515388e-002, - -3.5099019e-002, - -7.5991979e-003, - 2.6608290e-002, - -6.5628332e-003, - 4.0519304e-002, - 1.8759115e-004, - -8.2745501e-002, - 4.8080126e-002, - -9.4334121e-002, - -1.7519517e-002, - 8.4578794e-003, - -1.0547960e-002, - -2.9348950e-003, - 2.2443020e-002, - -8.3815521e-003, - 3.4363193e-002, - 3.5010892e-002, - -2.7129950e-002, - -1.8407294e-003, - -2.7794904e-002, - 7.5761568e-002, - -5.1005395e-002, - 2.2206192e-002, - 5.5815959e-003, - 1.3179272e-002, - 1.3743604e-002, - 8.4180570e-002, - -4.5318175e-002, - -4.0369759e-002, - -5.5643911e-002, - 1.1111604e-002, - 4.9980927e-002, - -5.3328516e-002, - -2.5289654e-002, - -5.3455028e-002, - -4.5115993e-003, - 1.2552924e-002, - 2.4187614e-002, - -6.5216647e-002, - -6.7184717e-002, - -3.4635282e-002, - 2.6037151e-002, - -1.2958051e-002, - -6.4529955e-002, - -4.7775406e-002, - 7.7791690e-002, - -4.1840856e-002, - 3.5508733e-002, - 3.6208672e-002, - 2.8883867e-002, - -2.2614722e-002, - -6.2467477e-002, - 2.1201398e-002, - -6.4938220e-002, - -2.5718030e-002, - 1.0132503e-001, - -1.0989944e-001, - 1.7386332e-002, - -1.9848054e-002, - 4.6500211e-002, - 8.7080916e-002, - 6.1051787e-002, - -6.9658176e-002, - 1.8448919e-003, - -6.3897477e-002, - 9.5246967e-003, - -1.7099063e-002, - 8.6762837e-002, - -5.1071138e-002, - -4.1995939e-002, - -1.5112140e-002, - 9.4802477e-002, - -3.6319825e-003, - 5.6475075e-002, - -5.2649820e-003, - 5.5494589e-002, - -3.6195527e-002, - 3.0102603e-002, - 9.6119308e-002, - 2.9804096e-002, - -8.3871467e-002, - -4.6819532e-002, - -6.6699175e-002, - -7.8740356e-002, - 2.3100681e-002, - 4.0518590e-002, - -5.5249251e-002, - 3.4210609e-002, - 6.3808433e-003, - 2.9561241e-002, - -7.9993851e-002, - -8.6030708e-003, - 4.9599184e-002, - -5.3356684e-002, - -4.3441101e-002, - 4.6557960e-003, - -5.8349112e-002, - 7.0442125e-002, - 3.3583231e-002, - 3.5326691e-002, - -1.4284013e-003, - 3.7155912e-003, - -6.1957730e-002, - -2.5175104e-002, - 1.0316170e-004, - 1.3785501e-002, - -3.4528343e-002, - 9.4718664e-002, - -8.5929124e-003, - 6.2353769e-003, - -1.9235982e-002, - -5.0684859e-002, - -9.0890509e-002, - 2.9614723e-002, - -5.8904724e-002, - -5.9605704e-002, - 1.7332188e-002, - -6.2983369e-004, - 7.6762655e-002, - -1.5739418e-001, - 4.7428004e-002, - -7.4437002e-003, - 3.2753497e-002, - -6.4494291e-003, - -1.0132357e-001, - 3.1793509e-002, - -1.9653108e-002, - -1.3986054e-002, - -1.0375110e-001, - 5.9341902e-002, - 7.4338421e-002, - -7.4336814e-002, - -8.8261702e-004, - 8.4239417e-002, - 3.6771318e-002, - 4.6614615e-003, - -1.0885608e-001, - 4.0218429e-002, - -7.3328551e-002, - 3.4660924e-002, - -2.2304889e-002, - 9.1183611e-003, - -3.1063866e-002, - 3.7029187e-002, - -8.5599164e-003, - -3.1378391e-003, - -3.4177850e-002, - -3.6311985e-002, - 5.4941612e-002, - -2.5856244e-002, - 9.8859541e-002, - -4.1708361e-002, - 4.4676996e-002, - 1.0012678e-001, - 1.2298856e-002, - 3.9574107e-002, - -5.4805478e-003, - -2.5335550e-002, - 2.0495470e-002, - -2.8777276e-003, - -1.2280951e-002, - -3.6926171e-002, - -6.4637997e-002, - 3.1275904e-002, - -4.0724158e-002, - 8.2545982e-002, - 1.7297459e-002, - 1.7103606e-003, - -3.6063372e-002, - -1.9411586e-002, - 2.5489285e-002, - 5.3618799e-002, - -1.5847040e-003, - -8.2607767e-002, - 6.4750926e-002, - 3.4155392e-002, - 1.2202950e-002, - -6.3849575e-002, - -4.2629288e-002, - -9.3420039e-002, - 1.8591964e-002, - -6.2494687e-002, - 2.7073439e-002, - -1.6706104e-002, - 8.5702929e-004, - 5.5338380e-002, - -1.1863343e-002, - 2.4120033e-002, - -1.9673309e-002, - -9.0836747e-003, - -8.4090025e-002, - -1.6605994e-002, - 1.2509049e-002, - 2.9654581e-003, - 3.5414725e-002, - -9.1520329e-002, - 5.3251481e-004, - -3.9064127e-002, - 4.3848196e-002, - -6.5906592e-002, - -6.2694114e-002, - -7.5430627e-002, - -6.9288028e-002, - -7.3831218e-002, - -2.2849271e-003, - 4.1968983e-002, - 9.1516100e-003, - 6.3003994e-002, - 4.0825527e-003, - -1.1602298e-002, - 3.4062508e-002, - -3.6760665e-002, - -6.6458351e-003, - 4.5328593e-002, - 1.5333803e-002, - 3.1081863e-002, - 1.0997856e-003, - 4.0172982e-002, - -5.1202051e-002, - 3.0204527e-002, - -9.1683008e-002, - 6.6885251e-002, - -1.4713293e-002, - -1.8783233e-002, - -2.6727404e-002, - -4.0587117e-002, - 1.7352452e-002, - 2.4068866e-002, - 9.3813608e-002, - 1.4593201e-001, - -2.6243684e-002, - 4.2410590e-003, - 5.7049362e-002, - -1.0495092e-002, - 5.5352776e-002, - -1.4966413e-002, - 5.8887924e-002, - -2.9432846e-002, - 1.5016450e-002, - 1.8771912e-002, - 2.9731363e-002, - -8.9727906e-002, - -2.8879171e-002, - -2.4530626e-002, - -2.1755227e-002, - 2.6372269e-002, - 1.6464203e-002, - -2.9595373e-003, - -2.8033224e-002, - -3.8960164e-002, - -1.4500836e-002, - 1.2441672e-004, - 6.9888338e-002, - -1.3326151e-002, - -4.4177213e-002, - 1.0679639e-001, - -7.7540624e-002, - 7.3527032e-002, - 7.1684818e-002, - 2.4447003e-002, - 1.3247555e-002, - 2.5484911e-002, - -2.0333037e-002, - 1.0820256e-001, - -1.5291962e-001, - 4.0764107e-002, - -5.3576752e-002, - -3.3726558e-002, - 5.9985203e-002, - 1.4311757e-002, - 1.0872979e-002, - 4.8154459e-002, - -9.8724947e-002, - 3.5433564e-002, - -3.0296223e-002, - -4.9776503e-002, - 6.4312955e-002, - -3.8636806e-002, - 4.1001924e-002, - 2.8324136e-002, - -2.4954944e-002, - 3.0731417e-002, - -4.0748527e-002, - 1.0071007e-001, - -4.2444577e-002, - 7.4060614e-002, - 7.0443088e-002, - -8.5281317e-002, - 2.2408837e-002, - -3.0453603e-002, - 5.3244534e-002, - -2.7097865e-002, - 9.3509025e-002, - -4.0481022e-002, - 3.0984921e-002, - 6.2120102e-002, - 2.5263636e-002, - 4.7524005e-002, - -8.3461434e-002, - -4.0450596e-002, - 2.4301374e-002, - 2.4082281e-002, - 2.7165952e-002, - 2.5739840e-002, - -4.4498403e-002, - -9.3779267e-002, - 1.3230632e-002, - 5.6356340e-002, - -3.1721297e-002, - -1.1371059e-001, - 5.1330793e-002, - 3.9800143e-002, - 4.4602902e-002, - 4.0186966e-002, - -3.3956201e-002, - -3.4378181e-002, - 3.0222123e-002, - 1.3392410e-002, - -1.1877032e-001, - -6.1513207e-002, - 5.1308971e-002, - -3.4406254e-004, - -5.6836546e-002, - 3.1147677e-002, - 1.2984031e-001, - 6.9255265e-002, - -7.3899471e-002, - 4.4113150e-002, - 4.1613437e-002, - -8.3330499e-002, - -6.7769626e-002, - 9.9577638e-003, - 8.5011488e-002, - 3.1777824e-002, - -3.0275122e-002, - -1.9721785e-003, - -2.8670666e-002, - -5.1951849e-002, - 2.6123845e-002, - -4.6954628e-002, - 3.9325561e-002, - -1.4539624e-001, - -4.4989415e-002, - 1.2490030e-002, - 9.8158554e-002, - -8.8549642e-002, - 7.0425741e-002, - 1.6289354e-002, - 7.6642414e-002, - 8.2615082e-002, - 1.5188920e-002, - 1.0717190e-001, - 7.8459410e-003, - -9.8939081e-002, - 5.4496988e-002, - -1.9598305e-002, - -4.8340131e-002, - 9.1012052e-002, - 4.5089162e-002, - 2.7001089e-002, - 3.9597820e-002, - -2.9912957e-002, - -4.5233127e-002, - -2.6888627e-002, - 8.2716012e-002, - 4.1938511e-002, - -1.2290728e-002, - -9.1141489e-002, - -9.3716385e-002, - 5.0846593e-002, - -6.9747424e-002, - 1.5936647e-002, - 9.0841003e-003, - -7.9217963e-002, - 4.2523607e-002, - -3.4283790e-002, - 6.2931211e-002, - 1.9054212e-002, - 1.0431108e-002, - -1.7512053e-002, - 1.5995877e-002, - -6.9853083e-002, - -3.6133865e-002, - 5.1883029e-002, - -5.4941971e-002, - 2.5099530e-002, - 2.1949930e-002, - -7.2924143e-002, - -1.2241689e-002, - -2.5239538e-003, - 1.0240874e-002, - -3.5188489e-002, - -1.4637794e-002, - 4.2573102e-002, - -4.6954972e-002, - 4.9757134e-002, - 8.9000907e-002, - -5.7343223e-003, - -9.4659733e-002, - 2.2731848e-002, - -6.3526985e-002, - -6.2729748e-002, - -8.5124042e-002, - -2.2742192e-002, - 4.9060274e-003, - 5.9105851e-002, - 6.6593845e-002, - -2.0401971e-002, - -3.4052538e-002, - 1.0187912e-001, - -3.9129772e-002, - 1.6727491e-002, - 7.9581367e-002, - 2.3490622e-002, - -8.5225499e-002, - 4.5609113e-002, - 2.5532693e-002, - -1.3949777e-002, - 1.1939908e-001, - 3.1136484e-002, - 2.1065018e-002, - -7.3998053e-002, - -3.3433899e-002, - 6.4825970e-002, - -6.6483460e-003, - 2.1878777e-002, - -5.5590218e-002, - 6.2132974e-002, - 6.0099401e-002, - 2.6750906e-002, - -3.2033687e-002, - 4.8448643e-002, - -3.8771221e-003, - -4.8090282e-002, - -2.9473176e-002, - -1.6510646e-002, - 5.6059374e-003, - -2.8498771e-002, - 1.4581678e-001, - 7.2382639e-003, - 6.9060065e-002, - 3.1254099e-002, - 1.1295554e-001, - -2.0791262e-002, - 2.6272472e-002, - 2.3832128e-004, - 1.7675185e-004, - 2.2985763e-002, - 5.8978432e-003, - 4.4429730e-003, - 7.5305836e-002, - 2.7519294e-002, - 2.6304737e-003, - -7.5022497e-003, - 9.7612623e-002, - -1.1392227e-003, - 6.3717011e-002, - 4.2435569e-002, - -6.8014182e-002, - 7.4854037e-002, - 3.2524349e-002, - 7.0521866e-002, - 2.0297711e-002, - -2.7255480e-002, - -1.3079920e-002, - -1.1988356e-001, - 4.2564644e-002, - 8.9756674e-002, - 1.7220549e-002, - -4.4937423e-002, - -2.9070759e-002, - -4.4538021e-002, - -7.8632839e-002, - -2.8995185e-002, - -1.4328207e-002, - 2.6443524e-002, - 8.9669124e-002, - 1.7624887e-003, - 3.2927633e-002, - -3.1535117e-002, - -6.6599096e-003, - 1.0186317e-001, - 8.9875545e-003, - 2.8378610e-002, - -5.5136504e-002, - 3.3829370e-002, - 7.1374246e-003, - -1.4538378e-002, - 3.9237476e-002, - 6.8685661e-002, - -3.3057531e-003, - 1.1538617e-002, - 8.8143388e-003, - -1.9900457e-002, - 2.0600418e-002, - 3.0249751e-002, - -7.3517395e-003, - 6.4648004e-002, - -8.6600526e-004, - 8.3511299e-003, - -5.4627039e-002, - -6.4363505e-003, - 1.6893141e-002, - 5.5401782e-003, - -2.4244983e-003, - -2.0950127e-002, - -2.2956516e-002, - 7.8535473e-003, - 2.4067483e-002, - 6.1367370e-002, - -3.3267227e-002, - -1.7259358e-002, - -7.3612541e-003, - -1.5577290e-002, - 8.5933756e-002, - 5.0314067e-003, - -5.7691721e-002, - -3.1185546e-002, - -1.0012818e-002, - -9.3068008e-003, - -1.2733027e-001, - -2.4660461e-002, - -6.9689614e-002, - 6.7705187e-002, - -9.0527945e-002, - -8.9240761e-003, - -3.6546741e-002, - -7.8518923e-003, - 6.0277518e-002, - 8.8143610e-002, - -3.6670503e-002, - 5.9594768e-002, - -6.2854695e-002, - 8.4561367e-003, - 4.2531503e-002, - 1.2490411e-001, - -1.2983679e-002, - 4.8837441e-002, - 2.8397759e-002, - 4.9265357e-004, - -5.0014029e-002, - -6.4438003e-002, - 6.3709335e-002, - -8.3485243e-002, - -1.3662989e-002, - -1.1010182e-002, - -4.1630589e-004, - 3.7231066e-002, - 5.8354336e-002, - 1.4802151e-002, - -9.2736005e-003, - 7.0150240e-002, - -7.5624119e-002, - -1.8709434e-002, - 8.1817931e-002, - 1.0532906e-001, - -6.6715765e-002, - 1.1083842e-002, - -7.4493893e-002, - -9.9142748e-003, - 6.2718554e-002, - 2.7079763e-002, - -2.5876824e-002, - -4.8123789e-002, - 6.1857353e-002, - -4.2675136e-002, - -6.2163117e-002, - -7.4268325e-002, - -2.9318352e-002, - -3.3154279e-002, - 4.8684897e-002, - -2.4063594e-002, - -8.6147192e-002, - -7.1972623e-003, - -4.4253121e-002, - -2.1162236e-003, - -3.5637316e-002, - -5.0298912e-003, - 1.9549988e-002, - -3.1928938e-002, - -4.5581285e-002, - 4.7829407e-002, - 8.7149645e-002, - 4.0640515e-002, - 1.4297447e-002, - 9.8222629e-003, - 3.2853388e-002, - 6.8740447e-002, - -1.2177132e-001, - 9.4625764e-002, - -1.5776485e-002, - -3.2495760e-002, - 3.0796063e-002, - -1.5368625e-002, - -7.9526144e-002, - -6.2453602e-002, - 5.9616092e-002, - -6.4260784e-002, - 1.5966646e-002, - 3.1495482e-002, - 6.5589632e-002, - -3.4614182e-002, - -6.9190746e-002, - -2.0874294e-002, - 1.3630214e-002, - 5.3339825e-002, - 1.6147000e-002, - 4.2668360e-002, - -2.5662017e-002, - 4.5348429e-003, - 6.1345954e-002, - 4.1541021e-002, - -4.9887559e-002, - -5.8465581e-002, - -2.1207204e-002, - 7.9091417e-003, - -1.2334773e-002, - -1.0617181e-001, - 8.9782313e-002, - -6.8274917e-002, - 2.1132464e-002, - 5.7348207e-003, - -9.2561293e-003, - -3.7038110e-002, - -2.8239427e-002, - 1.8178841e-002, - -3.9897232e-002, - 1.0250394e-002, - 6.3382126e-002, - 3.1483520e-002, - -1.4611403e-002, - -4.1066531e-003, - 5.7642552e-002, - 1.2244865e-002, - 3.7434406e-002, - 2.2822222e-002, - 9.2902509e-002, - 1.1325867e-002, - -6.2025695e-002, - 1.5489679e-002, - -1.6179136e-002, - -1.7726855e-003, - 8.7415263e-002, - 2.9780528e-002, - -6.5055050e-002, - -1.7262184e-002, - -1.2062737e-002, - 4.1904361e-002, - -3.4331618e-002, - 1.2164792e-001, - 4.9603771e-002, - -1.3061748e-002, - 1.1007232e-002, - -1.4216546e-002, - -3.5763228e-002, - 1.2025510e-002, - 8.2989866e-002, - 2.0160053e-002, - -1.6822685e-002, - 7.3528826e-003, - 2.0923780e-002, - 5.2711615e-003, - -2.5691601e-002, - 4.5395884e-002, - -1.5802909e-003, - 6.8782769e-002, - 1.1122473e-001, - 1.0025602e-001, - 1.3910254e-001, - -8.5937461e-002, - 3.2274784e-002, - 4.8447219e-002, - -7.6279744e-002, - -9.4932243e-002, - -4.6596008e-002, - 6.9567452e-002, - -2.0821944e-002, - 2.8782945e-002, - -1.8673196e-002, - -1.0249668e-003, - 3.0785039e-003, - 7.5883489e-002, - -6.3193813e-003, - 7.7764074e-002, - -4.3608077e-002, - -1.3123466e-002, - 3.6824621e-003, - -5.9201109e-002, - -2.3113816e-002, - -8.8488271e-002, - -1.1032349e-002, - -2.3364616e-003, - -6.5601368e-002, - 1.4329878e-001, - 9.5131857e-002, - 4.2865722e-002, - -9.6979502e-002, - -3.5638863e-002, - 9.0205848e-002, - 1.9877782e-002, - -1.2497646e-001, - 2.5802125e-002, - 4.6840610e-002, - -4.7117859e-002, - -1.0958747e-001, - -4.6687284e-002, - 3.3044810e-003, - -4.3352639e-002, - 5.5404689e-002, - -1.4901969e-001, - -6.5836290e-003, - -8.3908961e-002, - -8.4786953e-003, - 2.6778741e-002, - -7.1364019e-002, - 2.9762397e-002, - 3.8378977e-002, - -1.3678167e-002, - 1.0245114e-002, - -6.8802397e-002, - -7.9396342e-002, - 8.9092342e-002, - -2.5071896e-002, - 1.6416317e-001, - -3.3416141e-002, - -8.8098549e-002, - -2.8516999e-002, - -2.8171336e-002, - 1.4735227e-002, - 2.1490528e-002, - 1.0996266e-002, - -7.9010073e-002, - 1.3973632e-002, - 8.5196514e-002, - -3.4922417e-002, - 3.4433947e-002, - 4.5850060e-002, - -6.6284133e-002, - -1.0572099e-001, - -6.6431349e-002, - 6.0325770e-002, - -9.2479536e-003, - -2.2892434e-002, - -3.9861268e-002, - 7.7138209e-002, - 1.1492915e-002, - 3.1465738e-002, - -1.2138307e-002, - 4.7630033e-002, - -9.7311603e-003, - 1.3770049e-002, - -7.3660639e-003, - 7.4335649e-002, - -3.6628135e-003, - 1.2752549e-002, - 1.3838186e-002, - 4.2180077e-004, - -5.4375913e-002, - 2.1917738e-002, - -1.2614454e-002, - -2.3342227e-002, - -6.4971690e-002, - 1.6110329e-002, - 1.4737048e-002, - 3.0388287e-002, - -1.6824888e-002, - 1.7295248e-002, - 1.0812445e-002, - -5.5425021e-002, - -4.9277740e-002, - 5.0707632e-002, - 4.1922806e-002, - 1.8455962e-002, - 5.0365924e-002, - 4.4298398e-002, - 7.6431843e-003, - 5.9989537e-002, - -7.6908515e-002, - 2.8530229e-002, - 9.5653590e-002, - -7.2017798e-002, - -8.0655593e-003, - 1.0083818e-001, - 4.9232556e-002, - -6.6242009e-002, - 2.9556295e-003, - -3.5960545e-002, - 1.1419955e-002, - 6.6825880e-003, - 2.9477422e-002, - -2.9472636e-002, - 5.5236681e-002, - 2.8874435e-002, - -2.2350145e-002, - -1.4664332e-002, - -6.8185763e-002, - -2.0916584e-003, - -6.2584599e-003, - 5.9273963e-003, - 9.7345621e-002, - 1.7069987e-002, - -3.5800212e-002, - 3.8397984e-002, - -4.6760839e-002, - -5.0292748e-002, - -2.1914980e-002, - -1.8316586e-003, - -5.2956111e-002, - -4.4811672e-003, - 6.3511854e-002, - -5.7468947e-002, - 3.3773578e-003, - -6.2827625e-002, - -1.0672637e-001, - -2.3481169e-002, - -4.9309562e-002, - -9.6720496e-003, - 5.8540389e-002, - -1.4927692e-002, - 4.5935378e-002, - -1.5630681e-003, - -1.8325545e-002, - 3.2884463e-002, - 2.3472286e-002, - 1.9480110e-002, - -1.5164953e-002, - 5.0952861e-004, - 3.6924652e-002, - 3.9980199e-003, - 2.7122068e-002, - 4.0586323e-002, - -6.8458269e-004, - 2.4214833e-002, - -2.6547884e-002, - -2.4783823e-002, - 8.8816623e-002, - 5.5882019e-002, - 5.3618064e-003, - -1.1671543e-001, - -8.2213149e-002, - -9.6951820e-002, - 7.3380548e-002, - -1.2640056e-003, - 4.1876563e-002, - 2.5405425e-002, - 2.4599929e-002, - 1.4178532e-002, - 5.5594418e-003, - 4.2950164e-002, - 1.8014601e-003, - -1.2215360e-001, - 1.0493101e-001, - 3.1735201e-002, - 5.5741286e-003, - -3.2479076e-002, - 2.6681545e-002, - 2.8019414e-002, - -8.0179790e-003, - 3.1489206e-002, - 4.3033256e-003, - -3.7630185e-002, - 5.3039128e-002, - 5.1506634e-002, - -1.7820552e-002, - -2.4621551e-002, - -5.5322066e-002, - 2.5011123e-002, - -4.7866728e-002, - -1.0796552e-002, - -3.3392282e-002, - -4.7783524e-002, - -1.8094968e-002, - -7.2520784e-002, - -6.5389567e-002, - 3.9464487e-002, - -9.8809443e-003, - 3.1120895e-002, - -5.4329781e-002, - 1.6954674e-002, - -4.8954224e-002, - 7.3972200e-002, - 4.7640882e-002, - 3.0356780e-002, - 9.5741578e-003, - -4.1590063e-002, - 1.1287435e-001, - -8.6416889e-003, - -2.2674367e-002, - 2.1388361e-003, - 5.5542441e-002, - 1.0045614e-002, - -8.7522721e-002, - 8.7719983e-003, - 6.7355731e-002, - -1.6159743e-002, - 8.7223484e-003, - 6.0092014e-002, - -9.4184958e-002, - -3.6268920e-002, - -2.1332232e-002, - -3.1682036e-002, - 2.8664908e-002, - 2.6541157e-002, - -1.0689359e-001, - -7.0862918e-002, - -1.1433268e-001, - 3.4863935e-002, - 1.0709581e-002, - -5.5513033e-002, - -1.5617145e-002, - 1.9399041e-003, - 6.6680970e-002, - -3.5719944e-002, - -5.5335504e-002, - -9.3481167e-002, - 2.3589372e-002, - 1.2307760e-002, - -4.1853305e-002, - 3.2086368e-002, - 1.3207910e-002, - -1.2902915e-002, - 4.0576229e-002, - -3.1174299e-002, - -4.7359539e-002, - 3.2639664e-002, - 6.8807350e-002, - 3.0052612e-002, - -1.6360841e-002, - 7.3692525e-002, - 2.3214010e-002, - -1.9279486e-003, - -2.9304762e-002, - 1.4092775e-002, - -3.8475139e-002, - 4.0205235e-002, - 3.5637448e-002, - 3.1815236e-002, - 5.4193437e-002, - 2.7101101e-002, - -7.8492340e-002, - -1.3053183e-002, - 9.8943970e-002, - 3.2605663e-002, - -5.3326325e-002, - 4.7045271e-002, - 1.9171127e-002, - -7.0639869e-002, - -2.6942346e-002, - 2.1897131e-002, - 4.4342108e-002, - 2.5419609e-002, - 6.5525042e-002, - -6.2924979e-002, - 4.2919074e-002, - 5.7909339e-002, - -2.0016289e-002, - -7.1844831e-004, - 3.3287795e-003, - 5.2391582e-002, - 5.1351648e-002, - 6.9345017e-002, - 1.6715079e-002, - 1.0245380e-001, - 6.5560454e-003, - -4.2978289e-002, - 5.1857486e-002, - 1.6375558e-002, - -1.1231560e-001, - 1.8452057e-002, - 2.7196151e-002, - -4.7948818e-002, - 3.8838999e-002, - -8.1296721e-002, - -4.4213439e-002, - 3.3789367e-002, - -8.9903386e-002, - -4.8309819e-002, - 3.0350368e-002, - 9.3462798e-003, - -4.3576313e-002, - 5.0364033e-002, - -3.3705706e-002, - 6.9992170e-002, - 9.4421577e-002, - -3.7859282e-002, - -2.4699603e-002, - 5.0385013e-002, - -5.4216273e-002, - 6.9692784e-002, - 1.0150382e-001, - 1.7548633e-002, - 9.8962282e-003, - -5.6862743e-002, - 4.1445815e-002, - 1.9635439e-002, - -3.1828877e-002, - -7.5389343e-003, - -2.2662898e-002, - -9.3225720e-003, - 3.3794402e-002, - -1.5022139e-002, - -8.3952470e-002, - -4.4638734e-003, - 5.0977217e-002, - -5.6868826e-002, - 8.2257315e-002, - -3.3527792e-002, - -3.8753182e-002, - -8.9806282e-002, - 6.8640832e-004, - 7.2265978e-002, - -1.2264922e-001, - 1.0964559e-002, - -6.3412284e-002, - 1.2106129e-001, - -8.5320894e-002, - -3.7961427e-002, - -4.1350954e-002, - -6.7090729e-002, - 4.9718886e-002, - -3.3874055e-002, - -7.1699033e-002, - 2.5203129e-002, - 2.0350140e-002, - 6.4638571e-002, - -7.2804864e-002, - 2.3308871e-002, - 1.5264191e-003, - -1.1191223e-001, - -6.0619938e-002, - -2.2397074e-003, - 6.8646240e-002, - -9.5147638e-003, - -8.9258460e-003, - -2.2587656e-002, - -8.8042374e-003, - 2.7917130e-002, - 3.0703476e-002, - 4.0753823e-002, - -1.9174676e-002, - 7.6285732e-002, - 5.5310628e-003, - 6.7972330e-002, - 1.6915582e-002, - -3.3407461e-002, - 2.3263797e-002, - 3.1563985e-002, - 6.0315051e-004, - -3.1286618e-002, - -1.1639905e-002, - -1.2659763e-002, - 1.2883340e-003, - -5.0171053e-002, - -4.9900923e-003, - -1.0228083e-001, - -4.8479815e-002, - -2.9928321e-002, - -5.5916163e-002, - 4.7735428e-002, - -1.3294429e-003, - -7.5136122e-003, - 5.4331339e-002, - -4.2475157e-002, - -3.2342585e-002, - -2.1096262e-002, - 4.8946925e-002, - -7.7232620e-002, - 4.6424245e-002, - -7.1029625e-002, - -8.3080699e-003, - -1.8848230e-002, - -3.3058342e-002, - 2.4301547e-002, - -1.9950837e-002, - -2.6746721e-002, - -3.1244062e-002, - 4.9214132e-002, - -4.3837753e-002, - -2.6533780e-002, - -3.2174063e-002, - 3.1234554e-002, - 1.8396020e-002, - 4.2139477e-003, - -6.3624347e-002, - 3.8068496e-002, - -7.5273414e-002, - -5.4282683e-002, - 1.0378638e-001, - -5.4062955e-002, - 1.0025793e-002, - -6.6450371e-003, - 8.2632045e-002, - -1.1994389e-001, - 3.1022007e-002, - -3.1118158e-002, - 5.0953443e-002, - -5.1605376e-002, - -4.8568100e-002, - -7.4390375e-003, - -4.7877758e-002, - -9.4953155e-003, - -2.6931667e-003, - 2.3165347e-002, - 5.9754385e-003, - 2.5900617e-002, - -1.5042605e-002, - -1.4480424e-002, - 4.2074657e-002, - 8.9476498e-002, - 4.5100917e-002, - -5.1593045e-002, - 6.0834274e-002, - 4.0989664e-002, - -1.7405350e-002, - 5.9998834e-002, - 1.2416742e-002, - 1.8605073e-002, - 1.0892550e-001, - -3.2491824e-002, - -3.1135526e-002, - -2.9815887e-002, - 2.0205791e-002, - 1.6566794e-002, - 7.0071566e-002, - -4.9569656e-002, - 3.9921784e-002, - -2.8730117e-002, - -1.7587977e-002, - 7.1500463e-002, - 3.6872018e-002, - -3.4586232e-002, - -1.6970720e-002, - 3.4644172e-002, - -2.0901296e-002, - 4.2141589e-002, - -7.6319420e-002, - 4.5998962e-002, - -7.3399778e-002, - -8.1916522e-002, - 3.8464961e-002, - -1.1521599e-002, - 7.2694972e-002, - -3.9337982e-002, - 5.9084598e-002, - -3.4257913e-002, - -8.6242832e-002, - -2.5477654e-002, - 1.5161827e-002, - 4.3686125e-003, - -1.1656981e-002, - -1.5563664e-002, - 6.2510087e-002, - -1.0836642e-002, - 1.2432558e-001, - -2.2959202e-002, - 1.3783634e-003, - 3.3269441e-002, - 3.8750648e-002, - -1.3656516e-002, - 5.9833997e-002, - 1.4796841e-002, - -2.2627766e-003, - 4.9145114e-002, - -1.1354640e-001, - 1.3391314e-002, - -1.3806188e-002, - 2.7218571e-002, - -3.9102606e-002, - 1.0801438e-002, - -3.4971279e-002, - -2.3190242e-002, - -1.6194699e-002, - -1.9332419e-002, - -2.7390066e-003, - 1.8022691e-002, - -1.5832667e-002, - -9.2546225e-003, - -6.4699491e-002, - 4.7590650e-002, - 5.4590011e-002, - -2.0868480e-002, - 4.8372708e-003, - 3.5635613e-002, - 4.9026328e-002, - -2.8886176e-002, - 2.4904926e-002, - 4.6825265e-002, - -4.1467334e-003, - -7.4816934e-002, - 2.4155196e-002, - -1.2145775e-002, - -4.8433817e-002, - -5.1333974e-002, - -7.6611960e-004, - -2.0288664e-003, - 4.4132138e-002, - 1.3884023e-002, - 3.3438764e-002, - -1.7045598e-002, - -1.3981286e-003, - 6.0450703e-002, - 1.6026951e-002, - -1.0038212e-002, - -5.9082814e-002, - -6.8065244e-003, - -2.0735019e-002, - 6.4134665e-002, - 8.5071176e-003, - -2.2373060e-002, - 4.3619700e-002, - 1.5963047e-002, - -3.0249871e-002, - -8.3796187e-002, - -3.4276448e-002, - 5.3600630e-002, - -4.6111635e-002, - 3.2125595e-002, - 5.8851999e-002, - -7.8040384e-002, - 5.2267851e-002, - 3.4435223e-002, - 2.1556971e-002, - -1.7163880e-002, - -5.0843277e-002, - -3.2488185e-002, - -1.7547962e-002, - 3.1629302e-003, - 1.1087340e-001, - 5.8821833e-002, - 2.7600291e-003, - -1.8466769e-002, - 3.1019364e-002, - 6.9714994e-002, - 2.6197162e-002, - -2.5002333e-002, - 2.1238793e-003, - 6.3553430e-002, - -3.4198265e-002, - 4.8709571e-002, - -7.2299086e-002, - -4.3035088e-002, - 3.5760525e-002, - 5.3143565e-002, - 2.8080467e-002, - 7.4687831e-004, - 3.3589299e-002, - -2.7857822e-002, - 9.3293970e-002, - -3.1352513e-003, - -1.1227005e-003, - -4.5092687e-002, - -2.5306886e-002, - -1.0822730e-001, - -6.5870362e-002, - 5.0646576e-003, - -5.7436235e-002, - 3.2011690e-002, - -3.5040739e-003, - -3.9957599e-002, - 1.6341870e-002, - -7.6498865e-003, - -2.5256813e-002, - 2.8585914e-002, - -6.4304885e-002, - -7.0698223e-002, - -9.2642094e-002, - -5.6328267e-002, - -8.0773935e-002, - -6.5074477e-002, - 2.0294178e-003, - -2.4072922e-002, - 4.2458044e-002, - 4.7875614e-003, - -4.2143264e-002, - -2.8324995e-002, - -2.9328658e-002, - -9.2678479e-002, - 4.5617708e-002, - 1.2685434e-002, - -5.4340728e-002, - 4.2087780e-002, - 4.0016732e-002, - -1.2299481e-001, - 1.0379559e-001, - 5.7020403e-002, - -3.9544599e-002, - -1.8766513e-002, - 3.2158071e-002, - 7.3924530e-002, - -4.6618108e-003, - -5.5299328e-002, - 4.4245720e-002, - 3.7174478e-003, - 3.4306804e-003, - 4.2213951e-002, - -9.1086002e-002, - 1.5797797e-003, - -1.0094297e-001, - -3.1042592e-002, - 1.6312788e-002, - -5.7643992e-002, - 8.5044833e-003, - -5.8166289e-002, - 1.9822525e-002, - -1.4404965e-001, - -5.5582362e-002, - -4.5001443e-003, - -8.6256453e-003, - -1.0195382e-002, - -3.5860515e-002, - -6.9432334e-002, - -3.8266022e-002, - -4.0918161e-002, - -1.1863163e-002, - 5.0949718e-002, - -8.0206291e-002, - -2.6240511e-002, - 7.6676678e-002, - -6.5416559e-002, - -1.4318918e-002, - -4.3958025e-002, - -2.1978148e-002, - -6.4422744e-002, - -2.2733013e-002, - 1.2900773e-002, - -1.7819685e-002, - -4.7785428e-003, - 3.4686226e-002, - 6.4004707e-002, - -5.3322786e-002, - -1.8493916e-002, - 4.9290003e-002, - -4.5065517e-002, - -2.9327742e-002, - 2.3212884e-002, - -4.8985889e-002, - 2.9604806e-003, - -7.0253020e-003, - -9.2397443e-002, - -7.6453564e-002, - -3.4155955e-002, - -1.0082514e-001, - -8.0072913e-002, - 5.9487693e-002, - -3.2053752e-002, - -3.4654709e-002, - -4.2857910e-002, - 4.3434899e-002, - -6.1610488e-002, - 2.3564532e-002, - 5.0395882e-002, - -1.0869004e-002, - 2.7674042e-002, - 4.1961384e-004, - 1.1474642e-001, - 1.5501309e-002, - 5.3729017e-002, - 8.2294950e-002, - 3.6090309e-002, - 3.2405617e-002, - 7.8649811e-002, - 1.3050292e-002, - -1.6718241e-002, - -4.2514925e-002, - 2.0638931e-003, - -1.0261822e-001, - 5.5517573e-002, - -2.6256624e-003, - 7.3917084e-002, - -3.2038338e-002, - 5.9286807e-003, - -4.9553265e-002, - 4.0402131e-003, - 1.9006069e-002, - 1.5037719e-002, - -3.8431930e-002, - -3.4089576e-003, - -2.8898708e-003, - -5.1916447e-002, - -9.3843168e-002, - 2.9937678e-002, - -3.9290957e-002, - 4.4290160e-002, - -4.2250820e-002, - -1.6616660e-002, - -1.0653179e-002, - -3.4916960e-002, - -3.1852948e-002, - 1.8960722e-002, - 6.0590194e-002, - 1.7919981e-002, - -2.1735260e-002, - 2.5431032e-003, - -2.3276711e-003, - 4.7679757e-003, - 2.6771182e-002, - -8.0137596e-002, - -4.9700338e-002, - 2.4445536e-002, - -7.2537218e-002, - -1.8968099e-002, - 6.6550477e-002, - 6.7579085e-002, - -3.1351180e-002, - 1.6129275e-002, - 3.6101242e-002, - 1.1199196e-002, - 7.9145428e-003, - 4.0067468e-002, - 6.0585461e-003, - -7.4588015e-003, - 2.1235782e-002, - 6.3041751e-003, - -1.1634076e-003, - 2.2258425e-002, - -3.4248029e-002, - -4.5811428e-002, - 1.0578831e-002, - -5.5482586e-002, - -6.8507992e-002, - -7.7083934e-002, - -5.3913115e-002, - 5.9790071e-002, - -2.0841051e-002, - 2.3080531e-002, - 1.1187349e-001, - -7.1392621e-002, - 2.9668837e-003, - -2.9860507e-002, - 4.6683202e-002, - 8.5830739e-002, - -2.0897455e-002, - 3.2863177e-002, - 2.2323987e-002, - 4.8358711e-002, - 8.7562303e-003, - 1.4793712e-002, - -2.5985375e-002, - -4.6720770e-002, - -5.9782514e-002, - -4.2989314e-002, - 7.8223798e-002, - 1.1501209e-001, - 1.2024343e-001, - -5.6786240e-002, - -4.8421534e-002, - -2.5415443e-002, - 2.4664879e-002, - 1.7783775e-002, - 2.0466227e-002, - 7.8206669e-002, - -8.2391143e-002, - -1.3995146e-002, - -2.0960454e-002, - -5.6618569e-002, - -2.6705178e-002, - -8.1531358e-002, - 6.4664818e-003, - 5.6946318e-002, - 5.0003662e-002, - 3.5673980e-002, - 8.0875426e-002, - -4.4495078e-002, - -2.6194380e-002, - 4.5188183e-002, - -4.2455744e-002, - 5.7249340e-002, - -4.6127242e-002, - -5.4839710e-002, - -5.0448334e-002, - -2.2395030e-004, - -6.2981968e-002, - 3.6554485e-002, - 4.5243127e-003, - 6.8154599e-003, - 1.6305659e-001, - 3.9595164e-003, - -1.0792651e-002, - -2.8054860e-002, - -9.9706967e-002, - 2.3929942e-002, - -3.5658959e-004, - 6.6546468e-002, - 7.6294884e-002, - -4.0440534e-002, - -8.1371512e-002, - -7.7127876e-002, - 3.4857333e-002, - 4.3231191e-002, - 2.2144645e-002, - -3.8698213e-002, - -5.4129054e-002, - -3.2626325e-002, - -7.0222190e-002, - -5.1754787e-002, - -9.5744838e-002, - -1.7610262e-003, - 8.7360648e-003, - -4.6748263e-002, - -4.4850953e-002, - 8.2298815e-002, - 1.0185814e-002, - -3.0866560e-004, - 1.6675645e-002, - -4.2935404e-002, - -3.1656641e-002, - -5.6516863e-002, - -4.7656267e-004, - 1.0889961e-001, - 1.2029252e-002, - -1.3472583e-002, - 3.6157205e-002, - 4.4803936e-002, - 1.5275167e-002, - -4.7686528e-002, - 6.0330901e-002, - 1.3728328e-002, - 4.8689836e-002, - -3.5294359e-002, - -7.4547708e-002, - 3.0394600e-002, - 8.6384237e-002, - -4.9979038e-002, - 1.3943821e-002, - -8.2317359e-002, - 2.6078427e-002, - -4.8139628e-002, - -5.8720671e-002, - 5.3289578e-003, - -2.4543964e-002, - -3.1049552e-002, - -6.8795054e-002, - 2.6130466e-002, - 6.4881211e-003, - -1.7466698e-002, - 6.9418212e-002, - 9.6543814e-002, - 1.6716383e-002, - 1.0116932e-001, - 3.1515754e-002, - -1.5792490e-001, - -3.1915346e-002, - -4.3203259e-002, - -1.3039328e-002, - 1.0861618e-002, - 2.0098174e-002, - -5.8931575e-002, - 4.5019833e-002, - -4.4827929e-002, - -8.5719969e-002, - 4.7105627e-002, - 8.1454794e-002, - 1.5516734e-002, - -5.0548980e-002, - 5.9127415e-003, - -7.5578193e-002, - 1.1628813e-001, - 4.7500758e-002, - 4.9223640e-002, - 2.2248040e-002, - -1.7063173e-002, - 6.7174653e-002, - -8.8027078e-003, - -7.9122977e-002, - -2.7534155e-002, - 1.8033777e-002, - -6.3064595e-002, - -3.2992531e-002, - -1.3414397e-002, - -3.7650237e-002, - -5.4990281e-003, - 4.9549050e-002, - -7.8256965e-002, - -4.6347502e-002, - -3.7844657e-002, - -4.6727423e-002, - 5.1371291e-002, - -3.1964828e-002, - -1.5232444e-003, - -6.8143489e-002, - -5.5095855e-002, - -1.0895044e-002, - -2.5604041e-003, - 2.7027105e-002, - -7.6982878e-003, - -9.5337685e-002, - -1.8635429e-002, - -1.0751357e-001, - -5.6070283e-002, - 1.4123461e-002, - -1.8192970e-002, - 4.4540436e-002, - 1.3600658e-002, - 3.2261098e-002, - 4.4861229e-002, - -1.5863787e-002, - -1.0092780e-002, - -3.9516555e-003, - 3.8360973e-002, - 6.1804829e-002, - 1.0870303e-001, - 4.7383438e-002, - -5.0590863e-002, - -5.2113776e-002, - 5.2393207e-002, - 1.2177198e-002, - 6.2526425e-002, - 8.3174224e-003, - -2.4071062e-002, - 2.8581013e-002, - -6.0028375e-003, - 1.5238535e-002, - 5.2025149e-003, - -3.6385591e-002, - -9.3463539e-003, - -9.7549044e-003, - 4.1434624e-002, - -3.5638211e-002, - 6.1524697e-002, - 1.2879217e-002, - -1.1074718e-002, - 7.5826917e-003, - -4.3450751e-002, - -3.4027473e-002, - 6.3700920e-002, - -5.2272643e-002, - -2.8750180e-002, - 4.0041018e-002, - -8.1966458e-002, - -1.0461089e-002, - 2.5452300e-002, - 6.7107297e-002, - -3.3918191e-002, - -1.0212989e-001, - -6.3527291e-002, - 3.1678548e-002, - -6.5778118e-002, - -1.6823229e-002, - 2.2988117e-003, - -4.8242461e-002, - -1.4582693e-002, - -4.9060246e-002, - -3.4256626e-003, - 4.1172518e-002, - 3.2772250e-002, - 2.4890066e-002, - 3.4522929e-003, - 4.4704585e-002, - -5.9967401e-002, - 1.4541680e-002, - -7.9411114e-002, - -6.5131143e-002, - -4.2051810e-002, - 4.2103006e-002, - -9.8683984e-004, - -5.0962061e-003, - -2.2606406e-002, - -1.2325980e-001, - 9.5086419e-002, - -1.9106034e-002, - -5.1992218e-002, - -6.7436377e-002, - -1.5798067e-002, - -7.5885603e-002, - 1.7614604e-002, - 3.0602185e-002, - -4.5707990e-002, - 5.0279499e-002, - 1.3599448e-002, - -8.4652879e-002, - 1.4275404e-002, - 5.3761838e-002, - 1.3130364e-002, - -5.7785349e-003, - 1.0995249e-001, - 3.6117865e-002, - 2.2136081e-002, - 1.1263325e-002, - -4.9338919e-002, - 4.2415991e-002, - -6.3570185e-002, - 5.1525003e-002, - 8.9408937e-002, - -4.3531507e-002, - 2.5382423e-002, - 5.7394710e-002, - 1.1827633e-001, - -1.4335949e-002, - 2.4596850e-002, - -1.8394004e-002, - 1.3479964e-002, - -5.5450915e-002, - -1.3887857e-002, - 3.7399926e-002, - 4.2692709e-002, - -9.1345703e-002, - -6.4179097e-002, - 5.1528849e-002, - 1.1923834e-001, - 8.0392828e-003, - -7.4190647e-003, - 1.1158220e-002, - 2.3106872e-002, - 2.5289633e-002, - -7.8109586e-002, - 4.4033891e-002, - 2.9868351e-002, - 2.5709704e-002, - 6.5446252e-003, - 1.7279125e-002, - 8.8849380e-002, - -4.2399471e-002, - 3.2297167e-002, - -3.3758385e-002, - 5.3666150e-002, - 3.7628322e-002, - -1.3602948e-002, - 8.3115154e-002, - -4.4130785e-002, - 1.5545953e-002, - -5.7188645e-002, - 3.3708440e-002, - 7.9527486e-003, - 7.2838427e-002, - -8.7159852e-004, - 9.8852335e-002, - 4.3261724e-002, - -2.2410237e-002, - -1.9969511e-002, - 1.3049591e-002, - 1.3520410e-001 -}; + -6.1782300e-002, + 1.2674258e-002, + 4.5557573e-002, + -3.1999024e-002, + 1.5042214e-002, + -2.2025290e-002, + -1.1691264e-001, + -1.1481735e-002, + -1.4446880e-002, + -1.5755706e-002, + -8.0576309e-002, + 2.0622295e-002, + -1.9724793e-003, + -1.2299200e-001, + -8.3279195e-002, + -1.0825949e-002, + 7.5347056e-002, + -3.6992287e-003, + 1.2980213e-002, + 5.9641118e-002, + 1.8884644e-002, + -5.5868450e-002, + 4.1899706e-002, + -2.0939881e-002, + 2.0535662e-002, + -9.9773254e-002, + -1.5328980e-002, + 2.1354349e-002, + 1.3485441e-002, + 6.2665707e-003, + -1.0335293e-002, + -4.1743319e-002, + 4.3513189e-002, + -4.2254620e-002, + -2.7446285e-002, + 4.5134873e-002, + 5.6054726e-002, + 6.2557771e-002, + 4.2653265e-002, + 7.6308850e-003, + 1.4700700e-002, + 5.4820763e-002, + -1.3939644e-002, + -8.8708573e-002, + 1.4383734e-002, + 4.0463345e-003, + 3.5856296e-002, + 2.7271902e-002, + 2.0721019e-002, + 3.5167562e-002, + -2.7007340e-002, + -1.3367771e-002, + -6.8606571e-002, + -1.1089227e-001, + 7.3041941e-002, + -5.2066383e-002, + -5.1117839e-003, + -3.7742692e-002, + -1.1895006e-002, + -5.7323089e-002, + -5.4802003e-003, + -8.4072455e-003, + 1.5633496e-002, + 4.6059069e-002, + -6.1861422e-002, + -3.3034801e-002, + 1.7182310e-002, + 1.1807449e-001, + 8.2171643e-003, + -1.4691311e-002, + -7.2660364e-004, + 4.6637366e-002, + -6.9687813e-004, + -2.7780373e-002, + 5.9544506e-002, + -5.6050055e-003, + -3.5444498e-002, + 1.2845303e-002, + -1.0379076e-001, + -8.5864760e-002, + 1.9192324e-002, + -2.6644473e-003, + 5.4431089e-003, + -9.2110237e-003, + 7.9344657e-002, + 4.7203951e-002, + 9.6834909e-002, + -1.0553527e-001, + -8.5097540e-004, + 5.9460688e-002, + 4.4844228e-002, + -2.8858692e-002, + 4.4496937e-002, + -3.9902243e-002, + 5.5557069e-002, + -1.1814152e-002, + -5.8464847e-002, + -1.0753965e-002, + 5.7336183e-002, + 2.6582677e-002, + 2.2119089e-002, + -1.4469086e-002, + 3.2141585e-002, + -1.0303352e-001, + -1.8856419e-003, + 3.8161312e-002, + -3.7091166e-002, + -5.1262587e-003, + 4.2556931e-002, + -5.8465556e-002, + 4.2193534e-002, + -1.4951154e-002, + 1.7423551e-002, + 2.7519487e-002, + -9.0048353e-002, + -2.6206603e-002, + -1.1536221e-002, + 4.5418578e-002, + -9.1746774e-002, + 1.6370112e-002, + 8.2439024e-003, + -1.7961312e-002, + -7.5403629e-002, + -6.6798880e-003, + -9.2569474e-003, + -1.8133432e-002, + -6.7922929e-002, + -3.3209516e-002, + 4.7587886e-002, + -4.4354675e-002, + -7.9939507e-002, + -1.0312521e-001, + -4.6389013e-002, + -6.8492137e-002, + 8.7253275e-003, + -1.0040243e-002, + -2.3972856e-002, + 1.9377428e-003, + -1.2364076e-002, + -3.3033927e-002, + 6.2238030e-002, + -4.7879158e-002, + -1.9680886e-002, + -3.2198806e-002, + -4.0721657e-003, + -1.7973043e-002, + 9.3910391e-003, + -9.1117967e-002, + 3.6036154e-002, + -9.3285589e-003, + -3.9239303e-002, + -1.4022387e-001, + 1.1102588e-001, + -9.1222642e-002, + -4.0301199e-002, + 7.1912258e-002, + 1.5040754e-002, + 8.1648312e-002, + 3.9995645e-002, + -1.3388074e-002, + 1.9629547e-002, + 3.5710780e-003, + 1.1166215e-002, + -4.0137762e-002, + 3.6284046e-002, + 4.1404491e-002, + -5.8754380e-002, + -7.8104994e-003, + -5.3507568e-002, + 1.3005354e-002, + -1.6914462e-002, + 8.5270739e-002, + 3.9979512e-002, + 4.5752537e-002, + -3.1159018e-002, + 4.9213792e-002, + 6.1313765e-002, + 4.3386180e-002, + -1.1103888e-002, + -2.9414395e-002, + -1.2976305e-002, + 6.2751925e-002, + 2.6120284e-002, + -2.4616119e-002, + -3.6435894e-002, + 7.1182254e-002, + 2.2753153e-002, + 3.0188200e-002, + -3.1009759e-002, + -8.5616927e-002, + -4.6712075e-002, + 1.0069141e-002, + -1.2036765e-001, + 3.4740635e-002, + 1.0916700e-001, + -7.5289504e-002, + -5.3676914e-002, + -1.6396310e-002, + 5.2259303e-002, + -2.2119146e-002, + 4.3186864e-002, + 5.1169779e-002, + 6.6785827e-002, + 8.4849447e-002, + -5.2696816e-002, + -6.5414943e-003, + 8.6775788e-002, + 8.7802920e-003, + 2.8938998e-002, + -6.8520041e-003, + 5.1510683e-002, + -2.9026553e-002, + 3.8173521e-002, + 2.2338277e-002, + 3.0163548e-002, + -4.3077452e-002, + 7.9805371e-002, + 4.7317864e-002, + -3.1363067e-002, + 3.0903885e-002, + -1.3112581e-002, + 4.6251235e-002, + 2.5813919e-002, + -5.2188163e-002, + 5.9587326e-003, + 1.0092254e-002, + 1.2104228e-002, + 2.7865320e-002, + 3.4901635e-002, + -2.5736803e-002, + 1.3229570e-002, + 3.6694281e-003, + 3.3012708e-002, + 2.9284882e-002, + 3.0060870e-002, + 4.5508139e-002, + -3.6974026e-002, + 7.7034396e-002, + -6.8227707e-002, + 5.3618194e-002, + -6.1636629e-002, + 4.1438304e-002, + 1.1367451e-002, + -4.4009108e-002, + -2.3843912e-002, + -1.6703032e-002, + 3.7265590e-002, + -7.8425072e-003, + 7.0384481e-002, + -2.4218783e-002, + -3.5625536e-002, + 1.8010625e-002, + 1.1966647e-002, + 2.5491626e-003, + 3.1251434e-003, + -2.6075724e-002, + -4.3802442e-002, + -1.2920483e-002, + 3.3085779e-002, + -3.9037317e-003, + -2.8269926e-002, + 4.1542553e-002, + -8.2930418e-002, + 5.6657974e-002, + 3.4391329e-002, + -5.5825221e-002, + 6.8989268e-002, + 1.2541652e-003, + -7.7722092e-002, + -4.6334370e-003, + 3.1744148e-002, + -5.5503811e-002, + -3.4445949e-002, + -9.4038308e-003, + -2.7828988e-002, + 1.0887660e-001, + 1.3636863e-002, + -3.7585580e-002, + 4.0418722e-002, + -1.3737476e-002, + -5.0488197e-003, + 1.3194491e-001, + 7.2649277e-002, + -3.6200249e-002, + -4.1687712e-002, + -1.7974402e-001, + -9.9629449e-002, + -8.8510199e-002, + -3.2055261e-002, + 1.7036375e-002, + 1.8071052e-002, + 4.4934493e-002, + -1.0864015e-002, + 9.9226525e-003, + -1.6564939e-002, + -3.4734325e-002, + 3.5725355e-002, + 3.0344723e-002, + -3.6905057e-002, + 1.4666105e-002, + -9.1517247e-002, + -3.3012325e-002, + 5.8220711e-002, + -6.8047909e-003, + 3.6517819e-002, + 8.7157879e-002, + -1.4120887e-002, + 5.4666271e-002, + 2.0673658e-002, + -5.8489896e-002, + -1.0321028e-001, + 1.7051732e-002, + -4.4728363e-003, + 7.1522488e-004, + -6.6825032e-002, + -3.0624456e-002, + 5.7023563e-002, + -1.1878060e-002, + 1.7099754e-002, + 4.3931414e-002, + 6.1445253e-002, + 3.9676417e-002, + 7.7224665e-002, + 6.4921134e-002, + -5.6517669e-003, + 5.5906816e-002, + -2.1154100e-002, + 2.4198912e-002, + 1.2288710e-002, + 3.5640310e-002, + -3.7175887e-002, + -6.0273241e-002, + 6.4682700e-003, + 2.1266448e-002, + -6.8591151e-002, + 1.1184946e-002, + 4.6699013e-003, + -1.0346103e-001, + -7.7362572e-002, + 4.7383361e-003, + -1.4630850e-002, + 3.7812788e-002, + 1.6292353e-002, + -4.8009838e-002, + 8.0999615e-002, + 2.1004391e-003, + 1.5541126e-001, + -6.1366286e-003, + -7.1757358e-002, + -1.8036409e-002, + 4.4754181e-002, + 8.4250625e-003, + 2.0321052e-002, + 2.3096646e-002, + -4.7739081e-002, + -3.6540263e-002, + -1.3962473e-002, + -1.4429499e-002, + 5.4134628e-002, + -3.4826503e-002, + -9.5953591e-002, + -2.5723076e-003, + 2.5258029e-002, + -1.7985838e-002, + -3.2436879e-002, + 7.4368827e-002, + 7.8647624e-002, + 1.0656742e-002, + 8.4282290e-003, + 2.5266494e-002, + 1.0782181e-002, + 7.0122588e-002, + 4.5656108e-002, + -1.7103947e-002, + 4.2780530e-002, + -9.6794177e-003, + -6.4130219e-003, + -9.2925547e-002, + 5.4742908e-002, + -7.5128799e-002, + -7.3489810e-002, + -3.0056779e-003, + -7.9295585e-003, + -2.1268989e-002, + -1.8030581e-002, + 1.8197354e-002, + -9.1941398e-002, + -6.5053760e-002, + -2.8177888e-002, + 6.2682028e-002, + -2.5915727e-002, + -1.5832074e-002, + 6.8064152e-002, + 7.3910585e-003, + 9.9715351e-003, + 1.4832463e-002, + -8.5346638e-004, + 1.7638664e-002, + 3.0446443e-002, + -1.2396491e-002, + -5.8601288e-002, + -5.7627198e-003, + -7.1554886e-003, + -6.3799636e-003, + -7.9695655e-002, + 2.4753204e-002, + 8.6758471e-003, + -4.9728861e-002, + 2.0786272e-002, + -7.6560881e-002, + 1.8730544e-002, + 2.1715688e-002, + 4.1880687e-002, + -4.0154045e-002, + -3.0255220e-002, + 7.5668890e-002, + 2.6577586e-002, + 6.0758844e-002, + 4.1263811e-002, + -7.2132197e-002, + -5.4040115e-002, + 4.5831681e-002, + 2.9148772e-002, + -9.9761159e-002, + -2.4308664e-002, + -5.9443444e-002, + 3.9842573e-002, + -4.8058590e-002, + -1.6081315e-002, + 5.2772543e-002, + 1.9132275e-002, + 1.3499840e-002, + -2.5313375e-002, + 4.1852174e-002, + 2.8461234e-002, + 3.5598046e-002, + -4.2019346e-002, + 3.0022497e-002, + 1.3199080e-003, + 8.3394564e-002, + 2.2949521e-002, + 4.1566899e-002, + 1.1383869e-002, + -2.6939783e-002, + -1.8963007e-002, + -6.3268458e-002, + 5.8324716e-002, + 4.8789982e-002, + 5.6035385e-002, + -2.0057577e-002, + 4.8354809e-002, + 6.4102491e-002, + 8.5367473e-003, + -4.4917671e-003, + 5.3137245e-002, + -3.4406597e-003, + -2.5126308e-002, + 3.6564998e-003, + 9.6593471e-002, + 7.4728111e-002, + -6.7266129e-002, + -4.9014918e-002, + 7.2046324e-005, + 1.0162088e-001, + 3.4409693e-002, + 7.3462774e-003, + -8.0225074e-002, + 4.8609099e-002, + 3.2217993e-002, + -2.8071970e-002, + -3.6815087e-002, + 3.0467444e-002, + 4.3287817e-002, + -1.3733658e-002, + 2.5769175e-002, + 2.6532442e-002, + 6.3705272e-002, + 9.0108580e-004, + -8.9331571e-003, + 4.0743375e-002, + 2.1807528e-002, + 7.9702732e-002, + -7.5750752e-003, + 7.0674335e-002, + 3.7582849e-002, + 3.9334641e-003, + -2.5679423e-002, + 2.2647574e-002, + -6.4712014e-002, + 2.4315794e-002, + 1.5494849e-002, + -3.9942923e-002, + 3.3496104e-002, + -5.9740340e-002, + 3.5474677e-002, + 6.6577221e-002, + 6.8351408e-002, + -7.7174045e-002, + -3.3267903e-002, + -4.3616992e-002, + 1.2970427e-001, + 6.0899210e-002, + 4.3444379e-003, + -1.0402039e-001, + 4.3108587e-002, + 1.3577371e-002, + 3.3900628e-002, + 7.3707838e-003, + -1.5925799e-002, + 6.4439821e-002, + 1.7075281e-003, + 1.0684273e-001, + 1.3675111e-002, + -1.8111888e-003, + -2.8508186e-002, + -6.5596762e-002, + 1.8536230e-002, + 2.3318748e-002, + 4.7302415e-002, + 7.7239329e-003, + -2.4929896e-002, + -3.5669784e-002, + 4.8605025e-002, + 9.7598834e-002, + 3.3591893e-002, + 1.3978895e-002, + 2.2590039e-002, + -5.5155328e-002, + -2.3844007e-002, + -2.8932963e-002, + -4.5784933e-002, + -2.5579789e-002, + 8.6706332e-002, + 8.5991126e-002, + -4.4830492e-002, + 1.7419718e-002, + 1.4916965e-002, + -6.2744229e-002, + -2.1218715e-002, + 5.9749921e-002, + 2.6471628e-003, + 1.4696082e-002, + -1.1916464e-001, + -7.4054943e-002, + 3.3702032e-002, + -7.2744375e-002, + 2.0153878e-002, + -4.7562683e-002, + -3.2418295e-002, + 1.8784044e-002, + 9.4509719e-002, + 8.6064590e-002, + -1.2657551e-002, + -3.8219708e-002, + -5.9906689e-002, + 3.8677878e-002, + 3.2909039e-002, + 1.3356926e-002, + -1.9001381e-002, + -3.9834512e-002, + 1.6185466e-002, + -2.1554965e-002, + -1.0883439e-001, + -2.9635956e-002, + 1.2873885e-002, + 2.7852743e-002, + 3.5614484e-003, + -4.7306763e-002, + -1.0771995e-001, + -7.9289260e-004, + 1.1021590e-001, + -6.1261912e-003, + 5.2735506e-002, + -5.0261529e-002, + 3.2092184e-002, + 3.1401447e-002, + 2.6629993e-002, + -2.9882337e-003, + -6.0317700e-002, + -3.0940994e-002, + -3.8375379e-002, + -1.0663192e-001, + -1.1058175e-002, + -5.6424824e-002, + -7.7026313e-003, + -4.1079471e-002, + -2.1629167e-002, + -2.6973772e-002, + -4.5878364e-002, + 1.5542578e-002, + -4.9103021e-002, + -1.0554701e-002, + -5.0947614e-002, + -3.1865395e-002, + 9.0008999e-002, + 4.5801038e-002, + 1.5787324e-002, + 6.1816926e-002, + 3.9975029e-002, + -8.0101743e-002, + 3.6589676e-002, + -4.0044532e-002, + -5.4152676e-003, + -2.7100833e-002, + 2.0669295e-003, + 4.2072166e-002, + -4.8541169e-002, + -6.0994910e-002, + 7.2269246e-002, + 1.8547974e-002, + 3.2317037e-002, + -3.7668570e-002, + 2.3090187e-002, + -8.4282566e-003, + 1.2909956e-002, + -4.6799208e-003, + -7.5882838e-002, + -4.5005968e-002, + 6.0924318e-002, + 1.5170746e-002, + -8.0718858e-003, + -3.1913614e-002, + 2.9448478e-002, + 5.6982375e-002, + -2.2421475e-002, + 2.7408554e-002, + -1.0052456e-001, + -3.0342741e-002, + -8.0221320e-002, + -5.2820631e-002, + 1.4287569e-002, + -3.5261023e-002, + -1.2712299e-002, + 1.0298138e-002, + -7.4545734e-002, + -7.1662807e-003, + -6.3049311e-002, + -3.3128714e-003, + -3.7018937e-002, + -9.2155629e-002, + 4.4295353e-003, + -2.5345078e-002, + -5.0175815e-004, + -2.2425974e-002, + 7.0790673e-002, + 4.6067398e-002, + 1.3356450e-002, + -7.5350427e-002, + 9.2272647e-002, + -6.0388207e-002, + 6.2880311e-002, + -4.6813092e-002, + 6.4358587e-002, + 6.5476593e-002, + -5.0385005e-002, + 1.1259635e-002, + -2.8642227e-002, + 6.0591769e-003, + 7.8259699e-003, + -4.0086083e-002, + -1.3107082e-002, + -2.5073934e-002, + 1.5301678e-002, + -6.1350007e-002, + -4.0860320e-002, + 4.5224779e-002, + -4.4892524e-002, + 8.8006431e-002, + -3.3282403e-002, + -5.6195537e-002, + -1.1931638e-001, + -6.8019421e-002, + -7.0651820e-003, + 1.0114029e-001, + 2.6799939e-002, + -4.5414349e-002, + 7.3662653e-002, + 2.6023897e-002, + -7.7197973e-002, + 1.8472004e-002, + 6.4325310e-003, + 1.0535758e-001, + -8.2482506e-002, + -1.0868944e-001, + 8.7186828e-002, + 4.2331149e-003, + 6.6302594e-003, + 5.0652627e-002, + -2.6295176e-002, + 1.1319735e-002, + -5.3688488e-002, + -8.3685938e-002, + 3.8054233e-002, + -2.5923609e-002, + 8.7603907e-002, + 4.4975322e-002, + 2.0615118e-002, + 3.7674950e-002, + 5.6434838e-002, + 1.0977012e-001, + 2.1349762e-003, + -1.4936346e-004, + 6.7930892e-002, + 3.2086590e-003, + -4.5878929e-002, + -4.4181125e-002, + 2.4715658e-002, + 7.9994617e-002, + 5.2384101e-002, + -9.5190518e-003, + -3.7239495e-002, + 1.9883359e-002, + 4.0730677e-003, + -1.1677479e-001, + -2.6374780e-002, + -7.9398641e-002, + -3.5523570e-002, + -1.8151457e-002, + -3.7191923e-002, + -1.0831981e-001, + 5.5198514e-002, + 8.2754639e-002, + -5.5996264e-002, + -6.5431323e-002, + 1.6211145e-002, + -6.8206035e-002, + -2.9416838e-002, + 5.3307249e-002, + 1.7472763e-002, + 3.7312882e-003, + -5.1498829e-002, + -6.2257189e-002, + -2.9692831e-002, + -2.4493198e-002, + -2.7319437e-003, + 5.8815114e-002, + -6.3249182e-002, + 2.0730820e-002, + 9.5563463e-003, + -2.2720249e-002, + 2.5296131e-002, + -1.9878781e-002, + -3.4238910e-002, + -2.4677844e-002, + 6.9236841e-002, + -3.4704441e-002, + -3.9318071e-002, + 5.7750083e-002, + 3.4211433e-002, + -5.0475709e-002, + 2.5174181e-002, + -4.6996048e-002, + 1.6221876e-002, + -2.6204170e-002, + 1.0630488e-002, + 4.5517196e-003, + 8.3863415e-002, + 4.8780028e-002, + 2.3656142e-002, + -8.5385372e-002, + -7.6803464e-003, + 1.3583644e-002, + 1.0156741e-001, + 1.1623477e-001, + 3.0703572e-002, + -1.8790478e-002, + -2.5434562e-002, + 2.6081461e-002, + -8.0973679e-002, + 4.7528492e-003, + 5.1709027e-002, + -2.7152886e-002, + 3.3078882e-002, + 9.5807816e-002, + -1.6742069e-002, + 5.2847289e-002, + 7.4190627e-002, + 8.4661383e-003, + -1.7127745e-002, + 2.5387176e-002, + -2.4425657e-002, + 1.0363293e-002, + 3.2901544e-002, + 2.4049224e-002, + -3.6364045e-002, + -1.8374024e-002, + 1.9170206e-002, + 3.5899319e-002, + 2.2884438e-002, + -4.2986435e-004, + -3.7263522e-002, + -2.4107817e-002, + -1.0160656e-002, + -5.2244378e-003, + 8.4713192e-002, + -3.3175117e-003, + -6.8918873e-002, + -1.0757423e-001, + 1.9995005e-002, + 1.0018587e-002, + -1.0031442e-003, + -2.6646668e-002, + -1.4140223e-002, + -1.9093589e-002, + 8.2412659e-002, + 5.0569231e-002, + -1.9249580e-003, + 1.6857775e-002, + 4.4516048e-002, + 2.9634803e-002, + -7.4675793e-002, + 6.9128286e-002, + 1.7838807e-002, + -1.5706998e-002, + 2.3497836e-002, + -2.7256676e-002, + -1.6892391e-002, + -6.2498894e-002, + 1.8814550e-002, + 6.7802861e-002, + -4.5010985e-002, + -7.9693020e-004, + -1.6417629e-002, + -1.6571552e-002, + -3.2170429e-002, + -3.1451461e-002, + 5.9127646e-002, + 4.2496269e-002, + 5.8440594e-002, + -3.7761868e-002, + 1.4543937e-001, + 4.6291259e-003, + -8.8031773e-003, + -3.7376149e-002, + 4.4444334e-002, + -3.2946165e-002, + 2.7709611e-002, + -4.6454274e-002, + -5.4184987e-003, + 1.9082159e-002, + 1.1097683e-003, + -7.1272377e-002, + 1.8112885e-003, + 2.6898226e-003, + -3.0686681e-002, + -1.9829229e-002, + 3.0867601e-002, + -6.2758817e-002, + -2.2846248e-002, + 6.0573296e-002, + 3.7414532e-002, + 3.6169907e-002, + -2.3442499e-003, + 2.5963449e-002, + -5.0418274e-002, + -7.0858380e-003, + 2.2793366e-002, + -4.5274123e-002, + 4.4264571e-002, + -5.5435866e-002, + -6.0444822e-002, + -4.4730927e-002, + -2.6702128e-003, + 3.0721521e-002, + 3.9441000e-003, + 8.3714830e-002, + -1.2824805e-002, + 8.9065027e-002, + -4.1791317e-002, + -9.6506591e-004, + -2.2150161e-002, + -5.4266803e-002, + -7.9756811e-002, + 2.9723999e-003, + -5.4652294e-004, + -8.3350132e-002, + 1.0241351e-002, + -9.6004506e-002, + 1.1043342e-002, + -1.0036827e-001, + 5.4166215e-002, + 5.3435462e-002, + 1.0602215e-002, + 2.9868847e-002, + -2.4597423e-003, + 1.1437786e-002, + -4.2279579e-002, + -8.8732642e-003, + -2.9476925e-002, + 3.6694209e-002, + 3.3176455e-005, + -7.3778252e-003, + -3.9144818e-002, + -8.3308862e-003, + 4.6791993e-002, + -1.7037485e-003, + 4.5892237e-002, + 1.5597981e-002, + -5.6087508e-002, + -4.1107610e-005, + -1.0683418e-002, + -2.6103976e-002, + -8.4348999e-003, + 3.2082383e-002, + 1.4938214e-001, + 3.9964806e-002, + -7.8254583e-003, + 4.6722479e-002, + 9.3200915e-002, + 2.4464994e-002, + 8.3718835e-004, + 1.5250387e-002, + -1.2400454e-001, + -2.8639656e-002, + -1.5938766e-002, + -2.5676238e-002, + -5.1847115e-002, + 1.7639941e-003, + 4.9326733e-003, + -1.5856443e-002, + -9.1307767e-004, + -1.5554562e-002, + 2.5941199e-002, + -2.9757970e-002, + 1.2201936e-001, + 8.0973215e-002, + 1.7146982e-002, + 1.4736881e-002, + 6.0467585e-002, + 5.4698972e-002, + 2.5876279e-002, + 1.0164087e-002, + 3.8201202e-002, + -6.0518215e-002, + -1.3895876e-002, + 3.4728204e-002, + -1.1711300e-001, + -1.1216734e-002, + -3.9340786e-002, + -2.7309751e-002, + 5.9063770e-003, + 2.0738498e-002, + -1.3812395e-002, + -5.7982126e-002, + -9.3680977e-002, + -4.9666791e-002, + -2.6529709e-002, + 5.2766295e-002, + -2.1506279e-002, + 9.3091830e-002, + -3.5081971e-002, + 1.4449703e-002, + 5.8269304e-002, + 1.0329005e-001, + -3.4264617e-002, + -1.9998674e-002, + 4.0219340e-002, + 2.0651887e-002, + 5.2208561e-003, + 2.1487670e-002, + 2.4204968e-002, + 3.0673837e-002, + -8.5293543e-003, + -5.3952186e-002, + 8.9865270e-002, + 1.0436717e-001, + -9.7344984e-003, + -9.7393746e-003, + 5.2162345e-002, + 6.8291250e-003, + -3.3926390e-002, + -3.5345884e-002, + -2.1419424e-002, + 2.4503709e-002, + 4.4872568e-002, + -3.6811060e-002, + 4.6761401e-002, + 4.9242905e-002, + 2.9535711e-002, + -7.5315008e-003, + 8.4931550e-003, + 1.3235857e-001, + 8.4181971e-002, + -6.3526263e-002, + 4.1655473e-003, + 6.3417279e-003, + -1.3065747e-002, + -5.7645495e-002, + 1.8950407e-002, + 3.6717958e-002, + 1.2058270e-001, + 2.9698808e-002, + 6.3712863e-002, + -7.8927013e-002, + -1.1092228e-001, + 7.5127329e-002, + 3.6792936e-002, + 1.8047426e-002, + 1.6372435e-002, + -1.1358573e-002, + -1.1114199e-002, + -3.1011890e-003, + 1.2753148e-001, + -1.3063278e-003, + 2.9175038e-002, + 1.0744000e-002, + 8.5396074e-003, + 3.0555550e-002, + 1.9846964e-002, + -2.0887290e-003, + 7.4108765e-004, + -6.8980202e-002, + -6.9539294e-002, + -7.1891402e-002, + 2.6483042e-002, + -1.0604522e-001, + 1.4946154e-002, + -2.0885875e-002, + 8.1620406e-002, + 2.2391518e-003, + -4.3108583e-002, + -2.8345459e-002, + 2.1767961e-002, + -4.1509277e-002, + 5.0332798e-002, + -3.0747398e-003, + 8.1280247e-003, + -2.8574311e-002, + -3.7557299e-002, + 4.6116535e-002, + -7.5548776e-002, + 4.2485208e-002, + -1.2735059e-002, + -4.8713882e-002, + 3.4080268e-002, + 3.8109829e-002, + -7.9933234e-002, + 5.0868655e-003, + -3.6956005e-002, + -6.5608678e-003, + 6.1566793e-002, + 3.9747615e-002, + -7.0776849e-003, + -1.0039001e-002, + 1.0635588e-001, + -3.2262564e-002, + 6.6284637e-002, + -1.5602956e-002, + 9.8826341e-002, + 2.8765472e-002, + 4.9988770e-002, + 2.8083188e-002, + 3.7850396e-003, + 3.8099036e-002, + -6.2803094e-002, + -8.0284071e-003, + 1.7678623e-002, + 1.5384533e-001, + 3.0604908e-002, + -2.2938654e-002, + -6.6147444e-003, + 8.0228244e-003, + 6.3229249e-002, + 1.9888120e-002, + -1.2483914e-002, + -3.3020847e-002, + 5.4285124e-002, + -2.2046600e-002, + 7.6270296e-002, + -3.8125981e-002, + 4.2116981e-002, + 6.8249119e-002, + 4.9569658e-002, + -1.2181580e-002, + -3.3950151e-002, + -3.3512560e-002, + -4.0037716e-002, + 3.8517111e-002, + -3.0444190e-002, + -1.8608773e-002, + 1.5643509e-002, + 4.0250976e-002, + 1.9776990e-002, + -3.1560979e-002, + -3.1229293e-003, + -2.5832801e-003, + 2.7968081e-002, + -5.6392681e-002, + 4.7360525e-002, + 3.8619319e-003, + 9.9891506e-002, + -1.8199130e-003, + 3.1119514e-003, + -9.1106029e-002, + -1.4519250e-002, + 3.7010312e-002, + -1.1213690e-002, + 2.1256532e-002, + -5.3987387e-002, + 5.7866117e-002, + -4.2626330e-002, + -3.3483769e-002, + -5.2898877e-002, + -6.7225352e-002, + 5.1417756e-002, + 1.3929020e-003, + 5.2022234e-002, + 1.0592230e-001, + -6.8998892e-002, + -7.3435118e-002, + 3.0523655e-002, + -5.7162591e-003, + -3.2771503e-002, + 9.2367770e-003, + -6.7747716e-003, + 1.0333099e-002, + -1.5577876e-002, + -6.7817347e-002, + -6.6533637e-002, + -6.3984097e-002, + 5.6216531e-002, + 1.5579751e-002, + -2.7104760e-003, + 2.0901166e-002, + -1.1389339e-002, + 2.4314314e-002, + 9.6320945e-003, + -3.5425250e-002, + 2.9816167e-002, + -1.0582802e-001, + 7.9031755e-002, + 5.8936482e-002, + 4.9235081e-002, + -2.0598427e-002, + 2.7257218e-002, + 8.3473318e-002, + 1.0047121e-001, + 7.7116867e-002, + 3.9518492e-002, + 6.3112265e-003, + -6.8158283e-002, + 8.2755720e-003, + -1.4671408e-002, + 1.0928921e-001, + -5.3580922e-002, + -4.9000311e-002, + 9.9920986e-002, + 3.5724099e-002, + 3.0645803e-002, + 2.1810846e-003, + -3.5472111e-002, + -5.8047398e-002, + 4.6521237e-002, + 5.3030675e-002, + 1.6183593e-002, + 4.7161315e-002, + 1.5496372e-002, + -2.6065334e-002, + 5.4108355e-002, + 1.1113747e-001, + -4.3256641e-002, + 1.6776514e-002, + -9.2777987e-002, + 1.0831881e-001, + 2.6550297e-002, + 5.6809097e-002, + 4.1708284e-003, + -9.3188930e-002, + -3.7166019e-002, + 7.2595776e-002, + -5.8774162e-002, + -8.4078954e-003, + -8.3732623e-002, + -1.4874571e-002, + 4.1882968e-002, + -3.2712401e-002, + -2.7953154e-002, + 1.1313205e-002, + 4.9524990e-002, + 2.0294329e-003, + 3.8285760e-002, + -1.4648978e-002, + -3.5010308e-002, + 3.2018027e-002, + -1.7151604e-002, + -9.6536966e-002, + -4.6726273e-002, + 1.7288478e-002, + 1.5788740e-002, + 5.2848095e-003, + 4.1795447e-002, + 4.6331282e-002, + 7.0958286e-002, + -3.3004895e-002, + -1.5541634e-002, + -6.4899819e-002, + 4.4813983e-002, + 2.1314689e-002, + 2.5903378e-002, + 3.1412995e-002, + 2.7655815e-002, + 7.0916690e-003, + 3.6198660e-002, + -2.9768515e-002, + 5.8014817e-002, + -5.8727472e-002, + -1.2787628e-002, + 1.2855854e-001, + -7.0659467e-002, + -9.9019211e-002, + -3.2969432e-002, + 3.1190632e-002, + 6.5956753e-003, + -1.6987652e-002, + 4.0088843e-002, + -1.0857916e-001, + 1.1385790e-002, + 6.8736591e-002, + 9.1859027e-003, + -2.2753959e-002, + 6.5639798e-002, + 4.4619698e-002, + -5.3424194e-004, + 3.2475239e-002, + -5.5982848e-002, + -5.9416171e-003, + -2.6137328e-002, + 4.7534015e-002, + -4.3905563e-002, + 4.7139261e-002, + -5.0539423e-002, + -5.2509019e-003, + -8.4340990e-003, + 1.7266091e-002, + -6.5954891e-002, + -1.1344100e-001, + -2.5794929e-002, + 5.3678895e-002, + -1.0500180e-002, + 5.6847837e-002, + -3.0370988e-002, + -9.2272021e-004, + -1.1716566e-002, + -6.7153889e-002, + -4.9491944e-002, + -2.7151079e-002, + 4.9084906e-003, + -3.3137805e-002, + -5.7067625e-002, + -3.5807416e-003, + -1.9012110e-002, + -2.3489886e-002, + -6.6147208e-002, + -1.9730903e-002, + -5.7617192e-002, + -1.7743738e-002, + 6.2747755e-002, + 3.0746059e-002, + -2.1208817e-002, + 1.0724738e-002, + -9.5295048e-002, + -8.3696293e-003, + 2.8928609e-002, + 7.7547429e-002, + -2.8433474e-002, + 3.9000811e-002, + 1.8594177e-002, + 7.3604845e-002, + -4.0570215e-002, + 4.0428101e-002, + 5.2162122e-002, + 6.9720490e-002, + 1.3917348e-003, + -4.1967149e-002, + 1.2040326e-002, + -9.0859684e-002, + 3.0619641e-002, + 7.9828021e-002, + -9.5582231e-002, + 4.4977158e-003, + 5.3050166e-002, + -3.9280557e-002, + 2.1825815e-003, + 2.6836286e-002, + -1.0693240e-002, + 1.2507669e-002, + 8.7551531e-002, + -4.2170924e-002, + 7.4021050e-002, + -5.0257861e-002, + 4.2440318e-003, + 2.8498362e-002, + 4.0712278e-002, + 1.3630666e-002, + 3.7506385e-002, + 2.9021782e-002, + 9.4969857e-003, + 7.3668316e-002, + -1.0430524e-002, + 7.8640111e-003, + -1.9579539e-002, + -1.3354780e-002, + 4.6553749e-002, + -1.5359398e-002, + -3.6958328e-002, + 3.9183126e-002, + 9.0763364e-002, + -5.7310947e-002, + 6.8567752e-002, + 3.0379537e-002, + -1.7131879e-002, + -4.9845297e-002, + 6.6236979e-002, + -3.5226094e-002, + 4.1319436e-002, + -1.0414640e-002, + -7.3110434e-002, + -6.7060543e-003, + -2.2661736e-003, + 5.4214708e-002, + -5.6731971e-002, + 8.0169623e-002, + 6.8708173e-002, + 5.1555900e-002, + -2.3028383e-002, + 2.3845756e-003, + 4.3290569e-002, + -5.0088302e-003, + -8.5495950e-003, + -2.2929081e-002, + -1.4934858e-002, + -1.9331882e-002, + 3.1952820e-002, + 2.2837591e-002, + -6.5833588e-003, + 9.3564125e-002, + -5.3479061e-002, + -4.7856971e-003, + 7.8291548e-002, + -6.4278719e-002, + 5.2534052e-002, + -8.4991604e-003, + -2.5331472e-002, + -1.1670703e-004, + -1.6794583e-002, + -3.6946100e-005, + 7.9706385e-002, + 1.8011858e-002, + 4.5273832e-002, + 1.9568899e-002, + 4.5061760e-002, + -2.6682717e-002, + -1.8814340e-002, + -8.5389413e-003, + -4.6897567e-002, + -7.9016702e-002, + -2.1058150e-005, + 5.8849807e-002, + -2.5161493e-002, + 6.0245233e-002, + -8.2636501e-002, + -6.9368318e-002, + -1.5064100e-002, + -3.4932382e-002, + 4.4579915e-003, + -5.9080060e-003, + 8.9889824e-002, + 8.1831512e-002, + 1.6338686e-002, + -5.4180978e-002, + -5.3267629e-003, + -2.8476462e-003, + 1.7450439e-002, + -2.4213885e-002, + 7.1383978e-003, + -8.5575620e-002, + -9.7688859e-002, + 5.4026353e-002, + 6.8738257e-002, + -3.1782928e-002, + 2.9354257e-002, + -1.6843133e-002, + -3.4228093e-002, + -4.9087072e-002, + -8.8609944e-003, + -4.2395609e-002, + 6.0299570e-002, + -3.9805763e-002, + -3.9969178e-002, + -1.0972287e-002, + -3.1903343e-002, + -2.3021388e-002, + 9.5381824e-002, + -3.8131819e-002, + -2.7944014e-002, + 7.9797347e-002, + 1.5055618e-002, + -6.0223999e-002, + 2.1349786e-002, + 1.4010766e-001, + -7.0365161e-002, + 9.5470745e-002, + -5.5280731e-002, + 9.0676740e-002, + 8.0165216e-003, + 3.8071961e-002, + 3.4452332e-002, + 1.2608974e-001, + 7.4568874e-003, + 2.2179776e-002, + -5.1449927e-003, + -1.5259731e-003, + 2.4388062e-002, + 2.8159902e-002, + 6.3528510e-002, + 7.2459203e-002, + -6.6724867e-002, + 4.9840343e-002, + 1.0288982e-002, + -3.7523292e-003, + 2.4660586e-002, + 1.0905181e-001, + 2.0534327e-002, + -1.6624929e-002, + -4.7427409e-002, + 7.1932143e-002, + 2.4785276e-002, + -1.2656870e-002, + -4.3142163e-003, + -8.5065080e-002, + 1.1401731e-002, + 4.2186129e-002, + 1.7953548e-002, + -9.5471407e-003, + -2.7867915e-002, + 7.5845281e-003, + 3.6129267e-002, + -1.2896952e-001, + -1.4991468e-002, + 3.9146522e-002, + -7.6952239e-002, + 2.3154057e-002, + 3.2631339e-002, + 3.6032235e-003, + 2.4348659e-002, + -5.0004772e-003, + -3.9711602e-002, + -2.5957781e-002, + -8.4744957e-003, + -6.8234352e-002, + -2.8744676e-002, + 2.3341254e-002, + 4.3007108e-002, + 1.2712390e-002, + 2.8427956e-002, + -1.5923634e-002, + 4.4011784e-002, + -1.5711433e-002, + 4.4606989e-002, + -1.7483925e-002, + -1.2423254e-001, + 6.2454024e-003, + 6.6168154e-002, + 2.1085300e-002, + 9.0749477e-003, + -2.0534154e-002, + 6.9048807e-002, + -9.2613632e-003, + -2.7695812e-003, + -4.1107764e-002, + 2.1935377e-002, + -8.4933698e-003, + 7.9754080e-002, + 2.8930188e-002, + -1.5746665e-002, + -5.5368360e-002, + 4.8760088e-002, + -2.3262447e-002, + 1.9970261e-003, + 1.7181455e-002, + -2.6662315e-002, + 2.9476649e-003, + 3.6398404e-002, + -1.0718664e-002, + -1.3419702e-002, + -1.4303328e-002, + -5.1753021e-002, + -8.8633620e-003, + -6.6385388e-002, + -1.8360778e-002, + 4.0996838e-002, + -2.1821426e-002, + 1.9446502e-002, + 7.8258137e-002, + 1.1935359e-003, + 1.2671015e-001, + 5.4051017e-003, + 8.9554422e-002, + 5.1612989e-002, + -5.9613506e-002, + 1.0465684e-001, + 3.5325477e-002, + -7.4798564e-002, + -6.6674861e-002, + 2.8210488e-002, + 3.9519939e-003, + 4.2419282e-002, + 4.8733699e-002, + 4.9734069e-002, + -8.2263082e-002, + -1.0431084e-003, + 6.5382265e-003, + 2.7104024e-002, + -6.1504411e-002, + -1.1030328e-001, + -1.1088406e-001, + 4.6883361e-002, + -4.8929726e-002, + -1.1842483e-002, + -3.2343663e-002, + 2.8083963e-002, + 6.5341653e-003, + 6.4197433e-003, + -5.1922064e-002, + 5.9610106e-002, + -3.0492144e-003, + -2.0038627e-002, + 6.6832718e-003, + 3.5125897e-002, + 4.9157559e-002, + -1.1599903e-002, + -8.6904299e-004, + -8.6599262e-002, + 6.2299405e-002, + 9.4208251e-003, + 7.3197513e-002, + 7.5060589e-003, + 1.5188546e-002, + 8.4467481e-003, + 1.6309540e-002, + -3.6380831e-002, + -1.5684802e-002, + -1.2750901e-004, + -3.9540578e-002, + -2.6086647e-002, + 5.0982353e-002, + -3.8994541e-002, + -7.8152817e-002, + -2.1288151e-002, + 3.2125646e-002, + -4.9028664e-002, + -5.2017685e-002, + 4.8786860e-003, + 8.7710015e-002, + 3.7430190e-002, + 3.6962894e-002, + -1.4930609e-003, + -6.6490921e-002, + 1.1278370e-001, + 1.6259975e-002, + -1.1381280e-001, + 3.0235399e-002, + 7.9035487e-004, + -3.8638327e-002, + 4.3147897e-002, + 8.8130106e-002, + -1.4913096e-002, + 3.9678262e-003, + 3.6966598e-002, + 6.3040724e-002, + -4.9035837e-002, + -3.0293084e-003, + 7.2467143e-002, + 3.3553250e-003, + 1.1619490e-002, + 2.5048420e-002, + -1.3875509e-003, + 4.3384801e-003, + -1.9225635e-002, + -3.4205233e-002, + -6.1043519e-002, + 2.7920233e-002, + 1.5845125e-002, + -3.1788360e-002, + 5.5265277e-003, + -8.8053862e-003, + 5.1596808e-002, + -2.6382888e-002, + 1.3528723e-002, + 9.7188179e-004, + 4.5393222e-002, + 1.4350879e-001, + -8.3970455e-002, + -5.3058686e-002, + -1.7168532e-002, + 5.2123339e-002, + -1.0874975e-001, + -8.4692593e-002, + 2.0470836e-002, + 1.3786291e-002, + -4.3504389e-002, + -5.5751144e-003, + -9.6933329e-002, + -6.0058163e-002, + -5.0236621e-002, + 2.1957145e-002, + 4.6918366e-002, + 5.4757597e-003, + -1.2851732e-001, + 5.3503448e-002, + -7.8722951e-002, + 2.5143808e-002, + 3.8130327e-002, + 1.1190727e-001, + -2.2211112e-003, + 3.4395397e-003, + -6.6144203e-002, + -1.3250907e-002, + 1.4285490e-002, + -4.7426798e-002, + 4.3459402e-002, + 1.9567583e-002, + -3.2933903e-002, + 7.9884585e-003, + -3.6921691e-002, + -5.2601711e-002, + -3.7588436e-002, + -5.7858993e-002, + -3.9355983e-003, + -1.9668686e-002, + 1.7962753e-002, + 7.1980552e-002, + -1.2059618e-002, + 3.4579944e-002, + -1.8839556e-002, + -1.7604317e-002, + 7.8825547e-002, + 8.4168663e-003, + -1.6198144e-002, + 7.7326058e-003, + -1.4566324e-001, + 7.0918323e-002, + 2.7943557e-002, + 1.5952735e-002, + 5.3303709e-002, + -8.3804957e-002, + -6.6985571e-002, + -1.3191151e-002, + -4.2864677e-002, + -5.9477390e-002, + 4.9906263e-002, + 4.4401362e-002, + 4.7588494e-002, + 2.5451538e-002, + -3.7015590e-002, + 1.8897192e-002, + 8.5686801e-002, + 5.1878702e-003, + 4.3894402e-003, + 1.8570041e-002, + 5.5022301e-002, + -4.0645765e-002, + -5.0799009e-002, + -2.3060691e-002, + -5.3046714e-002, + -2.9921308e-002, + -4.2374683e-002, + -2.0684933e-003, + -3.1561538e-002, + -2.6520727e-002, + 2.2842715e-002, + 4.7241369e-002, + 1.5938051e-003, + -3.1393040e-002, + -2.2067479e-002, + 1.3659794e-002, + -3.1810808e-002, + 5.2038109e-002, + 5.5282333e-002, + 7.3406997e-002, + -8.5669402e-002, + 3.0521734e-002, + 1.3090940e-005, + -4.7165506e-002, + 4.8765186e-003, + -2.9407043e-002, + 1.9843096e-002, + -2.7632043e-002, + 1.4379705e-002, + 3.2263917e-002, + 5.4751887e-002, + -3.4032149e-002, + -9.9526757e-003, + 2.5634676e-002, + 2.5738815e-003, + -5.5256747e-003, + 4.1466343e-002, + -2.8007927e-002, + 8.2962880e-002, + 5.3608424e-002, + -6.6232246e-003, + -1.1529210e-001, + -3.5498392e-002, + 2.0099626e-002, + 4.5948750e-002, + 1.7926143e-002, + -5.9056747e-002, + -9.6797251e-002, + -2.4358114e-002, + -6.1063654e-002, + 2.0158520e-003, + 8.7163319e-002, + -8.9921518e-002, + -9.8666202e-003, + -9.3794619e-004, + 4.5791584e-002, + 8.5254269e-003, + 3.7372616e-002, + -5.3279812e-002, + 7.8030247e-004, + 1.1843336e-002, + -7.4212330e-002, + 1.1414296e-001, + -4.1485582e-002, + -2.2089769e-003, + -6.1672113e-003, + 9.8929283e-003, + -7.8207292e-002, + -4.8161136e-003, + -7.2059255e-002, + -3.5922784e-002, + -1.9786275e-002, + 1.5833828e-002, + 5.2545743e-002, + 9.9962946e-003, + 1.0473584e-001, + -2.6380727e-002, + 6.2664438e-002, + -1.0710067e-002, + -5.6621248e-002, + -6.2640861e-002, + 2.4906349e-002, + 4.9470811e-002, + 1.5582134e-002, + -1.1034795e-002, + 3.7179257e-002, + -7.9083587e-002, + 3.1086424e-002, + -1.3685837e-002, + -3.7552842e-002, + -2.9528094e-002, + -1.7008381e-002, + 3.7137697e-002, + 4.5722891e-002, + -6.7639973e-002, + 1.0411136e-002, + -9.5948463e-002, + -7.6491282e-002, + 1.0515447e-001, + -7.2395284e-002, + 2.6384356e-002, + -9.7803448e-004, + -1.2178894e-002, + -4.3298010e-002, + -1.4118456e-002, + -6.3811250e-003, + 3.5987445e-002, + -8.0165530e-003, + -2.0932915e-002, + -1.3187860e-002, + -4.3430054e-002, + -3.0586505e-002, + 9.8974586e-002, + 5.5685044e-002, + -1.1098877e-001, + 3.4420705e-002, + 2.6632342e-002, + 2.8768821e-002, + -5.6656185e-002, + -2.4035643e-002, + 4.4599132e-002, + 5.2401286e-002, + -3.1991215e-002, + 3.8827361e-003, + 4.7437513e-002, + 6.7940056e-002, + -2.3003581e-002, + -6.3955657e-002, + 1.0081807e-001, + -4.4211577e-003, + -4.1263060e-002, + -5.8970926e-002, + -2.4349696e-002, + 3.2867209e-002, + -2.4008048e-004, + 6.9810225e-002, + 1.5450610e-002, + 2.3319726e-002, + -1.0005801e-001, + 6.2685066e-003, + 3.3200964e-003, + -6.0496946e-002, + -8.8884008e-003, + 1.6134449e-003, + -7.2506916e-002, + 1.8835241e-003, + -9.1372012e-003, + -3.9166883e-002, + -3.0408037e-002, + 1.3371700e-001, + -8.4833604e-002, + -2.0082991e-002, + -6.7833227e-002, + 2.8939942e-002, + 3.2760884e-002, + -1.1389661e-004, + -4.3484404e-002, + -5.9579661e-002, + 8.5932179e-002, + -1.2312202e-001, + 4.5080645e-002, + 7.8749960e-002, + 8.5343585e-002, + 8.3452328e-003, + 3.8885343e-002, + -5.4756855e-002, + -5.2942923e-002, + -8.5138845e-003, + 6.6560990e-002, + -5.8418572e-002, + 2.3870988e-002, + 1.8931370e-002, + 5.9471104e-002, + -8.6742031e-002, + -4.4123808e-002, + 1.7375058e-002, + -6.3987147e-002, + 6.3031471e-003, + -5.2766788e-002, + 1.6462106e-001, + 3.4654166e-002, + 1.8664640e-002, + 2.0932790e-002, + -4.3515283e-003, + -2.2953377e-002, + -4.1758215e-002, + 5.7430654e-002, + -5.3591655e-002, + -4.6850896e-002, + 4.1910973e-002, + 1.1157103e-004, + -2.2629752e-002, + 6.5200275e-002, + -2.2924410e-003, + -1.0436647e-002, + -5.9483696e-002, + -3.6216756e-003, + -1.3438807e-002, + 1.2187937e-002, + -1.3021007e-002, + 3.3878909e-002, + -2.2899083e-002, + -2.3054076e-002, + 4.7348343e-002, + 2.8499078e-002, + -1.7052032e-003, + -1.3753287e-002, + -2.9609163e-002, + -1.3025597e-002, + -6.1569574e-003, + 8.8234767e-003, + -4.4598847e-002, + -7.8588213e-002, + -1.8194816e-002, + -6.0633228e-002, + 3.4385559e-003, + 5.9361395e-002, + 8.2140593e-002, + 1.4939745e-002, + -3.1639344e-002, + -1.2825312e-002, + -3.5217707e-002, + -1.9635520e-002, + 3.1739325e-002, + -2.7107236e-002, + 4.2299225e-002, + 1.9675302e-002, + -2.6289167e-002, + -3.7438885e-002, + -6.5984833e-002, + 4.2748691e-003, + -3.3482818e-002, + -2.6690228e-002, + -3.6330879e-002, + -4.4149481e-002, + -1.5138292e-002, + 2.8942426e-002, + -1.6976163e-002, + -5.9543856e-002, + 7.4778255e-002, + 2.8451870e-002, + 6.2164171e-002, + -4.0415989e-002, + -4.2244492e-002, + 4.6573272e-002, + -1.8520798e-002, + -6.9907182e-002, + 1.1254468e-002, + 7.4484796e-002, + 2.3774997e-003, + -1.9725799e-002, + -1.1798209e-002, + -4.5521440e-002, + 2.7514728e-002, + -7.2190342e-002, + -2.9948385e-002, + -4.6214661e-003, + -7.9002112e-004, + 5.0066640e-002, + 5.3029490e-004, + -1.8871680e-002, + -1.9149132e-002, + 1.4202910e-002, + 3.0816823e-002, + -9.0922658e-002, + 2.0531126e-002, + -6.7237163e-002, + 3.5264507e-002, + -4.3345885e-002, + 4.3736504e-002, + -5.0592953e-002, + -1.9560698e-002, + 7.4759581e-002, + -1.5500722e-002, + -3.2266454e-002, + -1.4974813e-002, + -3.1814004e-003, + 7.1627759e-002, + -1.0014999e-002, + -4.4711458e-002, + 8.7059742e-002, + -6.6573462e-002, + 6.3231174e-002, + -3.9306487e-002, + -2.8763870e-002, + -3.4594112e-002, + -1.7333119e-002, + 2.7978317e-002, + -4.4558274e-002, + 4.0316504e-002, + -9.8056766e-003, + -1.1169830e-001, + 2.6367365e-003, + -6.3107346e-002, + -4.7852804e-002, + 1.4822515e-002, + -5.5825883e-002, + 8.4652163e-002, + 3.7276497e-002, + 5.8380260e-002, + 1.0308762e-003, + -1.7541914e-002, + -8.1294365e-002, + 2.6500601e-002, + 1.1576202e-002, + -2.8475597e-002, + -3.6427135e-002, + 1.0486963e-002, + 3.5852026e-002, + 1.7207452e-002, + -4.2250927e-002, + 9.2791032e-002, + 2.0848079e-002, + -1.0474350e-002, + -1.8906142e-002, + -3.9285383e-004, + -1.0622005e-001, + 3.0895699e-002, + 7.2310785e-002, + -4.9338252e-002, + -6.6112754e-002, + 1.7508514e-002, + 1.1321926e-003, + -2.4713477e-002, + -4.2692403e-002, + 3.6496772e-002, + -8.7503250e-003, + -2.3071223e-002, + 6.0697872e-002, + -1.6211612e-002, + 2.7467415e-002, + -2.3241079e-002, + 7.6276171e-003, + -6.3827211e-002, + 6.7257864e-002, + 2.2947393e-002, + 1.7785758e-002, + 4.1818868e-003, + 3.5410854e-002, + 1.0202987e-003, + -7.0561943e-003, + -2.0778987e-002, + 3.2302118e-002, + 4.8279751e-003, + -2.3094511e-002, + -5.9461961e-002, + 4.2486021e-002, + -8.3970460e-002, + 3.1847805e-002, + 1.4792567e-002, + 8.3035216e-002, + -1.9097569e-002, + -3.7566345e-002, + -1.9294024e-002, + -2.9735991e-002, + -1.6259656e-002, + 8.7230220e-003, + 1.5761104e-002, + 1.1869692e-002, + 3.3119792e-002, + -1.4862967e-002, + 1.1372784e-002, + -3.2009087e-002, + -2.9738311e-002, + 7.4243184e-002, + 4.4110110e-002, + -2.6555813e-002, + -1.4281194e-002, + -3.1948659e-002, + 2.7573051e-002, + 4.3762921e-003, + -1.5129696e-002, + -1.7735857e-002, + -4.4445686e-003, + -5.8616688e-002, + -2.7569930e-002, + -4.5140779e-002, + -7.2200604e-002, + 1.3667304e-002, + 5.7192972e-002, + -6.3690024e-002, + 5.5174808e-003, + -5.8892530e-002, + -3.6233013e-002, + 8.6180660e-002, + -6.4381045e-002, + 8.1908618e-002, + -8.2615195e-003, + -8.7344886e-002, + -3.6686884e-002, + -4.3487249e-002, + -2.7761943e-002, + -4.3954059e-002, + 1.0761718e-001, + -3.3942906e-002, + -5.6751929e-002, + 5.3761364e-002, + -8.2361460e-002, + -2.0107493e-002, + -1.3391457e-001, + -2.7865675e-002, + -3.7665218e-003, + 2.6626941e-003, + 2.1434427e-002, + 4.9598442e-002, + -9.1795559e-002, + 5.6763841e-002, + -7.2345509e-002, + 4.3385691e-002, + -6.4303252e-002, + -2.6067521e-002, + 3.1430980e-002, + -4.8380081e-002, + -1.7143742e-003, + 3.8524956e-002, + 4.7310190e-002, + -8.4985104e-003, + 2.5096835e-002, + -2.2478417e-003, + 4.8128123e-002, + 3.7762949e-002, + 1.4420063e-003, + -4.4095518e-002, + 4.5456933e-003, + -3.2426183e-003, + -1.2533115e-002, + 4.7767545e-002, + -2.8620801e-002, + 7.8751032e-002, + -1.6406002e-002, + 6.0648681e-002, + -5.7970442e-002, + -1.7637331e-002, + -6.9358645e-002, + -3.7997615e-002, + 3.9156091e-002, + 1.1321921e-001, + 8.4415942e-002, + -1.1387462e-002, + -1.6199663e-002, + -2.9916549e-002, + -2.7917984e-003, + -7.9695543e-002, + 8.2671498e-002, + 1.3319799e-002, + -1.7930240e-002, + -9.1601668e-003, + 4.1019127e-002, + 7.5932944e-002, + 1.0036314e-001, + 3.8966354e-002, + 4.6995786e-003, + -4.5149567e-002, + -4.8486656e-002, + -4.1927255e-002, + 1.1311800e-002, + 3.6819401e-002, + 1.7973596e-002, + 6.7898952e-003, + 1.5963322e-002, + -4.9877456e-002, + -3.7059174e-002, + 1.4450399e-002, + 2.0093318e-002, + 3.4367981e-002, + -5.5058558e-003, + -6.7143431e-002, + -4.8644499e-002, + -6.9472431e-002, + 2.5107776e-002, + -4.6781145e-002, + -2.7352285e-002, + -4.7986822e-002, + -7.1934644e-003, + -2.3173127e-002, + 6.4055565e-002, + -1.9370286e-002, + -4.9411717e-003, + 3.4615802e-002, + -5.2643368e-002, + -3.4227554e-002, + 5.9084487e-002, + -6.7507249e-002, + 1.4470533e-003, + 7.4639509e-002, + -3.9766965e-002, + 3.5756960e-002, + -7.0471549e-003, + -3.9222635e-003, + 7.3001614e-002, + 2.3197043e-002, + -2.5701022e-003, + -6.5877930e-002, + 2.7559657e-003, + 1.9592050e-002, + -9.3462547e-002, + -1.0871925e-002, + -2.9680792e-002, + -1.9738425e-002, + -2.7152604e-002, + 2.3876803e-002, + 4.5884118e-002, + -2.4799389e-002, + -2.0581584e-002, + -5.4267497e-002, + -2.6460954e-003, + 5.1362202e-002, + -6.9012380e-002, + 4.4005296e-002, + 6.3975781e-002, + -2.6047622e-003, + 1.2042036e-002, + 1.6037381e-002, + -5.1284209e-002, + -4.2194785e-002, + -1.6515324e-003, + 2.8902550e-002, + 2.6850380e-002, + -6.0423448e-002, + 5.8605766e-003, + 1.2158635e-002, + 7.2552454e-002, + 3.1314062e-002, + -9.3072204e-002, + 3.1162922e-002, + 1.3286605e-002, + 3.9595454e-002, + 4.0202073e-002, + 6.5767605e-002, + -1.2155519e-002, + 3.3751439e-002, + -3.2171914e-002, + 4.8066982e-002, + -3.9282293e-002, + 8.3241192e-003, + 6.9639890e-002, + 2.7334229e-002, + -1.5479579e-001, + 1.6788538e-002, + -3.1497022e-002, + -4.2282993e-002, + 6.3590085e-002, + 2.5116069e-002, + -8.6396723e-003, + 3.3260424e-002, + -8.4721611e-002, + -3.3390999e-003, + -1.1246017e-001, + 4.1668358e-002, + -5.8633451e-002, + 1.8811584e-002, + -2.6955831e-002, + 3.4502149e-002, + -1.5140931e-002, + -1.1615508e-001, + 1.9473941e-002, + -2.4164678e-002, + -4.7663500e-002, + 2.5149605e-002, + -4.2667606e-002, + -3.0691488e-002, + -6.2397484e-002, + -2.2317443e-002, + 7.1583564e-002, + -1.7501358e-002, + -7.4035381e-003, + 3.6729476e-002, + -1.1245837e-002, + 2.6520782e-002, + -8.1593552e-002, + -6.9408470e-002, + 1.4619786e-003, + 3.8453478e-003, + -6.3397206e-003, + -6.0058523e-002, + -4.8251718e-003, + 3.8074781e-002, + -7.8163411e-002, + 2.1385600e-002, + -2.1922130e-002, + -4.0160455e-002, + -6.8293755e-002, + 9.0554557e-004, + 2.6664980e-002, + 7.1501149e-004, + 2.0586511e-002, + 3.8317298e-002, + 1.2622402e-002, + 3.0425320e-002, + -5.9992562e-003, + -3.2448647e-002, + -8.4599232e-002, + 2.0966498e-002, + 3.0616978e-002, + -4.1909029e-003, + 4.3755380e-002, + 3.5853709e-002, + 8.2636139e-002, + 5.2616538e-002, + -4.4023308e-002, + -4.5906585e-002, + 2.5247372e-002, + 1.5587727e-002, + -2.8171046e-002, + -3.2571994e-003, + 3.1224580e-002, + 2.3534457e-002, + 2.4495916e-002, + 2.3711856e-002, + 4.4990479e-002, + 2.4656755e-002, + 1.2819956e-002, + 5.7528241e-002, + -6.3140487e-003, + -9.8533686e-002, + -5.9046861e-002, + 4.5919961e-002, + 4.9303678e-002, + -5.1366348e-002, + 2.4237326e-002, + -3.5253937e-002, + 7.6315728e-002, + -6.2809404e-002, + -1.1060411e-002, + 1.2072602e-002, + 8.1692168e-002, + 8.2459510e-002, + 1.2056340e-003, + -1.0799649e-001, + -7.2058599e-002, + 5.1223849e-002, + 1.1635586e-001, + 6.3237829e-002, + 4.1510274e-002, + -2.9788578e-002, + 4.8771019e-002, + -5.6674600e-002, + 1.9869930e-002, + -1.2678819e-002, + -2.7919754e-002, + 2.8331693e-002, + 3.1691790e-002, + 1.1562239e-002, + -2.8202192e-002, + 2.1270404e-002, + -4.2846202e-002, + -3.2805821e-002, + 1.5184402e-002, + 5.4017276e-002, + -7.4480916e-003, + 3.9322390e-002, + 8.8590506e-002, + 1.8869046e-002, + -4.8504749e-002, + 1.9943452e-002, + -4.0731200e-002, + -1.2975217e-003, + -1.6745164e-003, + 4.7281664e-002, + -2.7791569e-002, + 8.0857121e-003, + -4.8178120e-002, + -5.8281241e-002, + -3.2593209e-002, + -2.1746188e-002, + -1.0017483e-002, + 2.9529554e-002, + -1.4875157e-002, + -4.5985303e-002, + 4.9477795e-002, + -2.8808805e-002, + -1.3613209e-002, + -3.2427996e-002, + -7.3709623e-002, + 2.9008787e-003, + -2.4949574e-002, + 2.9417830e-002, + -5.0911040e-002, + 7.2199223e-002, + -3.8502572e-003, + -9.9986041e-002, + -1.0110846e-001, + 2.7240523e-002, + 3.7231607e-004, + -4.8403626e-002, + -4.2828865e-002, + -4.0941132e-002, + 2.1262003e-002, + 2.8579653e-002, + -3.8107106e-002, + -2.5403299e-002, + 4.0409634e-002, + -1.3506783e-001, + 6.7020935e-002, + 7.6919909e-002, + -6.2598829e-002, + -4.4526445e-002, + 1.2270630e-001, + 2.3974241e-002, + -3.6434038e-003, + 4.6607563e-002, + 8.1524293e-002, + -3.0664049e-002, + 4.4022028e-002, + 8.6563738e-002, + 6.5752991e-002, + -6.7108146e-002, + -1.0342413e-001, + -1.8539076e-002, + -3.0153611e-002, + 6.7396260e-003, + -4.4950103e-002, + -1.2515800e-003, + 3.0646680e-002, + 5.5510478e-002, + -5.2142526e-002, + -6.6687624e-002, + 1.5134636e-002, + 1.3498064e-002, + -5.4450472e-002, + -8.9529836e-003, + 3.0094154e-002, + 3.2202481e-002, + 1.3948693e-002, + -6.7197034e-002, + -8.5015250e-002, + 6.3266660e-002, + 4.2798636e-002, + -2.0333357e-002, + -4.0383900e-002, + -1.3841616e-002, + 6.3539401e-002, + -1.4953539e-002, + 7.3749647e-003, + 4.6124894e-002, + -3.3099545e-002, + 1.6994609e-003, + 3.1756119e-002, + 1.1361146e-001, + 2.3601853e-002, + -6.1163866e-003, + 1.4640892e-002, + -1.3002994e-001, + -5.9991837e-002, + -2.2185968e-002, + -3.5202454e-003, + -3.2725772e-002, + -1.6788319e-002, + -6.9143762e-002, + -3.0097649e-002, + 1.2429939e-001, + 3.2580395e-002, + -5.0115073e-002, + 5.0306592e-003, + -4.4954061e-002, + 3.6014498e-002, + -1.3451790e-002, + 1.6399117e-002, + 1.3923416e-001, + -4.9725951e-003, + 6.2052260e-003, + -1.1645022e-001, + -3.5608026e-003, + 6.4542089e-002, + 2.5646928e-002, + -3.9385217e-002, + 3.4619781e-002, + -5.5728973e-002, + -4.1560782e-002, + 1.8601185e-003, + -7.7632154e-002, + -1.1198136e-001, + 1.7871366e-003, + 3.2749909e-002, + 6.3402834e-002, + -5.4553077e-002, + -5.3258342e-002, + 3.3343720e-002, + 5.6556702e-002, + -2.8265688e-002, + -2.3372050e-002, + -7.1953496e-002, + 4.9907070e-002, + -2.6195346e-002, + -3.1269328e-002, + -2.2738778e-002, + -3.6952069e-003, + 2.3055605e-002, + 3.7713246e-002, + -3.3123125e-002, + 6.3977198e-002, + 1.2888268e-002, + -6.4863602e-002, + -4.6370451e-002, + -1.2762725e-002, + -1.1385579e-002, + 5.3278522e-002, + 4.0903155e-003, + 2.4856544e-003, + 2.6887809e-002, + -3.6020834e-002, + 1.7437443e-002, + 2.0139602e-002, + 2.9239905e-002, + 3.8038669e-002, + -9.6656754e-002, + 1.5283078e-002, + -9.4684237e-002, + 3.5509017e-002, + -2.3867173e-002, + 4.9278727e-003, + -3.9793551e-002, + -1.1285602e-002, + -1.1809578e-002, + 2.7623350e-002, + 2.1829332e-003, + 2.9116516e-002, + -2.3743110e-002, + -3.6766547e-002, + 2.0571789e-002, + 5.6084571e-002, + 1.3024358e-001, + -7.5886589e-002, + 2.7947551e-002, + 2.3155403e-002, + -3.1278004e-002, + -1.4436652e-002, + -2.4776289e-002, + -6.8540264e-003, + -1.0098350e-002, + -8.8675200e-002, + 1.5859746e-001, + -9.1002037e-002, + 1.2604720e-002, + -1.0483836e-002, + -2.8280415e-002, + 7.1881441e-002, + -5.6741201e-002, + 6.6804943e-002, + 6.1990105e-002, + 8.1565279e-002, + 2.2720394e-002, + -1.2405569e-002, + 7.1876233e-002, + -1.0267524e-001, + -3.0958839e-002, + 7.9476530e-002, + 2.1440879e-002, + -3.6594375e-002, + 1.2693478e-002, + -3.5996147e-002, + -4.4807775e-002, + 3.0175162e-002, + 6.0207188e-002, + -4.4551692e-003, + 5.2444239e-002, + -6.7182348e-002, + 3.4282089e-002, + 1.2050117e-002, + 6.7343302e-003, + -3.4597852e-002, + 6.2799536e-002, + 9.0535361e-002, + 4.6750855e-002, + 4.5616156e-002, + -4.7775494e-002, + 3.3437120e-002, + 6.3247569e-002, + -2.5086044e-002, + 6.0392800e-002, + -1.0344192e-001, + 1.0532757e-002, + 8.0919299e-003, + -2.0549100e-002, + 7.9851230e-002, + 5.9509621e-002, + -1.0304151e-002, + -3.6671778e-003, + 1.0290329e-002, + -3.6286054e-002, + -1.1732592e-002, + -8.4237566e-002, + 3.3390752e-002, + -5.1523669e-002, + -7.7703392e-002, + 7.2951732e-002, + 5.5907824e-002, + 5.5894272e-003, + 5.4254663e-002, + 5.1024916e-002, + -5.6879548e-002, + -6.2027367e-002, + -5.6508306e-002, + -4.3199186e-002, + -7.0858160e-002, + -2.7514315e-002, + -1.0304944e-002, + 9.7007038e-004, + -6.7224049e-003, + 9.2200691e-003, + 3.8879401e-003, + -6.5395433e-002, + 6.6739257e-002, + 6.1434975e-002, + -7.8933867e-002, + -8.4834779e-002, + -2.7405250e-002, + -2.6177970e-002, + -3.3974921e-002, + -3.5379505e-003, + 5.0807223e-002, + -6.0485730e-002, + -7.1839018e-003, + 2.6693750e-002, + 5.3186567e-002, + 1.4183779e-002, + -2.2116051e-002, + -1.3741848e-002, + 6.1342417e-002, + -3.7993387e-003, + 3.7238204e-002, + -1.0739599e-001, + -1.4549117e-002, + 4.0386015e-002, + 1.2569153e-002, + 3.5445067e-002, + -3.8437920e-002, + -1.4546469e-002, + 2.3252293e-002, + 5.8740276e-002, + -4.5320281e-002, + 4.8086444e-002, + -4.6158419e-003, + -5.5124482e-002, + -3.3884263e-002, + -1.6266463e-002, + -1.6153097e-002, + -7.1902422e-004, + 4.7423985e-002, + 4.5522942e-002, + 5.8189486e-002, + -1.6178881e-002, + -8.5068904e-003, + -2.1481593e-002, + 5.9052882e-002, + 7.6940824e-002, + -4.1182363e-002, + 9.3889318e-002, + 3.2541071e-002, + -5.0966470e-002, + 1.1989934e-002, + 1.3485465e-002, + 1.1716420e-002, + -3.3544036e-002, + 1.0756654e-001, + 2.3665782e-002, + 5.1632941e-002, + 3.3393177e-002, + 2.6965276e-002, + -9.3765636e-003, + -4.0374893e-002, + -7.6274872e-002, + 1.8358287e-002, + -5.4971891e-002, + -6.1388507e-002, + 4.0747836e-002, + -3.0364737e-002, + -3.8176810e-002, + 2.1957238e-003, + 1.5046955e-002, + -4.6671984e-003, + -3.7148168e-002, + -3.7455685e-002, + 3.7180183e-003, + -8.5869921e-003, + 3.5823221e-002, + 2.0854178e-002, + -5.6165218e-002, + -9.2879840e-002, + 1.4952542e-002, + -1.6637472e-002, + 2.7553373e-002, + 1.1493587e-001, + -3.5352769e-002, + -6.9065396e-002, + 7.7929176e-002, + -5.9205594e-002, + -1.8989624e-002, + 1.1827864e-002, + -3.8579019e-002, + 1.6537438e-002, + -4.5152596e-002, + -8.0801346e-002, + -3.4708707e-002, + -2.0902185e-002, + 3.5484478e-002, + -7.2048970e-002, + 3.9760809e-002, + -2.1048159e-002, + 2.9412146e-003, + -1.2228266e-002, + -1.0549788e-002, + -1.3705371e-002, + -4.2308328e-002, + -8.5322508e-002, + 5.6722120e-004, + 3.8264621e-002, + 4.3257303e-002, + 2.8754160e-002, + 3.3445727e-003, + 2.9282907e-002, + 4.8556817e-002, + -3.3795246e-002, + 4.0977665e-002, + 3.6274969e-002, + 3.3552753e-002, + 2.9872002e-002, + 6.3307072e-002, + 1.4992383e-002, + -5.8203262e-002, + -3.0168145e-002, + -3.2352139e-002, + 7.6165643e-002, + 7.1774864e-002, + -1.7731640e-002, + 3.7646033e-002, + 5.8535492e-003, + 8.3961663e-002, + -7.6352210e-003, + -3.6557713e-003, + -6.1713535e-002, + -4.8057903e-002, + -4.6264109e-002, + -3.4792201e-002, + -2.7416585e-002, + -1.3744116e-003, + -1.9306191e-002, + -5.0539515e-002, + 2.7677455e-002, + -2.2617917e-002, + -8.4784776e-002, + 7.3259229e-002, + 5.9548509e-002, + -7.2282648e-002, + -5.0784237e-002, + 9.1028580e-002, + 1.6823871e-001, + 4.3922313e-002, + 2.0660018e-002, + 1.2905801e-003, + -5.9644574e-003, + -6.6967719e-003, + 2.1111482e-002, + 4.5767224e-002, + 1.9131948e-002, + 2.6813139e-002, + -4.6825266e-002, + 1.1768354e-002, + -3.0426377e-002, + -7.0347178e-003, + -7.6017599e-002, + 2.1078534e-002, + -9.1780175e-002, + 2.7352079e-002, + 2.7780454e-002, + 8.3826886e-003, + -1.5967673e-002, + -1.0580313e-002, + 3.8124734e-002, + 3.6951219e-002, + -2.5011240e-002, + 2.9019645e-002, + 3.3574092e-002, + 1.2199007e-002, + -6.3328122e-002, + -1.0293542e-001, + 6.2316941e-002, + -1.1529230e-003, + 1.0592972e-001, + -2.3803313e-002, + -4.2884377e-002, + -2.3136181e-002, + 9.6100002e-003, + -3.8942235e-002, + 1.0613309e-001, + 1.1584978e-002, + -2.8945108e-002, + 1.1978745e-001, + 3.3535039e-002, + -3.3192905e-002, + 6.4322894e-002, + 4.3326082e-002, + 2.2661431e-002, + 2.1067896e-002, + -1.6775258e-002, + -1.1513173e-001, + 1.6050052e-002, + 3.6844183e-002, + 2.9072793e-002, + -6.7255761e-002, + 5.7102385e-002, + 7.0546617e-002, + -2.0826937e-002, + -5.7583856e-002, + 3.0146035e-002, + -1.9649341e-002, + 5.1108010e-002, + -1.2049234e-001, + 9.1604975e-003, + -4.4366320e-002, + 1.0940581e-002, + -7.4110213e-002, + 1.0027252e-001, + 8.3559986e-002, + -5.0547965e-002, + 3.0123395e-002, + 7.0196532e-002, + -8.3469946e-002, + 3.3882963e-002, + 6.1607561e-002, + 4.4793665e-002, + -9.6577712e-002, + -5.0411980e-003, + -1.5066601e-002, + 2.4904787e-002, + 1.1340361e-002, + 2.9052246e-002, + 2.6840614e-002, + -1.9931112e-002, + 5.2525978e-002, + -4.9751069e-002, + -7.9276887e-002, + 2.8081748e-002, + -4.1223168e-002, + 1.3105117e-002, + -2.6569475e-003, + -3.2102570e-002, + -2.6357544e-002, + 2.2152608e-002, + -3.1539891e-003, + -3.4785718e-002, + -1.0592171e-002, + -4.0300905e-002, + -1.5702723e-002, + -1.8712957e-002, + 3.3197549e-002, + -3.6279117e-002, + 4.2838238e-002, + -1.6489429e-002, + 2.4648914e-002, + 5.1252616e-003, + -8.1225473e-002, + -5.6459253e-002, + -5.2348110e-002, + -7.0335906e-002, + -3.3338823e-005, + -3.2311169e-002, + 7.4676135e-002, + -3.7143822e-002, + -6.8303532e-002, + -7.0033274e-004, + -3.7552999e-002, + -6.6305361e-002, + 1.2196684e-001, + 2.2084222e-002, + 4.1475857e-002, + -1.0862949e-003, + -4.0143874e-002, + -3.7947485e-002, + 2.3605616e-002, + 2.3128901e-002, + 1.6999557e-001, + 8.7507268e-003, + -1.6086519e-002, + 1.6438629e-002, + 5.3086378e-002, + 4.2778341e-002, + -5.1411551e-002, + -9.1155004e-003, + 7.1703894e-002, + -6.2919585e-002, + -4.1252239e-003, + -2.7800338e-002, + 1.3406385e-002, + -1.9639614e-002, + 2.0766865e-002, + -8.0707557e-002, + -7.9126401e-003, + 1.2061087e-002, + 7.8233420e-002, + 2.5787108e-003, + 9.6325419e-002, + 4.2169871e-002, + 4.5779560e-002, + 1.1692399e-002, + 3.6624616e-002, + -2.1368960e-002, + 8.6087403e-002, + -3.9290515e-002, + -9.1694613e-003, + 3.1814092e-002, + 2.4160765e-002, + -1.1817798e-003, + 1.1293805e-001, + 3.5901275e-002, + 2.3964131e-002, + 1.4594516e-002, + 8.3442765e-002, + 2.7873584e-003, + 9.2888387e-002, + 5.6597406e-002, + 3.3678386e-002, + 1.1285883e-002, + -1.3345965e-002, + -3.7971276e-002, + 3.8853868e-002, + 4.0434589e-002, + -3.5457626e-002, + 3.4183998e-002, + 9.8248684e-002, + -7.6115939e-002, + -1.1769491e-002, + -3.8386164e-002, + -1.8975843e-002, + -9.3988535e-002, + -5.5576121e-003, + -1.8636003e-002, + 2.8386234e-002, + -2.4200578e-002, + 4.1252766e-002, + -6.8000375e-002, + -3.7388633e-002, + -3.0010634e-002, + -2.0049886e-002, + 2.5499201e-002, + -3.7598273e-002, + -4.4794045e-002, + 4.9668753e-002, + 2.8526404e-002, + -7.6218361e-003, + -1.0150563e-001, + -3.1635380e-002, + 6.0899411e-002, + -4.0702573e-003, + 3.6908492e-002, + 6.0695811e-002, + -8.5097943e-002, + 5.3730269e-002, + 3.7528389e-003, + 9.3525516e-002, + -1.4898976e-002, + 2.7723761e-002, + -1.3087617e-002, + -8.5905788e-003, + -4.0551186e-003, + 5.2805805e-003, + 6.8736269e-002, + 1.5477601e-003, + 4.0766710e-003, + 2.4948069e-002, + -2.3695927e-002, + 2.0778232e-002, + 7.7785189e-002, + -6.5214959e-002, + -1.6680307e-002, + -5.1966107e-002, + 7.5663630e-003, + -1.3256079e-002, + 2.9625848e-002, + -3.9745297e-002, + 2.5236371e-002, + -3.2270585e-002, + 6.2655107e-002, + 3.3731838e-002, + 2.2075588e-003, + -2.9591354e-002, + 3.1341479e-002, + -7.6083655e-002, + 6.1296972e-002, + -5.6695620e-002, + 2.2323220e-002, + 2.3643317e-003, + 2.5031378e-002, + 5.5413805e-002, + 6.0973843e-002, + -7.3883029e-002, + 1.3029020e-002, + 6.5448736e-002, + -2.3732566e-002, + -1.6089444e-002, + -2.1074484e-002, + 5.7948843e-002, + 8.6615559e-002, + -9.1319744e-002, + -1.0161538e-002, + 1.9629470e-002, + 1.9360651e-002, + -2.8093541e-002, + -4.2935479e-002, + 1.0709420e-002, + 7.8669934e-002, + 2.3835887e-002, + 1.8165279e-002, + -5.4214119e-003, + -7.9902014e-003, + 4.5058379e-002, + -3.2063499e-002, + -5.8672800e-002, + 1.2173177e-002, + 5.9993154e-002, + 2.3138893e-002, + 8.0998931e-003, + -4.4800380e-002, + -2.4859361e-002, + -1.5868492e-002, + -5.2323712e-002, + -4.5973299e-002, + -2.3052455e-003, + 8.1582903e-003, + 6.8065483e-002, + 7.6438296e-004, + 4.0392238e-002, + -6.5966937e-002, + -5.0614520e-002, + -5.5301523e-002, + -4.2561773e-003, + 5.9937931e-002, + -2.1382190e-002, + -2.0676084e-002, + -3.5839724e-002, + -1.2403270e-002, + -1.8285642e-002, + -4.5681905e-002, + 2.5535673e-002, + 1.4234783e-002, + -1.9259208e-002, + -2.5661378e-002, + 3.0184961e-002, + -5.6818389e-002, + 3.2310662e-002, + -2.4301821e-003, + -1.2328487e-002, + -5.4786335e-002, + -4.8916330e-002, + 4.8190116e-002, + -6.0850449e-002, + 7.7620003e-002, + -6.6473044e-002, + 5.1361693e-002, + -4.4367608e-002, + 5.9245756e-002, + 5.3474787e-003, + 3.8059821e-003, + -6.1171918e-002, + -2.9543201e-002, + -8.3560612e-003, + -4.1202373e-002, + -5.3271164e-002, + 7.6473415e-002, + 1.3747330e-002, + -4.2692942e-002, + -4.7688735e-002, + 9.0017757e-002, + -5.5124068e-002, + -4.9430822e-002, + 1.9839950e-002, + 6.1066303e-002, + -1.3518935e-001, + 4.5758030e-002, + 2.8061894e-002, + 2.2738266e-002, + -9.3128822e-003, + 7.9618280e-002, + -1.2187199e-001, + 4.5605462e-002, + -3.0479221e-002, + 3.8694000e-002, + -1.8124762e-002, + 3.7759175e-002, + 1.8158014e-003, + -2.7070632e-002, + -2.3634825e-002, + 5.2676876e-002, + -5.2016000e-003, + -5.4593248e-002, + -1.6338775e-002, + -8.0919891e-002, + 8.7671746e-003, + 5.8316283e-002, + -6.9144058e-002, + -4.6936119e-002, + 1.6594244e-002, + -7.6784768e-002, + -6.3547981e-003, + 4.8236469e-002, + 1.6578926e-002, + -2.8223303e-002, + -8.7243754e-002, + 5.5790867e-002, + 4.5976330e-003, + -4.0593161e-003, + -7.1609202e-002, + 3.6451850e-002, + -3.6051938e-002, + 1.0343606e-004, + 4.0493147e-002, + 2.1330427e-002, + -3.3170735e-002, + -4.4584020e-003, + 3.1555313e-002, + -1.1414545e-001, + 5.6867307e-002, + 4.0626699e-002, + -5.8860350e-002, + -1.0003188e-001, + -4.8326893e-002, + -1.2614691e-002, + -2.1586874e-002, + -3.1935606e-002, + 2.4103451e-002, + 1.4488790e-002, + -8.0859096e-004, + -3.8980020e-003, + 7.4909148e-002, + -2.8049185e-002, + -2.0918789e-002, + -2.4711940e-002, + 5.3455068e-002, + -9.7517045e-003, + -2.4433675e-002, + 3.7640959e-002, + 2.4437924e-002, + 4.6113770e-003, + -2.1101125e-002, + -2.2852117e-002, + -7.2572348e-002, + 3.6761328e-002, + 2.6652183e-002, + -4.3100149e-002, + -5.4098286e-002, + 8.2220041e-002, + 5.5613895e-002, + 5.4603855e-002, + -1.3589191e-001, + 2.3347518e-002, + 4.6453611e-002, + 2.2623921e-003, + 6.0644536e-002, + -7.5601564e-002, + -8.9194042e-002, + -3.4410351e-002, + -3.4360013e-003, + 5.1666691e-002, + 1.2464056e-002, + -2.3030505e-003, + -3.9004649e-002, + 1.1817405e-002, + -3.4117635e-002, + -2.8693035e-002, + -1.5931261e-002, + 8.0677220e-004, + 1.8397691e-002, + -3.1052320e-002, + 4.9726240e-002, + -2.0747799e-002, + -6.0637710e-003, + -7.9396747e-002, + 4.8372461e-002, + -7.1979765e-002, + 2.6832942e-002, + 2.9273777e-002, + -4.8337996e-003, + 4.0391770e-003, + -9.4918066e-002, + 6.2066596e-002, + 4.9875577e-002, + -3.3753903e-002, + -2.4500392e-002, + 9.0658929e-002, + -9.8343476e-002, + -6.2504733e-003, + 1.1991216e-001, + 2.8944337e-002, + 2.6898626e-003, + -6.4267875e-002, + 2.9019187e-002, + 1.9971213e-002, + 8.0684873e-003, + 1.3081097e-002, + -3.1283754e-002, + -2.8489269e-002, + -1.1686268e-001, + -1.3745347e-002, + 5.3686243e-002, + -5.2197217e-002, + -3.3465705e-002, + -3.5083431e-002, + 1.6015164e-002, + 2.4493466e-002, + -2.3306198e-002, + -1.9672026e-002, + -7.6748565e-002, + -7.1159132e-002, + -3.6831968e-002, + -1.1592501e-001, + -1.1802673e-001, + 2.8843104e-002, + -5.9118430e-002, + -1.1106526e-002, + -4.0643480e-002, + -3.3903934e-002, + 6.9026642e-002, + -3.3357058e-002, + 3.1574083e-002, + 4.0538895e-002, + 4.3133551e-002, + 3.7814770e-002, + 6.4315631e-002, + -5.5887205e-002, + -6.1198396e-002, + 7.2376501e-002, + -4.4847288e-002, + 4.4972439e-002, + 8.9532496e-002, + 2.7491210e-002, + 3.5765916e-002, + -5.8314299e-002, + -1.5996091e-002, + -4.3521287e-002, + -2.8304205e-002, + -4.3486571e-002, + 1.0849438e-001, + 2.2361367e-002, + -6.1362009e-003, + 5.3111507e-002, + -8.8565282e-002, + 8.4842988e-002, + 1.0627885e-002, + 4.4828472e-003, + 7.7250566e-003, + -3.5888413e-002, + 4.5405946e-002, + 9.5357093e-003, + 3.8049221e-002, + 1.1798868e-002, + 8.5901681e-002, + 7.2651393e-002, + -1.0648259e-002, + -3.5412792e-002, + -5.2852119e-003, + -2.8006256e-002, + -5.8455622e-003, + 9.2263862e-003, + 1.4651709e-002, + -1.1429416e-001, + 8.0368439e-002, + 2.6278264e-002, + 2.0947848e-002, + 5.9186459e-002, + 3.0967487e-002, + -1.1507298e-001, + -3.4239562e-004, + -2.0939429e-002, + 6.9101989e-002, + 1.9188787e-002, + -1.7007634e-002, + -1.4226805e-002, + 2.0497813e-003, + 4.8643630e-003, + -5.0243128e-002, + 2.6571757e-002, + -2.5756622e-002, + -6.2136271e-002, + 3.0876774e-002, + -3.2966648e-002, + -4.6798326e-002, + -7.2864522e-002, + -7.0620327e-002, + 3.1514440e-002, + 4.7419175e-002, + -2.9639040e-002, + -7.4872381e-002, + 1.0268214e-001, + -6.4408455e-002, + -5.1714244e-002, + -1.4811842e-002, + -2.6652795e-002, + -3.3398841e-002, + -9.1093311e-002, + -2.9613673e-002, + -3.2849316e-002, + -2.1792627e-002, + -4.8905018e-002, + 3.8278002e-002, + -1.0578267e-001, + 3.9883500e-002, + -4.0322452e-002, + -7.7085856e-002, + -1.1560340e-002, + -9.6078464e-003, + -5.2790120e-003, + -1.7445510e-002, + 4.1210396e-002, + -3.1966850e-002, + -4.2623715e-002, + -3.8224686e-002, + -2.3460384e-002, + -1.8322700e-002, + 1.5049174e-001, + -3.1993543e-002, + 4.3014183e-002, + -4.4366020e-002, + -1.9251396e-002, + -1.2898947e-002, + -6.0899923e-002, + -5.9898591e-002, + -5.6557253e-002, + 4.6067919e-002, + 2.0882012e-002, + -7.1937529e-002, + -9.5914837e-002, + -1.2626698e-001, + -3.6792717e-002, + 2.8022409e-002, + -3.4921767e-002, + -2.2305614e-002, + -3.2328726e-002, + -4.8809030e-002, + -2.6925977e-002, + -4.2114647e-002, + 8.7023862e-002, + -3.7654336e-003, + 6.9322688e-002, + 9.2912513e-003, + 5.7435044e-002, + 1.9609569e-002, + -1.1570562e-002, + 6.1049764e-002, + -6.4977165e-002, + -5.0641683e-002, + -4.9830239e-002, + 2.9619165e-002, + -4.3292073e-002, + -6.2860680e-002, + 6.3449012e-002, + 6.3302743e-002, + -3.7096028e-002, + -4.6860354e-002, + 1.6643809e-002, + -2.8812456e-002, + -1.2949017e-004, + -5.0303595e-003, + -5.1531111e-002, + 1.0185519e-001, + -8.8467370e-003, + -6.4260237e-002, + 2.2972796e-002, + -8.7208177e-003, + 2.1703090e-002, + -3.2583688e-002, + 1.9180369e-002, + -4.6604492e-002, + 5.9620323e-002, + -2.3169309e-002, + 1.7923404e-002, + 7.0399591e-002, + -6.3632676e-003, + -6.2662420e-002, + -5.0818406e-003, + 7.6310034e-002, + 3.8440333e-002, + 2.3108218e-002, + 1.0992061e-001, + -6.6023131e-002, + 1.0339039e-002, + -1.2454926e-002, + 3.0748449e-002, + 3.8733454e-002, + -8.1029526e-002, + -6.3890932e-003, + -1.7310614e-003, + -6.5448180e-002, + -1.3567927e-002, + -1.4651225e-002, + -1.6402517e-003, + -4.0889024e-002, + 3.3267739e-002, + -8.7669631e-002, + -1.1762527e-001, + -3.0337637e-003, + -1.0579264e-001, + 3.8458061e-002, + 6.1506618e-002, + -1.2438319e-002, + -2.0981512e-002, + 8.6707387e-003, + 4.1305048e-002, + 5.8010222e-002, + 3.4177414e-002, + 6.1614068e-002, + 3.7742022e-002, + 2.2274616e-003, + -3.3374053e-002, + -1.3841013e-002, + -1.5519456e-002, + -1.1770865e-001, + -4.0589703e-002, + 1.1432496e-001, + -2.8665001e-002, + -9.7087434e-002, + 2.8739815e-002, + 9.2917531e-002, + 1.1938896e-001, + -2.9010572e-002, + -3.4721428e-002, + -3.4855927e-002, + -1.2121671e-002, + -1.0158399e-001, + 9.7895131e-002, + -7.8712576e-002, + -7.9976995e-002, + 7.6185673e-002, + -2.8833935e-002, + 1.8354206e-002, + -1.7587259e-001, + -7.8647771e-002, + 2.2256759e-002, + -2.1611016e-002, + 2.4071583e-002, + 4.5227886e-004, + -7.2657111e-002, + -7.2168746e-002, + -1.1452740e-002, + 1.6181869e-002, + 4.5831060e-002, + -2.3369801e-003, + -2.8727581e-002, + 7.5005238e-003, + -8.9739571e-003, + -4.1100109e-002, + -1.6087343e-002, + 7.4606898e-003, + 2.9933544e-002, + -1.2690286e-001, + -3.9049832e-002, + 2.7720568e-002, + 1.7947841e-002, + 3.4410773e-002, + 5.5729818e-003, + -1.8016513e-002, + -4.8830323e-002, + 3.2716530e-002, + -3.4232512e-002, + -1.6426973e-002, + 5.0795800e-002, + -3.1791729e-002, + 3.7707010e-002, + 4.5092581e-002, + -4.8603247e-002, + 2.9459071e-002, + -4.6422186e-002, + 3.9296295e-003, + -2.8900220e-002, + 1.1207343e-002, + -3.5131485e-002, + 3.0510860e-002, + 1.0155622e-001, + 6.2187792e-003, + 6.7503241e-002, + 4.7232070e-002, + -2.1226837e-002, + -8.4154353e-003, + 2.0913858e-002, + 7.0127327e-003, + -1.2448522e-002, + 1.6449412e-002, + 4.5151926e-002, + 4.6836548e-002, + -2.0687186e-002, + -7.3644538e-002, + -1.0260562e-001, + 4.1594354e-004, + 2.2962943e-002, + -3.6753478e-002, + -3.6656754e-002, + -3.9912894e-002, + 1.1998781e-002, + 1.2228691e-002, + 6.9910277e-002, + 2.4035919e-002, + 7.1080248e-003, + 3.6471267e-002, + -1.5899153e-003, + -6.2981316e-002, + -4.8019402e-003, + 9.9610031e-002, + 3.4685502e-002, + -1.4906597e-001, + 6.2799402e-002, + -3.8932025e-003, + 3.5313345e-002, + 6.4080127e-003, + 7.7712074e-002, + 1.9652177e-002, + 3.3529556e-002, + 6.7998095e-002, + 4.0481914e-002, + -4.5148562e-002, + 1.2390995e-001, + 6.0472177e-002, + -4.0537793e-002, + -2.9016904e-002, + 1.0069785e-002, + -4.3630516e-002, + 1.6317010e-002, + -8.1563635e-003, + -2.9428878e-002, + -1.0007097e-002, + 1.1748494e-003, + -3.7584384e-003, + -1.0136314e-002, + 6.9501199e-002, + -6.2079897e-002, + 5.6550846e-002, + -3.1224895e-004, + 1.5172074e-002, + 3.5494228e-002, + -2.8525286e-002, + 7.0934847e-002, + -2.1855207e-002, + -9.0589689e-002, + -5.0420263e-002, + -6.4220854e-002, + 8.0572534e-002, + 4.4657936e-002, + 3.8900053e-002, + 2.3038306e-002, + -2.9059798e-002, + 4.1790833e-002, + -1.4498459e-003, + -1.4247977e-002, + -7.2557019e-003, + 7.0209000e-002, + 7.1292433e-002, + -1.0914340e-002, + 1.0671194e-001, + -3.9136244e-002, + -1.3175217e-002, + 1.3764681e-002, + 1.1563616e-001, + -6.3896840e-003, + -6.2527708e-002, + 8.8512912e-002, + -2.9045669e-002, + 1.5227173e-002, + -5.0667751e-002, + 1.2560643e-001, + 7.4986299e-002, + 3.3825251e-002, + 1.5514266e-003, + -5.2532720e-002, + 1.7029297e-002, + -3.2944301e-002, + -6.1748947e-002, + 2.6402422e-002, + -2.6902014e-002, + -1.1054785e-001, + 4.5217579e-002, + 7.2634916e-002, + 4.7126396e-003, + 5.3388646e-002, + 1.4724645e-002, + 4.8733852e-002, + -2.4509080e-002, + -9.1580431e-002, + 5.2106999e-003, + -1.5643665e-001, + -4.8892928e-003, + -5.3026671e-002, + -4.4146053e-004, + 3.2444612e-002, + -2.3101994e-003, + 9.4890488e-002, + -7.8052719e-002, + 6.0338172e-003, + -4.0433742e-002, + -3.9104783e-002, + 4.0994343e-002, + 7.7513705e-002, + -1.8133412e-002, + -1.8801315e-002, + 9.9180571e-002, + 5.9051814e-002, + 3.2637953e-002, + 4.5773237e-002, + 9.2868125e-003, + -4.4946634e-002, + -5.0590403e-002, + -3.3365865e-002, + 3.5527025e-002, + 7.4204867e-003, + 1.5004459e-002, + -3.4647091e-003, + 5.5465088e-002, + 1.1416662e-001, + -2.6462288e-002, + 6.8671916e-002, + -6.3002510e-003, + 1.1583924e-002, + 3.1050102e-003, + -1.0105237e-001, + -1.0657225e-002, + -9.8132990e-002, + -2.8254118e-002, + 5.8377956e-002, + -2.3015648e-002, + -1.7437864e-002, + -2.2634945e-002, + -4.8192213e-002, + -4.7584233e-002, + 1.9414654e-002, + -2.7057831e-002, + 1.7158611e-002, + 1.3317117e-001, + -5.5081291e-002, + -5.0017430e-002, + 7.6813579e-002, + 9.4583304e-002, + -6.9067814e-002, + 1.9120563e-002, + 2.1258087e-002, + 7.2055539e-002, + -4.4266255e-002, + -3.2205709e-002, + -2.8779031e-002, + -2.3481940e-002, + 1.7708910e-002, + -1.9311139e-002, + 5.3418240e-002, + 2.4606925e-002, + 5.0846628e-003, + -2.0453302e-002, + 3.5461384e-002, + 1.3245649e-002, + -1.4856256e-002, + -4.1995487e-002, + -6.8461842e-003, + 4.3425178e-002, + -4.2381240e-002, + -1.2470922e-001, + -6.6566711e-002, + -1.5328279e-003, + 2.1121820e-002, + -8.9850510e-002, + 2.0682240e-004, + -5.8686388e-002, + 7.1519107e-002, + 2.7049268e-002, + 4.3271736e-003, + -1.8990188e-002, + 4.1744154e-003, + -6.7617528e-002, + -1.5982309e-002, + -8.6739389e-003, + 6.8767245e-003, + -7.0052976e-003, + 8.3718019e-002, + 5.8127315e-002, + -9.4223672e-002, + -1.3478363e-002, + -3.2457089e-002, + -1.7549472e-001, + 2.8493349e-002, + 1.0412304e-001, + -1.1173210e-003, + 7.1447946e-003, + 2.7052018e-002, + 2.1816972e-003, + -8.8630176e-002, + -1.0701357e-001, + -4.1207617e-002, + 3.7077898e-003, + 8.7053488e-002, + 1.4283129e-002, + 6.4010086e-002, + -3.7679928e-002, + 8.3111383e-002, + 5.6677718e-002, + 1.4063916e-003, + -1.0364232e-001, + 3.6312049e-002, + -2.6135054e-002, + 3.1703422e-002, + -3.5189144e-002, + 1.6030282e-002, + -7.0953448e-002, + -1.6409520e-002, + 1.5861113e-002, + -4.0344599e-002, + 9.3345150e-002, + -3.2385751e-002, + 2.9194015e-002, + -5.3074056e-002, + -5.8395538e-002, + 1.4711047e-002, + 1.6754312e-002, + -4.1092096e-002, + -5.7509643e-002, + 5.8321957e-003, + 3.4401437e-002, + 3.5235160e-002, + 6.4540634e-003, + 6.8538944e-003, + -1.0143565e-001, + -2.5820489e-002, + -2.0821741e-002, + 4.4652423e-002, + -3.4072854e-002, + -2.6609349e-002, + 3.3889860e-002, + -5.3220787e-002, + -2.4894595e-002, + -9.6139329e-002, + -3.3024922e-002, + 1.7823306e-002, + -4.2192663e-003, + -5.3704045e-002, + 1.1044474e-002, + 1.4159169e-002, + 5.6261779e-003, + 1.4544719e-001, + -4.2079631e-003, + -9.5725344e-002, + -3.6408815e-003, + 6.0200088e-002, + 2.9998960e-002, + -7.3398314e-002, + -4.8228886e-002, + 3.3208412e-002, + -5.6677275e-003, + -6.6855312e-003, + -3.0785426e-002, + 4.2126629e-003, + 7.0115500e-002, + -3.9919529e-002, + 4.0614066e-002, + -3.0371460e-002, + 7.2891063e-002, + 2.3537099e-002, + 2.9755936e-002, + -3.7706444e-002, + -8.3470665e-003, + 7.6886063e-003, + -8.4313321e-002, + -2.9399720e-002, + -1.4589921e-002, + 1.7944446e-002, + -1.1460170e-001, + -6.2017760e-002, + 3.4407222e-002, + -2.7741014e-002, + -4.6295413e-002, + -2.7812656e-002, + -3.0886235e-002, + 1.1995511e-002, + -3.2969544e-002, + -6.9191631e-003, + -2.9791556e-002, + 2.0392531e-002, + -4.7567313e-003, + -9.8443940e-002, + -1.2686039e-002, + -2.1886631e-002, + -1.5455907e-002, + -1.1782002e-001, + 6.1301396e-002, + 2.1872915e-002, + -1.0561240e-002, + -2.3193915e-002, + 6.9727656e-002, + 1.4693869e-003, + -1.3543614e-001, + -4.0815903e-004, + 5.6251246e-002, + -9.1505709e-002, + 5.7185400e-003, + 7.1033142e-002, + -7.9002590e-002, + -4.1318689e-002, + 4.9841764e-002, + 1.7309114e-002, + 5.7136005e-002, + -2.1199613e-002, + -6.1231140e-002, + 7.2177738e-002, + 2.5816325e-002, + -3.9691591e-002, + -8.4077105e-002, + 1.8921121e-002, + 4.0273842e-002, + -5.0316912e-002, + -1.2301284e-002, + 1.4068218e-003, + 3.9074162e-002, + 1.1140969e-002, + -9.0100129e-002, + 1.6566978e-002, + 2.2387085e-002, + -5.5267138e-003, + -1.4053472e-002, + 8.5720676e-002, + 6.6003080e-003, + -3.4558594e-002, + -2.1528224e-002, + 3.4199928e-002, + 8.3291659e-003, + -3.4104982e-002, + 7.5554591e-003, + 1.0701557e-001, + 1.3371029e-002, + -5.4777395e-002, + -5.4878162e-002, + -4.1852588e-002, + -4.0276462e-003, + 1.0933072e-002, + 3.1101256e-002, + -4.6169830e-002, + -7.8623398e-002, + -4.0709650e-002, + -2.2176445e-002, + -6.1230977e-002, + 1.6368772e-002, + -1.0741991e-001, + -3.4277843e-002, + 6.1009971e-002, + -8.3667710e-002, + 1.1309839e-002, + 5.4127285e-004, + 8.4633157e-002, + -6.3130402e-002, + -1.1137924e-002, + -5.0412645e-002, + -5.4166796e-002, + -4.6504636e-002, + 7.8517633e-002, + 3.1626107e-002, + -1.8210994e-002, + -3.5098136e-003, + -1.2130004e-002, + -1.3464374e-002, + 5.0731507e-002, + -4.3012235e-003, + 8.2720477e-002, + -1.3193101e-002, + -1.3778387e-002, + 5.5452531e-003, + -9.3586936e-003, + -8.6317405e-003, + -3.6862811e-002, + -3.2830740e-002, + 8.4783068e-003, + -1.5330067e-002, + 1.1130119e-001, + 7.3688984e-003, + -6.4062197e-003, + 3.9423451e-002, + 8.1626914e-002, + -2.2657562e-002, + 7.7429063e-002, + -1.7196394e-003, + -5.1547799e-002, + 8.5550269e-002, + 1.0233102e-003, + -2.7193777e-002, + 5.8490358e-002, + 6.2673818e-002, + -3.9346043e-002, + -3.9066234e-002, + -1.2783050e-002, + -6.3166376e-002, + 2.7608238e-003, + -4.7437497e-003, + 4.1786886e-003, + -3.2351866e-003, + -3.3156438e-002, + -5.4098732e-002, + -5.6553182e-002, + 5.8110628e-002, + 1.1522620e-002, + -5.4533062e-003, + -1.6040357e-002, + -5.2050007e-002, + 1.1068723e-002, + 7.0599072e-002, + -8.2637140e-002, + -3.3101999e-002, + -1.7103108e-002, + -5.2723510e-002, + 1.1424693e-004, + -2.0451276e-002, + -3.8451163e-002, + -3.9178471e-002, + 1.0882970e-001, + -5.9520509e-002, + -1.6406338e-002, + -3.7464624e-002, + -1.5850757e-002, + 2.8142632e-003, + 8.5106236e-003, + -3.4606452e-002, + 2.1538352e-002, + -5.1542008e-002, + -6.0556592e-002, + -3.0525775e-003, + 1.0188123e-001, + -1.6159393e-002, + -4.6398817e-003, + -3.4883594e-002, + 5.7383438e-003, + 7.6872944e-002, + 1.6904979e-002, + -3.9974367e-004, + -6.4651835e-002, + 2.0519546e-002, + 1.4600580e-002, + 9.3830207e-002, + 1.1815421e-001, + 8.2952538e-002, + 1.3580903e-004, + -4.5583612e-002, + -8.4369787e-002, + 1.0032836e-002, + 7.8411529e-002, + 4.3200604e-002, + -1.5040485e-001, + -1.2045753e-001, + -3.0628967e-002, + 4.6612260e-003, + 6.4710750e-002, + -2.6463384e-002, + 8.0467496e-002, + 1.5772806e-002, + -9.0031337e-002, + 3.8140960e-002, + 2.4067996e-002, + -1.4456479e-002, + 2.5044977e-002, + -5.5023682e-002, + -3.1476503e-002, + 4.6154417e-002, + 4.1969567e-002, + -2.1537004e-002, + -1.3892791e-002, + -7.9877470e-002, + -6.6130095e-002, + -3.3971108e-002, + 4.9723852e-004, + -2.3332777e-002, + 4.4957143e-002, + 4.5955566e-002, + 7.3085106e-002, + 1.4327863e-002, + 4.4882884e-002, + -4.5453744e-002, + 3.2494203e-002, + -3.5223572e-004, + -3.4399985e-002, + -5.9070327e-002, + -2.4763167e-002, + 5.4170280e-002, + -9.3797557e-002, + -2.4345173e-002, + 7.5789539e-003, + 6.5847677e-003, + -1.1035459e-001, + 6.4245815e-002, + -6.3677641e-002, + -2.7625955e-002, + -4.9760945e-002, + 1.9438298e-002, + -2.0183031e-003, + 3.9238472e-002, + 7.3801148e-002, + -7.4626808e-003, + -3.5100675e-002, + 1.1826910e-002, + -5.0622844e-002, + 4.3419831e-002, + -2.2438311e-002, + 4.0482870e-002, + -2.5746508e-002, + -4.5886738e-003, + -4.2692344e-002, + 6.0214404e-003, + -4.9494823e-002, + -6.9637679e-002, + -6.0074768e-002, + -1.3792535e-002, + 5.8374139e-002, + 4.0942951e-006, + -4.1381257e-002, + 5.5951370e-002, + -2.9628877e-002, + 1.2189054e-002, + 9.2356783e-003, + 1.9097401e-002, + 5.8341964e-002, + -5.8640330e-002, + -4.0346416e-002, + -2.0148478e-002, + -7.3979491e-002, + -7.6507173e-003, + -2.6376789e-002, + 9.3631448e-003, + 5.7075337e-004, + -1.7237147e-002, + -1.4088176e-002, + -6.5722025e-002, + 1.7734913e-001, + 3.9188355e-002, + -5.3138441e-003, + 6.6012838e-004, + -3.7635320e-002, + 8.6939560e-002, + 2.5457618e-002, + -5.3643902e-003, + -3.5072285e-002, + 1.7654459e-002, + -1.7002417e-002, + -1.1934297e-002, + 1.0909989e-001, + -4.5341914e-002, + 2.9654212e-002, + -7.3979691e-002, + 8.1855730e-002, + -4.1111527e-002, + 2.8178913e-002, + 3.0990023e-002, + -3.8439631e-002, + 4.6092851e-002, + 2.0499136e-002, + -4.0078674e-002, + -7.5298075e-002, + 8.6249420e-002, + 2.0413103e-002, + 1.4283415e-002, + 3.3364666e-003, + 4.5625551e-002, + 2.8593452e-002, + 1.0294208e-001, + 4.6237012e-002, + 2.3737104e-002, + 1.4850043e-003, + 4.5627026e-002, + -3.1300170e-002, + 2.7232389e-002, + -2.5581725e-002, + -4.2382451e-002, + -4.1639602e-002, + -1.2685580e-002, + -6.8348575e-002, + -3.5070023e-002, + -1.9126421e-002, + -5.1202221e-002, + -2.1697346e-002, + 6.3981805e-003, + 6.1889782e-002, + -9.5515388e-002, + -3.5099019e-002, + -7.5991979e-003, + 2.6608290e-002, + -6.5628332e-003, + 4.0519304e-002, + 1.8759115e-004, + -8.2745501e-002, + 4.8080126e-002, + -9.4334121e-002, + -1.7519517e-002, + 8.4578794e-003, + -1.0547960e-002, + -2.9348950e-003, + 2.2443020e-002, + -8.3815521e-003, + 3.4363193e-002, + 3.5010892e-002, + -2.7129950e-002, + -1.8407294e-003, + -2.7794904e-002, + 7.5761568e-002, + -5.1005395e-002, + 2.2206192e-002, + 5.5815959e-003, + 1.3179272e-002, + 1.3743604e-002, + 8.4180570e-002, + -4.5318175e-002, + -4.0369759e-002, + -5.5643911e-002, + 1.1111604e-002, + 4.9980927e-002, + -5.3328516e-002, + -2.5289654e-002, + -5.3455028e-002, + -4.5115993e-003, + 1.2552924e-002, + 2.4187614e-002, + -6.5216647e-002, + -6.7184717e-002, + -3.4635282e-002, + 2.6037151e-002, + -1.2958051e-002, + -6.4529955e-002, + -4.7775406e-002, + 7.7791690e-002, + -4.1840856e-002, + 3.5508733e-002, + 3.6208672e-002, + 2.8883867e-002, + -2.2614722e-002, + -6.2467477e-002, + 2.1201398e-002, + -6.4938220e-002, + -2.5718030e-002, + 1.0132503e-001, + -1.0989944e-001, + 1.7386332e-002, + -1.9848054e-002, + 4.6500211e-002, + 8.7080916e-002, + 6.1051787e-002, + -6.9658176e-002, + 1.8448919e-003, + -6.3897477e-002, + 9.5246967e-003, + -1.7099063e-002, + 8.6762837e-002, + -5.1071138e-002, + -4.1995939e-002, + -1.5112140e-002, + 9.4802477e-002, + -3.6319825e-003, + 5.6475075e-002, + -5.2649820e-003, + 5.5494589e-002, + -3.6195527e-002, + 3.0102603e-002, + 9.6119308e-002, + 2.9804096e-002, + -8.3871467e-002, + -4.6819532e-002, + -6.6699175e-002, + -7.8740356e-002, + 2.3100681e-002, + 4.0518590e-002, + -5.5249251e-002, + 3.4210609e-002, + 6.3808433e-003, + 2.9561241e-002, + -7.9993851e-002, + -8.6030708e-003, + 4.9599184e-002, + -5.3356684e-002, + -4.3441101e-002, + 4.6557960e-003, + -5.8349112e-002, + 7.0442125e-002, + 3.3583231e-002, + 3.5326691e-002, + -1.4284013e-003, + 3.7155912e-003, + -6.1957730e-002, + -2.5175104e-002, + 1.0316170e-004, + 1.3785501e-002, + -3.4528343e-002, + 9.4718664e-002, + -8.5929124e-003, + 6.2353769e-003, + -1.9235982e-002, + -5.0684859e-002, + -9.0890509e-002, + 2.9614723e-002, + -5.8904724e-002, + -5.9605704e-002, + 1.7332188e-002, + -6.2983369e-004, + 7.6762655e-002, + -1.5739418e-001, + 4.7428004e-002, + -7.4437002e-003, + 3.2753497e-002, + -6.4494291e-003, + -1.0132357e-001, + 3.1793509e-002, + -1.9653108e-002, + -1.3986054e-002, + -1.0375110e-001, + 5.9341902e-002, + 7.4338421e-002, + -7.4336814e-002, + -8.8261702e-004, + 8.4239417e-002, + 3.6771318e-002, + 4.6614615e-003, + -1.0885608e-001, + 4.0218429e-002, + -7.3328551e-002, + 3.4660924e-002, + -2.2304889e-002, + 9.1183611e-003, + -3.1063866e-002, + 3.7029187e-002, + -8.5599164e-003, + -3.1378391e-003, + -3.4177850e-002, + -3.6311985e-002, + 5.4941612e-002, + -2.5856244e-002, + 9.8859541e-002, + -4.1708361e-002, + 4.4676996e-002, + 1.0012678e-001, + 1.2298856e-002, + 3.9574107e-002, + -5.4805478e-003, + -2.5335550e-002, + 2.0495470e-002, + -2.8777276e-003, + -1.2280951e-002, + -3.6926171e-002, + -6.4637997e-002, + 3.1275904e-002, + -4.0724158e-002, + 8.2545982e-002, + 1.7297459e-002, + 1.7103606e-003, + -3.6063372e-002, + -1.9411586e-002, + 2.5489285e-002, + 5.3618799e-002, + -1.5847040e-003, + -8.2607767e-002, + 6.4750926e-002, + 3.4155392e-002, + 1.2202950e-002, + -6.3849575e-002, + -4.2629288e-002, + -9.3420039e-002, + 1.8591964e-002, + -6.2494687e-002, + 2.7073439e-002, + -1.6706104e-002, + 8.5702929e-004, + 5.5338380e-002, + -1.1863343e-002, + 2.4120033e-002, + -1.9673309e-002, + -9.0836747e-003, + -8.4090025e-002, + -1.6605994e-002, + 1.2509049e-002, + 2.9654581e-003, + 3.5414725e-002, + -9.1520329e-002, + 5.3251481e-004, + -3.9064127e-002, + 4.3848196e-002, + -6.5906592e-002, + -6.2694114e-002, + -7.5430627e-002, + -6.9288028e-002, + -7.3831218e-002, + -2.2849271e-003, + 4.1968983e-002, + 9.1516100e-003, + 6.3003994e-002, + 4.0825527e-003, + -1.1602298e-002, + 3.4062508e-002, + -3.6760665e-002, + -6.6458351e-003, + 4.5328593e-002, + 1.5333803e-002, + 3.1081863e-002, + 1.0997856e-003, + 4.0172982e-002, + -5.1202051e-002, + 3.0204527e-002, + -9.1683008e-002, + 6.6885251e-002, + -1.4713293e-002, + -1.8783233e-002, + -2.6727404e-002, + -4.0587117e-002, + 1.7352452e-002, + 2.4068866e-002, + 9.3813608e-002, + 1.4593201e-001, + -2.6243684e-002, + 4.2410590e-003, + 5.7049362e-002, + -1.0495092e-002, + 5.5352776e-002, + -1.4966413e-002, + 5.8887924e-002, + -2.9432846e-002, + 1.5016450e-002, + 1.8771912e-002, + 2.9731363e-002, + -8.9727906e-002, + -2.8879171e-002, + -2.4530626e-002, + -2.1755227e-002, + 2.6372269e-002, + 1.6464203e-002, + -2.9595373e-003, + -2.8033224e-002, + -3.8960164e-002, + -1.4500836e-002, + 1.2441672e-004, + 6.9888338e-002, + -1.3326151e-002, + -4.4177213e-002, + 1.0679639e-001, + -7.7540624e-002, + 7.3527032e-002, + 7.1684818e-002, + 2.4447003e-002, + 1.3247555e-002, + 2.5484911e-002, + -2.0333037e-002, + 1.0820256e-001, + -1.5291962e-001, + 4.0764107e-002, + -5.3576752e-002, + -3.3726558e-002, + 5.9985203e-002, + 1.4311757e-002, + 1.0872979e-002, + 4.8154459e-002, + -9.8724947e-002, + 3.5433564e-002, + -3.0296223e-002, + -4.9776503e-002, + 6.4312955e-002, + -3.8636806e-002, + 4.1001924e-002, + 2.8324136e-002, + -2.4954944e-002, + 3.0731417e-002, + -4.0748527e-002, + 1.0071007e-001, + -4.2444577e-002, + 7.4060614e-002, + 7.0443088e-002, + -8.5281317e-002, + 2.2408837e-002, + -3.0453603e-002, + 5.3244534e-002, + -2.7097865e-002, + 9.3509025e-002, + -4.0481022e-002, + 3.0984921e-002, + 6.2120102e-002, + 2.5263636e-002, + 4.7524005e-002, + -8.3461434e-002, + -4.0450596e-002, + 2.4301374e-002, + 2.4082281e-002, + 2.7165952e-002, + 2.5739840e-002, + -4.4498403e-002, + -9.3779267e-002, + 1.3230632e-002, + 5.6356340e-002, + -3.1721297e-002, + -1.1371059e-001, + 5.1330793e-002, + 3.9800143e-002, + 4.4602902e-002, + 4.0186966e-002, + -3.3956201e-002, + -3.4378181e-002, + 3.0222123e-002, + 1.3392410e-002, + -1.1877032e-001, + -6.1513207e-002, + 5.1308971e-002, + -3.4406254e-004, + -5.6836546e-002, + 3.1147677e-002, + 1.2984031e-001, + 6.9255265e-002, + -7.3899471e-002, + 4.4113150e-002, + 4.1613437e-002, + -8.3330499e-002, + -6.7769626e-002, + 9.9577638e-003, + 8.5011488e-002, + 3.1777824e-002, + -3.0275122e-002, + -1.9721785e-003, + -2.8670666e-002, + -5.1951849e-002, + 2.6123845e-002, + -4.6954628e-002, + 3.9325561e-002, + -1.4539624e-001, + -4.4989415e-002, + 1.2490030e-002, + 9.8158554e-002, + -8.8549642e-002, + 7.0425741e-002, + 1.6289354e-002, + 7.6642414e-002, + 8.2615082e-002, + 1.5188920e-002, + 1.0717190e-001, + 7.8459410e-003, + -9.8939081e-002, + 5.4496988e-002, + -1.9598305e-002, + -4.8340131e-002, + 9.1012052e-002, + 4.5089162e-002, + 2.7001089e-002, + 3.9597820e-002, + -2.9912957e-002, + -4.5233127e-002, + -2.6888627e-002, + 8.2716012e-002, + 4.1938511e-002, + -1.2290728e-002, + -9.1141489e-002, + -9.3716385e-002, + 5.0846593e-002, + -6.9747424e-002, + 1.5936647e-002, + 9.0841003e-003, + -7.9217963e-002, + 4.2523607e-002, + -3.4283790e-002, + 6.2931211e-002, + 1.9054212e-002, + 1.0431108e-002, + -1.7512053e-002, + 1.5995877e-002, + -6.9853083e-002, + -3.6133865e-002, + 5.1883029e-002, + -5.4941971e-002, + 2.5099530e-002, + 2.1949930e-002, + -7.2924143e-002, + -1.2241689e-002, + -2.5239538e-003, + 1.0240874e-002, + -3.5188489e-002, + -1.4637794e-002, + 4.2573102e-002, + -4.6954972e-002, + 4.9757134e-002, + 8.9000907e-002, + -5.7343223e-003, + -9.4659733e-002, + 2.2731848e-002, + -6.3526985e-002, + -6.2729748e-002, + -8.5124042e-002, + -2.2742192e-002, + 4.9060274e-003, + 5.9105851e-002, + 6.6593845e-002, + -2.0401971e-002, + -3.4052538e-002, + 1.0187912e-001, + -3.9129772e-002, + 1.6727491e-002, + 7.9581367e-002, + 2.3490622e-002, + -8.5225499e-002, + 4.5609113e-002, + 2.5532693e-002, + -1.3949777e-002, + 1.1939908e-001, + 3.1136484e-002, + 2.1065018e-002, + -7.3998053e-002, + -3.3433899e-002, + 6.4825970e-002, + -6.6483460e-003, + 2.1878777e-002, + -5.5590218e-002, + 6.2132974e-002, + 6.0099401e-002, + 2.6750906e-002, + -3.2033687e-002, + 4.8448643e-002, + -3.8771221e-003, + -4.8090282e-002, + -2.9473176e-002, + -1.6510646e-002, + 5.6059374e-003, + -2.8498771e-002, + 1.4581678e-001, + 7.2382639e-003, + 6.9060065e-002, + 3.1254099e-002, + 1.1295554e-001, + -2.0791262e-002, + 2.6272472e-002, + 2.3832128e-004, + 1.7675185e-004, + 2.2985763e-002, + 5.8978432e-003, + 4.4429730e-003, + 7.5305836e-002, + 2.7519294e-002, + 2.6304737e-003, + -7.5022497e-003, + 9.7612623e-002, + -1.1392227e-003, + 6.3717011e-002, + 4.2435569e-002, + -6.8014182e-002, + 7.4854037e-002, + 3.2524349e-002, + 7.0521866e-002, + 2.0297711e-002, + -2.7255480e-002, + -1.3079920e-002, + -1.1988356e-001, + 4.2564644e-002, + 8.9756674e-002, + 1.7220549e-002, + -4.4937423e-002, + -2.9070759e-002, + -4.4538021e-002, + -7.8632839e-002, + -2.8995185e-002, + -1.4328207e-002, + 2.6443524e-002, + 8.9669124e-002, + 1.7624887e-003, + 3.2927633e-002, + -3.1535117e-002, + -6.6599096e-003, + 1.0186317e-001, + 8.9875545e-003, + 2.8378610e-002, + -5.5136504e-002, + 3.3829370e-002, + 7.1374246e-003, + -1.4538378e-002, + 3.9237476e-002, + 6.8685661e-002, + -3.3057531e-003, + 1.1538617e-002, + 8.8143388e-003, + -1.9900457e-002, + 2.0600418e-002, + 3.0249751e-002, + -7.3517395e-003, + 6.4648004e-002, + -8.6600526e-004, + 8.3511299e-003, + -5.4627039e-002, + -6.4363505e-003, + 1.6893141e-002, + 5.5401782e-003, + -2.4244983e-003, + -2.0950127e-002, + -2.2956516e-002, + 7.8535473e-003, + 2.4067483e-002, + 6.1367370e-002, + -3.3267227e-002, + -1.7259358e-002, + -7.3612541e-003, + -1.5577290e-002, + 8.5933756e-002, + 5.0314067e-003, + -5.7691721e-002, + -3.1185546e-002, + -1.0012818e-002, + -9.3068008e-003, + -1.2733027e-001, + -2.4660461e-002, + -6.9689614e-002, + 6.7705187e-002, + -9.0527945e-002, + -8.9240761e-003, + -3.6546741e-002, + -7.8518923e-003, + 6.0277518e-002, + 8.8143610e-002, + -3.6670503e-002, + 5.9594768e-002, + -6.2854695e-002, + 8.4561367e-003, + 4.2531503e-002, + 1.2490411e-001, + -1.2983679e-002, + 4.8837441e-002, + 2.8397759e-002, + 4.9265357e-004, + -5.0014029e-002, + -6.4438003e-002, + 6.3709335e-002, + -8.3485243e-002, + -1.3662989e-002, + -1.1010182e-002, + -4.1630589e-004, + 3.7231066e-002, + 5.8354336e-002, + 1.4802151e-002, + -9.2736005e-003, + 7.0150240e-002, + -7.5624119e-002, + -1.8709434e-002, + 8.1817931e-002, + 1.0532906e-001, + -6.6715765e-002, + 1.1083842e-002, + -7.4493893e-002, + -9.9142748e-003, + 6.2718554e-002, + 2.7079763e-002, + -2.5876824e-002, + -4.8123789e-002, + 6.1857353e-002, + -4.2675136e-002, + -6.2163117e-002, + -7.4268325e-002, + -2.9318352e-002, + -3.3154279e-002, + 4.8684897e-002, + -2.4063594e-002, + -8.6147192e-002, + -7.1972623e-003, + -4.4253121e-002, + -2.1162236e-003, + -3.5637316e-002, + -5.0298912e-003, + 1.9549988e-002, + -3.1928938e-002, + -4.5581285e-002, + 4.7829407e-002, + 8.7149645e-002, + 4.0640515e-002, + 1.4297447e-002, + 9.8222629e-003, + 3.2853388e-002, + 6.8740447e-002, + -1.2177132e-001, + 9.4625764e-002, + -1.5776485e-002, + -3.2495760e-002, + 3.0796063e-002, + -1.5368625e-002, + -7.9526144e-002, + -6.2453602e-002, + 5.9616092e-002, + -6.4260784e-002, + 1.5966646e-002, + 3.1495482e-002, + 6.5589632e-002, + -3.4614182e-002, + -6.9190746e-002, + -2.0874294e-002, + 1.3630214e-002, + 5.3339825e-002, + 1.6147000e-002, + 4.2668360e-002, + -2.5662017e-002, + 4.5348429e-003, + 6.1345954e-002, + 4.1541021e-002, + -4.9887559e-002, + -5.8465581e-002, + -2.1207204e-002, + 7.9091417e-003, + -1.2334773e-002, + -1.0617181e-001, + 8.9782313e-002, + -6.8274917e-002, + 2.1132464e-002, + 5.7348207e-003, + -9.2561293e-003, + -3.7038110e-002, + -2.8239427e-002, + 1.8178841e-002, + -3.9897232e-002, + 1.0250394e-002, + 6.3382126e-002, + 3.1483520e-002, + -1.4611403e-002, + -4.1066531e-003, + 5.7642552e-002, + 1.2244865e-002, + 3.7434406e-002, + 2.2822222e-002, + 9.2902509e-002, + 1.1325867e-002, + -6.2025695e-002, + 1.5489679e-002, + -1.6179136e-002, + -1.7726855e-003, + 8.7415263e-002, + 2.9780528e-002, + -6.5055050e-002, + -1.7262184e-002, + -1.2062737e-002, + 4.1904361e-002, + -3.4331618e-002, + 1.2164792e-001, + 4.9603771e-002, + -1.3061748e-002, + 1.1007232e-002, + -1.4216546e-002, + -3.5763228e-002, + 1.2025510e-002, + 8.2989866e-002, + 2.0160053e-002, + -1.6822685e-002, + 7.3528826e-003, + 2.0923780e-002, + 5.2711615e-003, + -2.5691601e-002, + 4.5395884e-002, + -1.5802909e-003, + 6.8782769e-002, + 1.1122473e-001, + 1.0025602e-001, + 1.3910254e-001, + -8.5937461e-002, + 3.2274784e-002, + 4.8447219e-002, + -7.6279744e-002, + -9.4932243e-002, + -4.6596008e-002, + 6.9567452e-002, + -2.0821944e-002, + 2.8782945e-002, + -1.8673196e-002, + -1.0249668e-003, + 3.0785039e-003, + 7.5883489e-002, + -6.3193813e-003, + 7.7764074e-002, + -4.3608077e-002, + -1.3123466e-002, + 3.6824621e-003, + -5.9201109e-002, + -2.3113816e-002, + -8.8488271e-002, + -1.1032349e-002, + -2.3364616e-003, + -6.5601368e-002, + 1.4329878e-001, + 9.5131857e-002, + 4.2865722e-002, + -9.6979502e-002, + -3.5638863e-002, + 9.0205848e-002, + 1.9877782e-002, + -1.2497646e-001, + 2.5802125e-002, + 4.6840610e-002, + -4.7117859e-002, + -1.0958747e-001, + -4.6687284e-002, + 3.3044810e-003, + -4.3352639e-002, + 5.5404689e-002, + -1.4901969e-001, + -6.5836290e-003, + -8.3908961e-002, + -8.4786953e-003, + 2.6778741e-002, + -7.1364019e-002, + 2.9762397e-002, + 3.8378977e-002, + -1.3678167e-002, + 1.0245114e-002, + -6.8802397e-002, + -7.9396342e-002, + 8.9092342e-002, + -2.5071896e-002, + 1.6416317e-001, + -3.3416141e-002, + -8.8098549e-002, + -2.8516999e-002, + -2.8171336e-002, + 1.4735227e-002, + 2.1490528e-002, + 1.0996266e-002, + -7.9010073e-002, + 1.3973632e-002, + 8.5196514e-002, + -3.4922417e-002, + 3.4433947e-002, + 4.5850060e-002, + -6.6284133e-002, + -1.0572099e-001, + -6.6431349e-002, + 6.0325770e-002, + -9.2479536e-003, + -2.2892434e-002, + -3.9861268e-002, + 7.7138209e-002, + 1.1492915e-002, + 3.1465738e-002, + -1.2138307e-002, + 4.7630033e-002, + -9.7311603e-003, + 1.3770049e-002, + -7.3660639e-003, + 7.4335649e-002, + -3.6628135e-003, + 1.2752549e-002, + 1.3838186e-002, + 4.2180077e-004, + -5.4375913e-002, + 2.1917738e-002, + -1.2614454e-002, + -2.3342227e-002, + -6.4971690e-002, + 1.6110329e-002, + 1.4737048e-002, + 3.0388287e-002, + -1.6824888e-002, + 1.7295248e-002, + 1.0812445e-002, + -5.5425021e-002, + -4.9277740e-002, + 5.0707632e-002, + 4.1922806e-002, + 1.8455962e-002, + 5.0365924e-002, + 4.4298398e-002, + 7.6431843e-003, + 5.9989537e-002, + -7.6908515e-002, + 2.8530229e-002, + 9.5653590e-002, + -7.2017798e-002, + -8.0655593e-003, + 1.0083818e-001, + 4.9232556e-002, + -6.6242009e-002, + 2.9556295e-003, + -3.5960545e-002, + 1.1419955e-002, + 6.6825880e-003, + 2.9477422e-002, + -2.9472636e-002, + 5.5236681e-002, + 2.8874435e-002, + -2.2350145e-002, + -1.4664332e-002, + -6.8185763e-002, + -2.0916584e-003, + -6.2584599e-003, + 5.9273963e-003, + 9.7345621e-002, + 1.7069987e-002, + -3.5800212e-002, + 3.8397984e-002, + -4.6760839e-002, + -5.0292748e-002, + -2.1914980e-002, + -1.8316586e-003, + -5.2956111e-002, + -4.4811672e-003, + 6.3511854e-002, + -5.7468947e-002, + 3.3773578e-003, + -6.2827625e-002, + -1.0672637e-001, + -2.3481169e-002, + -4.9309562e-002, + -9.6720496e-003, + 5.8540389e-002, + -1.4927692e-002, + 4.5935378e-002, + -1.5630681e-003, + -1.8325545e-002, + 3.2884463e-002, + 2.3472286e-002, + 1.9480110e-002, + -1.5164953e-002, + 5.0952861e-004, + 3.6924652e-002, + 3.9980199e-003, + 2.7122068e-002, + 4.0586323e-002, + -6.8458269e-004, + 2.4214833e-002, + -2.6547884e-002, + -2.4783823e-002, + 8.8816623e-002, + 5.5882019e-002, + 5.3618064e-003, + -1.1671543e-001, + -8.2213149e-002, + -9.6951820e-002, + 7.3380548e-002, + -1.2640056e-003, + 4.1876563e-002, + 2.5405425e-002, + 2.4599929e-002, + 1.4178532e-002, + 5.5594418e-003, + 4.2950164e-002, + 1.8014601e-003, + -1.2215360e-001, + 1.0493101e-001, + 3.1735201e-002, + 5.5741286e-003, + -3.2479076e-002, + 2.6681545e-002, + 2.8019414e-002, + -8.0179790e-003, + 3.1489206e-002, + 4.3033256e-003, + -3.7630185e-002, + 5.3039128e-002, + 5.1506634e-002, + -1.7820552e-002, + -2.4621551e-002, + -5.5322066e-002, + 2.5011123e-002, + -4.7866728e-002, + -1.0796552e-002, + -3.3392282e-002, + -4.7783524e-002, + -1.8094968e-002, + -7.2520784e-002, + -6.5389567e-002, + 3.9464487e-002, + -9.8809443e-003, + 3.1120895e-002, + -5.4329781e-002, + 1.6954674e-002, + -4.8954224e-002, + 7.3972200e-002, + 4.7640882e-002, + 3.0356780e-002, + 9.5741578e-003, + -4.1590063e-002, + 1.1287435e-001, + -8.6416889e-003, + -2.2674367e-002, + 2.1388361e-003, + 5.5542441e-002, + 1.0045614e-002, + -8.7522721e-002, + 8.7719983e-003, + 6.7355731e-002, + -1.6159743e-002, + 8.7223484e-003, + 6.0092014e-002, + -9.4184958e-002, + -3.6268920e-002, + -2.1332232e-002, + -3.1682036e-002, + 2.8664908e-002, + 2.6541157e-002, + -1.0689359e-001, + -7.0862918e-002, + -1.1433268e-001, + 3.4863935e-002, + 1.0709581e-002, + -5.5513033e-002, + -1.5617145e-002, + 1.9399041e-003, + 6.6680970e-002, + -3.5719944e-002, + -5.5335504e-002, + -9.3481167e-002, + 2.3589372e-002, + 1.2307760e-002, + -4.1853305e-002, + 3.2086368e-002, + 1.3207910e-002, + -1.2902915e-002, + 4.0576229e-002, + -3.1174299e-002, + -4.7359539e-002, + 3.2639664e-002, + 6.8807350e-002, + 3.0052612e-002, + -1.6360841e-002, + 7.3692525e-002, + 2.3214010e-002, + -1.9279486e-003, + -2.9304762e-002, + 1.4092775e-002, + -3.8475139e-002, + 4.0205235e-002, + 3.5637448e-002, + 3.1815236e-002, + 5.4193437e-002, + 2.7101101e-002, + -7.8492340e-002, + -1.3053183e-002, + 9.8943970e-002, + 3.2605663e-002, + -5.3326325e-002, + 4.7045271e-002, + 1.9171127e-002, + -7.0639869e-002, + -2.6942346e-002, + 2.1897131e-002, + 4.4342108e-002, + 2.5419609e-002, + 6.5525042e-002, + -6.2924979e-002, + 4.2919074e-002, + 5.7909339e-002, + -2.0016289e-002, + -7.1844831e-004, + 3.3287795e-003, + 5.2391582e-002, + 5.1351648e-002, + 6.9345017e-002, + 1.6715079e-002, + 1.0245380e-001, + 6.5560454e-003, + -4.2978289e-002, + 5.1857486e-002, + 1.6375558e-002, + -1.1231560e-001, + 1.8452057e-002, + 2.7196151e-002, + -4.7948818e-002, + 3.8838999e-002, + -8.1296721e-002, + -4.4213439e-002, + 3.3789367e-002, + -8.9903386e-002, + -4.8309819e-002, + 3.0350368e-002, + 9.3462798e-003, + -4.3576313e-002, + 5.0364033e-002, + -3.3705706e-002, + 6.9992170e-002, + 9.4421577e-002, + -3.7859282e-002, + -2.4699603e-002, + 5.0385013e-002, + -5.4216273e-002, + 6.9692784e-002, + 1.0150382e-001, + 1.7548633e-002, + 9.8962282e-003, + -5.6862743e-002, + 4.1445815e-002, + 1.9635439e-002, + -3.1828877e-002, + -7.5389343e-003, + -2.2662898e-002, + -9.3225720e-003, + 3.3794402e-002, + -1.5022139e-002, + -8.3952470e-002, + -4.4638734e-003, + 5.0977217e-002, + -5.6868826e-002, + 8.2257315e-002, + -3.3527792e-002, + -3.8753182e-002, + -8.9806282e-002, + 6.8640832e-004, + 7.2265978e-002, + -1.2264922e-001, + 1.0964559e-002, + -6.3412284e-002, + 1.2106129e-001, + -8.5320894e-002, + -3.7961427e-002, + -4.1350954e-002, + -6.7090729e-002, + 4.9718886e-002, + -3.3874055e-002, + -7.1699033e-002, + 2.5203129e-002, + 2.0350140e-002, + 6.4638571e-002, + -7.2804864e-002, + 2.3308871e-002, + 1.5264191e-003, + -1.1191223e-001, + -6.0619938e-002, + -2.2397074e-003, + 6.8646240e-002, + -9.5147638e-003, + -8.9258460e-003, + -2.2587656e-002, + -8.8042374e-003, + 2.7917130e-002, + 3.0703476e-002, + 4.0753823e-002, + -1.9174676e-002, + 7.6285732e-002, + 5.5310628e-003, + 6.7972330e-002, + 1.6915582e-002, + -3.3407461e-002, + 2.3263797e-002, + 3.1563985e-002, + 6.0315051e-004, + -3.1286618e-002, + -1.1639905e-002, + -1.2659763e-002, + 1.2883340e-003, + -5.0171053e-002, + -4.9900923e-003, + -1.0228083e-001, + -4.8479815e-002, + -2.9928321e-002, + -5.5916163e-002, + 4.7735428e-002, + -1.3294429e-003, + -7.5136122e-003, + 5.4331339e-002, + -4.2475157e-002, + -3.2342585e-002, + -2.1096262e-002, + 4.8946925e-002, + -7.7232620e-002, + 4.6424245e-002, + -7.1029625e-002, + -8.3080699e-003, + -1.8848230e-002, + -3.3058342e-002, + 2.4301547e-002, + -1.9950837e-002, + -2.6746721e-002, + -3.1244062e-002, + 4.9214132e-002, + -4.3837753e-002, + -2.6533780e-002, + -3.2174063e-002, + 3.1234554e-002, + 1.8396020e-002, + 4.2139477e-003, + -6.3624347e-002, + 3.8068496e-002, + -7.5273414e-002, + -5.4282683e-002, + 1.0378638e-001, + -5.4062955e-002, + 1.0025793e-002, + -6.6450371e-003, + 8.2632045e-002, + -1.1994389e-001, + 3.1022007e-002, + -3.1118158e-002, + 5.0953443e-002, + -5.1605376e-002, + -4.8568100e-002, + -7.4390375e-003, + -4.7877758e-002, + -9.4953155e-003, + -2.6931667e-003, + 2.3165347e-002, + 5.9754385e-003, + 2.5900617e-002, + -1.5042605e-002, + -1.4480424e-002, + 4.2074657e-002, + 8.9476498e-002, + 4.5100917e-002, + -5.1593045e-002, + 6.0834274e-002, + 4.0989664e-002, + -1.7405350e-002, + 5.9998834e-002, + 1.2416742e-002, + 1.8605073e-002, + 1.0892550e-001, + -3.2491824e-002, + -3.1135526e-002, + -2.9815887e-002, + 2.0205791e-002, + 1.6566794e-002, + 7.0071566e-002, + -4.9569656e-002, + 3.9921784e-002, + -2.8730117e-002, + -1.7587977e-002, + 7.1500463e-002, + 3.6872018e-002, + -3.4586232e-002, + -1.6970720e-002, + 3.4644172e-002, + -2.0901296e-002, + 4.2141589e-002, + -7.6319420e-002, + 4.5998962e-002, + -7.3399778e-002, + -8.1916522e-002, + 3.8464961e-002, + -1.1521599e-002, + 7.2694972e-002, + -3.9337982e-002, + 5.9084598e-002, + -3.4257913e-002, + -8.6242832e-002, + -2.5477654e-002, + 1.5161827e-002, + 4.3686125e-003, + -1.1656981e-002, + -1.5563664e-002, + 6.2510087e-002, + -1.0836642e-002, + 1.2432558e-001, + -2.2959202e-002, + 1.3783634e-003, + 3.3269441e-002, + 3.8750648e-002, + -1.3656516e-002, + 5.9833997e-002, + 1.4796841e-002, + -2.2627766e-003, + 4.9145114e-002, + -1.1354640e-001, + 1.3391314e-002, + -1.3806188e-002, + 2.7218571e-002, + -3.9102606e-002, + 1.0801438e-002, + -3.4971279e-002, + -2.3190242e-002, + -1.6194699e-002, + -1.9332419e-002, + -2.7390066e-003, + 1.8022691e-002, + -1.5832667e-002, + -9.2546225e-003, + -6.4699491e-002, + 4.7590650e-002, + 5.4590011e-002, + -2.0868480e-002, + 4.8372708e-003, + 3.5635613e-002, + 4.9026328e-002, + -2.8886176e-002, + 2.4904926e-002, + 4.6825265e-002, + -4.1467334e-003, + -7.4816934e-002, + 2.4155196e-002, + -1.2145775e-002, + -4.8433817e-002, + -5.1333974e-002, + -7.6611960e-004, + -2.0288664e-003, + 4.4132138e-002, + 1.3884023e-002, + 3.3438764e-002, + -1.7045598e-002, + -1.3981286e-003, + 6.0450703e-002, + 1.6026951e-002, + -1.0038212e-002, + -5.9082814e-002, + -6.8065244e-003, + -2.0735019e-002, + 6.4134665e-002, + 8.5071176e-003, + -2.2373060e-002, + 4.3619700e-002, + 1.5963047e-002, + -3.0249871e-002, + -8.3796187e-002, + -3.4276448e-002, + 5.3600630e-002, + -4.6111635e-002, + 3.2125595e-002, + 5.8851999e-002, + -7.8040384e-002, + 5.2267851e-002, + 3.4435223e-002, + 2.1556971e-002, + -1.7163880e-002, + -5.0843277e-002, + -3.2488185e-002, + -1.7547962e-002, + 3.1629302e-003, + 1.1087340e-001, + 5.8821833e-002, + 2.7600291e-003, + -1.8466769e-002, + 3.1019364e-002, + 6.9714994e-002, + 2.6197162e-002, + -2.5002333e-002, + 2.1238793e-003, + 6.3553430e-002, + -3.4198265e-002, + 4.8709571e-002, + -7.2299086e-002, + -4.3035088e-002, + 3.5760525e-002, + 5.3143565e-002, + 2.8080467e-002, + 7.4687831e-004, + 3.3589299e-002, + -2.7857822e-002, + 9.3293970e-002, + -3.1352513e-003, + -1.1227005e-003, + -4.5092687e-002, + -2.5306886e-002, + -1.0822730e-001, + -6.5870362e-002, + 5.0646576e-003, + -5.7436235e-002, + 3.2011690e-002, + -3.5040739e-003, + -3.9957599e-002, + 1.6341870e-002, + -7.6498865e-003, + -2.5256813e-002, + 2.8585914e-002, + -6.4304885e-002, + -7.0698223e-002, + -9.2642094e-002, + -5.6328267e-002, + -8.0773935e-002, + -6.5074477e-002, + 2.0294178e-003, + -2.4072922e-002, + 4.2458044e-002, + 4.7875614e-003, + -4.2143264e-002, + -2.8324995e-002, + -2.9328658e-002, + -9.2678479e-002, + 4.5617708e-002, + 1.2685434e-002, + -5.4340728e-002, + 4.2087780e-002, + 4.0016732e-002, + -1.2299481e-001, + 1.0379559e-001, + 5.7020403e-002, + -3.9544599e-002, + -1.8766513e-002, + 3.2158071e-002, + 7.3924530e-002, + -4.6618108e-003, + -5.5299328e-002, + 4.4245720e-002, + 3.7174478e-003, + 3.4306804e-003, + 4.2213951e-002, + -9.1086002e-002, + 1.5797797e-003, + -1.0094297e-001, + -3.1042592e-002, + 1.6312788e-002, + -5.7643992e-002, + 8.5044833e-003, + -5.8166289e-002, + 1.9822525e-002, + -1.4404965e-001, + -5.5582362e-002, + -4.5001443e-003, + -8.6256453e-003, + -1.0195382e-002, + -3.5860515e-002, + -6.9432334e-002, + -3.8266022e-002, + -4.0918161e-002, + -1.1863163e-002, + 5.0949718e-002, + -8.0206291e-002, + -2.6240511e-002, + 7.6676678e-002, + -6.5416559e-002, + -1.4318918e-002, + -4.3958025e-002, + -2.1978148e-002, + -6.4422744e-002, + -2.2733013e-002, + 1.2900773e-002, + -1.7819685e-002, + -4.7785428e-003, + 3.4686226e-002, + 6.4004707e-002, + -5.3322786e-002, + -1.8493916e-002, + 4.9290003e-002, + -4.5065517e-002, + -2.9327742e-002, + 2.3212884e-002, + -4.8985889e-002, + 2.9604806e-003, + -7.0253020e-003, + -9.2397443e-002, + -7.6453564e-002, + -3.4155955e-002, + -1.0082514e-001, + -8.0072913e-002, + 5.9487693e-002, + -3.2053752e-002, + -3.4654709e-002, + -4.2857910e-002, + 4.3434899e-002, + -6.1610488e-002, + 2.3564532e-002, + 5.0395882e-002, + -1.0869004e-002, + 2.7674042e-002, + 4.1961384e-004, + 1.1474642e-001, + 1.5501309e-002, + 5.3729017e-002, + 8.2294950e-002, + 3.6090309e-002, + 3.2405617e-002, + 7.8649811e-002, + 1.3050292e-002, + -1.6718241e-002, + -4.2514925e-002, + 2.0638931e-003, + -1.0261822e-001, + 5.5517573e-002, + -2.6256624e-003, + 7.3917084e-002, + -3.2038338e-002, + 5.9286807e-003, + -4.9553265e-002, + 4.0402131e-003, + 1.9006069e-002, + 1.5037719e-002, + -3.8431930e-002, + -3.4089576e-003, + -2.8898708e-003, + -5.1916447e-002, + -9.3843168e-002, + 2.9937678e-002, + -3.9290957e-002, + 4.4290160e-002, + -4.2250820e-002, + -1.6616660e-002, + -1.0653179e-002, + -3.4916960e-002, + -3.1852948e-002, + 1.8960722e-002, + 6.0590194e-002, + 1.7919981e-002, + -2.1735260e-002, + 2.5431032e-003, + -2.3276711e-003, + 4.7679757e-003, + 2.6771182e-002, + -8.0137596e-002, + -4.9700338e-002, + 2.4445536e-002, + -7.2537218e-002, + -1.8968099e-002, + 6.6550477e-002, + 6.7579085e-002, + -3.1351180e-002, + 1.6129275e-002, + 3.6101242e-002, + 1.1199196e-002, + 7.9145428e-003, + 4.0067468e-002, + 6.0585461e-003, + -7.4588015e-003, + 2.1235782e-002, + 6.3041751e-003, + -1.1634076e-003, + 2.2258425e-002, + -3.4248029e-002, + -4.5811428e-002, + 1.0578831e-002, + -5.5482586e-002, + -6.8507992e-002, + -7.7083934e-002, + -5.3913115e-002, + 5.9790071e-002, + -2.0841051e-002, + 2.3080531e-002, + 1.1187349e-001, + -7.1392621e-002, + 2.9668837e-003, + -2.9860507e-002, + 4.6683202e-002, + 8.5830739e-002, + -2.0897455e-002, + 3.2863177e-002, + 2.2323987e-002, + 4.8358711e-002, + 8.7562303e-003, + 1.4793712e-002, + -2.5985375e-002, + -4.6720770e-002, + -5.9782514e-002, + -4.2989314e-002, + 7.8223798e-002, + 1.1501209e-001, + 1.2024343e-001, + -5.6786240e-002, + -4.8421534e-002, + -2.5415443e-002, + 2.4664879e-002, + 1.7783775e-002, + 2.0466227e-002, + 7.8206669e-002, + -8.2391143e-002, + -1.3995146e-002, + -2.0960454e-002, + -5.6618569e-002, + -2.6705178e-002, + -8.1531358e-002, + 6.4664818e-003, + 5.6946318e-002, + 5.0003662e-002, + 3.5673980e-002, + 8.0875426e-002, + -4.4495078e-002, + -2.6194380e-002, + 4.5188183e-002, + -4.2455744e-002, + 5.7249340e-002, + -4.6127242e-002, + -5.4839710e-002, + -5.0448334e-002, + -2.2395030e-004, + -6.2981968e-002, + 3.6554485e-002, + 4.5243127e-003, + 6.8154599e-003, + 1.6305659e-001, + 3.9595164e-003, + -1.0792651e-002, + -2.8054860e-002, + -9.9706967e-002, + 2.3929942e-002, + -3.5658959e-004, + 6.6546468e-002, + 7.6294884e-002, + -4.0440534e-002, + -8.1371512e-002, + -7.7127876e-002, + 3.4857333e-002, + 4.3231191e-002, + 2.2144645e-002, + -3.8698213e-002, + -5.4129054e-002, + -3.2626325e-002, + -7.0222190e-002, + -5.1754787e-002, + -9.5744838e-002, + -1.7610262e-003, + 8.7360648e-003, + -4.6748263e-002, + -4.4850953e-002, + 8.2298815e-002, + 1.0185814e-002, + -3.0866560e-004, + 1.6675645e-002, + -4.2935404e-002, + -3.1656641e-002, + -5.6516863e-002, + -4.7656267e-004, + 1.0889961e-001, + 1.2029252e-002, + -1.3472583e-002, + 3.6157205e-002, + 4.4803936e-002, + 1.5275167e-002, + -4.7686528e-002, + 6.0330901e-002, + 1.3728328e-002, + 4.8689836e-002, + -3.5294359e-002, + -7.4547708e-002, + 3.0394600e-002, + 8.6384237e-002, + -4.9979038e-002, + 1.3943821e-002, + -8.2317359e-002, + 2.6078427e-002, + -4.8139628e-002, + -5.8720671e-002, + 5.3289578e-003, + -2.4543964e-002, + -3.1049552e-002, + -6.8795054e-002, + 2.6130466e-002, + 6.4881211e-003, + -1.7466698e-002, + 6.9418212e-002, + 9.6543814e-002, + 1.6716383e-002, + 1.0116932e-001, + 3.1515754e-002, + -1.5792490e-001, + -3.1915346e-002, + -4.3203259e-002, + -1.3039328e-002, + 1.0861618e-002, + 2.0098174e-002, + -5.8931575e-002, + 4.5019833e-002, + -4.4827929e-002, + -8.5719969e-002, + 4.7105627e-002, + 8.1454794e-002, + 1.5516734e-002, + -5.0548980e-002, + 5.9127415e-003, + -7.5578193e-002, + 1.1628813e-001, + 4.7500758e-002, + 4.9223640e-002, + 2.2248040e-002, + -1.7063173e-002, + 6.7174653e-002, + -8.8027078e-003, + -7.9122977e-002, + -2.7534155e-002, + 1.8033777e-002, + -6.3064595e-002, + -3.2992531e-002, + -1.3414397e-002, + -3.7650237e-002, + -5.4990281e-003, + 4.9549050e-002, + -7.8256965e-002, + -4.6347502e-002, + -3.7844657e-002, + -4.6727423e-002, + 5.1371291e-002, + -3.1964828e-002, + -1.5232444e-003, + -6.8143489e-002, + -5.5095855e-002, + -1.0895044e-002, + -2.5604041e-003, + 2.7027105e-002, + -7.6982878e-003, + -9.5337685e-002, + -1.8635429e-002, + -1.0751357e-001, + -5.6070283e-002, + 1.4123461e-002, + -1.8192970e-002, + 4.4540436e-002, + 1.3600658e-002, + 3.2261098e-002, + 4.4861229e-002, + -1.5863787e-002, + -1.0092780e-002, + -3.9516555e-003, + 3.8360973e-002, + 6.1804829e-002, + 1.0870303e-001, + 4.7383438e-002, + -5.0590863e-002, + -5.2113776e-002, + 5.2393207e-002, + 1.2177198e-002, + 6.2526425e-002, + 8.3174224e-003, + -2.4071062e-002, + 2.8581013e-002, + -6.0028375e-003, + 1.5238535e-002, + 5.2025149e-003, + -3.6385591e-002, + -9.3463539e-003, + -9.7549044e-003, + 4.1434624e-002, + -3.5638211e-002, + 6.1524697e-002, + 1.2879217e-002, + -1.1074718e-002, + 7.5826917e-003, + -4.3450751e-002, + -3.4027473e-002, + 6.3700920e-002, + -5.2272643e-002, + -2.8750180e-002, + 4.0041018e-002, + -8.1966458e-002, + -1.0461089e-002, + 2.5452300e-002, + 6.7107297e-002, + -3.3918191e-002, + -1.0212989e-001, + -6.3527291e-002, + 3.1678548e-002, + -6.5778118e-002, + -1.6823229e-002, + 2.2988117e-003, + -4.8242461e-002, + -1.4582693e-002, + -4.9060246e-002, + -3.4256626e-003, + 4.1172518e-002, + 3.2772250e-002, + 2.4890066e-002, + 3.4522929e-003, + 4.4704585e-002, + -5.9967401e-002, + 1.4541680e-002, + -7.9411114e-002, + -6.5131143e-002, + -4.2051810e-002, + 4.2103006e-002, + -9.8683984e-004, + -5.0962061e-003, + -2.2606406e-002, + -1.2325980e-001, + 9.5086419e-002, + -1.9106034e-002, + -5.1992218e-002, + -6.7436377e-002, + -1.5798067e-002, + -7.5885603e-002, + 1.7614604e-002, + 3.0602185e-002, + -4.5707990e-002, + 5.0279499e-002, + 1.3599448e-002, + -8.4652879e-002, + 1.4275404e-002, + 5.3761838e-002, + 1.3130364e-002, + -5.7785349e-003, + 1.0995249e-001, + 3.6117865e-002, + 2.2136081e-002, + 1.1263325e-002, + -4.9338919e-002, + 4.2415991e-002, + -6.3570185e-002, + 5.1525003e-002, + 8.9408937e-002, + -4.3531507e-002, + 2.5382423e-002, + 5.7394710e-002, + 1.1827633e-001, + -1.4335949e-002, + 2.4596850e-002, + -1.8394004e-002, + 1.3479964e-002, + -5.5450915e-002, + -1.3887857e-002, + 3.7399926e-002, + 4.2692709e-002, + -9.1345703e-002, + -6.4179097e-002, + 5.1528849e-002, + 1.1923834e-001, + 8.0392828e-003, + -7.4190647e-003, + 1.1158220e-002, + 2.3106872e-002, + 2.5289633e-002, + -7.8109586e-002, + 4.4033891e-002, + 2.9868351e-002, + 2.5709704e-002, + 6.5446252e-003, + 1.7279125e-002, + 8.8849380e-002, + -4.2399471e-002, + 3.2297167e-002, + -3.3758385e-002, + 5.3666150e-002, + 3.7628322e-002, + -1.3602948e-002, + 8.3115154e-002, + -4.4130785e-002, + 1.5545953e-002, + -5.7188645e-002, + 3.3708440e-002, + 7.9527486e-003, + 7.2838427e-002, + -8.7159852e-004, + 9.8852335e-002, + 4.3261724e-002, + -2.2410237e-002, + -1.9969511e-002, + 1.3049591e-002, + 1.3520410e-001 + }; -float audiobeam_mic_locations[15][3] = { +float audiobeam_mic_locations[ 15 ][ 3 ] = { {1.5, 2.79, 0}, {1.5, 2.82, 0}, {1.5, 2.85, 0}, @@ -5779,6 +5779,6 @@ float audiobeam_mic_locations[15][3] = { {1.5, 3.21, 0} }; -float audiobeam_source_location[3] = {1.1677, 2.1677, 1}; +float audiobeam_source_location[ 3 ] = {1.1677, 2.1677, 1}; -float audiobeam_origin_location[3] = {1.5, 3, 0}; +float audiobeam_origin_location[ 3 ] = {1.5, 3, 0}; diff --git a/bench/sequential/audiobeam/audiobeamlibm.c b/bench/sequential/audiobeam/audiobeamlibm.c old mode 100644 new mode 100755 index 259f40bcec4b34fef13d19d5b069b4d356aa40ac..b513b3ec315a1824b0e9e10495631468aabf0a4c --- a/bench/sequential/audiobeam/audiobeamlibm.c +++ b/bench/sequential/audiobeam/audiobeamlibm.c @@ -35,7 +35,7 @@ #include "audiobeamlibmath.h" -static const int audiobeam_npio2_hw[] = { +static const int audiobeam_npio2_hw[ ] = { 0x3fc90f00, 0x40490f00, 0x4096cb00, 0x40c90f00, 0x40fb5300, 0x4116cb00, 0x412fed00, 0x41490f00, 0x41623100, 0x417b5300, 0x418a3a00, 0x4196cb00, 0x41a35c00, 0x41afed00, 0x41bc7e00, 0x41c90f00, 0x41d5a000, 0x41e23100, @@ -82,31 +82,31 @@ int audiobeam___ieee754_rem_pio2f( float x, float *y ) AUDIOBEAM_GET_FLOAT_WORD( hx, x ); ix = hx & 0x7fffffff; if ( ix <= 0x3f490fd8 ) { - y[0] = x; - y[1] = 0; + y[ 0 ] = x; + y[ 1 ] = 0; return 0; } if ( ix < 0x4016cbe4 ) { if ( hx > 0 ) { z = x - audiobeam_pio2_1; if ( ( ix & 0xfffffff0 ) != 0x3fc90fd0 ) { - y[0] = z - audiobeam_pio2_1t; - y[1] = ( z - y[0] ) - audiobeam_pio2_1t; + y[ 0 ] = z - audiobeam_pio2_1t; + y[ 1 ] = ( z - y[ 0 ] ) - audiobeam_pio2_1t; } else { z -= audiobeam_pio2_2; - y[0] = z - audiobeam_pio2_2t; - y[1] = ( z - y[0] ) - audiobeam_pio2_2t; + y[ 0 ] = z - audiobeam_pio2_2t; + y[ 1 ] = ( z - y[ 0 ] ) - audiobeam_pio2_2t; } return 1; } else { z = x + audiobeam_pio2_1; if ( ( ix & 0xfffffff0 ) != 0x3fc90fd0 ) { - y[0] = z + audiobeam_pio2_1t; - y[1] = ( z - y[0] ) + audiobeam_pio2_1t; + y[ 0 ] = z + audiobeam_pio2_1t; + y[ 1 ] = ( z - y[ 0 ] ) + audiobeam_pio2_1t; } else { z += audiobeam_pio2_2; - y[0] = z + audiobeam_pio2_2t; - y[1] = ( z - y[0] ) + audiobeam_pio2_2t; + y[ 0 ] = z + audiobeam_pio2_2t; + y[ 1 ] = ( z - y[ 0 ] ) + audiobeam_pio2_2t; } return -1; } @@ -117,40 +117,40 @@ int audiobeam___ieee754_rem_pio2f( float x, float *y ) fn = ( float )n; r = t - fn * audiobeam_pio2_1; w = fn * audiobeam_pio2_1t; - if ( n < 32 && ( int )( ix & 0xffffff00 ) != audiobeam_npio2_hw[n - 1] ) - y[0] = r - w; + if ( n < 32 && ( int )( ix & 0xffffff00 ) != audiobeam_npio2_hw[ n - 1 ] ) + y[ 0 ] = r - w; else { unsigned int high; j = ix >> 23; - y[0] = r - w; - AUDIOBEAM_GET_FLOAT_WORD( high, y[0] ); + y[ 0 ] = r - w; + AUDIOBEAM_GET_FLOAT_WORD( high, y[ 0 ] ); i = j - ( ( high >> 23 ) & 0xff ); if ( i > 8 ) { t = r; w = fn * audiobeam_pio2_2; r = t - w; w = fn * audiobeam_pio2_2t - ( ( t - r ) - w ); - y[0] = r - w; - AUDIOBEAM_GET_FLOAT_WORD( high, y[0] ); + y[ 0 ] = r - w; + AUDIOBEAM_GET_FLOAT_WORD( high, y[ 0 ] ); i = j - ( ( high >> 23 ) & 0xff ); if ( i > 25 ) { t = r; w = fn * audiobeam_pio2_3; r = t - w; w = fn * audiobeam_pio2_3t - ( ( t - r ) - w ); - y[0] = r - w; + y[ 0 ] = r - w; } } } - y[1] = ( r - y[0] ) - w; + y[ 1 ] = ( r - y[ 0 ] ) - w; if ( hx < 0 ) { - y[0] = -y[0]; - y[1] = -y[1]; + y[ 0 ] = -y[ 0 ]; + y[ 1 ] = -y[ 1 ]; return -n; } else return n; } if ( ix >= 0x7f800000 ) { - y[0] = y[1] = x - x; + y[ 0 ] = y[ 1 ] = x - x; return 0; } @@ -196,9 +196,11 @@ float audiobeam___kernel_sinf( float x, float y, int iy ) } z = x * x; v = z * x; - r = audiobeam_S2 + z * ( audiobeam_S3 + z * ( audiobeam_S4 + z * ( audiobeam_S5 + z * audiobeam_S6 ) ) ); + r = audiobeam_S2 + z * ( audiobeam_S3 + z * ( audiobeam_S4 + z * + ( audiobeam_S5 + z * audiobeam_S6 ) ) ); if ( iy == 0 ) return x + v * ( audiobeam_S1 + z * r ); - else return x - ( ( z * ( audiobeam_half * y - v * r ) - y ) - v * audiobeam_S1 ); + else return x - ( ( z * ( audiobeam_half * y - v * r ) - y ) - v * + audiobeam_S1 ); } @@ -214,7 +216,7 @@ float audiobeam___copysignf( float x, float y ) float audiobeam___cosf( float x ) { - float y[2], z = 0.0f; + float y[ 2 ], z = 0.0f; int n, ix; AUDIOBEAM_GET_FLOAT_WORD( ix, x ); @@ -226,18 +228,18 @@ float audiobeam___cosf( float x ) if ( ix >= 0x7f800000 ) return x - x; else { - y[0] = 0.0; - y[1] = 0.0; + y[ 0 ] = 0.0; + y[ 1 ] = 0.0; n = audiobeam___ieee754_rem_pio2f( x, y ); switch ( n & 3 ) { case 0: - return audiobeam___kernel_cosf( y[0], y[1] ); + return audiobeam___kernel_cosf( y[ 0 ], y[ 1 ] ); case 1: - return -audiobeam___kernel_sinf( y[0], y[1], 1 ); + return -audiobeam___kernel_sinf( y[ 0 ], y[ 1 ], 1 ); case 2: - return -audiobeam___kernel_cosf( y[0], y[1] ); + return -audiobeam___kernel_cosf( y[ 0 ], y[ 1 ] ); default: - return audiobeam___kernel_sinf( y[0], y[1], 1 ); + return audiobeam___kernel_sinf( y[ 0 ], y[ 1 ], 1 ); } } } diff --git a/bench/sequential/audiobeam/audiobeamlibm.h b/bench/sequential/audiobeam/audiobeamlibm.h old mode 100644 new mode 100755 diff --git a/bench/sequential/audiobeam/audiobeamlibmalloc.c b/bench/sequential/audiobeam/audiobeamlibmalloc.c old mode 100644 new mode 100755 index 50c30739386681cde660ecafce2aeb579e53d7d3..324b3a5b969a7684ae14d38172c4ea6a46ee1a10 --- a/bench/sequential/audiobeam/audiobeamlibmalloc.c +++ b/bench/sequential/audiobeam/audiobeamlibmalloc.c @@ -2,13 +2,13 @@ #define AUDIOBEAM_HEAP_SIZE 10000 -static char audiobeam_simulated_heap[AUDIOBEAM_HEAP_SIZE]; +static char audiobeam_simulated_heap[ AUDIOBEAM_HEAP_SIZE ]; static unsigned int audiobeam_freeHeapPos; void *audiobeam_malloc( unsigned int numberOfBytes ) { - void *currentPos = ( void * )&audiobeam_simulated_heap[ audiobeam_freeHeapPos ]; + void *currentPos = ( void * )&audiobeam_simulated_heap[ audiobeam_freeHeapPos ]; /* Get a 4-byte address for alignment purposes */ audiobeam_freeHeapPos += ( ( numberOfBytes + 4 ) & ( unsigned int )0xfffffffc ); return currentPos; -} \ No newline at end of file +} diff --git a/bench/sequential/audiobeam/audiobeamlibmalloc.h b/bench/sequential/audiobeam/audiobeamlibmalloc.h old mode 100644 new mode 100755 diff --git a/bench/sequential/audiobeam/audiobeamlibmath.h b/bench/sequential/audiobeam/audiobeamlibmath.h old mode 100644 new mode 100755 diff --git a/bench/sequential/audiobeam/changeLog.txt b/bench/sequential/audiobeam/changeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/audiobeam/license.txt b/bench/sequential/audiobeam/license.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/cjpeg_transupp/ChangeLog.txt b/bench/sequential/cjpeg_transupp/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/cjpeg_transupp/README b/bench/sequential/cjpeg_transupp/README old mode 100644 new mode 100755 diff --git a/bench/sequential/cjpeg_transupp/cjpeg_transupp.c b/bench/sequential/cjpeg_transupp/cjpeg_transupp.c old mode 100644 new mode 100755 index 897bdf81007806b97012eaf4a139d3ef07069df1..2904cc1b7949edaefa9cb6e175c1e471c8618f2f --- a/bench/sequential/cjpeg_transupp/cjpeg_transupp.c +++ b/bench/sequential/cjpeg_transupp/cjpeg_transupp.c @@ -89,7 +89,7 @@ void cjpeg_transupp_initSeed( void ) signed char cjpeg_transupp_randomInteger( void ) { cjpeg_transupp_seed = ( ( ( cjpeg_transupp_seed * 133 ) + 81 ) % 256 ) - 128; - return( cjpeg_transupp_seed ); + return ( cjpeg_transupp_seed ); } @@ -160,7 +160,7 @@ int cjpeg_transupp_return( void ) for ( i = 0; i < 512; i++ ) checksum += cjpeg_transupp_output_data5[ i ]; - return( checksum ); + return ( checksum ); } @@ -209,7 +209,7 @@ void cjpeg_transupp_do_flip_v( j_compress_ptr dstinfo ) /* Row is within the mirrorable area. */ _Pragma( "loopbound min 15 max 29" ) for ( dst_blk_x = 0; dst_blk_x < compptr_width_in_blocks; - dst_blk_x++ ) { + dst_blk_x++ ) { src_ptr = cjpeg_transupp_input; dst_ptr = cjpeg_transupp_output_data; @@ -427,7 +427,7 @@ void cjpeg_transupp_do_rot_270( j_compress_ptr dstinfo ) void cjpeg_transupp_do_rot_180( j_compress_ptr dstinfo ) { unsigned int MCU_cols, MCU_rows, comp_width, comp_height, dst_blk_x, - dst_blk_y; + dst_blk_y; int ci, i, j, offset_y; JCOEFPTR src_ptr, dst_ptr; @@ -511,7 +511,7 @@ void cjpeg_transupp_do_rot_180( j_compress_ptr dstinfo ) /* Remaining rows are just mirrored horizontally. */ dst_blk_x = 0; /* Process the blocks that can be mirrored. */ - _Pragma( "loopbound min 14 max 28" ) + _Pragma( "loopbound min 14 max 14" ) do { dst_ptr = cjpeg_transupp_output_data4; src_ptr = cjpeg_transupp_input4; @@ -534,7 +534,7 @@ void cjpeg_transupp_do_rot_180( j_compress_ptr dstinfo ) dst_ptr = cjpeg_transupp_output_data4; src_ptr = cjpeg_transupp_input4; - _Pragma( "loopbound min 64 max 64" ) + _Pragma( "loopbound min 1 max 1" ) do { *dst_ptr++ = *src_ptr++; i++; @@ -560,7 +560,7 @@ void cjpeg_transupp_do_rot_180( j_compress_ptr dstinfo ) void cjpeg_transupp_do_transverse( j_compress_ptr dstinfo ) { unsigned int MCU_cols, MCU_rows, comp_width, comp_height, dst_blk_x, - dst_blk_y; + dst_blk_y; int ci, i, j, offset_x, offset_y; JCOEFPTR src_ptr, dst_ptr; @@ -588,7 +588,7 @@ void cjpeg_transupp_do_transverse( j_compress_ptr dstinfo ) _Pragma( "loopbound min 1 max 8" ) do { dst_blk_x = 0; - _Pragma( "loopbound min 10 max 10" ) + _Pragma( "loopbound min 5 max 10" ) do { offset_x = 0; _Pragma( "loopbound min 1 max 2" ) diff --git a/bench/sequential/cjpeg_transupp/jpeglib.h b/bench/sequential/cjpeg_transupp/jpeglib.h old mode 100644 new mode 100755 index bb4c9402cd3c1c4f4b8d616f1379e2a99d6341b9..915f152f111b5107f507cfa803cdffad0a500010 --- a/bench/sequential/cjpeg_transupp/jpeglib.h +++ b/bench/sequential/cjpeg_transupp/jpeglib.h @@ -89,7 +89,7 @@ typedef struct { /* - Huffman coding tables. + Huffman coding tables. */ typedef struct { @@ -114,7 +114,7 @@ typedef struct { /* - Basic info about one component (color channel). + Basic info about one component (color channel). */ typedef struct { @@ -705,7 +705,7 @@ typedef struct jvirt_barray_control *jvirt_barray_ptr; struct jpeg_memory_mgr { /* Method pointers - */ + */ void *( *alloc_small ) ( j_common_ptr cinfo, int pool_id, long unsigned int sizeofobject ); diff --git a/bench/sequential/cjpeg_wrbmp/ChangeLog.txt b/bench/sequential/cjpeg_wrbmp/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/cjpeg_wrbmp/README b/bench/sequential/cjpeg_wrbmp/README old mode 100644 new mode 100755 diff --git a/bench/sequential/cjpeg_wrbmp/cderror.h b/bench/sequential/cjpeg_wrbmp/cderror.h old mode 100644 new mode 100755 index e47983426feb2e87e704e43f607c585a061b5957..96f3bbb5c018616dd3dff9fa2961a873522664ec --- a/bench/sequential/cjpeg_wrbmp/cderror.h +++ b/bench/sequential/cjpeg_wrbmp/cderror.h @@ -23,7 +23,7 @@ License: See the accompanying README file - */ +*/ #ifndef CJPEG_WRBMP_JMESSAGE #ifndef CDERROR_H @@ -68,7 +68,7 @@ typedef enum { CJPEG_WRBMP_JMESSAGE( JERR_GIF_NOT, "Not a GIF file" ) CJPEG_WRBMP_JMESSAGE( JTRC_GIF, "%ux%ux%d GIF image" ) CJPEG_WRBMP_JMESSAGE( JTRC_GIF_BADVERSION, - "Warning: unexpected GIF version number '%c%c%c'" ) + "Warning: unexpected GIF version number '%c%c%c'" ) CJPEG_WRBMP_JMESSAGE( JTRC_GIF_EXTENSION, "Ignoring GIF extension block of type 0x%02x" ) CJPEG_WRBMP_JMESSAGE( JTRC_GIF_NONSQUARE, "Caution: nonsquare pixels in input" ) CJPEG_WRBMP_JMESSAGE( JWRN_GIF_BADDATA, "Corrupt data in GIF file" ) @@ -116,13 +116,13 @@ typedef enum { #endif CJPEG_WRBMP_JMESSAGE( JERR_BAD_CMAP_FILE, - "Color map file is invalid or of unsupported format" ) + "Color map file is invalid or of unsupported format" ) CJPEG_WRBMP_JMESSAGE( JERR_TOO_MANY_COLORS, - "Output file format cannot handle %d colormap entries" ) + "Output file format cannot handle %d colormap entries" ) CJPEG_WRBMP_JMESSAGE( JERR_UNGETC_FAILED, "ungetc failed" ) #ifdef CJPEG_WRBMP_TARGA_SUPPORTED CJPEG_WRBMP_JMESSAGE( JERR_UNKNOWN_FORMAT, - "Unrecognized input file format --- perhaps you need -targa" ) + "Unrecognized input file format --- perhaps you need -targa" ) #else CJPEG_WRBMP_JMESSAGE( JERR_UNKNOWN_FORMAT, "Unrecognized input file format" ) #endif diff --git a/bench/sequential/cjpeg_wrbmp/cdjpeg.h b/bench/sequential/cjpeg_wrbmp/cdjpeg.h old mode 100644 new mode 100755 index 6c3fc7b821e8bdcdeed8e42c3cac7ac3a4dce5c9..c08dbc713e378de29c7f19d1777dc1b8248e1bfe --- a/bench/sequential/cjpeg_wrbmp/cdjpeg.h +++ b/bench/sequential/cjpeg_wrbmp/cdjpeg.h @@ -35,14 +35,14 @@ typedef struct cjpeg_wrbmp_cjpeg_source_struct struct cjpeg_wrbmp_cjpeg_source_struct { CJPEG_WRBMP_JMETHOD( void, start_input, - ( cjpeg_wrbmp_j_compress_ptr cinfo, - cjpeg_wrbmp_cjpeg_source_ptr sinfo ) ); + ( cjpeg_wrbmp_j_compress_ptr cinfo, + cjpeg_wrbmp_cjpeg_source_ptr sinfo ) ); CJPEG_WRBMP_JMETHOD( CJPEG_WRBMP_JDIMENSION, get_pixel_rows, - ( cjpeg_wrbmp_j_compress_ptr cinfo, - cjpeg_wrbmp_cjpeg_source_ptr sinfo ) ); + ( cjpeg_wrbmp_j_compress_ptr cinfo, + cjpeg_wrbmp_cjpeg_source_ptr sinfo ) ); CJPEG_WRBMP_JMETHOD( void, finish_input, - ( cjpeg_wrbmp_j_compress_ptr cinfo, - cjpeg_wrbmp_cjpeg_source_ptr sinfo ) ); + ( cjpeg_wrbmp_j_compress_ptr cinfo, + cjpeg_wrbmp_cjpeg_source_ptr sinfo ) ); CJPEG_WRBMP_FILE *input_file; @@ -56,17 +56,17 @@ typedef struct cjpeg_wrbmp_djpeg_dest_struct struct cjpeg_wrbmp_djpeg_dest_struct { CJPEG_WRBMP_JMETHOD( void, start_output, - ( cjpeg_wrbmp_j_decompress_ptr cinfo, - cjpeg_wrbmp_djpeg_dest_ptr dinfo ) ); + ( cjpeg_wrbmp_j_decompress_ptr cinfo, + cjpeg_wrbmp_djpeg_dest_ptr dinfo ) ); /* Emit the specified number of pixel rows from the buffer. */ CJPEG_WRBMP_JMETHOD( void, put_pixel_rows, - ( cjpeg_wrbmp_j_decompress_ptr cinfo, - cjpeg_wrbmp_djpeg_dest_ptr dinfo, - CJPEG_WRBMP_JDIMENSION rows_supplied ) ); + ( cjpeg_wrbmp_j_decompress_ptr cinfo, + cjpeg_wrbmp_djpeg_dest_ptr dinfo, + CJPEG_WRBMP_JDIMENSION rows_supplied ) ); /* Finish up at the end of the image. */ CJPEG_WRBMP_JMETHOD( void, finish_output, - ( cjpeg_wrbmp_j_decompress_ptr cinfo, - cjpeg_wrbmp_djpeg_dest_ptr dinfo ) ); + ( cjpeg_wrbmp_j_decompress_ptr cinfo, + cjpeg_wrbmp_djpeg_dest_ptr dinfo ) ); /* Target file spec; filled in by djpeg.c after object is created. */ CJPEG_WRBMP_FILE *output_file; diff --git a/bench/sequential/cjpeg_wrbmp/cjpeg_wrbmp.c b/bench/sequential/cjpeg_wrbmp/cjpeg_wrbmp.c old mode 100644 new mode 100755 index e5167e5bfcb10bcdc929217bd928dae53d1192d0..cb81d01fb5ac98d6898f9c93f9c0ec257bbb8f2f --- a/bench/sequential/cjpeg_wrbmp/cjpeg_wrbmp.c +++ b/bench/sequential/cjpeg_wrbmp/cjpeg_wrbmp.c @@ -45,8 +45,8 @@ typedef struct { } cjpeg_wrbmp_bmp_dest_struct; typedef cjpeg_wrbmp_bmp_dest_struct *cjpeg_wrbmp_bmp_dest_ptr; -extern unsigned char cjpeg_wrbmp_colormap[3][256]; -unsigned char cjpeg_wrbmp_output_array[6144]; +extern unsigned char cjpeg_wrbmp_colormap[ 3 ][ 256 ]; +unsigned char cjpeg_wrbmp_output_array[ 6144 ]; unsigned char *cjpeg_wrbmp_jpeg_stream /*= cjpeg_jpeg6b_wrbmp_output_array*/; int cjpeg_wrbmp_checksum; @@ -62,11 +62,11 @@ cjpeg_wrbmp_bmp_dest_struct cjpeg_wrbmp_bmp_dest; Forward declaration of functions */ void cjpeg_wrbmp_initInput( void ); -void cjpeg_wrbmp_finish_output_bmp( cjpeg_wrbmp_j_decompress_ptr cinfo); +void cjpeg_wrbmp_finish_output_bmp( cjpeg_wrbmp_j_decompress_ptr cinfo ); void cjpeg_wrbmp_write_colormap( cjpeg_wrbmp_j_decompress_ptr - cinfo, - int map_colors, int map_entry_size, - int cMap ); + cinfo, + int map_colors, int map_entry_size, + int cMap ); int cjpeg_wrbmp_putc_modified( int character ); void cjpeg_wrbmp_init(); void cjpeg_wrbmp_main(); @@ -125,12 +125,12 @@ void cjpeg_wrbmp_finish_output_bmp( cjpeg_wrbmp_j_decompress_ptr cinfo ) } if ( progress != 0 ) - progress->completed_extra_passes++; - } + progress->completed_extra_passes++; +} void cjpeg_wrbmp_write_colormap( cjpeg_wrbmp_j_decompress_ptr - cinfo, - int map_colors, int map_entry_size, int cMap ) + cinfo, + int map_colors, int map_entry_size, int cMap ) { int num_colors = cinfo->actual_number_of_colors; @@ -143,11 +143,11 @@ void cjpeg_wrbmp_write_colormap( cjpeg_wrbmp_j_decompress_ptr _Pragma( "loopbound min 256 max 256" ) for ( i = 0; i < num_colors; i++ ) { cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE( - cjpeg_wrbmp_colormap[2][i] ) ); + cjpeg_wrbmp_colormap[ 2 ][ i ] ) ); cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE( - cjpeg_wrbmp_colormap[1][i] ) ); + cjpeg_wrbmp_colormap[ 1 ][ i ] ) ); cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE( - cjpeg_wrbmp_colormap[0][i] ) ); + cjpeg_wrbmp_colormap[ 0 ][ i ] ) ); if ( map_entry_size == 4 ) cjpeg_wrbmp_putc_modified( 0 ); @@ -158,11 +158,11 @@ void cjpeg_wrbmp_write_colormap( cjpeg_wrbmp_j_decompress_ptr for ( i = 0; i < num_colors; i++ ) { cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE( - cjpeg_wrbmp_colormap[2][i] ) ); + cjpeg_wrbmp_colormap[ 2 ][ i ] ) ); cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE( - cjpeg_wrbmp_colormap[1][i] ) ); + cjpeg_wrbmp_colormap[ 1 ][ i ] ) ); cjpeg_wrbmp_putc_modified( CJPEG_WRBMP_GETJSAMPLE( - cjpeg_wrbmp_colormap[0][i] ) ); + cjpeg_wrbmp_colormap[ 0 ][ i ] ) ); if ( map_entry_size == 4 ) cjpeg_wrbmp_putc_modified( 0 ); @@ -195,7 +195,7 @@ void cjpeg_wrbmp_write_colormap( cjpeg_wrbmp_j_decompress_ptr void _Pragma( "entrypoint" ) cjpeg_wrbmp_main() { - cjpeg_wrbmp_finish_output_bmp( &cjpeg_wrbmp_jpeg_dec_1); + cjpeg_wrbmp_finish_output_bmp( &cjpeg_wrbmp_jpeg_dec_1 ); cjpeg_wrbmp_write_colormap( &cjpeg_wrbmp_jpeg_dec_1, 768, 4, 1 ); cjpeg_wrbmp_finish_output_bmp( &cjpeg_wrbmp_jpeg_dec_2 ); @@ -204,15 +204,15 @@ void _Pragma( "entrypoint" ) cjpeg_wrbmp_main() int cjpeg_wrbmp_return() { - return (cjpeg_wrbmp_checksum + (-209330) ) != 0; + return ( cjpeg_wrbmp_checksum + ( -209330 ) ) != 0; } int main( void ) { - cjpeg_wrbmp_init(); - cjpeg_wrbmp_main(); + cjpeg_wrbmp_init(); + cjpeg_wrbmp_main(); - return ( cjpeg_wrbmp_return() ); + return ( cjpeg_wrbmp_return() ); } #endif /* BMP_SUPPORTED */ diff --git a/bench/sequential/cjpeg_wrbmp/input.c b/bench/sequential/cjpeg_wrbmp/input.c old mode 100644 new mode 100755 index 08dec2849ce7f621e65bfcb5c9d00c4d910033a1..989bfb754a2d443c090fc0c889341b048558e52e --- a/bench/sequential/cjpeg_wrbmp/input.c +++ b/bench/sequential/cjpeg_wrbmp/input.c @@ -17,63 +17,70 @@ */ -unsigned char cjpeg_wrbmp_colormap[3][256]; +unsigned char cjpeg_wrbmp_colormap[ 3 ][ 256 ]; void cjpeg_wrbmp_initInput( void ) { int i, j; - volatile unsigned char tmp[3][256] = {{44 , 105 , 153 , 71 , 151 , 160 , 188 , 90 , 209 , 131 , - 221 , 114 , 93 , 124 , 208 , 207 , 218 , 54 , 145 , 113 , 153 , 239 , 226 , 83 , 243 , 151 , - 98 , 67 , 114 , 153 , 83 , 186 , 116 , 72 , 188 , 190 , 109 , 162 , 218 , 133 , 208 , 209, - 115 , 251 , 135 , 89 , 143 , 226 , 230 , 246 , 152 , 243 , 152 , 115 , 180 , 78 , 246 , 164, - 250 , 117 , 76 , 150 , 152 , 188 , 251 , 195 , 127 , 111 , 225 , 208 , 94 , 93 , 143 , 131, - 201 , 211 , 99 , 93 , 190 , 157 , 121 , 240 , 117 , 185 , 167 , 137 , 152 , 188 , 250 , 59, - 248 , 245 , 115 , 240 , 192 , 209 , 143 , 136 , 98 , 224 , 167 , 135 , 132 , 189 , 72 , 249, - 205 , 44 , 106 , 96 , 147 , 247 , 249 , 228 , 224 , 249 , 190 , 112 , 135 , 168 , 95 , 205, - 171 , 58 , 112 , 79 , 206 , 75 , 242 , 188 , 189 , 225 , 185 , 81 , 221 , 153 , 244 , 198, - 171 , 163 , 159 , 209 , 240 , 138 , 148 , 207 , 166 , 192 , 188 , 151 , 98 , 190 , 209 , 154, - 225 , 72 , 96 , 249 , 191 , 223 , 207 , 163 , 207 , 133 , 251 , 183 , 135 , 137 , 159 , 247, - 167 , 83 , 123 , 199 , 203 , 144 , 142 , 237 , 77 , 128 , 117 , 169 , 202 , 136 , 128 , 188, - 168 , 55 , 222 , 169 , 116 , 60 , 75 , 175 , 102 , 217 , 168 , 185 , 189 , 225 , 125 , 192, - 112 , 111 , 168 , 239 , 225 , 168 , 97 , 129 , 190 , 175 , 169 , 225 , 170 , 226 , 225 , 226, - 224 , 134 , 106 , 250 , 222 , 148 , 241 , 168 , 166 , 160 , 95 , 190 , 102 , 180 , 193 , 111, - 151 , 165 , 171 , 200 , 52 , 134 , 169 , 223 , 166 , 225 , 169 , 111 , 185 , 109 , 56 , 244, - 157 , 250 , 226 , 231 , 119 , 188 },{42 , 143 , 46 , 91 , 84 , 201 , 140 , 91 , 82 , 140 , 31, - 88 , 44 , 171 , 57 , 115 , 206 , 59 , 145 , 117 , 116 , 53 , 232 , 117 , 80 , 60 , 66 , 64, - 117 , 174 , 89 , 178 , 147 , 63 , 83 , 59 , 103 , 139 , 211 , 64 , 68 , 98 , 118 , 53 , 119, - 90 , 161 , 232 , 171 , 98 , 176 , 236 , 118 , 157 , 180 , 77 , 114 , 88 , 28 , 119 , 40 , 97, - 69 , 189 , 252 , 225 , 119 , 96 , 219 , 84 , 82 , 105 , 158 , 49 , 200 , 61 , 117 , 78 , 63, - 147 , 140 , 69 , 108 , 90 , 161 , 105 , 190 , 114 , 84 , 76 , 70 , 43 , 156 , 222 , 96 , 72, - 143 , 90 , 105 , 56 , 144 , 78 , 129 , 35 , 66 , 101 , 100 , 49 , 105 , 130 , 160 , 239 , 129, - 141 , 83 , 43 , 68 , 106 , 132 , 83 , 92 , 130 , 175 , 63 , 131 , 79 , 192 , 105 , 57 , 160, - 118 , 162 , 141 , 78 , 192 , 128 , 206 , 201 , 203 , 162 , 159 , 163 , 221 , 183 , 157 , 177, - 189 , 192 , 129 , 130 , 54 , 104 , 45 , 101 , 252 , 52 , 91 , 177 , 49 , 221 , 116 , 111 , 143, - 92 , 142 , 159 , 131 , 173 , 61 , 159 , 173 , 81 , 129 , 214 , 213 , 145 , 143 , 232 , 67, - 145 , 130 , 99 , 237 , 110 , 160 , 131 , 67 , 50 , 129 , 131 , 127 , 76 , 92 , 203 , 96 , 206, - 176 , 180 , 85 , 99 , 162 , 118 , 64 , 78 , 190 , 191 , 45 , 101 , 129 , 58 , 72 , 211 , 49, - 115 , 115 , 85 , 61 , 100 , 116 , 107 , 143 , 117 , 219 , 154 , 225 , 174 , 160 , 163 , 119, - 190 , 106 , 186 , 49 , 45 , 177 , 147 , 85 , 138 , 42 , 174 , 59 , 68 , 120 , 71 , 129 , 56, - 149 , 97 , 68 , 88 , 148 , 60 , 239 , 179 , 149 , 104},{44 , 76 , 37 , 56 , 76 , 152 , 122, - 153 , 77 , 191 , 41 , 76 , 39 , 97 , 46 , 109 , 172 , 43 , 116 , 91 , 102 , 49 , 201 , 68 , 88, - 45 , 53 , 95 , 160 , 175 , 102 , 164 , 116 , 50 , 76 , 45 , 86 , 189 , 216 , 50 , 61 , 93 , 196, - 91 , 100 , 58 , 116 , 223 , 166 , 102 , 126 , 221 , 158 , 86 , 235 , 55 , 113 , 120 , 52 , 115, - 42 , 86 , 55 , 165 , 247 , 194 , 160 , 108 , 170 , 108 , 98 , 77 , 168 , 42 , 179 , 70 , 96, - 62 , 71 , 216 , 100 , 71 , 155 , 121 , 146 , 86 , 134 , 105 , 114 , 49 , 100 , 50 , 119 , 218, - 95 , 81 , 220 , 78 , 102 , 50 , 125 , 68 , 170 , 36 , 62 , 119 , 129 , 44 , 151 , 72 , 143, - 241 , 131 , 137 , 79 , 73 , 55 , 122 , 204 , 73 , 74 , 131 , 221 , 53 , 89 , 72 , 178 , 60 , 64, - 145 , 157 , 156 , 177 , 101 , 180 , 112 , 194 , 206 , 178 , 168 , 221 , 153 , 201 , 119 , 222, - 165 , 188 , 212 , 117 , 180 , 45 , 134 , 42 , 130 , 229 , 47 , 107 , 172 , 40 , 221 , 146, - 132 , 138 , 110 , 144 , 188 , 112 , 132 , 64 , 162 , 145 , 140 , 200 , 181 , 215 , 139 , 197, - 183 , 106 , 126 , 116 , 89 , 204 , 152 , 123 , 161 , 52 , 46 , 131 , 167 , 173 , 62 , 70 , 151, - 151 , 197 , 177 , 184 , 96 , 97 , 101 , 130 , 54 , 63 , 141 , 185 , 45 , 126 , 96 , 46 , 71, - 172 , 38 , 114 , 100 , 106 , 69 , 118 , 138 , 127 , 99 , 127 , 198 , 204 , 242 , 248 , 197, - 241 , 74 , 189 , 178 , 252 , 65 , 45 , 148 , 145 , 97 , 168 , 45 , 111 , 43 , 64 , 164 , 80, - 113 , 47 , 136 , 83 , 42 , 91 , 197 , 95 , 222 , 167 , 92 , 98}}; + volatile unsigned char tmp[ 3 ][ 256 ] = {{ + 44, 105, 153, 71, 151, 160, 188, 90, 209, 131, + 221, 114, 93, 124, 208, 207, 218, 54, 145, 113, 153, 239, 226, 83, 243, 151, + 98, 67, 114, 153, 83, 186, 116, 72, 188, 190, 109, 162, 218, 133, 208, 209, + 115, 251, 135, 89, 143, 226, 230, 246, 152, 243, 152, 115, 180, 78, 246, 164, + 250, 117, 76, 150, 152, 188, 251, 195, 127, 111, 225, 208, 94, 93, 143, 131, + 201, 211, 99, 93, 190, 157, 121, 240, 117, 185, 167, 137, 152, 188, 250, 59, + 248, 245, 115, 240, 192, 209, 143, 136, 98, 224, 167, 135, 132, 189, 72, 249, + 205, 44, 106, 96, 147, 247, 249, 228, 224, 249, 190, 112, 135, 168, 95, 205, + 171, 58, 112, 79, 206, 75, 242, 188, 189, 225, 185, 81, 221, 153, 244, 198, + 171, 163, 159, 209, 240, 138, 148, 207, 166, 192, 188, 151, 98, 190, 209, 154, + 225, 72, 96, 249, 191, 223, 207, 163, 207, 133, 251, 183, 135, 137, 159, 247, + 167, 83, 123, 199, 203, 144, 142, 237, 77, 128, 117, 169, 202, 136, 128, 188, + 168, 55, 222, 169, 116, 60, 75, 175, 102, 217, 168, 185, 189, 225, 125, 192, + 112, 111, 168, 239, 225, 168, 97, 129, 190, 175, 169, 225, 170, 226, 225, 226, + 224, 134, 106, 250, 222, 148, 241, 168, 166, 160, 95, 190, 102, 180, 193, 111, + 151, 165, 171, 200, 52, 134, 169, 223, 166, 225, 169, 111, 185, 109, 56, 244, + 157, 250, 226, 231, 119, 188 + }, { + 42, 143, 46, 91, 84, 201, 140, 91, 82, 140, 31, + 88, 44, 171, 57, 115, 206, 59, 145, 117, 116, 53, 232, 117, 80, 60, 66, 64, + 117, 174, 89, 178, 147, 63, 83, 59, 103, 139, 211, 64, 68, 98, 118, 53, 119, + 90, 161, 232, 171, 98, 176, 236, 118, 157, 180, 77, 114, 88, 28, 119, 40, 97, + 69, 189, 252, 225, 119, 96, 219, 84, 82, 105, 158, 49, 200, 61, 117, 78, 63, + 147, 140, 69, 108, 90, 161, 105, 190, 114, 84, 76, 70, 43, 156, 222, 96, 72, + 143, 90, 105, 56, 144, 78, 129, 35, 66, 101, 100, 49, 105, 130, 160, 239, 129, + 141, 83, 43, 68, 106, 132, 83, 92, 130, 175, 63, 131, 79, 192, 105, 57, 160, + 118, 162, 141, 78, 192, 128, 206, 201, 203, 162, 159, 163, 221, 183, 157, 177, + 189, 192, 129, 130, 54, 104, 45, 101, 252, 52, 91, 177, 49, 221, 116, 111, 143, + 92, 142, 159, 131, 173, 61, 159, 173, 81, 129, 214, 213, 145, 143, 232, 67, + 145, 130, 99, 237, 110, 160, 131, 67, 50, 129, 131, 127, 76, 92, 203, 96, 206, + 176, 180, 85, 99, 162, 118, 64, 78, 190, 191, 45, 101, 129, 58, 72, 211, 49, + 115, 115, 85, 61, 100, 116, 107, 143, 117, 219, 154, 225, 174, 160, 163, 119, + 190, 106, 186, 49, 45, 177, 147, 85, 138, 42, 174, 59, 68, 120, 71, 129, 56, + 149, 97, 68, 88, 148, 60, 239, 179, 149, 104 + }, { + 44, 76, 37, 56, 76, 152, 122, + 153, 77, 191, 41, 76, 39, 97, 46, 109, 172, 43, 116, 91, 102, 49, 201, 68, 88, + 45, 53, 95, 160, 175, 102, 164, 116, 50, 76, 45, 86, 189, 216, 50, 61, 93, 196, + 91, 100, 58, 116, 223, 166, 102, 126, 221, 158, 86, 235, 55, 113, 120, 52, 115, + 42, 86, 55, 165, 247, 194, 160, 108, 170, 108, 98, 77, 168, 42, 179, 70, 96, + 62, 71, 216, 100, 71, 155, 121, 146, 86, 134, 105, 114, 49, 100, 50, 119, 218, + 95, 81, 220, 78, 102, 50, 125, 68, 170, 36, 62, 119, 129, 44, 151, 72, 143, + 241, 131, 137, 79, 73, 55, 122, 204, 73, 74, 131, 221, 53, 89, 72, 178, 60, 64, + 145, 157, 156, 177, 101, 180, 112, 194, 206, 178, 168, 221, 153, 201, 119, 222, + 165, 188, 212, 117, 180, 45, 134, 42, 130, 229, 47, 107, 172, 40, 221, 146, + 132, 138, 110, 144, 188, 112, 132, 64, 162, 145, 140, 200, 181, 215, 139, 197, + 183, 106, 126, 116, 89, 204, 152, 123, 161, 52, 46, 131, 167, 173, 62, 70, 151, + 151, 197, 177, 184, 96, 97, 101, 130, 54, 63, 141, 185, 45, 126, 96, 46, 71, + 172, 38, 114, 100, 106, 69, 118, 138, 127, 99, 127, 198, 204, 242, 248, 197, + 241, 74, 189, 178, 252, 65, 45, 148, 145, 97, 168, 45, 111, 43, 64, 164, 80, + 113, 47, 136, 83, 42, 91, 197, 95, 222, 167, 92, 98 + } + }; + _Pragma( "loopbound min 3 max 3" ) for ( i = 0; i < 3; i++ ) { + _Pragma( "loopbound min 256 max 256" ) for ( j = 0; j < 256; j++ ) - { - cjpeg_wrbmp_colormap[i][j] = tmp[i][j]; - } + cjpeg_wrbmp_colormap[ i ][ j ] = tmp[ i ][ j ]; } } diff --git a/bench/sequential/cjpeg_wrbmp/jconfig.h b/bench/sequential/cjpeg_wrbmp/jconfig.h old mode 100644 new mode 100755 diff --git a/bench/sequential/cjpeg_wrbmp/jerror.h b/bench/sequential/cjpeg_wrbmp/jerror.h old mode 100644 new mode 100755 index 1dc27980982e5e93c9da57b2bf20037d2b5e55b7..f9e55b8053fd5ee53044a50fbbe95c82462eb57b --- a/bench/sequential/cjpeg_wrbmp/jerror.h +++ b/bench/sequential/cjpeg_wrbmp/jerror.h @@ -19,7 +19,7 @@ Changes: no major functional changes License: See the accompanying README file - */ +*/ /* To define the enum list of message codes, include this file without @@ -48,7 +48,7 @@ typedef enum { /* For maintenance convenience, list is alphabetical by message code name */ CJPEG_WRBMP_JMESSAGE( JERR_ARITH_NOTIMPL, - "Sorry, there are legal restrictions on arithmetic coding" ) + "Sorry, there are legal restrictions on arithmetic coding" ) CJPEG_WRBMP_JMESSAGE( JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix" ) CJPEG_WRBMP_JMESSAGE( JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix" ) CJPEG_WRBMP_JMESSAGE( JERR_BAD_BUFFER_MODE, "Bogus buffer control mode" ) @@ -60,19 +60,19 @@ typedef enum { CJPEG_WRBMP_JMESSAGE( JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace" ) CJPEG_WRBMP_JMESSAGE( JERR_BAD_LENGTH, "Bogus marker length" ) CJPEG_WRBMP_JMESSAGE( JERR_BAD_LIB_VERSION, - "Wrong JPEG library version: library is %d, caller expects %d" ) + "Wrong JPEG library version: library is %d, caller expects %d" ) CJPEG_WRBMP_JMESSAGE( JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan" ) CJPEG_WRBMP_JMESSAGE( JERR_BAD_POOL_ID, "Invalid memory pool code %d" ) CJPEG_WRBMP_JMESSAGE( JERR_BAD_PRECISION, "Unsupported JPEG data precision %d" ) CJPEG_WRBMP_JMESSAGE( JERR_BAD_PROGRESSION, - "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d" ) + "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d" ) CJPEG_WRBMP_JMESSAGE( JERR_BAD_PROG_SCRIPT, - "Invalid progressive parameters at scan script entry %d" ) + "Invalid progressive parameters at scan script entry %d" ) CJPEG_WRBMP_JMESSAGE( JERR_BAD_SAMPLING, "Bogus sampling factors" ) CJPEG_WRBMP_JMESSAGE( JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d" ) CJPEG_WRBMP_JMESSAGE( JERR_BAD_STATE, "Improper call to JPEG library in state %d" ) CJPEG_WRBMP_JMESSAGE( JERR_BAD_STRUCT_SIZE, - "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u" ) + "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u" ) CJPEG_WRBMP_JMESSAGE( JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access" ) CJPEG_WRBMP_JMESSAGE( JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small" ) CJPEG_WRBMP_JMESSAGE( JERR_CANT_SUSPEND, "Suspension not allowed here" ) @@ -96,7 +96,7 @@ typedef enum { CJPEG_WRBMP_JMESSAGE( JERR_INPUT_EMPTY, "Empty input file" ) CJPEG_WRBMP_JMESSAGE( JERR_INPUT_EOF, "Premature end of input file" ) CJPEG_WRBMP_JMESSAGE( JERR_MISMATCHED_QUANT_TABLE, - "Cannot transcode due to multiple use of quantization table %d" ) + "Cannot transcode due to multiple use of quantization table %d" ) CJPEG_WRBMP_JMESSAGE( JERR_MISSING_DATA, "Scan script does not transmit all data" ) CJPEG_WRBMP_JMESSAGE( JERR_MODE_CHANGE, "Invalid color quantization mode change" ) CJPEG_WRBMP_JMESSAGE( JERR_NOTIMPL, "Not implemented yet" ) @@ -108,7 +108,7 @@ typedef enum { CJPEG_WRBMP_JMESSAGE( JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x" ) CJPEG_WRBMP_JMESSAGE( JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)" ) CJPEG_WRBMP_JMESSAGE( JERR_QUANT_COMPONENTS, - "Cannot quantize more than %d color components" ) + "Cannot quantize more than %d color components" ) CJPEG_WRBMP_JMESSAGE( JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors" ) CJPEG_WRBMP_JMESSAGE( JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors" ) CJPEG_WRBMP_JMESSAGE( JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers" ) @@ -120,7 +120,7 @@ typedef enum { CJPEG_WRBMP_JMESSAGE( JERR_TFILE_READ, "Read failed on temporary file" ) CJPEG_WRBMP_JMESSAGE( JERR_TFILE_SEEK, "Seek failed on temporary file" ) CJPEG_WRBMP_JMESSAGE( JERR_TFILE_WRITE, - "Write failed on temporary file --- out of disk space?" ) + "Write failed on temporary file --- out of disk space?" ) CJPEG_WRBMP_JMESSAGE( JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines" ) CJPEG_WRBMP_JMESSAGE( JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x" ) CJPEG_WRBMP_JMESSAGE( JERR_VIRTUAL_BUG, "Virtual array controller messed up" ) @@ -130,9 +130,9 @@ typedef enum { CJPEG_WRBMP_JMESSAGE( JMSG_COPYRIGHT, JCOPYRIGHT ) CJPEG_WRBMP_JMESSAGE( JMSG_VERSION, JVERSION ) CJPEG_WRBMP_JMESSAGE( JTRC_16BIT_TABLES, - "Caution: quantization tables are too coarse for baseline JPEG" ) + "Caution: quantization tables are too coarse for baseline JPEG" ) CJPEG_WRBMP_JMESSAGE( JTRC_ADOBE, - "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d" ) + "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d" ) CJPEG_WRBMP_JMESSAGE( JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u" ) CJPEG_WRBMP_JMESSAGE( JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u" ) CJPEG_WRBMP_JMESSAGE( JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x" ) @@ -145,9 +145,9 @@ typedef enum { CJPEG_WRBMP_JMESSAGE( JTRC_HUFFBITS, " %3d %3d %3d %3d %3d %3d %3d %3d" ) CJPEG_WRBMP_JMESSAGE( JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d %d" ) CJPEG_WRBMP_JMESSAGE( JTRC_JFIF_BADTHUMBNAILSIZE, - "Warning: thumbnail image size does not match data length %u" ) + "Warning: thumbnail image size does not match data length %u" ) CJPEG_WRBMP_JMESSAGE( JTRC_JFIF_EXTENSION, - "JFIF extension marker: type 0x%02x, length %u" ) + "JFIF extension marker: type 0x%02x, length %u" ) CJPEG_WRBMP_JMESSAGE( JTRC_JFIF_THUMBNAIL, " with %d x %d thumbnail image" ) CJPEG_WRBMP_JMESSAGE( JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u" ) CJPEG_WRBMP_JMESSAGE( JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x" ) @@ -158,7 +158,7 @@ typedef enum { CJPEG_WRBMP_JMESSAGE( JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d" ) CJPEG_WRBMP_JMESSAGE( JTRC_RST, "RST%d" ) CJPEG_WRBMP_JMESSAGE( JTRC_SMOOTH_NOTIMPL, - "Smoothing not supported with nonstandard sampling ratios" ) + "Smoothing not supported with nonstandard sampling ratios" ) CJPEG_WRBMP_JMESSAGE( JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d" ) CJPEG_WRBMP_JMESSAGE( JTRC_SOF_COMPONENT, " Component %d: %dhx%dv q=%d" ) CJPEG_WRBMP_JMESSAGE( JTRC_SOI, "Start of Image" ) @@ -168,26 +168,26 @@ typedef enum { CJPEG_WRBMP_JMESSAGE( JTRC_TFILE_CLOSE, "Closed temporary file %s" ) CJPEG_WRBMP_JMESSAGE( JTRC_TFILE_OPEN, "Opened temporary file %s" ) CJPEG_WRBMP_JMESSAGE( JTRC_THUMB_JPEG, - "JFIF extension marker: JPEG-compressed thumbnail image, length %u" ) + "JFIF extension marker: JPEG-compressed thumbnail image, length %u" ) CJPEG_WRBMP_JMESSAGE( JTRC_THUMB_PALETTE, - "JFIF extension marker: palette thumbnail image, length %u" ) + "JFIF extension marker: palette thumbnail image, length %u" ) CJPEG_WRBMP_JMESSAGE( JTRC_THUMB_RGB, - "JFIF extension marker: RGB thumbnail image, length %u" ) + "JFIF extension marker: RGB thumbnail image, length %u" ) CJPEG_WRBMP_JMESSAGE( JTRC_UNKNOWN_IDS, - "Unrecognized component IDs %d %d %d, assuming YCbCr" ) + "Unrecognized component IDs %d %d %d, assuming YCbCr" ) CJPEG_WRBMP_JMESSAGE( JTRC_XMS_CLOSE, "Freed XMS handle %u" ) CJPEG_WRBMP_JMESSAGE( JTRC_XMS_OPEN, "Obtained XMS handle %u" ) CJPEG_WRBMP_JMESSAGE( JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d" ) CJPEG_WRBMP_JMESSAGE( JWRN_BOGUS_PROGRESSION, - "Inconsistent progression sequence for component %d coefficient %d" ) + "Inconsistent progression sequence for component %d coefficient %d" ) CJPEG_WRBMP_JMESSAGE( JWRN_EXTRANEOUS_DATA, - "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x" ) + "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x" ) CJPEG_WRBMP_JMESSAGE( JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment" ) CJPEG_WRBMP_JMESSAGE( JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code" ) CJPEG_WRBMP_JMESSAGE( JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d" ) CJPEG_WRBMP_JMESSAGE( JWRN_JPEG_EOF, "Premature end of JPEG file" ) CJPEG_WRBMP_JMESSAGE( JWRN_MUST_RESYNC, - "Corrupt JPEG data: found marker 0x%02x instead of RST%d" ) + "Corrupt JPEG data: found marker 0x%02x instead of RST%d" ) CJPEG_WRBMP_JMESSAGE( JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG" ) CJPEG_WRBMP_JMESSAGE( JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines" ) diff --git a/bench/sequential/cjpeg_wrbmp/jmorecfg.h b/bench/sequential/cjpeg_wrbmp/jmorecfg.h old mode 100644 new mode 100755 diff --git a/bench/sequential/cjpeg_wrbmp/jpeglib.h b/bench/sequential/cjpeg_wrbmp/jpeglib.h old mode 100644 new mode 100755 index 14416a4f9c9ef1da3221fe8265d742e2d6082d55..87236a4c3a9c1d3d84c8e214aba5215e438f82f3 --- a/bench/sequential/cjpeg_wrbmp/jpeglib.h +++ b/bench/sequential/cjpeg_wrbmp/jpeglib.h @@ -53,7 +53,7 @@ typedef CJPEG_WRBMP_JSAMPARRAY *CJPEG_WRBMP_JSAMPIMAGE; /* a 3-D sample array: top index is color */ typedef CJPEG_WRBMP_JCOEF -CJPEG_WRBMP_JBLOCK[64]; /* one block of coefficients */ +CJPEG_WRBMP_JBLOCK[ 64 ]; /* one block of coefficients */ typedef CJPEG_WRBMP_JBLOCK CJPEG_WRBMP_FAR *CJPEG_WRBMP_JBLOCKROW; /* pointer to one row of coefficient blocks */ typedef CJPEG_WRBMP_JBLOCKROW @@ -76,7 +76,7 @@ typedef struct { CAUTION: IJG versions prior to v6a kept this array in zigzag order. */ CJPEG_WRBMP_UINT16 - quantval[64]; /* quantization step for each coefficient */ + quantval[ 64 ]; /* quantization step for each coefficient */ /* This field is used only during compression. It's initialized FALSE when the table is created, and set TRUE when it's been output to the file. You could suppress output of a table by setting this to TRUE. @@ -90,10 +90,10 @@ typedef struct { typedef struct { /* These two fields directly represent the contents of a JPEG DHT marker */ - CJPEG_WRBMP_UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ - /* length k bits; bits[0] is unused */ + CJPEG_WRBMP_UINT8 bits[ 17 ]; /* bits[ k ] = # of symbols with codes of */ + /* length k bits; bits[ 0 ] is unused */ CJPEG_WRBMP_UINT8 - huffval[256]; /* The symbols, in order of incr code length */ + huffval[ 256 ]; /* The symbols, in order of incr code length */ /* This field is used only during compression. It's initialized FALSE when the table is created, and set TRUE when it's been output to the file. You could suppress output of a table by setting this to TRUE. @@ -110,7 +110,7 @@ typedef struct { /* For compression, they must be supplied by parameter setup; */ /* for decompression, they are read from the SOF marker. */ int component_id; /* identifier for this component (0..255) */ - int component_index; /* its index in SOF or cinfo->comp_info[] */ + int component_index; /* its index in SOF or cinfo->comp_info[ ] */ int h_samp_factor; /* horizontal sampling factor (1..4) */ int v_samp_factor; /* vertical sampling factor (1..4) */ int quant_tbl_no; /* quantization table selector (0..3) */ @@ -176,7 +176,7 @@ typedef struct { typedef struct { int comps_in_scan; /* number of components encoded in this scan */ - int component_index[4]; /* their SOF/comp_info[] indexes */ + int component_index[ 4 ]; /* their SOF/comp_info[ ] indexes */ int Ss, Se; /* progressive JPEG spectral selection parms */ int Ah, Al; /* progressive JPEG successive approx. parms */ } cjpeg_wrbmp_jpeg_scan_info; @@ -190,7 +190,7 @@ struct cjpeg_wrbmp_jpeg_marker_struct { jpeg_saved_marker_ptr next; /* next in list, or NULL */ CJPEG_WRBMP_UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ unsigned int original_length; /* # bytes of data in the file */ - unsigned int data_length; /* # bytes of data saved at data[] */ + unsigned int data_length; /* # bytes of data saved at data[ ] */ CJPEG_WRBMP_JOCTET CJPEG_WRBMP_FAR *data; /* the data contained in the marker */ /* the marker length word is not counted in data_length or original_length */ @@ -289,21 +289,21 @@ struct cjpeg_wrbmp_jpeg_compress_struct { jpeg_color_space; /* colorspace of JPEG image */ cjpeg_wrbmp_jpeg_component_info *comp_info; - /* comp_info[i] describes component that appears i'th in SOF */ + /* comp_info[ i ] describes component that appears i'th in SOF */ - CJPEG_WRBMP_JQUANT_TBL *quant_tbl_ptrs[4]; + CJPEG_WRBMP_JQUANT_TBL *quant_tbl_ptrs[ 4 ]; /* ptrs to coefficient quantization tables, or NULL if not defined */ - CJPEG_WRBMP_JHUFF_TBL *dc_huff_tbl_ptrs[4]; - CJPEG_WRBMP_JHUFF_TBL *ac_huff_tbl_ptrs[4]; + CJPEG_WRBMP_JHUFF_TBL *dc_huff_tbl_ptrs[ 4 ]; + CJPEG_WRBMP_JHUFF_TBL *ac_huff_tbl_ptrs[ 4 ]; /* ptrs to Huffman coding tables, or NULL if not defined */ CJPEG_WRBMP_UINT8 - arith_dc_L[16]; /* L values for DC arith-coding tables */ + arith_dc_L[ 16 ]; /* L values for DC arith-coding tables */ CJPEG_WRBMP_UINT8 - arith_dc_U[16]; /* U values for DC arith-coding tables */ + arith_dc_U[ 16 ]; /* U values for DC arith-coding tables */ CJPEG_WRBMP_UINT8 - arith_ac_K[16]; /* Kx values for AC arith-coding tables */ + arith_ac_K[ 16 ]; /* Kx values for AC arith-coding tables */ int num_scans; /* # of entries in scan_info array */ const cjpeg_wrbmp_jpeg_scan_info @@ -381,16 +381,16 @@ struct cjpeg_wrbmp_jpeg_compress_struct { They describe the components and MCUs actually appearing in the scan. */ int comps_in_scan; /* # of JPEG components in this scan */ - cjpeg_wrbmp_jpeg_component_info *cur_comp_info[4]; - /* *cur_comp_info[i] describes component that appears i'th in SOS */ + cjpeg_wrbmp_jpeg_component_info *cur_comp_info[ 4 ]; + /* *cur_comp_info[ i ] describes component that appears i'th in SOS */ CJPEG_WRBMP_JDIMENSION MCUs_per_row; /* # of MCUs across the image */ CJPEG_WRBMP_JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ int blocks_in_MCU; /* # of DCT blocks per MCU */ - int MCU_membership[10]; - /* MCU_membership[i] is index in cur_comp_info of component owning */ + int MCU_membership[ 10 ]; + /* MCU_membership[ i ] is index in cur_comp_info of component owning */ /* i'th block in an MCU */ int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ @@ -508,14 +508,14 @@ struct cjpeg_wrbmp_jpeg_decompress_struct { int output_scan_number; /* Nominal scan number being displayed */ CJPEG_WRBMP_JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ - /* Current progression status. coef_bits[c][i] indicates the precision + /* Current progression status. coef_bits[ c ][ i ] indicates the precision with which component c's DCT coefficient i (in zigzag order) is known. It is -1 when no data has yet been received, otherwise it is the point transform (shift) value for the most recent scan of the coefficient (thus, 0 at completion of the progression). This pointer is NULL when reading a non-progressive file. */ - int ( *coef_bits )[64]; /* -1 or current Al value for each coef */ + int ( *coef_bits )[ 64 ]; /* -1 or current Al value for each coef */ /* Internal JPEG parameters --- the application usually need not look at these fields. Note that the decompressor output side may not use @@ -526,11 +526,11 @@ struct cjpeg_wrbmp_jpeg_decompress_struct { datastreams when processing abbreviated JPEG datastreams. */ - CJPEG_WRBMP_JQUANT_TBL *quant_tbl_ptrs[4]; + CJPEG_WRBMP_JQUANT_TBL *quant_tbl_ptrs[ 4 ]; /* ptrs to coefficient quantization tables, or NULL if not defined */ - CJPEG_WRBMP_JHUFF_TBL *dc_huff_tbl_ptrs[4]; - CJPEG_WRBMP_JHUFF_TBL *ac_huff_tbl_ptrs[4]; + CJPEG_WRBMP_JHUFF_TBL *dc_huff_tbl_ptrs[ 4 ]; + CJPEG_WRBMP_JHUFF_TBL *ac_huff_tbl_ptrs[ 4 ]; /* ptrs to Huffman coding tables, or NULL if not defined */ /* These parameters are never carried across datastreams, since they @@ -540,7 +540,7 @@ struct cjpeg_wrbmp_jpeg_decompress_struct { int data_precision; /* bits of precision in image data */ cjpeg_wrbmp_jpeg_component_info *comp_info; - /* comp_info[i] describes component that appears i'th in SOF */ + /* comp_info[ i ] describes component that appears i'th in SOF */ cjpeg_wrbmp_boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ @@ -548,11 +548,11 @@ struct cjpeg_wrbmp_jpeg_decompress_struct { arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ CJPEG_WRBMP_UINT8 - arith_dc_L[16]; /* L values for DC arith-coding tables */ + arith_dc_L[ 16 ]; /* L values for DC arith-coding tables */ CJPEG_WRBMP_UINT8 - arith_dc_U[16]; /* U values for DC arith-coding tables */ + arith_dc_U[ 16 ]; /* U values for DC arith-coding tables */ CJPEG_WRBMP_UINT8 - arith_ac_K[16]; /* Kx values for AC arith-coding tables */ + arith_ac_K[ 16 ]; /* Kx values for AC arith-coding tables */ unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ @@ -612,16 +612,16 @@ struct cjpeg_wrbmp_jpeg_decompress_struct { Note that the decompressor output side must not use these fields. */ int comps_in_scan; /* # of JPEG components in this scan */ - cjpeg_wrbmp_jpeg_component_info *cur_comp_info[4]; - /* *cur_comp_info[i] describes component that appears i'th in SOS */ + cjpeg_wrbmp_jpeg_component_info *cur_comp_info[ 4 ]; + /* *cur_comp_info[ i ] describes component that appears i'th in SOS */ CJPEG_WRBMP_JDIMENSION MCUs_per_row; /* # of MCUs across the image */ CJPEG_WRBMP_JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ int blocks_in_MCU; /* # of DCT blocks per MCU */ - int MCU_membership[10]; - /* MCU_membership[i] is index in cur_comp_info of component owning */ + int MCU_membership[ 10 ]; + /* MCU_membership[ i ] is index in cur_comp_info of component owning */ /* i'th block in an MCU */ int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ @@ -662,20 +662,20 @@ struct cjpeg_wrbmp_jpeg_decompress_struct { struct cjpeg_wrbmp_jpeg_error_mgr { /* Error exit handler: does not return to caller */ CJPEG_WRBMP_JMETHOD( void, error_exit, - ( cjpeg_wrbmp_j_common_ptr cinfo ) ); + ( cjpeg_wrbmp_j_common_ptr cinfo ) ); /* Conditionally emit a trace or warning message */ CJPEG_WRBMP_JMETHOD( void, emit_message, - ( cjpeg_wrbmp_j_common_ptr cinfo, int msg_level ) ); + ( cjpeg_wrbmp_j_common_ptr cinfo, int msg_level ) ); /* Routine that actually outputs a trace or error message */ CJPEG_WRBMP_JMETHOD( void, output_message, - ( cjpeg_wrbmp_j_common_ptr cinfo ) ); + ( cjpeg_wrbmp_j_common_ptr cinfo ) ); /* Format a message string for the most recent JPEG error or message */ CJPEG_WRBMP_JMETHOD( void, format_message, - ( cjpeg_wrbmp_j_common_ptr cinfo, char *buffer ) ); + ( cjpeg_wrbmp_j_common_ptr cinfo, char *buffer ) ); #define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ /* Reset error state variables at start of a new image */ CJPEG_WRBMP_JMETHOD( void, reset_error_mgr, - ( cjpeg_wrbmp_j_common_ptr cinfo ) ); + ( cjpeg_wrbmp_j_common_ptr cinfo ) ); /* The message ID code and any parameters are saved here. A message can have one string parameter or up to 8 int parameters. @@ -684,8 +684,8 @@ struct cjpeg_wrbmp_jpeg_error_mgr { #define JMSG_STR_PARM_MAX 80 /* union { - int i[8]; - char s[JMSG_STR_PARM_MAX]; + int i[ 8 ]; + char s[ JMSG_STR_PARM_MAX ]; } msg_parm; */ /* Standard state variables for error facility */ @@ -725,7 +725,7 @@ struct cjpeg_wrbmp_jpeg_error_mgr { struct cjpeg_wrbmp_jpeg_progress_mgr { CJPEG_WRBMP_JMETHOD( void, progress_monitor, - ( cjpeg_wrbmp_j_common_ptr cinfo ) ); + ( cjpeg_wrbmp_j_common_ptr cinfo ) ); long pass_counter; /* work units completed in this pass */ long pass_limit; /* total number of work units in this pass */ @@ -743,11 +743,11 @@ struct cjpeg_wrbmp_jpeg_destination_mgr { free_in_buffer; /* # of byte spaces remaining in buffer */ CJPEG_WRBMP_JMETHOD( void, init_destination, - ( cjpeg_wrbmp_j_compress_ptr cinfo ) ); + ( cjpeg_wrbmp_j_compress_ptr cinfo ) ); CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_boolean, empty_output_buffer, - ( cjpeg_wrbmp_j_compress_ptr cinfo ) ); + ( cjpeg_wrbmp_j_compress_ptr cinfo ) ); CJPEG_WRBMP_JMETHOD( void, term_destination, - ( cjpeg_wrbmp_j_compress_ptr cinfo ) ); + ( cjpeg_wrbmp_j_compress_ptr cinfo ) ); }; @@ -759,15 +759,15 @@ struct cjpeg_wrbmp_jpeg_source_mgr { cjpeg_wrbmp_size_t bytes_in_buffer; /* # of bytes remaining in buffer */ CJPEG_WRBMP_JMETHOD( void, init_source, - ( cjpeg_wrbmp_j_decompress_ptr cinfo ) ); + ( cjpeg_wrbmp_j_decompress_ptr cinfo ) ); CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_boolean, fill_input_buffer, - ( cjpeg_wrbmp_j_decompress_ptr cinfo ) ); + ( cjpeg_wrbmp_j_decompress_ptr cinfo ) ); CJPEG_WRBMP_JMETHOD( void, skip_input_data, - ( cjpeg_wrbmp_j_decompress_ptr cinfo, long num_bytes ) ); + ( cjpeg_wrbmp_j_decompress_ptr cinfo, long num_bytes ) ); CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_boolean, resync_to_restart, - ( cjpeg_wrbmp_j_decompress_ptr cinfo, int desired ) ); + ( cjpeg_wrbmp_j_decompress_ptr cinfo, int desired ) ); CJPEG_WRBMP_JMETHOD( void, term_source, - ( cjpeg_wrbmp_j_decompress_ptr cinfo ) ); + ( cjpeg_wrbmp_j_decompress_ptr cinfo ) ); }; @@ -789,51 +789,51 @@ typedef struct jvirt_barray_control *cjpeg_wrbmp_jvirt_barray_ptr; struct cjpeg_wrbmp_jpeg_memory_mgr { /* Method pointers */ CJPEG_WRBMP_JMETHOD( void *, alloc_small, - ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id, - cjpeg_wrbmp_size_t sizeofobject ) ); + ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id, + cjpeg_wrbmp_size_t sizeofobject ) ); CJPEG_WRBMP_JMETHOD( void CJPEG_WRBMP_FAR *, alloc_large, - ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id, - cjpeg_wrbmp_size_t sizeofobject ) ); + ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id, + cjpeg_wrbmp_size_t sizeofobject ) ); CJPEG_WRBMP_JMETHOD( CJPEG_WRBMP_JSAMPARRAY, alloc_sarray, - ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id, - CJPEG_WRBMP_JDIMENSION samplesperrow, - CJPEG_WRBMP_JDIMENSION numrows ) ); + ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id, + CJPEG_WRBMP_JDIMENSION samplesperrow, + CJPEG_WRBMP_JDIMENSION numrows ) ); CJPEG_WRBMP_JMETHOD( CJPEG_WRBMP_JBLOCKARRAY, alloc_barray, - ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id, - CJPEG_WRBMP_JDIMENSION blocksperrow, - CJPEG_WRBMP_JDIMENSION numrows ) ); + ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id, + CJPEG_WRBMP_JDIMENSION blocksperrow, + CJPEG_WRBMP_JDIMENSION numrows ) ); CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_jvirt_sarray_ptr, - request_virt_sarray, ( cjpeg_wrbmp_j_common_ptr cinfo, - int pool_id, - cjpeg_wrbmp_boolean pre_zero, - CJPEG_WRBMP_JDIMENSION samplesperrow, - CJPEG_WRBMP_JDIMENSION numrows, - CJPEG_WRBMP_JDIMENSION maxaccess ) ); + request_virt_sarray, ( cjpeg_wrbmp_j_common_ptr cinfo, + int pool_id, + cjpeg_wrbmp_boolean pre_zero, + CJPEG_WRBMP_JDIMENSION samplesperrow, + CJPEG_WRBMP_JDIMENSION numrows, + CJPEG_WRBMP_JDIMENSION maxaccess ) ); CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_jvirt_barray_ptr, - request_virt_barray, ( cjpeg_wrbmp_j_common_ptr cinfo, - int pool_id, - cjpeg_wrbmp_boolean pre_zero, - CJPEG_WRBMP_JDIMENSION blocksperrow, - CJPEG_WRBMP_JDIMENSION numrows, - CJPEG_WRBMP_JDIMENSION maxaccess ) ); + request_virt_barray, ( cjpeg_wrbmp_j_common_ptr cinfo, + int pool_id, + cjpeg_wrbmp_boolean pre_zero, + CJPEG_WRBMP_JDIMENSION blocksperrow, + CJPEG_WRBMP_JDIMENSION numrows, + CJPEG_WRBMP_JDIMENSION maxaccess ) ); CJPEG_WRBMP_JMETHOD( void, realize_virt_arrays, - ( cjpeg_wrbmp_j_common_ptr cinfo ) ); + ( cjpeg_wrbmp_j_common_ptr cinfo ) ); CJPEG_WRBMP_JMETHOD( CJPEG_WRBMP_JSAMPARRAY, access_virt_sarray, - ( cjpeg_wrbmp_j_common_ptr cinfo, - cjpeg_wrbmp_jvirt_sarray_ptr ptr, - CJPEG_WRBMP_JDIMENSION start_row, - CJPEG_WRBMP_JDIMENSION num_rows, - cjpeg_wrbmp_boolean writable ) ); + ( cjpeg_wrbmp_j_common_ptr cinfo, + cjpeg_wrbmp_jvirt_sarray_ptr ptr, + CJPEG_WRBMP_JDIMENSION start_row, + CJPEG_WRBMP_JDIMENSION num_rows, + cjpeg_wrbmp_boolean writable ) ); CJPEG_WRBMP_JMETHOD( CJPEG_WRBMP_JBLOCKARRAY, access_virt_barray, - ( cjpeg_wrbmp_j_common_ptr cinfo, - cjpeg_wrbmp_jvirt_barray_ptr ptr, - CJPEG_WRBMP_JDIMENSION start_row, - CJPEG_WRBMP_JDIMENSION num_rows, - cjpeg_wrbmp_boolean writable ) ); + ( cjpeg_wrbmp_j_common_ptr cinfo, + cjpeg_wrbmp_jvirt_barray_ptr ptr, + CJPEG_WRBMP_JDIMENSION start_row, + CJPEG_WRBMP_JDIMENSION num_rows, + cjpeg_wrbmp_boolean writable ) ); CJPEG_WRBMP_JMETHOD( void, free_pool, - ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id ) ); + ( cjpeg_wrbmp_j_common_ptr cinfo, int pool_id ) ); CJPEG_WRBMP_JMETHOD( void, self_destruct, - ( cjpeg_wrbmp_j_common_ptr cinfo ) ); + ( cjpeg_wrbmp_j_common_ptr cinfo ) ); /* Limit on memory allocation for this JPEG object. (Note that this is merely advisory, not a guaranteed maximum; it only affects the space @@ -851,8 +851,8 @@ struct cjpeg_wrbmp_jpeg_memory_mgr { Need not pass marker code since it is stored in cinfo->unread_marker. */ typedef CJPEG_WRBMP_JMETHOD( cjpeg_wrbmp_boolean, - jpeg_marker_parser_method, - ( cjpeg_wrbmp_j_decompress_ptr cinfo ) ); + jpeg_marker_parser_method, + ( cjpeg_wrbmp_j_decompress_ptr cinfo ) ); /* The JPEG library modules define JPEG_INTERNALS before including this file. diff --git a/bench/sequential/dijkstra/ChangeLog.txt b/bench/sequential/dijkstra/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/dijkstra/dijkstra.c b/bench/sequential/dijkstra/dijkstra.c old mode 100644 new mode 100755 index a8a9c8de105d9ae423bcea5fe8f13308fc5e7764..912c382bbceb22a6a2b899ca4831ceaf74cd0694 --- a/bench/sequential/dijkstra/dijkstra.c +++ b/bench/sequential/dijkstra/dijkstra.c @@ -44,12 +44,12 @@ struct _QITEM { /* Global variable definitions */ -struct _NODE dijkstra_rgnNodes[NUM_NODES]; +struct _NODE dijkstra_rgnNodes[ NUM_NODES ]; int dijkstra_queueCount; int dijkstra_queueNext; struct _QITEM *dijkstra_queueHead; -struct _QITEM dijkstra_queueItems[QUEUE_SIZE]; +struct _QITEM dijkstra_queueItems[ QUEUE_SIZE ]; int dijkstra_checksum = 0; @@ -72,9 +72,8 @@ void dijkstra_init( void ) _Pragma( "loopbound min 100 max 100" ) for ( i = 0; i < NUM_NODES; i++ ) { _Pragma( "loopbound min 100 max 100" ) - for ( k = 0; k < NUM_NODES; k++ ) { - dijkstra_AdjMatrix[i][k] ^= x; - } + for ( k = 0; k < NUM_NODES; k++ ) + dijkstra_AdjMatrix[ i ][ k ] ^= x; } dijkstra_queueCount = 0; @@ -91,7 +90,7 @@ int dijkstra_return( void ) int dijkstra_enqueue( int node, int dist, int prev ) { - struct _QITEM *newItem = &dijkstra_queueItems[dijkstra_queueNext]; + struct _QITEM *newItem = &dijkstra_queueItems[ dijkstra_queueNext ]; struct _QITEM *last = dijkstra_queueHead; if ( ++dijkstra_queueNext >= QUEUE_SIZE ) @@ -139,14 +138,14 @@ int dijkstra_find( int chStart, int chEnd ) _Pragma( "loopbound min 100 max 100" ) for ( ch = 0; ch < NUM_NODES; ch++ ) { - dijkstra_rgnNodes[ch].dist = NONE; - dijkstra_rgnNodes[ch].prev = NONE; + dijkstra_rgnNodes[ ch ].dist = NONE; + dijkstra_rgnNodes[ ch ].prev = NONE; } if ( chStart == chEnd ) { } else { - dijkstra_rgnNodes[chStart].dist = 0; - dijkstra_rgnNodes[chStart].prev = NONE; + dijkstra_rgnNodes[ chStart ].dist = 0; + dijkstra_rgnNodes[ chStart ].prev = NONE; if ( dijkstra_enqueue ( chStart, 0, NONE ) == OUT_OF_MEMORY ) return OUT_OF_MEMORY; @@ -157,11 +156,11 @@ int dijkstra_find( int chStart, int chEnd ) dijkstra_dequeue ( &node, &dist, &prev ); _Pragma( "loopbound min 100 max 100" ) for ( i = 0; i < NUM_NODES; i++ ) { - if ( ( cost = dijkstra_AdjMatrix[node][i] ) != NONE ) { - if ( ( NONE == dijkstra_rgnNodes[i].dist ) || - ( dijkstra_rgnNodes[i].dist > ( cost + dist ) ) ) { - dijkstra_rgnNodes[i].dist = dist + cost; - dijkstra_rgnNodes[i].prev = node; + if ( ( cost = dijkstra_AdjMatrix[ node ][ i ] ) != NONE ) { + if ( ( NONE == dijkstra_rgnNodes[ i ].dist ) || + ( dijkstra_rgnNodes[ i ].dist > ( cost + dist ) ) ) { + dijkstra_rgnNodes[ i ].dist = dist + cost; + dijkstra_rgnNodes[ i ].prev = node; if ( dijkstra_enqueue ( i, dist + cost, node ) == OUT_OF_MEMORY ) return OUT_OF_MEMORY; } @@ -184,7 +183,7 @@ void _Pragma( "entrypoint" ) dijkstra_main( void ) dijkstra_checksum += OUT_OF_MEMORY; return; } else - dijkstra_checksum += dijkstra_rgnNodes[j].dist; + dijkstra_checksum += dijkstra_rgnNodes[ j ].dist; dijkstra_queueNext = 0; } } diff --git a/bench/sequential/dijkstra/input.c b/bench/sequential/dijkstra/input.c old mode 100644 new mode 100755 index ab7ffd5ad89a788fd7b3ba03aa70871027c22eeb..02f54f6b0d2249adfdba8a08bec4ac27f35fb821 --- a/bench/sequential/dijkstra/input.c +++ b/bench/sequential/dijkstra/input.c @@ -1,6 +1,6 @@ #include "input.h" -unsigned char dijkstra_AdjMatrix[NUM_NODES][NUM_NODES] = { +unsigned char dijkstra_AdjMatrix[ NUM_NODES ][ NUM_NODES ] = { {32, 32, 54, 12, 52, 56, 8, 30, 44, 94, 44, 39, 65, 19, 51, 91, 1, 5, 89, 34, 25, 58, 20, 51, 38, 65, 30, 7, 20, 10, 51, 18, 43, 71, 97, 61, 26, 5, 57, 70, 65, 0, 75, 29, 86, 93, 87, 87, 64, 75, 88, 89, 100, 7, 40, 37, 38, 36, 44, 24, 46, 95, 43, 89, 32, 5, 15, 58, 77, 72, 95, 8, 38, 69, 37, 24, 27, 90, 77, 92, 31, 30, 80, 30, 37, 86, 33, 76, 21, 77, 100, 68, 37, 8, 22, 69, 81, 38, 94, 57}, {76, 54, 65, 14, 89, 69, 4, 16, 24, 47, 7, 21, 78, 53, 17, 81, 39, 50, 22, 60, 93, 89, 94, 30, 97, 16, 65, 43, 20, 24, 67, 62, 78, 98, 42, 67, 32, 46, 49, 57, 60, 56, 44, 37, 75, 62, 17, 13, 11, 40, 40, 4, 95, 100, 0, 57, 82, 31, 0, 1, 56, 67, 30, 100, 64, 72, 66, 63, 18, 81, 19, 44, 2, 63, 81, 78, 91, 64, 91, 2, 70, 97, 73, 64, 97, 39, 21, 78, 70, 21, 46, 25, 54, 76, 92, 84, 47, 57, 46, 31}, {38, 31, 75, 40, 61, 21, 84, 51, 86, 41, 19, 21, 37, 58, 86, 100, 97, 73, 44, 67, 60, 90, 58, 13, 31, 49, 63, 44, 73, 76, 76, 77, 73, 16, 83, 100, 4, 67, 51, 56, 7, 36, 77, 10, 95, 28, 10, 57, 0, 54, 23, 60, 9, 48, 39, 40, 97, 69, 84, 35, 44, 25, 11, 83, 8, 61, 83, 12, 27, 100, 34, 0, 35, 10, 10, 96, 39, 87, 53, 5, 40, 42, 66, 15, 90, 71, 55, 87, 39, 5, 88, 49, 97, 100, 32, 4, 60, 81, 83, 53}, diff --git a/bench/sequential/dijkstra/input.h b/bench/sequential/dijkstra/input.h old mode 100644 new mode 100755 index 970182850132b94f24e8dfa0e69ea3a88a154fec..874073fadac0bf44adb7c84473cac50ae2c93879 --- a/bench/sequential/dijkstra/input.h +++ b/bench/sequential/dijkstra/input.h @@ -3,6 +3,6 @@ #define NUM_NODES 100 -extern unsigned char dijkstra_AdjMatrix[NUM_NODES][NUM_NODES]; +extern unsigned char dijkstra_AdjMatrix[ NUM_NODES ][ NUM_NODES ]; #endif /* INPUT_H */ diff --git a/bench/sequential/epic/ChangeLog.txt b/bench/sequential/epic/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/epic/epic.c b/bench/sequential/epic/epic.c old mode 100644 new mode 100755 index 958c9680606e7313dcb0aea031e287d8d5593db5..dc781d42a14f05d48810f3ffb9837bc51a832333 --- a/bench/sequential/epic/epic.c +++ b/bench/sequential/epic/epic.c @@ -40,7 +40,7 @@ #define X_SIZE 64 #define Y_SIZE 64 -float epic_image[] = { +float epic_image[ ] = { 0x89, 0x88, 0x87, 0x86, 0x89, 0x87, 0x84, 0x86, 0x83, 0x89, 0x82, 0x83, 0x84, 0x81, 0x80, 0x80, 0x81, 0x83, 0x88, 0x8A, 0x8E, 0x90, 0x96, 0x98, @@ -597,19 +597,19 @@ int main( void ); Declaration of global variables */ -float epic_filtertemp[FILTER_SIZE]; -float epic_hi_imagetemp[X_SIZE * Y_SIZE / 2]; -float epic_lo_imagetemp[X_SIZE * Y_SIZE / 2]; +float epic_filtertemp[ FILTER_SIZE ]; +float epic_hi_imagetemp[ X_SIZE * Y_SIZE / 2 ]; +float epic_lo_imagetemp[ X_SIZE * Y_SIZE / 2 ]; -static float epic_lo_filter[FILTER_SIZE] = { +static float epic_lo_filter[ FILTER_SIZE ] = { -0.0012475221, -0.0024950907, 0.0087309530, 0.0199579580, - -0.0505290000, -0.1205509700, 0.2930455800, - 0.7061761600, - 0.2930455800, -0.1205509700, -0.0505290000, - 0.0199579580, 0.0087309530, -0.0024950907, -0.0012475221 -}; + -0.0505290000, -0.1205509700, 0.2930455800, + 0.7061761600, + 0.2930455800, -0.1205509700, -0.0505290000, + 0.0199579580, 0.0087309530, -0.0024950907, -0.0012475221 + }; -static float epic_hi_filter[FILTER_SIZE] = { +static float epic_hi_filter[ FILTER_SIZE ] = { 0.0012475221, -0.0024950907, -0.0087309530, 0.0199579580, 0.0505290000, -0.1205509700, -0.2930455800, 0.7061761600, @@ -626,9 +626,9 @@ void epic_init( void ) { int i; - _Pragma( "loopbound min 4096 max 9801" ) + _Pragma( "loopbound min 4096 max 4096" ) for ( i = 0; i < X_SIZE * Y_SIZE; ++i ) - epic_image[i] *= SCALE_FACTOR; + epic_image[ i ] *= SCALE_FACTOR; } @@ -652,7 +652,7 @@ void epic_build_pyr( float *image, int x_size, int y_size, int num_levels, y_level = y_size; _Pragma( "loopbound min 4 max 4" ) - for ( level = 0; level < num_levels; ++level ){ + for ( level = 0; level < num_levels; ++level ) { epic_build_level( image, x_level, y_level, lo_filter, hi_filter, filter_size, image ); x_level /= 2; @@ -720,7 +720,7 @@ void epic_internal_transpose( float *mat, int rows, int cols ) register float swap_val; /* loop, ignoring first and last elements */ - _Pragma( "loopbound min 1022 max 2399" ) + _Pragma( "loopbound min 14 max 2399" ) for ( current_pos = 1; current_pos < modulus; ++current_pos ) { /* Compute swap position */ swap_pos = current_pos; @@ -731,9 +731,9 @@ void epic_internal_transpose( float *mat, int rows, int cols ) } while ( swap_pos < current_pos ); if ( current_pos != swap_pos ) { - swap_val = mat[swap_pos]; - mat[swap_pos] = mat[current_pos]; - mat[current_pos] = swap_val; + swap_val = mat[ swap_pos ]; + mat[ swap_pos ] = mat[ current_pos ]; + mat[ current_pos ] = swap_val; } } } @@ -789,12 +789,12 @@ void epic_internal_filter( float *image, int x_dim, int y_dim, float *filt, _Pragma( "loopbound min 1 max 15" ) for ( ; x_filt < y_filt_lin; ++x_filt ) { - sum += image[im_pos] * temp[x_filt]; + sum += image[ im_pos ] * temp[ x_filt ]; ++im_pos; } y_im_lin += x_dim; } - result[res_pos] = sum; + result[ res_pos ] = sum; ++res_pos; } first_col = x_pos + 1; @@ -811,12 +811,12 @@ void epic_internal_filter( float *image, int x_dim, int y_dim, float *filt, im_pos = x_pos + y_im_lin; _Pragma( "loopbound min 1 max 15" ) for ( ; x_filt < y_filt_lin; ++x_filt ) { - sum += image[im_pos] * temp[x_filt]; + sum += image[ im_pos ] * temp[ x_filt ]; ++im_pos; } y_im_lin += x_dim; } - result[res_pos] = sum; + result[ res_pos ] = sum; ++res_pos; } rt_edge_res_pos = res_pos + x_res_dim; /* save this for later ... */ @@ -834,12 +834,12 @@ void epic_internal_filter( float *image, int x_dim, int y_dim, float *filt, _Pragma( "loopbound min 1 max 15" ) for ( ; x_filt < y_filt_lin; ++x_filt ) { - sum += image[im_pos] * temp[x_filt]; + sum += image[ im_pos ] * temp[ x_filt ]; ++im_pos; } y_im_lin += x_dim; } - result[res_pos] = sum; + result[ res_pos ] = sum; ++res_pos; } } /* end top */ @@ -863,12 +863,12 @@ void epic_internal_filter( float *image, int x_dim, int y_dim, float *filt, im_pos = y_im_lin; _Pragma( "loopbound min 1 max 15" ) for ( ; x_filt < y_filt_lin; x_filt++ ) { - sum += image[im_pos] * temp[x_filt]; + sum += image[ im_pos ] * temp[ x_filt ]; ++im_pos; } y_im_lin += x_dim; } - result[res_pos] = sum; + result[ res_pos ] = sum; res_pos += x_res_dim; } prev_res_pos++; @@ -891,12 +891,12 @@ void epic_internal_filter( float *image, int x_dim, int y_dim, float *filt, im_pos = x_pos + y_im_lin; _Pragma( "loopbound min 1 max 15" ) for ( ; x_filt < y_filt_lin; ++x_filt ) { - sum += image[im_pos] * temp[x_filt]; + sum += image[ im_pos ] * temp[ x_filt ]; ++im_pos; } y_im_lin += x_dim; } - result[res_pos] = sum; + result[ res_pos ] = sum; ++res_pos; } prev_res_pos += x_res_dim; @@ -921,12 +921,12 @@ void epic_internal_filter( float *image, int x_dim, int y_dim, float *filt, for ( im_pos = y_im_lin + last_ctr_col; x_filt < y_filt_lin; ++x_filt ) { - sum += image[im_pos] * temp[x_filt]; + sum += image[ im_pos ] * temp[ x_filt ]; ++im_pos; } y_im_lin += x_dim; } - result[res_pos] = sum; + result[ res_pos ] = sum; res_pos += x_res_dim; } prev_res_pos++; @@ -951,12 +951,12 @@ void epic_internal_filter( float *image, int x_dim, int y_dim, float *filt, for ( im_pos = y_im_lin; x_filt < y_filt_lin; ++x_filt ) { - sum += image[im_pos] * temp[x_filt]; + sum += image[ im_pos ] * temp[ x_filt ]; ++im_pos; } y_im_lin += x_dim; } - result[res_pos] = sum; + result[ res_pos ] = sum; ++res_pos; } epic_reflect1( filt, x_fdim, y_fdim, 0, y_pos, temp, FILTER ); @@ -973,12 +973,12 @@ void epic_internal_filter( float *image, int x_dim, int y_dim, float *filt, for ( im_pos = x_pos + y_im_lin; x_filt < y_filt_lin; ++x_filt ) { - sum += image[im_pos] * temp[x_filt]; + sum += image[ im_pos ] * temp[ x_filt ]; ++im_pos; } y_im_lin += x_dim; } - result[res_pos] = sum; + result[ res_pos ] = sum; ++res_pos; } _Pragma( "loopbound min 1 max 4" ) @@ -995,12 +995,12 @@ void epic_internal_filter( float *image, int x_dim, int y_dim, float *filt, for ( im_pos = y_im_lin + last_ctr_col; x_filt < y_filt_lin; ++x_filt ) { - sum += image[im_pos] * temp[x_filt]; + sum += image[ im_pos ] * temp[ x_filt ]; ++im_pos; } y_im_lin += x_dim; } - result[res_pos] = sum; + result[ res_pos ] = sum; ++res_pos; } } /* end bottom */ @@ -1060,7 +1060,7 @@ void epic_reflect1( float *filt, int x_dim, int y_dim, int x_pos, int y_pos, int my_pos = ( y_dim / 2 ) + 1; _Pragma( "loopbound min 15 max 15" ) - for ( i = 0; i < filt_sz; ++i ) result[i] = 0.0f; + for ( i = 0; i < filt_sz; ++i ) result[ i ] = 0.0f; /* if EXPAND and filter is centered on image edge, do not reflect */ if ( f_or_e IS EXPAND ) { @@ -1086,8 +1086,8 @@ void epic_reflect1( float *filt, int x_dim, int y_dim, int x_pos, int y_pos, x_edge = x_edge_dist; _Pragma( "loopbound min 1 max 15" ) for ( x_filt = y_filt + x_start; x_filt < y_filt + x_stop; ++x_filt ) { - result[abs( y_base - abs( y_edge ) ) + abs( x_base - abs( x_edge ) )] - += filt[x_filt]; + result[ abs( y_base - abs( y_edge ) ) + abs( x_base - abs( x_edge ) ) ] + += filt[ x_filt ]; ++x_edge; } y_edge += x_dim; @@ -1098,11 +1098,11 @@ void epic_reflect1( float *filt, int x_dim, int y_dim, int x_pos, int y_pos, if ( ( abs( x_pos ) ISNT mx_pos ) AND ( x_pos ISNT 0 ) ) _Pragma( "loopbound min 0 max 0" ) for ( y_filt = x_base; y_filt < filt_sz; y_filt += x_dim ) - result[y_filt] += result[y_filt]; + result[ y_filt ] += result[ y_filt ]; if ( ( abs( y_pos ) ISNT my_pos ) AND ( y_pos ISNT 0 ) ) _Pragma( "loopbound min 0 max 0" ) for ( x_filt = y_base; x_filt < y_base + x_dim; ++x_filt ) - result[x_filt] += result[x_filt]; + result[ x_filt ] += result[ x_filt ]; } } @@ -1117,13 +1117,14 @@ void _Pragma( "entrypoint" ) epic_main( void ) epic_hi_filter, FILTER_SIZE ); } -int epic_return(){ +int epic_return() +{ int i; int checksum = 0; - for ( i=0 ; i<X_SIZE*Y_SIZE ; i+=Y_SIZE+1 ){ - checksum += epic_image[i]; - } - return ( checksum == 43968 ? 0 : 1); + _Pragma( "loopbound min 64 max 64" ) + for ( i = 0 ; i < X_SIZE * Y_SIZE ; i += Y_SIZE + 1 ) + checksum += epic_image[ i ]; + return ( checksum == 43968 ? 0 : 1 ); } int main( void ) diff --git a/bench/sequential/epic/epic.h b/bench/sequential/epic/epic.h old mode 100644 new mode 100755 index 5e5675feaf14660511cbaff77ef38c448923de18..8a8151ac5fb0086981e14c093e988c0be9fe406d --- a/bench/sequential/epic/epic.h +++ b/bench/sequential/epic/epic.h @@ -22,7 +22,7 @@ stored coefficients are accurate to +/- (1/SCALE_FACTOR). On the other hand, this number also will limit the maximum amount of compression. - It should not be more than [2^(8*sizeof(BinValueType))]/256. */ + It should not be more than [ 2^(8*sizeof(BinValueType)) ]/256. */ #define SCALE_FACTOR 128 /* This number must be consistent with the filters that are @@ -33,7 +33,7 @@ #define LOG_MAX_IMAGE_SIZE 32 /* The type of the quantized images. Must be SIGNED, and capable of holding - values in the range [-MAX_BINS, MAX_BINS] */ + values in the range [ -MAX_BINS, MAX_BINS ] */ typedef short BinIndexType; /* The type used to represent the binsizes. Should be UNSIGNED. If this is @@ -51,7 +51,7 @@ void epic_build_pyr( float *image, int x_size, int y_size, int num_levels, void epic_build_level( float *image, int level_x_size, int level_y_size, float *lo_filter, float *hi_filter, - int filter_size, float *result_block ); + int filter_size, float *result_block ); void epic_internal_transpose( register float *mat, int rows, register int cols ); @@ -62,9 +62,9 @@ void epic_reflect1( register float *filt, register int x_dim, int y_dim, void epic_internal_filter( register float *image, register int x_dim, register int y_dim, float *filt, register float *temp, register int x_fdim, - register int y_fdim, int xgrid_start, - int xgrid_step, int ygrid_start, int ygrid_step, - register float *result ); + register int y_fdim, int xgrid_start, + int xgrid_step, int ygrid_start, int ygrid_step, + register float *result ); void epic_reflect1( float *filt, int x_dim, int y_dim, int x_pos, int y_pos, float *result, int f_or_e ); diff --git a/bench/sequential/fmref/Changelog.txt b/bench/sequential/fmref/Changelog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/fmref/fmref.c b/bench/sequential/fmref/fmref.c old mode 100644 new mode 100755 index b2700494e79520315f3060d58937ca3a416508af..c1b06112b89ce4b10da411837a01814b0e34e1dd --- a/bench/sequential/fmref/fmref.c +++ b/bench/sequential/fmref/fmref.c @@ -1,7 +1,7 @@ /* -* fmref.c: C reference implementation of FM Radio -* David Maze <dmaze@cag.lcs.mit.edu> -* $Id: fmref.c,v 1.2 2010-10-04 21:21:26 garus Exp $ + fmref.c: C reference implementation of FM Radio + David Maze <dmaze@cag.lcs.mit.edu> + $Id: fmref.c,v 1.2 2010-10-04 21:21:26 garus Exp $ */ #include "wcclibm.h" @@ -15,65 +15,64 @@ #define NUM_TAPS 64 #define MAX_AMPLITUDE 27000.0 #define BANDWIDTH 10000 -#define DECIMATION 4 +#define DECIMATION 4 /* Must be at least NUM_TAPS+1: */ #define IN_BUFFER_LEN 200 #define EQUALIZER_BANDS 10 // Type declarations -typedef struct FloatBuffer -{ - float buff[IN_BUFFER_LEN]; +typedef struct FloatBuffer { + float buff[ IN_BUFFER_LEN ]; int rpos, rlen; } FloatBuffer; /* Low pass filter: */ -typedef struct LPFData -{ - float coeff[NUM_TAPS]; +typedef struct LPFData { + float coeff[ NUM_TAPS ]; float freq; int taps, decimation; } LPFData; -typedef struct EqualizerData -{ - LPFData lpf[EQUALIZER_BANDS + 1]; - FloatBuffer fb[EQUALIZER_BANDS + 1]; - float gain[EQUALIZER_BANDS]; +typedef struct EqualizerData { + LPFData lpf[ EQUALIZER_BANDS + 1 ]; + FloatBuffer fb[ EQUALIZER_BANDS + 1 ]; + float gain[ EQUALIZER_BANDS ]; } EqualizerData; // Global vars -float fmref_lpf_coeff[NUM_TAPS]; -float fmref_eq_cutoffs[EQUALIZER_BANDS + 1] = - { 55.000004f, 77.78174f, 110.00001f, 155.56354f, 220.00002f, 311.12695f, - 440.00003f, 622.25415f, 880.00006f, 1244.5078f, 1760.0001f }; +float fmref_lpf_coeff[ NUM_TAPS ]; +float fmref_eq_cutoffs[ EQUALIZER_BANDS + 1 ] = { + 55.000004f, 77.78174f, 110.00001f, 155.56354f, 220.00002f, 311.12695f, + 440.00003f, 622.25415f, 880.00006f, 1244.5078f, 1760.0001f +}; static int fmref_numiters = 2; // Forward declarations -void fmref_fb_compact(FloatBuffer *fb); -int fmref_fb_ensure_writable(FloatBuffer *fb, int amount); -void fmref_get_floats(FloatBuffer *fb); -void fmref_init_lpf_data(LPFData *data, float freq, int taps, int decimation); -void fmref_run_lpf(FloatBuffer *fbin, FloatBuffer *fbout, LPFData *data); -void fmref_run_demod(FloatBuffer *fbin, FloatBuffer *fbout); -void fmref_init_equalizer(EqualizerData *data); -void fmref_run_equalizer(FloatBuffer *fbin, FloatBuffer *fbout, EqualizerData *data); -void fmref_main(void); - -void fmref_init(void) +void fmref_fb_compact( FloatBuffer *fb ); +int fmref_fb_ensure_writable( FloatBuffer *fb, int amount ); +void fmref_get_floats( FloatBuffer *fb ); +void fmref_init_lpf_data( LPFData *data, float freq, int taps, int decimation ); +void fmref_run_lpf( FloatBuffer *fbin, FloatBuffer *fbout, LPFData *data ); +void fmref_run_demod( FloatBuffer *fbin, FloatBuffer *fbout ); +void fmref_init_equalizer( EqualizerData *data ); +void fmref_run_equalizer( FloatBuffer *fbin, FloatBuffer *fbout, + EqualizerData *data ); +void fmref_main( void ); + +void fmref_init( void ) { // dummy init function } -int fmref_return(void) +int fmref_return( void ) { // dummy return value return 0; } -int main(void) +int main( void ) { fmref_init(); fmref_main(); @@ -83,7 +82,7 @@ int main(void) FloatBuffer fmref_fb1, fmref_fb2, fmref_fb3, fmref_fb4; LPFData fmref_lpf_data; -void fmref_main(void) +void _Pragma( "entrypoint" ) fmref_main( void ) { int i; EqualizerData eq_data; @@ -93,87 +92,86 @@ void fmref_main(void) fmref_fb3.rpos = fmref_fb3.rlen = 0; fmref_fb4.rpos = fmref_fb4.rlen = 0; - fmref_init_lpf_data(&fmref_lpf_data, CUTOFF_FREQUENCY, NUM_TAPS, DECIMATION); - fmref_init_equalizer(&eq_data); + fmref_init_lpf_data( &fmref_lpf_data, CUTOFF_FREQUENCY, NUM_TAPS, DECIMATION ); + fmref_init_equalizer( &eq_data ); /* Startup: */ - fmref_get_floats(&fmref_fb1); + fmref_get_floats( &fmref_fb1 ); /* LPF needs at least NUM_TAPS+1 inputs; fmref_get_floats is fine. */ - fmref_run_lpf(&fmref_fb1, &fmref_fb2, &fmref_lpf_data); + fmref_run_lpf( &fmref_fb1, &fmref_fb2, &fmref_lpf_data ); /* run_demod needs 1 input, OK here. */ /* run_equalizer needs 51 inputs (same reason as for LPF). This means - * running the pipeline up to demod 50 times in advance: */ + running the pipeline up to demod 50 times in advance: */ _Pragma( "loopbound min 64 max 64" ) - for (i = 0; i < 64; i++) { - if (fmref_fb1.rlen - fmref_fb1.rpos < NUM_TAPS + 1) - fmref_get_floats(&fmref_fb1); - fmref_run_lpf(&fmref_fb1, &fmref_fb2, &fmref_lpf_data); - fmref_run_demod(&fmref_fb2, &fmref_fb3); + for ( i = 0; i < 64; i++ ) { + if ( fmref_fb1.rlen - fmref_fb1.rpos < NUM_TAPS + 1 ) + fmref_get_floats( &fmref_fb1 ); + fmref_run_lpf( &fmref_fb1, &fmref_fb2, &fmref_lpf_data ); + fmref_run_demod( &fmref_fb2, &fmref_fb3 ); } /* Main loop: */ _Pragma( "loopbound min 2 max 2" ) - while (fmref_numiters-- > 0) { + while ( fmref_numiters-- > 0 ) { /* The low-pass filter will need NUM_TAPS+1 items; read them if we - * need to. */ - if (fmref_fb1.rlen - fmref_fb1.rpos < NUM_TAPS + 1) - fmref_get_floats(&fmref_fb1); - fmref_run_lpf(&fmref_fb1, &fmref_fb2, &fmref_lpf_data); - fmref_run_demod(&fmref_fb2, &fmref_fb3); - fmref_run_equalizer(&fmref_fb3, &fmref_fb4, &eq_data); - + need to. */ + if ( fmref_fb1.rlen - fmref_fb1.rpos < NUM_TAPS + 1 ) + fmref_get_floats( &fmref_fb1 ); + fmref_run_lpf( &fmref_fb1, &fmref_fb2, &fmref_lpf_data ); + fmref_run_demod( &fmref_fb2, &fmref_fb3 ); + fmref_run_equalizer( &fmref_fb3, &fmref_fb4, &eq_data ); + } } -void fmref_fb_compact(FloatBuffer *fb) +void fmref_fb_compact( FloatBuffer *fb ) { - + int i; char *source; char *target; - target = (char*)(fb->buff); - source = (char*)(fb->buff + fb->rpos); + target = ( char * )( fb->buff ); + source = ( char * )( fb->buff + fb->rpos ); _Pragma( "loopbound min 0 max 60" ) - for (i = 0; i < fb->rlen - fb->rpos; i++) { - target[i] = source[i]; - } + for ( i = 0; i < fb->rlen - fb->rpos; i++ ) + target[ i ] = source[ i ]; fb->rlen -= fb->rpos; fb->rpos = 0; } -int fmref_fb_ensure_writable(FloatBuffer *fb, int amount) +int fmref_fb_ensure_writable( FloatBuffer *fb, int amount ) { int available = IN_BUFFER_LEN - fb->rlen; - if (available >= amount) + if ( available >= amount ) return 1; /* Nope, not enough room, move current contents back to the beginning. */ - fmref_fb_compact(fb); + fmref_fb_compact( fb ); available = IN_BUFFER_LEN - fb->rlen; - if (available >= amount) + if ( available >= amount ) return 1; return 0; } -void fmref_get_floats(FloatBuffer *fb) +void fmref_get_floats( FloatBuffer *fb ) { static int x = 0; - fmref_fb_compact(fb); + fmref_fb_compact( fb ); /* Fill the remaining space in fb with 1.0. */ - _Pragma( "loopbound min 200 max 200" ) - while (fb->rlen < IN_BUFFER_LEN) { - fb->buff[fb->rlen++] = (float)x; + _Pragma( "loopbound min 140 max 200" ) + while ( fb->rlen < IN_BUFFER_LEN ) { + fb->buff[ fb->rlen++ ] = ( float )x; x++; } } -void fmref_init_lpf_data(LPFData *data, float freq, int taps, int decimation) +void fmref_init_lpf_data( LPFData *data, float freq, int taps, int decimation ) { /* Assume that CUTOFF_FREQUENCY is non-zero. See comments in - * StreamIt LowPassFilter.java for origin. */ + StreamIt LowPassFilter.java for origin. */ float w = 2 * M_PI * freq / SAMPLING_RATE; int i; float m = taps - 1.0f; @@ -183,93 +181,94 @@ void fmref_init_lpf_data(LPFData *data, float freq, int taps, int decimation) data->decimation = decimation; _Pragma( "loopbound min 64 max 64" ) - for (i = 0; i < taps; i++) { - if (i - m / 2 == 0.0f) - data->coeff[i] = w / M_PI; + for ( i = 0; i < taps; i++ ) { + if ( i - m / 2 == 0.0f ) + data->coeff[ i ] = w / M_PI; else - data->coeff[i] = sin(w * (i - m / 2)) / M_PI / (i - m / 2) * - (0.54f - 0.46f * cos(2 * M_PI * i / m)); + data->coeff[ i ] = sin( w * ( i - m / 2 ) ) / M_PI / ( i - m / 2 ) * + ( 0.54f - 0.46f * cos( 2 * M_PI * i / m ) ); } } -void fmref_run_lpf(FloatBuffer *fbin, FloatBuffer *fbout, LPFData *data) +void fmref_run_lpf( FloatBuffer *fbin, FloatBuffer *fbout, LPFData *data ) { float sum = 0.0f; int i = 0; _Pragma( "loopbound min 64 max 64" ) - for (i = 0; i < data->taps; i++) { - sum += fbin->buff[fbin->rpos + i] * data->coeff[i]; - } + for ( i = 0; i < data->taps; i++ ) + sum += fbin->buff[ fbin->rpos + i ] * data->coeff[ i ]; fbin->rpos += data->decimation + 1; /* Check that there's room in the output buffer; move data if necessary. */ - fmref_fb_ensure_writable(fbout, 1); - fbout->buff[fbout->rlen++] = sum; + fmref_fb_ensure_writable( fbout, 1 ); + fbout->buff[ fbout->rlen++ ] = sum; } -void fmref_run_demod(FloatBuffer *fbin, FloatBuffer *fbout) +void fmref_run_demod( FloatBuffer *fbin, FloatBuffer *fbout ) { float temp, gain; - gain = MAX_AMPLITUDE * SAMPLING_RATE / (BANDWIDTH * M_PI); - temp = fbin->buff[fbin->rpos] * fbin->buff[fbin->rpos + 1]; - temp = gain * atan(temp); + gain = MAX_AMPLITUDE * SAMPLING_RATE / ( BANDWIDTH * M_PI ); + temp = fbin->buff[ fbin->rpos ] * fbin->buff[ fbin->rpos + 1 ]; + temp = gain * atan( temp ); fbin->rpos++; - fmref_fb_ensure_writable(fbout, 1); - fbout->buff[fbout->rlen++] = temp; + fmref_fb_ensure_writable( fbout, 1 ); + fbout->buff[ fbout->rlen++ ] = temp; } -void fmref_init_equalizer(EqualizerData *data) +void fmref_init_equalizer( EqualizerData *data ) { int i; /* Equalizer structure: there are ten band-pass filters, with - * cutoffs as shown below. The outputs of these filters get added - * together. Each band-pass filter is LPF(high)-LPF(low). */ + cutoffs as shown below. The outputs of these filters get added + together. Each band-pass filter is LPF(high)-LPF(low). */ _Pragma( "loopbound min 11 max 11" ) - for (i = 0; i < EQUALIZER_BANDS + 1; i++) - fmref_init_lpf_data(&data->lpf[i], fmref_eq_cutoffs[i], 64, 0); + for ( i = 0; i < EQUALIZER_BANDS + 1; i++ ) + fmref_init_lpf_data( &data->lpf[ i ], fmref_eq_cutoffs[ i ], 64, 0 ); /* Also initialize member buffers. */ _Pragma( "loopbound min 11 max 11" ) - for (i = 0; i < EQUALIZER_BANDS + 1; i++) - data->fb[i].rpos = data->fb[i].rlen = 0; + for ( i = 0; i < EQUALIZER_BANDS + 1; i++ ) + data->fb[ i ].rpos = data->fb[ i ].rlen = 0; _Pragma( "loopbound min 10 max 10" ) - for (i = 0; i < EQUALIZER_BANDS; i++) { + for ( i = 0; i < EQUALIZER_BANDS; i++ ) { // the gain amplifies the middle bands the most - float val = (((float)i) - (((float)(EQUALIZER_BANDS - 1)) / 2.0f)) / 5.0f; - data->gain[i] = val > 0 ? 2.0f - val : 2.0f + val; + float val = ( ( ( float )i ) - ( ( ( float )( EQUALIZER_BANDS - 1 ) ) / + 2.0f ) ) / 5.0f; + data->gain[ i ] = val > 0 ? 2.0f - val : 2.0f + val; } } -void fmref_run_equalizer(FloatBuffer *fbin, FloatBuffer *fbout, EqualizerData *data) +void fmref_run_equalizer( FloatBuffer *fbin, FloatBuffer *fbout, + EqualizerData *data ) { int i, rpos; - float lpf_out[EQUALIZER_BANDS + 1]; + float lpf_out[ EQUALIZER_BANDS + 1 ]; float sum = 0.0; /* Save the input read location; we can reuse the same input data on all - * of the LPFs. */ + of the LPFs. */ rpos = fbin->rpos; /* Run the child filters. */ _Pragma( "loopbound min 11 max 11" ) - for (i = 0; i < EQUALIZER_BANDS + 1; i++) { + for ( i = 0; i < EQUALIZER_BANDS + 1; i++ ) { fbin->rpos = rpos; - fmref_run_lpf(fbin, &data->fb[i], &data->lpf[i]); - lpf_out[i] = data->fb[i].buff[data->fb[i].rpos++]; + fmref_run_lpf( fbin, &data->fb[ i ], &data->lpf[ i ] ); + lpf_out[ i ] = data->fb[ i ].buff[ data->fb[ i ].rpos++ ]; } /* Now process the results of the filters. Remember that each band is - * output(hi)-output(lo). */ - _Pragma( "loopbound min 10 max 10" ) - for (i = 0; i < EQUALIZER_BANDS; i++) - sum += (lpf_out[i + 1] - lpf_out[i]) * data->gain[i]; + output(hi)-output(lo). */ + _Pragma( "loopbound min 10 max 10" ) + for ( i = 0; i < EQUALIZER_BANDS; i++ ) + sum += ( lpf_out[ i + 1 ] - lpf_out[ i ] ) * data->gain[ i ]; /* Write that result. */ - fmref_fb_ensure_writable(fbout, 1); - fbout->buff[fbout->rlen++] = sum; + fmref_fb_ensure_writable( fbout, 1 ); + fbout->buff[ fbout->rlen++ ] = sum; } diff --git a/bench/sequential/fmref/license.txt b/bench/sequential/fmref/license.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/fmref/math_private.h b/bench/sequential/fmref/math_private.h old mode 100644 new mode 100755 index 58d4354759a9102758b891c60cd15bfc117c875e..e846510e1141749424cf61c9328fd47964e49dab --- a/bench/sequential/fmref/math_private.h +++ b/bench/sequential/fmref/math_private.h @@ -1,17 +1,17 @@ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ /* - * from: @(#)fdlibm.h 5.1 93/09/24 - */ + from: @(#)fdlibm.h 5.1 93/09/24 +*/ #ifndef _MATH_PRIVATE_H_ #define _MATH_PRIVATE_H_ @@ -22,34 +22,33 @@ //#include <sys/types.h> /* A representation of a double as a union. */ -union ieee754_double -{ +union ieee754_double { double d; /* This is the IEEE 754 double-precision format. */ struct { /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; + unsigned int mantissa1: 32; + unsigned int mantissa0: 20; + unsigned int exponent: 11; + unsigned int negative: 1; } ieee; /* This format makes it easier to see if a NaN is a signalling NaN. */ struct { /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; + unsigned int mantissa1: 32; + unsigned int mantissa0: 19; + unsigned int quiet_nan: 1; + unsigned int exponent: 11; + unsigned int negative: 1; } ieee_nan; }; /* The original fdlibm code used statements like: - n0 = ((*(int*)&one)>>29)^1; * index of high word * - ix0 = *(n0+(int*)&x); * high word of x * - ix1 = *((1-n0)+(int*)&x); * low word of x * + n0 = ((*(int*)&one)>>29)^1; * index of high word * + ix0 = *(n0+(int*)&x); * high word of x * + ix1 = *((1-n0)+(int*)&x); * low word of x * to dig two 32 bit words out of the 64 bit IEEE floating point value. That is non-ANSI, and, moreover, the gcc instruction scheduler gets it wrong. We instead use the following macros. @@ -77,11 +76,9 @@ union ieee754_double /* #if __FLOAT_WORD_ORDER == LITTLE_ENDIAN */ /* #warning USING Little Endian float word order */ -typedef union -{ +typedef union { double value; - struct - { + struct { u_int16_t lsw; u_int16_t msw; } parts; @@ -91,87 +88,86 @@ typedef union /* Get two 32 bit ints from a double. */ -#define EXTRACT_WORDS(ix0,ix1,d) \ -{ \ - ieeeDoubleShapeType ew_u; \ - ew_u.value = (d); \ - (ix0) = ew_u.parts.msw; \ - (ix1) = ew_u.parts.lsw; \ +#define EXTRACT_WORDS(ix0,ix1,d) \ +{ \ + ieeeDoubleShapeType ew_u; \ + ew_u.value = (d); \ + (ix0) = ew_u.parts.msw; \ + (ix1) = ew_u.parts.lsw; \ } /* Get the more significant 32 bit int from a double. */ -#define GET_HIGH_WORD(i,d) \ -{ \ - ieeeDoubleShapeType gh_u; \ - gh_u.value = (d); \ - (i) = gh_u.parts.msw; \ +#define GET_HIGH_WORD(i,d) \ +{ \ + ieeeDoubleShapeType gh_u; \ + gh_u.value = (d); \ + (i) = gh_u.parts.msw; \ } /* Get the less significant 32 bit int from a double. */ -#define GET_LOW_WORD(i,d) \ -{ \ - ieeeDoubleShapeType gl_u; \ - gl_u.value = (d); \ - (i) = gl_u.parts.lsw; \ +#define GET_LOW_WORD(i,d) \ +{ \ + ieeeDoubleShapeType gl_u; \ + gl_u.value = (d); \ + (i) = gl_u.parts.lsw; \ } /* Set a double from two 32 bit ints. */ -#define INSERT_WORDS(d,ix0,ix1) \ -{ \ - ieeeDoubleShapeType iw_u; \ - iw_u.parts.msw = (ix0); \ - iw_u.parts.lsw = (ix1); \ - (d) = iw_u.value; \ +#define INSERT_WORDS(d,ix0,ix1) \ +{ \ + ieeeDoubleShapeType iw_u; \ + iw_u.parts.msw = (ix0); \ + iw_u.parts.lsw = (ix1); \ + (d) = iw_u.value; \ } /* Set the more significant 32 bits of a double from an int. */ -#define SET_HIGH_WORD(d,v) \ -{ \ - ieeeDoubleShapeType sh_u; \ - sh_u.value = (d); \ - sh_u.parts.msw = (v); \ - (d) = sh_u.value; \ +#define SET_HIGH_WORD(d,v) \ +{ \ + ieeeDoubleShapeType sh_u; \ + sh_u.value = (d); \ + sh_u.parts.msw = (v); \ + (d) = sh_u.value; \ } /* Set the less significant 32 bits of a double from an int. */ -#define SET_LOW_WORD(d,v) \ -{ \ - ieeeDoubleShapeType sl_u; \ - sl_u.value = (d); \ - sl_u.parts.lsw = (v); \ - (d) = sl_u.value; \ +#define SET_LOW_WORD(d,v) \ +{ \ + ieeeDoubleShapeType sl_u; \ + sl_u.value = (d); \ + sl_u.parts.lsw = (v); \ + (d) = sl_u.value; \ } /* A union which permits us to convert between a float and a 32 bit int. */ -typedef union -{ +typedef union { float value; u_int32_t word; } ieee_float_shape_type; /* Get a 32 bit int from a float. */ -#define GET_FLOAT_WORD(i,d) \ -{ \ - ieee_float_shape_type gf_u; \ - gf_u.value = (d); \ - (i) = gf_u.word; \ +#define GET_FLOAT_WORD(i,d) \ +{ \ + ieee_float_shape_type gf_u; \ + gf_u.value = (d); \ + (i) = gf_u.word; \ } /* Set a float from a 32 bit int. */ -#define SET_FLOAT_WORD(d,i) \ -{ \ - ieee_float_shape_type sf_u; \ - sf_u.word = (i); \ - (d) = sf_u.value; \ +#define SET_FLOAT_WORD(d,i) \ +{ \ + ieee_float_shape_type sf_u; \ + sf_u.word = (i); \ + (d) = sf_u.value; \ } diff --git a/bench/sequential/fmref/wcclibm.c b/bench/sequential/fmref/wcclibm.c old mode 100644 new mode 100755 index 39b8cbe5d89e9a56f82924778e913e664b9aab51..59a43a309d7ce21398b1839f56fe85d0e7dd2bb0 --- a/bench/sequential/fmref/wcclibm.c +++ b/bench/sequential/fmref/wcclibm.c @@ -4,54 +4,55 @@ /* e_rem_pio2f.c -- float version of e_rem_pio2.c - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ + Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. +*/ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ #if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: e_rem_pio2f.c,v 1.5 1995/05/10 20:46:03 jtc Exp $"; +static char rcsid[ ] = + "$NetBSD: e_rem_pio2f.c,v 1.5 1995/05/10 20:46:03 jtc Exp $"; #endif /* __ieee754_rem_pio2f(x,y) - * - * return the remainder of x rem pi/2 in y[0]+y[1] - * use __kernel_rem_pio2f() - */ + + return the remainder of x rem pi/2 in y[ 0 ]+y[ 1 ] + use __kernel_rem_pio2f() +*/ /* This array is like the one in e_rem_pio2.c, but the numbers are single precision and the last 8 bits are forced to 0. */ #ifdef __STDC__ -static const int32_t fmref_npio2_hw[] = { +static const int32_t fmref_npio2_hw[ ] = { #else -static int32_t fmref_npio2_hw[] = { +static int32_t fmref_npio2_hw[ ] = { #endif -0x3fc90f00, 0x40490f00, 0x4096cb00, 0x40c90f00, 0x40fb5300, 0x4116cb00, -0x412fed00, 0x41490f00, 0x41623100, 0x417b5300, 0x418a3a00, 0x4196cb00, -0x41a35c00, 0x41afed00, 0x41bc7e00, 0x41c90f00, 0x41d5a000, 0x41e23100, -0x41eec200, 0x41fb5300, 0x4203f200, 0x420a3a00, 0x42108300, 0x4216cb00, -0x421d1400, 0x42235c00, 0x4229a500, 0x422fed00, 0x42363600, 0x423c7e00, -0x4242c700, 0x42490f00 + 0x3fc90f00, 0x40490f00, 0x4096cb00, 0x40c90f00, 0x40fb5300, 0x4116cb00, + 0x412fed00, 0x41490f00, 0x41623100, 0x417b5300, 0x418a3a00, 0x4196cb00, + 0x41a35c00, 0x41afed00, 0x41bc7e00, 0x41c90f00, 0x41d5a000, 0x41e23100, + 0x41eec200, 0x41fb5300, 0x4203f200, 0x420a3a00, 0x42108300, 0x4216cb00, + 0x421d1400, 0x42235c00, 0x4229a500, 0x422fed00, 0x42363600, 0x423c7e00, + 0x4242c700, 0x42490f00 }; /* - * invpio2: 24 bits of 2/pi - * pio2_1: first 17 bit of pi/2 - * pio2_1t: pi/2 - pio2_1 - * pio2_2: second 17 bit of pi/2 - * pio2_2t: pi/2 - (pio2_1+pio2_2) - * pio2_3: third 17 bit of pi/2 - * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3) - */ + invpio2: 24 bits of 2/pi + pio2_1: first 17 bit of pi/2 + pio2_1t: pi/2 - pio2_1 + pio2_2: second 17 bit of pi/2 + pio2_2t: pi/2 - (pio2_1+pio2_2) + pio2_3: third 17 bit of pi/2 + pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3) +*/ #ifdef __STDC__ static const float @@ -70,114 +71,121 @@ fmref_pio2_3 = 6.0770943833e-11f, /* 0x2e85a300 */ fmref_pio2_3t = 6.1232342629e-17f; /* 0x248d3132 */ #ifdef __STDC__ - int32_t fmref___ieee754_rem_pio2f(float x, float *y) +int32_t fmref___ieee754_rem_pio2f( float x, float *y ) #else - int32_t fmref___ieee754_rem_pio2f(x,y) - float x,y[]; +int32_t fmref___ieee754_rem_pio2f( x, y ) +float x, y[ ]; #endif { - float z,w,t,r,fn; - int32_t i,j,n,ix,hx; - - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; - if(ix<=0x3f490fd8) /* |x| ~<= pi/4 , no need for reduction */ - {y[0] = x; y[1] = 0; return 0;} - if(ix<0x4016cbe4) { /* |x| < 3pi/4, special case with n=+-1 */ - if(hx>0) { - z = x - fmref_pio2_1; - if((ix&0xfffffff0)!=0x3fc90fd0) { /* 24+24 bit pi OK */ - y[0] = z - fmref_pio2_1t; - y[1] = (z-y[0])-fmref_pio2_1t; - } else { /* near pi/2, use 24+24+24 bit pi */ - z -= fmref_pio2_2; - y[0] = z - fmref_pio2_2t; - y[1] = (z-y[0])-fmref_pio2_2t; - } - return 1; - } else { /* negative x */ - z = x + fmref_pio2_1; - if((ix&0xfffffff0)!=0x3fc90fd0) { /* 24+24 bit pi OK */ - y[0] = z + fmref_pio2_1t; - y[1] = (z-y[0])+fmref_pio2_1t; - } else { /* near pi/2, use 24+24+24 bit pi */ - z += fmref_pio2_2; - y[0] = z + fmref_pio2_2t; - y[1] = (z-y[0])+fmref_pio2_2t; - } - return -1; - } - } - if(ix<=0x43490f80) { /* |x| ~<= 2^7*(pi/2), medium size */ - t = fabsf(x); - n = (int32_t) (t*fmref_invpio2+fmref_half); - fn = (float)n; - r = t-fn*fmref_pio2_1; - w = fn*fmref_pio2_1t; /* 1st round good to 40 bit */ - if(n<32&&(int32_t)(ix&0xffffff00)!=fmref_npio2_hw[n-1]) { - y[0] = r-w; /* quick check no cancellation */ - } else { - u_int32_t high; - j = ix>>23; - y[0] = r-w; - GET_FLOAT_WORD(high,y[0]); - i = j-((high>>23)&0xff); - if(i>8) { /* 2nd iteration needed, good to 57 */ - t = r; - w = fn*fmref_pio2_2; - r = t-w; - w = fn*fmref_pio2_2t-((t-r)-w); - y[0] = r-w; - GET_FLOAT_WORD(high,y[0]); - i = j-((high>>23)&0xff); - if(i>25) { /* 3rd iteration need, 74 bits acc */ - t = r; /* will cover all possible cases */ - w = fn*fmref_pio2_3; - r = t-w; - w = fn*fmref_pio2_3t-((t-r)-w); - y[0] = r-w; - } - } - } - y[1] = (r-y[0])-w; - if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;} - else return n; - } - /* - * all other (large) arguments - */ - if(ix>=0x7f800000) { /* x is inf or NaN */ - y[0]=y[1]=x-x; return 0; - } - - y[0]=y[1]=x-x; /* dummy initialization */ - return 0; /* doesn't happen for our input */ + float z, w, t, r, fn; + int32_t i, j, n, ix, hx; + + GET_FLOAT_WORD( hx, x ); + ix = hx & 0x7fffffff; + if ( ix <= 0x3f490fd8 ) { /* |x| ~<= pi/4 , no need for reduction */ + y[ 0 ] = x; + y[ 1 ] = 0; + return 0; + } + if ( ix < 0x4016cbe4 ) { /* |x| < 3pi/4, special case with n=+-1 */ + if ( hx > 0 ) { + z = x - fmref_pio2_1; + if ( ( ix & 0xfffffff0 ) != 0x3fc90fd0 ) { /* 24+24 bit pi OK */ + y[ 0 ] = z - fmref_pio2_1t; + y[ 1 ] = ( z - y[ 0 ] ) - fmref_pio2_1t; + } else { /* near pi/2, use 24+24+24 bit pi */ + z -= fmref_pio2_2; + y[ 0 ] = z - fmref_pio2_2t; + y[ 1 ] = ( z - y[ 0 ] ) - fmref_pio2_2t; + } + return 1; + } else { /* negative x */ + z = x + fmref_pio2_1; + if ( ( ix & 0xfffffff0 ) != 0x3fc90fd0 ) { /* 24+24 bit pi OK */ + y[ 0 ] = z + fmref_pio2_1t; + y[ 1 ] = ( z - y[ 0 ] ) + fmref_pio2_1t; + } else { /* near pi/2, use 24+24+24 bit pi */ + z += fmref_pio2_2; + y[ 0 ] = z + fmref_pio2_2t; + y[ 1 ] = ( z - y[ 0 ] ) + fmref_pio2_2t; + } + return -1; + } + } + if ( ix <= 0x43490f80 ) { /* |x| ~<= 2^7*(pi/2), medium size */ + t = fabsf( x ); + n = ( int32_t ) ( t * fmref_invpio2 + fmref_half ); + fn = ( float )n; + r = t - fn * fmref_pio2_1; + w = fn * fmref_pio2_1t; /* 1st round good to 40 bit */ + if ( n < 32 && ( int32_t )( ix & 0xffffff00 ) != fmref_npio2_hw[ n - 1 ] ) { + y[ 0 ] = r - w; /* quick check no cancellation */ + } else { + u_int32_t high; + j = ix >> 23; + y[ 0 ] = r - w; + GET_FLOAT_WORD( high, y[ 0 ] ); + i = j - ( ( high >> 23 ) & 0xff ); + if ( i > 8 ) { /* 2nd iteration needed, good to 57 */ + t = r; + w = fn * fmref_pio2_2; + r = t - w; + w = fn * fmref_pio2_2t - ( ( t - r ) - w ); + y[ 0 ] = r - w; + GET_FLOAT_WORD( high, y[ 0 ] ); + i = j - ( ( high >> 23 ) & 0xff ); + if ( i > 25 ) { /* 3rd iteration need, 74 bits acc */ + t = r; /* will cover all possible cases */ + w = fn * fmref_pio2_3; + r = t - w; + w = fn * fmref_pio2_3t - ( ( t - r ) - w ); + y[ 0 ] = r - w; + } + } + } + y[ 1 ] = ( r - y[ 0 ] ) - w; + if ( hx < 0 ) { + y[ 0 ] = -y[ 0 ]; + y[ 1 ] = -y[ 1 ]; + return -n; + } else return n; + } + /* + all other (large) arguments + */ + if ( ix >= 0x7f800000 ) { /* x is inf or NaN */ + y[ 0 ] = y[ 1 ] = x - x; + return 0; + } + + y[ 0 ] = y[ 1 ] = x - x; /* dummy initialization */ + return 0; /* doesn't happen for our input */ } /* k_cosf.c -- float version of k_cos.c - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ + Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. +*/ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ #if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: k_cosf.c,v 1.4 1995/05/10 20:46:23 jtc Exp $"; +static char rcsid[ ] = "$NetBSD: k_cosf.c,v 1.4 1995/05/10 20:46:23 jtc Exp $"; #endif #ifdef __STDC__ -static const float +static const float #else -static float +static float #endif /* one = 1.0000000000e+00, /\* 0x3f800000 *\/ */ fmref_C1 = 4.1666667908e-02f, /* 0x3d2aaaab */ @@ -188,59 +196,61 @@ fmref_C5 = 2.0875723372e-09f, /* 0x310f74f6 */ fmref_C6 = -1.1359647598e-11f; /* 0xad47d74e */ #ifdef __STDC__ - float fmref___kernel_cosf(float x, float y) +float fmref___kernel_cosf( float x, float y ) #else - float fmref___kernel_cosf(x, y) - float x,y; +float fmref___kernel_cosf( x, y ) +float x, y; #endif { - float a,hz,z,r,qx; - int32_t ix; - GET_FLOAT_WORD(ix,x); - ix &= 0x7fffffff; /* ix = |x|'s high word*/ - if(ix<0x32000000) { /* if x < 2**27 */ - if(((int)x)==0) return fmref_one; /* generate inexact */ - } - z = x*x; - r = z*(fmref_C1+z*(fmref_C2+z*(fmref_C3+z*(fmref_C4+z*(fmref_C5+z*fmref_C6))))); - if(ix < 0x3e99999a) /* if |x| < 0.3 */ - return fmref_one - ((float)0.5f*z - (z*r - x*y)); - else { - if(ix > 0x3f480000) { /* x > 0.78125 */ - qx = (float)0.28125f; - } else { - SET_FLOAT_WORD(qx,ix-0x01000000); /* x/4 */ - } - hz = (float)0.5f*z-qx; - a = fmref_one-qx; - return a - (hz - (z*r-x*y)); - } + float a, hz, z, r, qx; + int32_t ix; + GET_FLOAT_WORD( ix, x ); + ix &= 0x7fffffff; /* ix = |x|'s high word*/ + if ( ix < 0x32000000 ) { /* if x < 2**27 */ + if ( ( ( int )x ) == 0 ) return fmref_one; /* generate inexact */ + } + z = x * x; + r = z * ( fmref_C1 + z * ( fmref_C2 + z * ( fmref_C3 + z * ( fmref_C4 + z * + ( fmref_C5 + z * fmref_C6 ) ) ) ) ); + if ( ix < 0x3e99999a ) /* if |x| < 0.3 */ + return fmref_one - ( ( float )0.5f * z - ( z * r - x * y ) ); + else { + if ( ix > 0x3f480000 ) /* x > 0.78125 */ + qx = ( float )0.28125f; + + else { + SET_FLOAT_WORD( qx, ix - 0x01000000 ); /* x/4 */ + } + hz = ( float )0.5f * z - qx; + a = fmref_one - qx; + return a - ( hz - ( z * r - x * y ) ); + } } /* k_sinf.c -- float version of k_sin.c - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ + Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. +*/ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ #if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: k_sinf.c,v 1.4 1995/05/10 20:46:33 jtc Exp $"; +static char rcsid[ ] = "$NetBSD: k_sinf.c,v 1.4 1995/05/10 20:46:33 jtc Exp $"; #endif #ifdef __STDC__ -static const float +static const float #else -static float +static float #endif /* half = 5.0000000000e-01f,/\* 0x3f000000 *\/ */ fmref_S1 = -1.6666667163e-01f, /* 0xbe2aaaab */ @@ -251,48 +261,51 @@ fmref_S5 = -2.5050759689e-08f, /* 0xb2d72f34 */ fmref_S6 = 1.5896910177e-10f; /* 0x2f2ec9d3 */ #ifdef __STDC__ - float fmref___kernel_sinf(float x, float y, int iy) +float fmref___kernel_sinf( float x, float y, int iy ) #else - float fmref___kernel_sinf(x, y, iy) - float x,y; int iy; /* iy=0 if y is zero */ +float fmref___kernel_sinf( x, y, iy ) +float x, y; +int iy; /* iy=0 if y is zero */ #endif { - float z,r,v; - int32_t ix; - GET_FLOAT_WORD(ix,x); - ix &= 0x7fffffff; /* high word of x */ - if(ix<0x32000000) /* |x| < 2**-27 */ - {if((int)x==0) return x;} /* generate inexact */ - z = x*x; - v = z*x; - r = fmref_S2+z*(fmref_S3+z*(fmref_S4+z*(fmref_S5+z*fmref_S6))); - if(iy==0) return x+v*(fmref_S1+z*r); - else return x-((z*(fmref_half*y-v*r)-y)-v*fmref_S1); + float z, r, v; + int32_t ix; + GET_FLOAT_WORD( ix, x ); + ix &= 0x7fffffff; /* high word of x */ + if ( ix < 0x32000000 ) { /* |x| < 2**-27 */ + if ( ( int )x == 0 ) return x; /* generate inexact */ + } + z = x * x; + v = z * x; + r = fmref_S2 + z * ( fmref_S3 + z * ( fmref_S4 + z * ( fmref_S5 + z * + fmref_S6 ) ) ); + if ( iy == 0 ) return x + v * ( fmref_S1 + z * r ); + else return x - ( ( z * ( fmref_half * y - v * r ) - y ) - v * fmref_S1 ); } /* s_atanf.c -- float version of s_atan.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ + Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. +*/ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ #if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_atanf.c,v 1.4 1995/05/10 20:46:47 jtc Exp $"; +static char rcsid[ ] = "$NetBSD: s_atanf.c,v 1.4 1995/05/10 20:46:47 jtc Exp $"; #endif #ifdef __STDC__ -static const float fmref_atanhi[] = { +static const float fmref_atanhi[ ] = { #else -static float fmref_atanhi[] = { +static float fmref_atanhi[ ] = { #endif 4.6364760399e-01f, /* atan(0.5)hi 0x3eed6338 */ 7.8539812565e-01f, /* atan(1.0)hi 0x3f490fda */ @@ -301,9 +314,9 @@ static float fmref_atanhi[] = { }; #ifdef __STDC__ -static const float fmref_atanlo[] = { +static const float fmref_atanlo[ ] = { #else -static float fmref_atanlo[] = { +static float fmref_atanlo[ ] = { #endif 5.0121582440e-09f, /* atan(0.5)lo 0x31ac3769 */ 3.7748947079e-08f, /* atan(1.0)lo 0x33222168 */ @@ -312,96 +325,104 @@ static float fmref_atanlo[] = { }; #ifdef __STDC__ -static const float fmref_aT[] = { +static const float fmref_aT[ ] = { #else -static float fmref_aT[] = { +static float fmref_aT[ ] = { #endif 3.3333334327e-01f, /* 0x3eaaaaaa */ - -2.0000000298e-01f, /* 0xbe4ccccd */ + -2.0000000298e-01f, /* 0xbe4ccccd */ 1.4285714924e-01f, /* 0x3e124925 */ - -1.1111110449e-01f, /* 0xbde38e38 */ + -1.1111110449e-01f, /* 0xbde38e38 */ 9.0908870101e-02f, /* 0x3dba2e6e */ - -7.6918758452e-02f, /* 0xbd9d8795 */ + -7.6918758452e-02f, /* 0xbd9d8795 */ 6.6610731184e-02f, /* 0x3d886b35 */ - -5.8335702866e-02f, /* 0xbd6ef16b */ + -5.8335702866e-02f, /* 0xbd6ef16b */ 4.9768779427e-02f, /* 0x3d4bda59 */ - -3.6531571299e-02f, /* 0xbd15a221 */ + -3.6531571299e-02f, /* 0xbd15a221 */ 1.6285819933e-02f, /* 0x3c8569d7 */ }; /* #ifdef __STDC__ */ -/* static const float */ +/* static const float */ /* #else */ -/* static float */ +/* static float */ /* #endif */ /* one = 1.0, */ /* huge = 1.0e30; */ #ifdef __STDC__ - float fmref___atanf(float x) +float fmref___atanf( float x ) #else - float fmref___atanf(x) - float x; +float fmref___atanf( x ) +float x; #endif { - float w,s1,s2,z; - int32_t ix,hx,id; - - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; - if(ix>=0x50800000) { /* if |x| >= 2^34 */ - if(ix>0x7f800000) - return x+x; /* NaN */ - if(hx>0) return fmref_atanhi[3]+fmref_atanlo[3]; - else return -fmref_atanhi[3]-fmref_atanlo[3]; - } if (ix < 0x3ee00000) { /* |x| < 0.4375 */ - if (ix < 0x31000000) { /* |x| < 2^-29 */ - if(fmref_huge+x>fmref_one) return x; /* raise inexact */ - } - id = -1; - } else { - x = fabsf(x); - if (ix < 0x3f980000) { /* |x| < 1.1875 */ - if (ix < 0x3f300000) { /* 7/16 <=|x|<11/16 */ - id = 0; x = ((float)2.0f*x-fmref_one)/((float)2.0f+x); - } else { /* 11/16<=|x|< 19/16 */ - id = 1; x = (x-fmref_one)/(x+fmref_one); - } - } else { - if (ix < 0x401c0000) { /* |x| < 2.4375 */ - id = 2; x = (x-(float)1.5f)/(fmref_one+(float)1.5f*x); - } else { /* 2.4375 <= |x| < 2^66 */ - id = 3; x = -(float)1.0f/x; - } - }} - /* end of argument reduction */ - z = x*x; - w = z*z; - /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */ - s1 = z*(fmref_aT[0]+w*(fmref_aT[2]+w*(fmref_aT[4]+w*(fmref_aT[6]+w*(fmref_aT[8]+w*fmref_aT[10]))))); - s2 = w*(fmref_aT[1]+w*(fmref_aT[3]+w*(fmref_aT[5]+w*(fmref_aT[7]+w*fmref_aT[9])))); - if (id<0) return x - x*(s1+s2); - else { - z = fmref_atanhi[id] - ((x*(s1+s2) - fmref_atanlo[id]) - x); - return (hx<0)? -z:z; - } + float w, s1, s2, z; + int32_t ix, hx, id; + + GET_FLOAT_WORD( hx, x ); + ix = hx & 0x7fffffff; + if ( ix >= 0x50800000 ) { /* if |x| >= 2^34 */ + if ( ix > 0x7f800000 ) + return x + x; /* NaN */ + if ( hx > 0 ) return fmref_atanhi[ 3 ] + fmref_atanlo[ 3 ]; + else return -fmref_atanhi[ 3 ] - fmref_atanlo[ 3 ]; + } + if ( ix < 0x3ee00000 ) { /* |x| < 0.4375 */ + if ( ix < 0x31000000 ) { /* |x| < 2^-29 */ + if ( fmref_huge + x > fmref_one ) return x; /* raise inexact */ + } + id = -1; + } else { + x = fabsf( x ); + if ( ix < 0x3f980000 ) { /* |x| < 1.1875 */ + if ( ix < 0x3f300000 ) { /* 7/16 <=|x|<11/16 */ + id = 0; + x = ( ( float )2.0f * x - fmref_one ) / ( ( float )2.0f + x ); + } else { /* 11/16<=|x|< 19/16 */ + id = 1; + x = ( x - fmref_one ) / ( x + fmref_one ); + } + } else { + if ( ix < 0x401c0000 ) { /* |x| < 2.4375 */ + id = 2; + x = ( x - ( float )1.5f ) / ( fmref_one + ( float )1.5f * x ); + } else { /* 2.4375 <= |x| < 2^66 */ + id = 3; + x = -( float )1.0f / x; + } + } + } + /* end of argument reduction */ + z = x * x; + w = z * z; + /* break sum from i=0 to 10 aT[ i ]z**(i+1) into odd and even poly */ + s1 = z * ( fmref_aT[ 0 ] + w * ( fmref_aT[ 2 ] + w * ( fmref_aT[ 4 ] + w * + ( fmref_aT[ 6 ] + w * ( fmref_aT[ 8 ] + w * fmref_aT[ 10 ] ) ) ) ) ); + s2 = w * ( fmref_aT[ 1 ] + w * ( fmref_aT[ 3 ] + w * ( fmref_aT[ 5 ] + w * + ( fmref_aT[ 7 ] + w * fmref_aT[ 9 ] ) ) ) ); + if ( id < 0 ) return x - x * ( s1 + s2 ); + else { + z = fmref_atanhi[ id ] - ( ( x * ( s1 + s2 ) - fmref_atanlo[ id ] ) - x ); + return ( hx < 0 ) ? -z : z; + } } //weak_alias (__atanf, atanf) /* s_cosf.c -- float version of s_cos.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ + Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. +*/ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ /* #ifdef __STDC__ */ /* static const float one=1.0; */ @@ -410,113 +431,121 @@ static float fmref_aT[] = { /* #endif */ #ifdef __STDC__ - float fmref___cosf(float x) +float fmref___cosf( float x ) #else - float fmref___cosf(x) - float x; +float fmref___cosf( x ) +float x; #endif { - float y[2],z=0.0f; - int32_t n,ix; + float y[ 2 ], z = 0.0f; + int32_t n, ix; - GET_FLOAT_WORD(ix,x); + GET_FLOAT_WORD( ix, x ); - /* |x| ~< pi/4 */ - ix &= 0x7fffffff; - if(ix <= 0x3f490fd8) return fmref___kernel_cosf(x,z); + /* |x| ~< pi/4 */ + ix &= 0x7fffffff; + if ( ix <= 0x3f490fd8 ) return fmref___kernel_cosf( x, z ); - /* cos(Inf or NaN) is NaN */ - else if (ix>=0x7f800000) return x-x; + /* cos(Inf or NaN) is NaN */ + else + if ( ix >= 0x7f800000 ) return x - x; /* argument reduction needed */ - else { - n = fmref___ieee754_rem_pio2f(x,y); - switch(n&3) { - case 0: return fmref___kernel_cosf(y[0],y[1]); - case 1: return -fmref___kernel_sinf(y[0],y[1],1); - case 2: return -fmref___kernel_cosf(y[0],y[1]); - default: - return fmref___kernel_sinf(y[0],y[1],1); - } - } + else { + n = fmref___ieee754_rem_pio2f( x, y ); + switch ( n & 3 ) { + case 0: + return fmref___kernel_cosf( y[ 0 ], y[ 1 ] ); + case 1: + return -fmref___kernel_sinf( y[ 0 ], y[ 1 ], 1 ); + case 2: + return -fmref___kernel_cosf( y[ 0 ], y[ 1 ] ); + default: + return fmref___kernel_sinf( y[ 0 ], y[ 1 ], 1 ); + } + } } /* s_sinf.c -- float version of s_sin.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ + Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. +*/ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - - #ifdef __STDC__ - float fmref___sinf(float x) + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ + +#ifdef __STDC__ +float fmref___sinf( float x ) #else - float fmref___sinf(x) - float x; +float fmref___sinf( x ) +float x; #endif { - float y[2],z=0.0; - int32_t n, ix; + float y[ 2 ], z = 0.0; + int32_t n, ix; - GET_FLOAT_WORD(ix,x); + GET_FLOAT_WORD( ix, x ); - /* |x| ~< pi/4 */ - ix &= 0x7fffffff; - if(ix <= 0x3f490fd8) return fmref___kernel_sinf(x,z,0); + /* |x| ~< pi/4 */ + ix &= 0x7fffffff; + if ( ix <= 0x3f490fd8 ) return fmref___kernel_sinf( x, z, 0 ); - /* sin(Inf or NaN) is NaN */ - else if (ix>=0x7f800000) return x-x; + /* sin(Inf or NaN) is NaN */ + else + if ( ix >= 0x7f800000 ) return x - x; /* argument reduction needed */ - else { - n = fmref___ieee754_rem_pio2f(x,y); - switch(n&3) { - case 0: return fmref___kernel_sinf(y[0],y[1],1); - case 1: return fmref___kernel_cosf(y[0],y[1]); - case 2: return -fmref___kernel_sinf(y[0],y[1],1); - default: - return -fmref___kernel_cosf(y[0],y[1]); - } - } + else { + n = fmref___ieee754_rem_pio2f( x, y ); + switch ( n & 3 ) { + case 0: + return fmref___kernel_sinf( y[ 0 ], y[ 1 ], 1 ); + case 1: + return fmref___kernel_cosf( y[ 0 ], y[ 1 ] ); + case 2: + return -fmref___kernel_sinf( y[ 0 ], y[ 1 ], 1 ); + default: + return -fmref___kernel_cosf( y[ 0 ], y[ 1 ] ); + } + } } /* s_fabsf.c -- float version of s_fabs.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ + Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. +*/ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ /* - * fabsf(x) returns the absolute value of x. - */ + fabsf(x) returns the absolute value of x. +*/ #ifdef __STDC__ - float fmref___fabsf(float x) +float fmref___fabsf( float x ) #else - float fmref___fabsf(x) - float x; +float fmref___fabsf( x ) +float x; #endif { - u_int32_t ix; - GET_FLOAT_WORD(ix,x); - SET_FLOAT_WORD(x,ix&0x7fffffff); - return x; + u_int32_t ix; + GET_FLOAT_WORD( ix, x ); + SET_FLOAT_WORD( x, ix & 0x7fffffff ); + return x; } diff --git a/bench/sequential/fmref/wcclibm.h b/bench/sequential/fmref/wcclibm.h old mode 100644 new mode 100755 index ff58e32d69d33f36a5e82e155575a9e48315be35..b4b602105e0ecf098601feb12f3de7949522810e --- a/bench/sequential/fmref/wcclibm.h +++ b/bench/sequential/fmref/wcclibm.h @@ -9,11 +9,11 @@ // Often used variables/consts #ifdef __STDC__ -static const float +static const float #else -static float +static float #endif -fmref_one = 1.0f, +fmref_one = 1.0f, fmref_half = 5.0000000000e-01f, /* 0x3f000000 */ fmref_zero = 0.0f, fmref_huge = 1.0e30, @@ -33,22 +33,23 @@ fmref_twon8 = 3.9062500000e-03f; /* 0x3b800000 */ #define log fmref___ieee754_logf #define sin fmref___sinf -float fmref___atanf(float x); -float fmref___copysignf(float x, float y); -float fmref___cosf(float x); -float fmref___fabsf(float x); -float fmref___floorf(float x); -float fmref___ieee754_acosf(float x); -float fmref___ieee754_powf(float x, float y); -int32_t fmref___ieee754_rem_pio2f(float x, float *y); -float fmref___ieee754_sqrtf(float x); -int fmref___isinff (float x); -float fmref___kernel_cosf(float x, float y); -float fmref___kernel_sinf(float x, float y, int iy); -int fmref___kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32_t *ipio2); -float fmref___scalbnf (float x, int n); -float fmref___ieee754_logf(float x); -float fmref___ieee754_log10f(float x); -float fmref___sinf(float x); +float fmref___atanf( float x ); +float fmref___copysignf( float x, float y ); +float fmref___cosf( float x ); +float fmref___fabsf( float x ); +float fmref___floorf( float x ); +float fmref___ieee754_acosf( float x ); +float fmref___ieee754_powf( float x, float y ); +int32_t fmref___ieee754_rem_pio2f( float x, float *y ); +float fmref___ieee754_sqrtf( float x ); +int fmref___isinff ( float x ); +float fmref___kernel_cosf( float x, float y ); +float fmref___kernel_sinf( float x, float y, int iy ); +int fmref___kernel_rem_pio2f( float *x, float *y, int e0, int nx, int prec, + const int32_t *ipio2 ); +float fmref___scalbnf ( float x, int n ); +float fmref___ieee754_logf( float x ); +float fmref___ieee754_log10f( float x ); +float fmref___sinf( float x ); #endif // _WCCLIBM diff --git a/bench/sequential/g723_enc/ChangeLog.txt b/bench/sequential/g723_enc/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/g723_enc/g723_enc.c b/bench/sequential/g723_enc/g723_enc.c old mode 100644 new mode 100755 index 958f64a69f601bf66e8dfada50957b377d1e1c84..fa46af3c42c77aad279266b5ffb9fee41a5e8bd6 --- a/bench/sequential/g723_enc/g723_enc.c +++ b/bench/sequential/g723_enc/g723_enc.c @@ -37,18 +37,18 @@ struct g723_enc_state_t { short dml; /* Long term energy estimate. */ short ap; /* Linear weighting coefficient of 'yl' and 'yu'. */ - short a[2]; /* Coefficients of pole portion of prediction filter. */ - short b[6]; /* Coefficients of zero portion of prediction filter. */ - short pk[2]; /* + short a[ 2 ]; /* Coefficients of pole portion of prediction filter. */ + short b[ 6 ]; /* Coefficients of zero portion of prediction filter. */ + short pk[ 2 ]; /* Signs of previous two samples of a partially reconstructed signal. */ - short dq[6]; /* + short dq[ 6 ]; /* Previous 6 samples of the quantized difference signal represented in an internal floating point format. */ - short sr[2]; /* + short sr[ 2 ]; /* Previous 2 samples of the quantized difference signal represented in an internal floating point format. @@ -114,7 +114,7 @@ int main( void ); struct g723_enc_state_t g723_enc_state; -unsigned int g723_enc_INPUT[256] = { +unsigned int g723_enc_INPUT[ 256 ] = { 51, 17, 31, 53, 95, 17, 70, 22, 49, 12, 8, 39, 28, 37, 99, 54, 77, 65, 77, 78, 83, 15, 63, 31, 35, 92, 52, 40, 61, 79, 94, 87, 87, 68, 76, 58, 39, 35, 20, 83, 42, 46, 98, 12, 21, 96, 74, 41, @@ -135,11 +135,11 @@ unsigned int g723_enc_INPUT[256] = { -unsigned int g723_enc_OUTPUT[256]; +unsigned int g723_enc_OUTPUT[ 256 ]; -short g723_enc_power2[15] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80, - 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000 - }; +short g723_enc_power2[ 15 ] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80, + 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000 + }; /* @@ -147,26 +147,26 @@ short g723_enc_power2[15] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80, magnitude values. */ -short g723_enc_qtab_723_24[3] = {8, 218, 331}; +short g723_enc_qtab_723_24[ 3 ] = {8, 218, 331}; /* Maps G.721 code word to reconstructed scale factor normalized log magnitude values. */ -short g723_enc_dqlntab[16] = { -2048, 4, 135, 213, 273, 323, 373, 425, - 425, 373, 323, 273, 213, 135, 4, -2048 - }; +short g723_enc_dqlntab[ 16 ] = { -2048, 4, 135, 213, 273, 323, 373, 425, + 425, 373, 323, 273, 213, 135, 4, -2048 + }; /* Maps G.721 code word to log of scale factor multiplier. */ -short g723_enc_witab[16] = { -12, 18, 41, 64, 112, 198, 355, 1122, - 1122, 355, 198, 112, 64, 41, 18, -12 - }; +short g723_enc_witab[ 16 ] = { -12, 18, 41, 64, 112, 198, 355, 1122, + 1122, 355, 198, 112, 64, 41, 18, -12 + }; /* Maps G.721 code words to a set of values whose long and short term averages are computed and then compared to give an indication how stationary (steady state) the signal is. */ -short g723_enc_fitab[16] = {0, 0, 0, 0x200, 0x200, 0x200, 0x600, 0xE00, +short g723_enc_fitab[ 16 ] = {0, 0, 0, 0x200, 0x200, 0x200, 0x600, 0xE00, 0xE00, 0x600, 0x200, 0x200, 0x200, 0, 0, 0 }; @@ -235,7 +235,7 @@ int g723_enc_abs( int num ) g723_enc_quan() quantizes the input val against the table of size short integers. - It returns i if table[i - 1] <= val < table[i]. + It returns i if table[ i - 1 ] <= val < table[ i ]. Using linear search for simple coding. */ @@ -276,10 +276,10 @@ g723_enc_predictor_zero( int i; int sezi; - sezi = g723_enc_fmult( state_ptr->b[0] >> 2, state_ptr->dq[0] ); + sezi = g723_enc_fmult( state_ptr->b[ 0 ] >> 2, state_ptr->dq[ 0 ] ); _Pragma( "loopbound min 5 max 5" ) for ( i = 1; i < 6; i++ ) /* ACCUM */ - sezi += g723_enc_fmult( state_ptr->b[i] >> 2, state_ptr->dq[i] ); + sezi += g723_enc_fmult( state_ptr->b[ i ] >> 2, state_ptr->dq[ i ] ); return ( sezi ); } @@ -295,8 +295,8 @@ int g723_enc_predictor_pole( struct g723_enc_state_t *state_ptr ) { - return ( g723_enc_fmult( state_ptr->a[1] >> 2, state_ptr->sr[1] ) + - g723_enc_fmult( state_ptr->a[0] >> 2, state_ptr->sr[0] ) ); + return ( g723_enc_fmult( state_ptr->a[ 1 ] >> 2, state_ptr->sr[ 1 ] ) + + g723_enc_fmult( state_ptr->a[ 0 ] >> 2, state_ptr->sr[ 0 ] ) ); } /* @@ -482,21 +482,21 @@ g723_enc_update( Adaptive predictor coefficients. */ if ( tr == 1 ) { /* reset a's and b's for modem signal */ - state_ptr->a[0] = 0; - state_ptr->a[1] = 0; - state_ptr->b[0] = 0; - state_ptr->b[1] = 0; - state_ptr->b[2] = 0; - state_ptr->b[3] = 0; - state_ptr->b[4] = 0; - state_ptr->b[5] = 0; + state_ptr->a[ 0 ] = 0; + state_ptr->a[ 1 ] = 0; + state_ptr->b[ 0 ] = 0; + state_ptr->b[ 1 ] = 0; + state_ptr->b[ 2 ] = 0; + state_ptr->b[ 3 ] = 0; + state_ptr->b[ 4 ] = 0; + state_ptr->b[ 5 ] = 0; } else { /* update a's and b's */ - pks1 = pk0 ^ state_ptr->pk[0]; /* UPA2 */ + pks1 = pk0 ^ state_ptr->pk[ 0 ]; /* UPA2 */ - /* update predictor pole a[1] */ - a2p = state_ptr->a[1] - ( state_ptr->a[1] >> 7 ); + /* update predictor pole a[ 1 ] */ + a2p = state_ptr->a[ 1 ] - ( state_ptr->a[ 1 ] >> 7 ); if ( dqsez != 0 ) { - fa1 = ( pks1 ) ? state_ptr->a[0] : -state_ptr->a[0]; + fa1 = ( pks1 ) ? state_ptr->a[ 0 ] : -state_ptr->a[ 0 ]; if ( fa1 < -8191 ) /* a2p = function of fa1 */ a2p -= 0x100; else @@ -504,7 +504,7 @@ g723_enc_update( a2p += 0xFF; else a2p += fa1 >> 5; - if ( pk0 ^ state_ptr->pk[1] ) + if ( pk0 ^ state_ptr->pk[ 1 ] ) /* LIMC */ if ( a2p <= -12160 ) a2p = -12288; @@ -525,38 +525,38 @@ g723_enc_update( } /* TRIGB & DELAY */ - state_ptr->a[1] = a2p; + state_ptr->a[ 1 ] = a2p; /* UPA1 */ - /* update predictor pole a[0] */ - state_ptr->a[0] -= state_ptr->a[0] >> 8; + /* update predictor pole a[ 0 ] */ + state_ptr->a[ 0 ] -= state_ptr->a[ 0 ] >> 8; if ( dqsez != 0 ) { if ( pks1 == 0 ) - state_ptr->a[0] += 192; + state_ptr->a[ 0 ] += 192; else - state_ptr->a[0] -= 192; + state_ptr->a[ 0 ] -= 192; } /* LIMD */ a1ul = 15360 - a2p; - if ( state_ptr->a[0] < -a1ul ) - state_ptr->a[0] = -a1ul; + if ( state_ptr->a[ 0 ] < -a1ul ) + state_ptr->a[ 0 ] = -a1ul; else - if ( state_ptr->a[0] > a1ul ) - state_ptr->a[0] = a1ul; + if ( state_ptr->a[ 0 ] > a1ul ) + state_ptr->a[ 0 ] = a1ul; - /* UPB : update predictor zeros b[6] */ + /* UPB : update predictor zeros b[ 6 ] */ _Pragma( "loopbound min 6 max 6" ) for ( cnt = 0; cnt < 6; cnt++ ) { if ( code_size == 5 ) /* for 40Kbps G.723 */ - state_ptr->b[cnt] -= state_ptr->b[cnt] >> 9; + state_ptr->b[ cnt ] -= state_ptr->b[ cnt ] >> 9; else /* for G.721 and 24Kbps G.723 */ - state_ptr->b[cnt] -= state_ptr->b[cnt] >> 8; + state_ptr->b[ cnt ] -= state_ptr->b[ cnt ] >> 8; if ( dq & 0x7FFF ) { /* XOR */ - if ( ( dq ^ state_ptr->dq[cnt] ) >= 0 ) - state_ptr->b[cnt] += 128; + if ( ( dq ^ state_ptr->dq[ cnt ] ) >= 0 ) + state_ptr->b[ cnt ] += 128; else - state_ptr->b[cnt] -= 128; + state_ptr->b[ cnt ] -= 128; } } @@ -564,37 +564,37 @@ g723_enc_update( _Pragma( "loopbound min 5 max 5" ) for ( cnt = 5; cnt > 0; cnt-- ) - state_ptr->dq[cnt] = state_ptr->dq[cnt - 1]; - /* FLOAT A : convert dq[0] to 4-bit exp, 6-bit mantissa f.p. */ + state_ptr->dq[ cnt ] = state_ptr->dq[ cnt - 1 ]; + /* FLOAT A : convert dq[ 0 ] to 4-bit exp, 6-bit mantissa f.p. */ if ( mag == 0 ) - state_ptr->dq[0] = ( dq >= 0 ) ? 0x20 : 0xFC20; + state_ptr->dq[ 0 ] = ( dq >= 0 ) ? 0x20 : 0xFC20; else { exp = g723_enc_quan( mag, g723_enc_power2, 15 ); - state_ptr->dq[0] = ( dq >= 0 ) ? + state_ptr->dq[ 0 ] = ( dq >= 0 ) ? ( exp << 6 ) + ( ( mag << 6 ) >> exp ) : ( exp << 6 ) + ( ( mag << 6 ) >> exp ) - 0x400; } - state_ptr->sr[1] = state_ptr->sr[0]; + state_ptr->sr[ 1 ] = state_ptr->sr[ 0 ]; /* FLOAT B : convert sr to 4-bit exp., 6-bit mantissa f.p. */ if ( sr == 0 ) - state_ptr->sr[0] = 0x20; + state_ptr->sr[ 0 ] = 0x20; else if ( sr > 0 ) { exp = g723_enc_quan( sr, g723_enc_power2, 15 ); - state_ptr->sr[0] = ( exp << 6 ) + ( ( sr << 6 ) >> exp ); + state_ptr->sr[ 0 ] = ( exp << 6 ) + ( ( sr << 6 ) >> exp ); } else if ( sr > -32768 ) { mag = -sr; exp = g723_enc_quan( mag, g723_enc_power2, 15 ); - state_ptr->sr[0] = ( exp << 6 ) + ( ( mag << 6 ) >> exp ) - 0x400; + state_ptr->sr[ 0 ] = ( exp << 6 ) + ( ( mag << 6 ) >> exp ) - 0x400; } else - state_ptr->sr[0] = 0xFC20; + state_ptr->sr[ 0 ] = 0xFC20; /* DELAY A */ - state_ptr->pk[1] = state_ptr->pk[0]; - state_ptr->pk[0] = pk0; + state_ptr->pk[ 1 ] = state_ptr->pk[ 0 ]; + state_ptr->pk[ 0 ] = pk0; /* TONE */ if ( tr == 1 ) /* this sample has been treated as data */ @@ -731,13 +731,15 @@ g723_enc_g723_24_encoder( /* quantize prediction difference d */ y = g723_enc_step_size( state_ptr ); /* quantizer step size */ i = g723_enc_quantize( d, y, g723_enc_qtab_723_24, 3 ); /* i = ADPCM code */ - dq = g723_enc_reconstruct( i & 4, g723_enc_dqlntab[i], y ); /* quantized diff. */ + dq = g723_enc_reconstruct( i & 4, g723_enc_dqlntab[ i ], + y ); /* quantized diff. */ sr = ( dq < 0 ) ? se - ( dq & 0x3FFF ) : se + dq; /* reconstructed signal */ dqsez = sr + sez - se; /* pole prediction diff. */ - g723_enc_update( 3, y, g723_enc_witab[i], g723_enc_fitab[i], dq, sr, dqsez, state_ptr ); + g723_enc_update( 3, y, g723_enc_witab[ i ], g723_enc_fitab[ i ], dq, sr, dqsez, + state_ptr ); return ( i ); } @@ -764,7 +766,7 @@ g723_enc_pack_output( out_buffer >>= 8; //fwrite(&out_byte, sizeof (char), 1, fp_out); //fwrite(&out_byte, 1, 1, fp_out); - g723_enc_OUTPUT[i] = out_byte; + g723_enc_OUTPUT[ i ] = out_byte; i = i + 1; } @@ -796,14 +798,14 @@ g723_enc_init_state( _Pragma( "loopbound min 2 max 2" ) for ( cnta = 0; cnta < 2; cnta++ ) { - state_ptr->a[cnta] = 0; - state_ptr->pk[cnta] = 0; - state_ptr->sr[cnta] = 32; + state_ptr->a[ cnta ] = 0; + state_ptr->pk[ cnta ] = 0; + state_ptr->sr[ cnta ] = 32; } _Pragma( "loopbound min 6 max 6" ) for ( cnta = 0; cnta < 6; cnta++ ) { - state_ptr->b[cnta] = 0; - state_ptr->dq[cnta] = 32; + state_ptr->b[ cnta ] = 0; + state_ptr->dq[ cnta ] = 32; } state_ptr->td = 0; } @@ -815,22 +817,20 @@ void g723_enc_init() volatile int x = 0; g723_enc_init_state( &g723_enc_state ); - _Pragma( "loopbound min 256 max 256" ) - for ( i = 0; i < 256; i++ ) { - g723_enc_INPUT[i] += x; - } + _Pragma( "loopbound min 256 max 256" ) + for ( i = 0; i < 256; i++ ) + g723_enc_INPUT[ i ] += x; } int g723_enc_return() -{ +{ int i; int check_sum = 0; - _Pragma( "loopbound min 256 max 256" ) - for ( i = 0; i < 256; i++ ) { - check_sum += g723_enc_OUTPUT[i]; - } + _Pragma( "loopbound min 256 max 256" ) + for ( i = 0; i < 256; i++ ) + check_sum += g723_enc_OUTPUT[ i ]; return ( check_sum != 24284 ); } @@ -856,7 +856,7 @@ void _Pragma( "entrypoint" ) g723_enc_main() _Pragma( "loopbound min 256 max 256" ) for ( i = 0; i < 256; i++ ) { - *in_buf = g723_enc_INPUT[i]; + *in_buf = g723_enc_INPUT[ i ]; code = g723_enc_g723_24_encoder( sample_short, in_coding, &g723_enc_state ); resid = g723_enc_pack_output( code, enc_bits ); } diff --git a/bench/sequential/g723_enc/license.txt b/bench/sequential/g723_enc/license.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/gsm_dec/COPYRIGHT b/bench/sequential/gsm_dec/COPYRIGHT old mode 100644 new mode 100755 diff --git a/bench/sequential/gsm_dec/ChangeLog.txt b/bench/sequential/gsm_dec/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/gsm_dec/add.h b/bench/sequential/gsm_dec/add.h old mode 100644 new mode 100755 diff --git a/bench/sequential/gsm_dec/data.h b/bench/sequential/gsm_dec/data.h old mode 100644 new mode 100755 index 81bf20d08acf0840a9e8d939ec4f6e925aa8efe5..b904b18ec8b0746e9dcd3d1c420b6d4b6220023b --- a/bench/sequential/gsm_dec/data.h +++ b/bench/sequential/gsm_dec/data.h @@ -1,7 +1,7 @@ #ifndef GSM_DEC_DATA_H #define GSM_DEC_DATA_H -gsm_signal gsm_dec_pcmdata[] = { +gsm_signal gsm_dec_pcmdata[ ] = { ( short )0x0000, ( short )0x0000, ( short )0x0010, ( short )0x0010, ( short )0x0010, ( short )0x0020, ( short )0x0020, ( short )0x0018, ( short )0x0028, ( short )0x0020, ( short )0x0020, ( short )0x0028, @@ -804,7 +804,7 @@ gsm_signal gsm_dec_pcmdata[] = { ( short )0x0068, ( short )0x00FE, ( short )0x00F8, ( short )0x00FD }; -gsm_byte gsm_dec_gsmdata[] = { +gsm_byte gsm_dec_gsmdata[ ] = { 0xD5, 0x1F, 0x74, 0x21, 0xA0, 0x50, 0x40, 0xC9, 0x24, 0x7B, 0xFA, 0x6B, 0x52, 0xE0, 0xB6, 0xD6, 0x8E, 0xB9, 0x2B, 0xAE, 0xE0, 0x8B, 0x23, 0x52, 0x3B, 0x13, 0x86, 0xE0, 0x14, 0x4A, 0x41, 0x44, 0x32, 0xD3, 0xA1, 0x83, diff --git a/bench/sequential/gsm_dec/gsm.h b/bench/sequential/gsm_dec/gsm.h old mode 100644 new mode 100755 index 1d895773723a47b04b612c1d59c00d1d6b5a6712..66694ecf01d1a4dc5973770901f0a5883bdc3f4d --- a/bench/sequential/gsm_dec/gsm.h +++ b/bench/sequential/gsm_dec/gsm.h @@ -7,7 +7,7 @@ typedef struct gsm_state *gsm; typedef short gsm_signal; /* signed 16 bit */ typedef unsigned char gsm_byte; -typedef gsm_byte gsm_frame[33]; /* 33 * 8 bits */ +typedef gsm_byte gsm_frame[ 33 ]; /* 33 * 8 bits */ #define GSM_MAGIC 0xD /* 13 kbit/s RPE-LTP */ diff --git a/bench/sequential/gsm_dec/gsm_dec.c b/bench/sequential/gsm_dec/gsm_dec.c old mode 100644 new mode 100755 index 93fbfad33dfa87c590cd64ad35e1114548c1da09..5c6cafd1a4fca913157534b962cbe6812ed0d35c --- a/bench/sequential/gsm_dec/gsm_dec.c +++ b/bench/sequential/gsm_dec/gsm_dec.c @@ -42,41 +42,41 @@ volatile int gsm_dec_result; extern word gsm_dec_sub( word a, word b ); extern word gsm_dec_asl( word a, int n ); void gsm_dec_Decoding_of_the_coded_Log_Area_Ratios( - word *LARc, /* coded log area ratio [0..7] IN */ + word *LARc, /* coded log area ratio [ 0..7 ] IN */ word *LARpp ); /* out: decoded .. */ void gsm_dec_Coefficients_0_12( word *LARpp_j_1, word *LARpp_j, word *LARp ); -void gsm_dec_LARp_to_rp( word *LARp ); /* [0..7] IN/OUT */ +void gsm_dec_LARp_to_rp( word *LARp ); /* [ 0..7 ] IN/OUT */ extern int gsm_dec_decode( gsm, gsm_byte *, gsm_signal * ); extern void gsm_dec_Decoder( struct gsm_state *S, - word *LARcr, /* [0..7] IN */ - word *Ncr, /* [0..3] IN */ - word *bcr, /* [0..3] IN */ - word *Mcr, /* [0..3] IN */ - word *xmaxcr, /* [0..3] IN */ - word *xMcr, /* [0..13*4] IN */ - word *s ); /* [0..159] OUT */ + word *LARcr, /* [ 0..7 ] IN */ + word *Ncr, /* [ 0..3 ] IN */ + word *bcr, /* [ 0..3 ] IN */ + word *Mcr, /* [ 0..3 ] IN */ + word *xmaxcr, /* [ 0..3 ] IN */ + word *xMcr, /* [ 0..13*4 ] IN */ + word *s ); /* [ 0..159 ] OUT */ extern void gsm_dec_Long_Term_Synthesis_Filtering( struct gsm_state *S, word Ncr, word bcr, - word *erp, /* [0..39] IN */ - word *drp ); /* [-120..-1] IN, [0..40] OUT */ + word *erp, /* [ 0..39 ] IN */ + word *drp ); /* [ -120..-1 ] IN, [ 0..40 ] OUT */ void gsm_dec_RPE_Decoding( word xmaxcr, word Mcr, - word *xMcr, /* [0..12], 3 bits IN */ - word *erp ); /* [0..39] OUT */ + word *xMcr, /* [ 0..12 ], 3 bits IN */ + word *erp ); /* [ 0..39 ] OUT */ void gsm_dec_RPE_grid_positioning( word Mc, /* grid position IN */ - word *xMp, /* [0..12] IN */ - word *ep /* [0..39] OUT */ + word *xMp, /* [ 0..12 ] IN */ + word *ep /* [ 0..39 ] OUT */ ); -void gsm_dec_APCM_inverse_quantization( word *xMc, /* [0..12] IN */ +void gsm_dec_APCM_inverse_quantization( word *xMc, /* [ 0..12 ] IN */ word mant, word exp, - word *xMp ); /* [0..12] OUT */ + word *xMp ); /* [ 0..12 ] OUT */ extern word gsm_dec_asr( word a, int n ); @@ -93,16 +93,16 @@ void gsm_dec_Coefficients_13_26( word *LARpp_j_1, word *LARpp_j, void gsm_dec_Coefficients_40_159( word *LARpp_j, word *LARp ); void gsm_dec_Short_term_synthesis_filtering( struct gsm_state *S, - word *rrp, /* [0..7] IN */ + word *rrp, /* [ 0..7 ] IN */ int k, /* k_end - k_start */ - word *wt, /* [0..k-1] IN */ - word *sr /* [0..k-1] OUT */ + word *wt, /* [ 0..k-1 ] IN */ + word *sr /* [ 0..k-1 ] OUT */ ); void gsm_dec_Short_Term_Synthesis_Filter( - struct gsm_state *S, word *LARcr, /* received log area ratios [0..7] IN */ - word *wt, /* received d [0..159] IN */ - word *s /* signal s [0..159] OUT */ + struct gsm_state *S, word *LARcr, /* received log area ratios [ 0..7 ] IN */ + word *wt, /* received d [ 0..159 ] IN */ + word *s /* signal s [ 0..159 ] OUT */ ); void gsm_dec_Coefficients_27_39( word *LARpp_j_1, word *LARpp_j, word *LARp ); @@ -139,7 +139,7 @@ word gsm_dec_asl( word a, int n ) /* 4.2.8 */ void gsm_dec_Decoding_of_the_coded_Log_Area_Ratios( - word *LARc, /* coded log area ratio [0..7] IN */ + word *LARc, /* coded log area ratio [ 0..7 ] IN */ word *LARpp ) /* out: decoded .. */ { word temp1 /* for STEP */; @@ -148,11 +148,11 @@ void gsm_dec_Decoding_of_the_coded_Log_Area_Ratios( /* This procedure requires for efficient implementation two tables. - INVA[1..8] = integer( (32768 * 8) / real_A[1..8]) - MIC[1..8] = minimum value of the LARc[1..8] + INVA[ 1..8 ] = integer( (32768 * 8) / real_A[ 1..8 ]) + MIC[ 1..8 ] = minimum value of the LARc[ 1..8 ] */ - /* Compute the LARpp[1..8] + /* Compute the LARpp[ 1..8 ] */ /* for (i = 1; i <= 8; i++, B++, MIC++, INVA++, LARc++, LARpp++) { @@ -191,7 +191,7 @@ void gsm_dec_Decoding_of_the_coded_Log_Area_Ratios( /* Computation of the quantized reflection coefficients */ -/* 4.2.9.1 Interpolation of the LARpp[1..8] to get the LARp[1..8] +/* 4.2.9.1 Interpolation of the LARpp[ 1..8 ] to get the LARp[ 1..8 ] */ /* @@ -200,7 +200,7 @@ void gsm_dec_Decoding_of_the_coded_Log_Area_Ratios( coefficients, derived from the previous set of decoded LARs(LARpp(j-1)) and the actual set of decoded LARs (LARpp(j)) - (Initial value: LARpp(j-1)[1..8] = 0.) + (Initial value: LARpp(j-1)[ 1..8 ] = 0.) */ @@ -218,10 +218,10 @@ void gsm_dec_Coefficients_0_12( word *LARpp_j_1, word *LARpp_j, word *LARp ) /* 4.2.9.2 */ -void gsm_dec_LARp_to_rp( word *LARp ) /* [0..7] IN/OUT */ +void gsm_dec_LARp_to_rp( word *LARp ) /* [ 0..7 ] IN/OUT */ /* - The input of this procedure is the interpolated LARp[0..7] array. - The reflection coefficients, rp[i], are used in the analysis + The input of this procedure is the interpolated LARp[ 0..7 ] array. + The reflection coefficients, rp[ i ], are used in the analysis filter and in the synthesis filter. */ { @@ -256,16 +256,16 @@ void gsm_dec_LARp_to_rp( word *LARp ) /* [0..7] IN/OUT */ } void gsm_dec_Decoder( struct gsm_state *S, - word *LARcr, /* [0..7] IN */ - word *Ncr, /* [0..3] IN */ - word *bcr, /* [0..3] IN */ - word *Mcr, /* [0..3] IN */ - word *xmaxcr, /* [0..3] IN */ - word *xMcr, /* [0..13*4] IN */ - word *s ) /* [0..159] OUT */ + word *LARcr, /* [ 0..7 ] IN */ + word *Ncr, /* [ 0..3 ] IN */ + word *bcr, /* [ 0..3 ] IN */ + word *Mcr, /* [ 0..3 ] IN */ + word *xmaxcr, /* [ 0..3 ] IN */ + word *xMcr, /* [ 0..13*4 ] IN */ + word *s ) /* [ 0..159 ] OUT */ { int j, k; - word erp[40], wt[160]; + word erp[ 40 ], wt[ 160 ]; word *drp = S->dp0 + 120; _Pragma( "loopbound min 4 max 4" ) @@ -276,7 +276,7 @@ void gsm_dec_Decoder( struct gsm_state *S, _Pragma( "loopbound min 40 max 40" ) for ( k = 0; k <= 39; k++ ) - wt[j * 40 + k] = drp[k]; + wt[ j * 40 + k ] = drp[ k ]; } gsm_dec_Short_Term_Synthesis_Filter( S, LARcr, wt, s ); @@ -286,8 +286,8 @@ void gsm_dec_Decoder( struct gsm_state *S, /* 4.3.2 */ void gsm_dec_Long_Term_Synthesis_Filtering( struct gsm_state *S, - word Ncr, word bcr, word *erp, /* [0..39] IN */ - word *drp /* [-120..-1] IN, [0..40] OUT */ + word Ncr, word bcr, word *erp, /* [ 0..39 ] IN */ + word *drp /* [ -120..-1 ] IN, [ 0..40 ] OUT */ ) /* This procedure uses the bcr and Ncr parameter to realize the @@ -306,34 +306,34 @@ void gsm_dec_Long_Term_Synthesis_Filtering( /* Decoding of the LTP gain bcr */ - brp = gsm_dec_QLB[bcr]; + brp = gsm_dec_QLB[ bcr ]; /* Computation of the reconstructed short term residual - signal drp[0..39] + signal drp[ 0..39 ] */ _Pragma( "loopbound min 40 max 40" ) for ( k = 0; k <= 39; k++ ) { - drpp = GSM_MULT_R( brp, drp[k - Nr] ); - drp[k] = GSM_ADD( erp[k], drpp ); + drpp = GSM_MULT_R( brp, drp[ k - Nr ] ); + drp[ k ] = GSM_ADD( erp[ k ], drpp ); } /* Update of the reconstructed short term residual signal - drp[ -1..-120 ] + drp[ -1..-120 ] */ _Pragma( "loopbound min 120 max 120" ) for ( k = 0; k <= 119; k++ ) - drp[-120 + k] = drp[-80 + k]; + drp[ -120 + k ] = drp[ -80 + k ]; } void gsm_dec_RPE_Decoding( word xmaxcr, word Mcr, - word *xMcr, /* [0..12], 3 bits IN */ - word *erp ) /* [0..39] OUT */ + word *xMcr, /* [ 0..12 ], 3 bits IN */ + word *erp ) /* [ 0..39 ] OUT */ { word exp, mant; - word xMp[13]; + word xMp[ 13 ]; gsm_dec_APCM_quantization_xmaxc_to_exp_mant( xmaxcr, &exp, &mant ); gsm_dec_APCM_inverse_quantization( xMcr, mant, exp, xMp ); @@ -343,12 +343,12 @@ void gsm_dec_RPE_Decoding( word xmaxcr, word Mcr, /* 4.2.17 */ void gsm_dec_RPE_grid_positioning( word Mc, /* grid position IN */ - word *xMp, /* [0..12] IN */ - word *ep /* [0..39] OUT */ ) + word *xMp, /* [ 0..12 ] IN */ + word *ep /* [ 0..39 ] OUT */ ) /* This procedure computes the reconstructed long term residual signal - ep[0..39] for the LTP analysis filter. The inputs are the Mc - which is the grid position selection and the xMp[0..12] decoded + ep[ 0..39 ] for the LTP analysis filter. The inputs are the Mc + which is the grid position selection and the xMp[ 0..12 ] decoded RPE samples which are upsampled by a factor of 3 by inserting zero values. */ @@ -375,28 +375,28 @@ void gsm_dec_RPE_grid_positioning( *ep++ = *xMp++; } while ( --i ); - _Pragma( "loopbound min 0 max 2" ) + _Pragma( "loopbound min 0 max 3" ) while ( ++Mc < 4 ) - *ep++ = 0; + *ep++ = 0; } /* 4.2.16 */ -void gsm_dec_APCM_inverse_quantization( word *xMc, /* [0..12] IN */ +void gsm_dec_APCM_inverse_quantization( word *xMc, /* [ 0..12 ] IN */ word mant, word exp, - word *xMp ) /* [0..12] OUT */ + word *xMp ) /* [ 0..12 ] OUT */ /* - This part is for decoding the RPE sequence of coded xMc[0..12] - samples to obtain the xMp[0..12] array. Table 4.6 is used to get - the mantissa of xmaxc (FAC[0..7]). + This part is for decoding the RPE sequence of coded xMc[ 0..12 ] + samples to obtain the xMp[ 0..12 ] array. Table 4.6 is used to get + the mantissa of xmaxc (FAC[ 0..7 ]). */ { int i; word temp, temp1, temp2, temp3; longword ltmp; - temp1 = gsm_dec_FAC[mant]; /* see 4.2-15 for mant */ + temp1 = gsm_dec_FAC[ mant ]; /* see 4.2-15 for mant */ temp2 = gsm_dec_sub( 6, exp ); /* see 4.2-15 for exp */ temp3 = gsm_dec_asl( 1, gsm_dec_sub( temp2, 1 ) ); @@ -431,8 +431,8 @@ word gsm_dec_asr( word a, int n ) /* rpe.c */ /* 4.12.15 */ void gsm_dec_APCM_quantization_xmaxc_to_exp_mant( word xmaxc, /* IN */ - word *exp_out, /* OUT */ - word *mant_out ) /* OUT */ + word *exp_out, /* OUT */ + word *mant_out ) /* OUT */ { word exp, mant; @@ -498,26 +498,26 @@ void gsm_dec_Coefficients_40_159( word *LARpp_j, word *LARp ) } void gsm_dec_Short_term_synthesis_filtering( struct gsm_state *S, - word *rrp, /* [0..7] IN */ - int k, /* k_end - k_start */ - word *wt, /* [0..k-1] IN */ - word *sr ) /* [0..k-1] OUT */ + word *rrp, /* [ 0..7 ] IN */ + int k, /* k_end - k_start */ + word *wt, /* [ 0..k-1 ] IN */ + word *sr ) /* [ 0..k-1 ] OUT */ { word *v = S->v; int i; word sri, tmp1, tmp2; longword ltmp; /* for GSM_ADD & GSM_SUB */ - _Pragma( "loopbound min 12 max 118" ) + _Pragma( "loopbound min 12 max 119" ) while ( --k ) { sri = *wt++; _Pragma( "loopbound min 8 max 8" ) for ( i = 8; i--; ) { - /* sri = GSM_SUB( sri, gsm_mult_r( rrp[i], v[i] ) ); + /* sri = GSM_SUB( sri, gsm_mult_r( rrp[ i ], v[ i ] ) ); */ - tmp1 = rrp[i]; - tmp2 = v[i]; + tmp1 = rrp[ i ]; + tmp2 = v[ i ]; tmp2 = ( tmp1 == MIN_WORD && tmp2 == MIN_WORD ? MAX_WORD @@ -525,29 +525,29 @@ void gsm_dec_Short_term_synthesis_filtering( struct gsm_state *S, sri = GSM_SUB( sri, tmp2 ); - /* v[i+1] = GSM_ADD( v[i], gsm_mult_r( rrp[i], sri ) ); + /* v[ i+1 ] = GSM_ADD( v[ i ], gsm_mult_r( rrp[ i ], sri ) ); */ tmp1 = ( tmp1 == MIN_WORD && sri == MIN_WORD ? MAX_WORD : 0x0FFFF & ( ( ( longword )tmp1 * ( longword )sri + 16384 ) >> 15 ) ); - v[i + 1] = GSM_ADD( v[i], tmp1 ); + v[ i + 1 ] = GSM_ADD( v[ i ], tmp1 ); } - *sr++ = v[0] = sri; + *sr++ = v[ 0 ] = sri; } } void gsm_dec_Short_Term_Synthesis_Filter( struct gsm_state *S, - word *LARcr, /* received log area ratios [0..7] IN */ - word *wt, /* received d [0..159] IN */ - word *s /* signal s [0..159] OUT */ + word *LARcr, /* received log area ratios [ 0..7 ] IN */ + word *wt, /* received d [ 0..159 ] IN */ + word *s /* signal s [ 0..159 ] OUT */ ) { - word *LARpp_j = S->LARpp[S->j]; - word *LARpp_j_1 = S->LARpp[S->j ^= 1]; + word *LARpp_j = S->LARpp[ S->j ]; + word *LARpp_j_1 = S->LARpp[ S->j ^= 1 ]; - word LARp[8]; + word LARp[ 8 ]; gsm_dec_Decoding_of_the_coded_Log_Area_Ratios( LARcr, LARpp_j ); @@ -594,7 +594,7 @@ gsm gsm_dec_create( void ) _Pragma( "loopbound min 648 max 648" ) for ( i = 0; i < sizeof( *r ); i++ ) - ( ( char * )r )[i] = 0 + x; + ( ( char * )r )[ i ] = 0 + x; r->nrp = 40; @@ -618,112 +618,112 @@ int gsm_dec_return( void ) /* gsm_decode.c */ int gsm_dec_decode( gsm s, gsm_byte *c, gsm_signal *target ) { - word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13 * 4]; + word LARc[ 8 ], Nc[ 4 ], Mc[ 4 ], bc[ 4 ], xmaxc[ 4 ], xmc[ 13 * 4 ]; /* GSM_MAGIC = (*c >> 4) & 0xF; */ if ( ( ( *c >> 4 ) & 0x0F ) != GSM_MAGIC ) return -1; - LARc[0] = ( *c++ & 0xF ) << 2; /* 1 */ - LARc[0] |= ( *c >> 6 ) & 0x3; - LARc[1] = *c++ & 0x3F; - LARc[2] = ( *c >> 3 ) & 0x1F; - LARc[3] = ( *c++ & 0x7 ) << 2; - LARc[3] |= ( *c >> 6 ) & 0x3; - LARc[4] = ( *c >> 2 ) & 0xF; - LARc[5] = ( *c++ & 0x3 ) << 2; - LARc[5] |= ( *c >> 6 ) & 0x3; - LARc[6] = ( *c >> 3 ) & 0x7; - LARc[7] = *c++ & 0x7; - Nc[0] = ( *c >> 1 ) & 0x7F; - bc[0] = ( *c++ & 0x1 ) << 1; - bc[0] |= ( *c >> 7 ) & 0x1; - Mc[0] = ( *c >> 5 ) & 0x3; - xmaxc[0] = ( *c++ & 0x1F ) << 1; - xmaxc[0] |= ( *c >> 7 ) & 0x1; - xmc[0] = ( *c >> 4 ) & 0x7; - xmc[1] = ( *c >> 1 ) & 0x7; - xmc[2] = ( *c++ & 0x1 ) << 2; - xmc[2] |= ( *c >> 6 ) & 0x3; - xmc[3] = ( *c >> 3 ) & 0x7; - xmc[4] = *c++ & 0x7; - xmc[5] = ( *c >> 5 ) & 0x7; - xmc[6] = ( *c >> 2 ) & 0x7; - xmc[7] = ( *c++ & 0x3 ) << 1; /* 10 */ - xmc[7] |= ( *c >> 7 ) & 0x1; - xmc[8] = ( *c >> 4 ) & 0x7; - xmc[9] = ( *c >> 1 ) & 0x7; - xmc[10] = ( *c++ & 0x1 ) << 2; - xmc[10] |= ( *c >> 6 ) & 0x3; - xmc[11] = ( *c >> 3 ) & 0x7; - xmc[12] = *c++ & 0x7; - Nc[1] = ( *c >> 1 ) & 0x7F; - bc[1] = ( *c++ & 0x1 ) << 1; - bc[1] |= ( *c >> 7 ) & 0x1; - Mc[1] = ( *c >> 5 ) & 0x3; - xmaxc[1] = ( *c++ & 0x1F ) << 1; - xmaxc[1] |= ( *c >> 7 ) & 0x1; - xmc[13] = ( *c >> 4 ) & 0x7; - xmc[14] = ( *c >> 1 ) & 0x7; - xmc[15] = ( *c++ & 0x1 ) << 2; - xmc[15] |= ( *c >> 6 ) & 0x3; - xmc[16] = ( *c >> 3 ) & 0x7; - xmc[17] = *c++ & 0x7; - xmc[18] = ( *c >> 5 ) & 0x7; - xmc[19] = ( *c >> 2 ) & 0x7; - xmc[20] = ( *c++ & 0x3 ) << 1; - xmc[20] |= ( *c >> 7 ) & 0x1; - xmc[21] = ( *c >> 4 ) & 0x7; - xmc[22] = ( *c >> 1 ) & 0x7; - xmc[23] = ( *c++ & 0x1 ) << 2; - xmc[23] |= ( *c >> 6 ) & 0x3; - xmc[24] = ( *c >> 3 ) & 0x7; - xmc[25] = *c++ & 0x7; - Nc[2] = ( *c >> 1 ) & 0x7F; - bc[2] = ( *c++ & 0x1 ) << 1; /* 20 */ - bc[2] |= ( *c >> 7 ) & 0x1; - Mc[2] = ( *c >> 5 ) & 0x3; - xmaxc[2] = ( *c++ & 0x1F ) << 1; - xmaxc[2] |= ( *c >> 7 ) & 0x1; - xmc[26] = ( *c >> 4 ) & 0x7; - xmc[27] = ( *c >> 1 ) & 0x7; - xmc[28] = ( *c++ & 0x1 ) << 2; - xmc[28] |= ( *c >> 6 ) & 0x3; - xmc[29] = ( *c >> 3 ) & 0x7; - xmc[30] = *c++ & 0x7; - xmc[31] = ( *c >> 5 ) & 0x7; - xmc[32] = ( *c >> 2 ) & 0x7; - xmc[33] = ( *c++ & 0x3 ) << 1; - xmc[33] |= ( *c >> 7 ) & 0x1; - xmc[34] = ( *c >> 4 ) & 0x7; - xmc[35] = ( *c >> 1 ) & 0x7; - xmc[36] = ( *c++ & 0x1 ) << 2; - xmc[36] |= ( *c >> 6 ) & 0x3; - xmc[37] = ( *c >> 3 ) & 0x7; - xmc[38] = *c++ & 0x7; - Nc[3] = ( *c >> 1 ) & 0x7F; - bc[3] = ( *c++ & 0x1 ) << 1; - bc[3] |= ( *c >> 7 ) & 0x1; - Mc[3] = ( *c >> 5 ) & 0x3; - xmaxc[3] = ( *c++ & 0x1F ) << 1; - xmaxc[3] |= ( *c >> 7 ) & 0x1; - xmc[39] = ( *c >> 4 ) & 0x7; - xmc[40] = ( *c >> 1 ) & 0x7; - xmc[41] = ( *c++ & 0x1 ) << 2; - xmc[41] |= ( *c >> 6 ) & 0x3; - xmc[42] = ( *c >> 3 ) & 0x7; - xmc[43] = *c++ & 0x7; /* 30 */ - xmc[44] = ( *c >> 5 ) & 0x7; - xmc[45] = ( *c >> 2 ) & 0x7; - xmc[46] = ( *c++ & 0x3 ) << 1; - xmc[46] |= ( *c >> 7 ) & 0x1; - xmc[47] = ( *c >> 4 ) & 0x7; - xmc[48] = ( *c >> 1 ) & 0x7; - xmc[49] = ( *c++ & 0x1 ) << 2; - xmc[49] |= ( *c >> 6 ) & 0x3; - xmc[50] = ( *c >> 3 ) & 0x7; - xmc[51] = *c & 0x7; /* 33 */ + LARc[ 0 ] = ( *c++ & 0xF ) << 2; /* 1 */ + LARc[ 0 ] |= ( *c >> 6 ) & 0x3; + LARc[ 1 ] = *c++ & 0x3F; + LARc[ 2 ] = ( *c >> 3 ) & 0x1F; + LARc[ 3 ] = ( *c++ & 0x7 ) << 2; + LARc[ 3 ] |= ( *c >> 6 ) & 0x3; + LARc[ 4 ] = ( *c >> 2 ) & 0xF; + LARc[ 5 ] = ( *c++ & 0x3 ) << 2; + LARc[ 5 ] |= ( *c >> 6 ) & 0x3; + LARc[ 6 ] = ( *c >> 3 ) & 0x7; + LARc[ 7 ] = *c++ & 0x7; + Nc[ 0 ] = ( *c >> 1 ) & 0x7F; + bc[ 0 ] = ( *c++ & 0x1 ) << 1; + bc[ 0 ] |= ( *c >> 7 ) & 0x1; + Mc[ 0 ] = ( *c >> 5 ) & 0x3; + xmaxc[ 0 ] = ( *c++ & 0x1F ) << 1; + xmaxc[ 0 ] |= ( *c >> 7 ) & 0x1; + xmc[ 0 ] = ( *c >> 4 ) & 0x7; + xmc[ 1 ] = ( *c >> 1 ) & 0x7; + xmc[ 2 ] = ( *c++ & 0x1 ) << 2; + xmc[ 2 ] |= ( *c >> 6 ) & 0x3; + xmc[ 3 ] = ( *c >> 3 ) & 0x7; + xmc[ 4 ] = *c++ & 0x7; + xmc[ 5 ] = ( *c >> 5 ) & 0x7; + xmc[ 6 ] = ( *c >> 2 ) & 0x7; + xmc[ 7 ] = ( *c++ & 0x3 ) << 1; /* 10 */ + xmc[ 7 ] |= ( *c >> 7 ) & 0x1; + xmc[ 8 ] = ( *c >> 4 ) & 0x7; + xmc[ 9 ] = ( *c >> 1 ) & 0x7; + xmc[ 10 ] = ( *c++ & 0x1 ) << 2; + xmc[ 10 ] |= ( *c >> 6 ) & 0x3; + xmc[ 11 ] = ( *c >> 3 ) & 0x7; + xmc[ 12 ] = *c++ & 0x7; + Nc[ 1 ] = ( *c >> 1 ) & 0x7F; + bc[ 1 ] = ( *c++ & 0x1 ) << 1; + bc[ 1 ] |= ( *c >> 7 ) & 0x1; + Mc[ 1 ] = ( *c >> 5 ) & 0x3; + xmaxc[ 1 ] = ( *c++ & 0x1F ) << 1; + xmaxc[ 1 ] |= ( *c >> 7 ) & 0x1; + xmc[ 13 ] = ( *c >> 4 ) & 0x7; + xmc[ 14 ] = ( *c >> 1 ) & 0x7; + xmc[ 15 ] = ( *c++ & 0x1 ) << 2; + xmc[ 15 ] |= ( *c >> 6 ) & 0x3; + xmc[ 16 ] = ( *c >> 3 ) & 0x7; + xmc[ 17 ] = *c++ & 0x7; + xmc[ 18 ] = ( *c >> 5 ) & 0x7; + xmc[ 19 ] = ( *c >> 2 ) & 0x7; + xmc[ 20 ] = ( *c++ & 0x3 ) << 1; + xmc[ 20 ] |= ( *c >> 7 ) & 0x1; + xmc[ 21 ] = ( *c >> 4 ) & 0x7; + xmc[ 22 ] = ( *c >> 1 ) & 0x7; + xmc[ 23 ] = ( *c++ & 0x1 ) << 2; + xmc[ 23 ] |= ( *c >> 6 ) & 0x3; + xmc[ 24 ] = ( *c >> 3 ) & 0x7; + xmc[ 25 ] = *c++ & 0x7; + Nc[ 2 ] = ( *c >> 1 ) & 0x7F; + bc[ 2 ] = ( *c++ & 0x1 ) << 1; /* 20 */ + bc[ 2 ] |= ( *c >> 7 ) & 0x1; + Mc[ 2 ] = ( *c >> 5 ) & 0x3; + xmaxc[ 2 ] = ( *c++ & 0x1F ) << 1; + xmaxc[ 2 ] |= ( *c >> 7 ) & 0x1; + xmc[ 26 ] = ( *c >> 4 ) & 0x7; + xmc[ 27 ] = ( *c >> 1 ) & 0x7; + xmc[ 28 ] = ( *c++ & 0x1 ) << 2; + xmc[ 28 ] |= ( *c >> 6 ) & 0x3; + xmc[ 29 ] = ( *c >> 3 ) & 0x7; + xmc[ 30 ] = *c++ & 0x7; + xmc[ 31 ] = ( *c >> 5 ) & 0x7; + xmc[ 32 ] = ( *c >> 2 ) & 0x7; + xmc[ 33 ] = ( *c++ & 0x3 ) << 1; + xmc[ 33 ] |= ( *c >> 7 ) & 0x1; + xmc[ 34 ] = ( *c >> 4 ) & 0x7; + xmc[ 35 ] = ( *c >> 1 ) & 0x7; + xmc[ 36 ] = ( *c++ & 0x1 ) << 2; + xmc[ 36 ] |= ( *c >> 6 ) & 0x3; + xmc[ 37 ] = ( *c >> 3 ) & 0x7; + xmc[ 38 ] = *c++ & 0x7; + Nc[ 3 ] = ( *c >> 1 ) & 0x7F; + bc[ 3 ] = ( *c++ & 0x1 ) << 1; + bc[ 3 ] |= ( *c >> 7 ) & 0x1; + Mc[ 3 ] = ( *c >> 5 ) & 0x3; + xmaxc[ 3 ] = ( *c++ & 0x1F ) << 1; + xmaxc[ 3 ] |= ( *c >> 7 ) & 0x1; + xmc[ 39 ] = ( *c >> 4 ) & 0x7; + xmc[ 40 ] = ( *c >> 1 ) & 0x7; + xmc[ 41 ] = ( *c++ & 0x1 ) << 2; + xmc[ 41 ] |= ( *c >> 6 ) & 0x3; + xmc[ 42 ] = ( *c >> 3 ) & 0x7; + xmc[ 43 ] = *c++ & 0x7; /* 30 */ + xmc[ 44 ] = ( *c >> 5 ) & 0x7; + xmc[ 45 ] = ( *c >> 2 ) & 0x7; + xmc[ 46 ] = ( *c++ & 0x3 ) << 1; + xmc[ 46 ] |= ( *c >> 7 ) & 0x1; + xmc[ 47 ] = ( *c >> 4 ) & 0x7; + xmc[ 48 ] = ( *c >> 1 ) & 0x7; + xmc[ 49 ] = ( *c++ & 0x1 ) << 2; + xmc[ 49 ] |= ( *c >> 6 ) & 0x3; + xmc[ 50 ] = ( *c >> 3 ) & 0x7; + xmc[ 51 ] = *c & 0x7; /* 33 */ gsm_dec_Decoder( s, LARc, Nc, bc, Mc, xmaxc, xmc, target ); @@ -738,7 +738,7 @@ void _Pragma( "entrypoint" ) gsm_dec_main( void ) r = gsm_dec_state_ptr; - _Pragma( "loopbound min 1 max 1" ) + _Pragma( "loopbound min 20 max 20" ) for ( i = 0; i < SAMPLES; i++ ) { if ( gsm_dec_decode( r, gsm_dec_gsmdata + i * sizeof( gsm_frame ), gsm_dec_pcmdata + i * 160 ) ) { diff --git a/bench/sequential/gsm_dec/private.h b/bench/sequential/gsm_dec/private.h old mode 100644 new mode 100755 index 80b5c832ffd76def80b7d0f33c617c59d84cee48..b51f11cfd921576f2d6ddf4db54b95e0fe0feba2 --- a/bench/sequential/gsm_dec/private.h +++ b/bench/sequential/gsm_dec/private.h @@ -10,19 +10,20 @@ typedef unsigned long ulongword; /* unsigned longword */ /* Table 4.6 Normalized direct mantissa used to compute xM/xmax */ /* i 0 1 2 3 4 5 6 7 */ -word gsm_dec_FAC[8] = { - 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767 }; +word gsm_dec_FAC[ 8 ] = { + 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767 +}; struct gsm_state { - word dp0[ 280 ]; + word dp0[ 280 ]; word z1; /* preprocessing.c, Offset_com. */ longword L_z2; /* Offset_com. */ int mp; /* Preemphasis */ - word u[8]; /* short_term_aly_filter.c */ - word LARpp[2][8]; /* */ + word u[ 8 ]; /* short_term_aly_filter.c */ + word LARpp[ 2 ][ 8 ]; /* */ word j; /* */ word nrp; /* 40 */ /* long_term.c, synthesis */ - word v[9]; /* short_term.c, synthesis */ + word v[ 9 ]; /* short_term.c, synthesis */ word msr; /* decoder.c, Postprocessing */ }; @@ -39,6 +40,6 @@ struct gsm_state { /* Table 4.3b Quantization levels of the LTP gain quantizer */ /* bc 0 1 2 3 */ -word gsm_dec_QLB[4] = { 3277, 11469, 21299, 32767 }; +word gsm_dec_QLB[ 4 ] = { 3277, 11469, 21299, 32767 }; #endif /* GSM_DEC_PRIVATE_H */ diff --git a/bench/sequential/gsm_enc/COPYRIGHT b/bench/sequential/gsm_enc/COPYRIGHT old mode 100644 new mode 100755 diff --git a/bench/sequential/gsm_enc/ChangeLog.txt b/bench/sequential/gsm_enc/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/gsm_enc/data.h b/bench/sequential/gsm_enc/data.h old mode 100644 new mode 100755 index e65633533da3b42f9275c54355c6c563d6e41a26..2b954a8f7e05f61aca3de6a54ce6ab12736f27a1 --- a/bench/sequential/gsm_enc/data.h +++ b/bench/sequential/gsm_enc/data.h @@ -1,410 +1,410 @@ #ifndef DATA_H #define DATA_H -gsm_signal gsm_enc_pcmdata[] = { - (short)0x0000, (short)0x0000, (short)0x0010, (short)0x0010, (short)0x0010, (short)0x0020, (short)0x0020, (short)0x0018, - (short)0x0028, (short)0x0020, (short)0x0020, (short)0x0028, (short)0x0028, (short)0x0020, (short)0x0030, (short)0x0030, - (short)0x0028, (short)0x0010, (short)0x0008, (short)0x0000, (short)0x0050, (short)0x0060, (short)0x0058, (short)0x00D0, - (short)0x00E0, (short)0x00D0, (short)0x0118, (short)0x0128, (short)0x0118, (short)0x0128, (short)0x0110, (short)0x0100, - (short)0x00A0, (short)0x0058, (short)0x0048, (short)0x0058, (short)0x0060, (short)0x0058, (short)0x0050, (short)0x0048, - (short)0x0040, (short)0x0030, (short)0x0020, (short)0x0010, (short)0x0008, (short)0xFFF8, (short)0xFFE8, (short)0xFFE0, - (short)0xFFD8, (short)0xFFC8, (short)0xFFC0, (short)0xFFC0, (short)0xFF98, (short)0xFF78, (short)0xFF78, (short)0xFFC8, - (short)0x0000, (short)0x0010, (short)0x0040, (short)0x0060, (short)0x0068, (short)0x0078, (short)0x0078, (short)0x0070, - (short)0x00A8, (short)0x00C8, (short)0x00C8, (short)0x00E0, (short)0x00F0, (short)0x00E8, (short)0x00F8, (short)0x00F8, - (short)0x00F0, (short)0x00E0, (short)0x00C8, (short)0x00B8, (short)0x00E8, (short)0x0100, (short)0x00F8, (short)0x00E8, - (short)0x00D8, (short)0x00C0, (short)0x00A8, (short)0x0020, (short)0xFFC0, (short)0xFFA0, (short)0xFFA0, (short)0xFFA8, - (short)0xFFB0, (short)0xFFD0, (short)0xFFF8, (short)0x0000, (short)0x0020, (short)0x0030, (short)0x0030, (short)0x0030, - (short)0x0028, (short)0x0020, (short)0xFFF0, (short)0xFFD0, (short)0xFFC8, (short)0xFFC8, (short)0xFFD0, (short)0xFFD8, - (short)0xFFE8, (short)0xFFF8, (short)0xFFF8, (short)0x0008, (short)0x0018, (short)0x0018, (short)0x0078, (short)0x00B8, - (short)0x00C0, (short)0x0100, (short)0x0130, (short)0x0128, (short)0x0108, (short)0x00D8, (short)0x00C0, (short)0x0078, - (short)0x0038, (short)0x0020, (short)0x0020, (short)0x0000, (short)0xFFE0, (short)0xFFE0, (short)0xFFD8, (short)0xFFC8, - (short)0xFFC8, (short)0xFFA0, (short)0xFF88, (short)0xFF98, (short)0xFF80, (short)0xFF70, (short)0xFF80, (short)0xFF78, - (short)0xFF78, (short)0xFF90, (short)0xFF80, (short)0xFF78, (short)0xFF78, (short)0xFF50, (short)0xFF30, (short)0xFF50, - (short)0xFF38, (short)0xFF30, (short)0xFF40, (short)0xFF58, (short)0xFF70, (short)0xFF80, (short)0xFF50, (short)0xFF38, - (short)0xFF40, (short)0xFF18, (short)0xFF00, (short)0xFF08, (short)0xFF40, (short)0xFF68, (short)0xFF80, (short)0xFF88, - (short)0xFF88, (short)0xFF88, (short)0xFF88, (short)0xFFB8, (short)0xFFE0, (short)0xFFF0, (short)0xFFD0, (short)0xFFB8, - (short)0xFFB8, (short)0xFF90, (short)0xFF70, (short)0xFF70, (short)0xFF50, (short)0xFF40, (short)0xFF40, (short)0xFF58, - (short)0xFF70, (short)0xFF80, (short)0xFFC8, (short)0x0000, (short)0x0018, (short)0x0030, (short)0x0048, (short)0x0048, - (short)0x0028, (short)0x0008, (short)0xFFF8, (short)0xFFD8, (short)0xFFC8, (short)0xFFB8, (short)0xFF98, (short)0xFF78, - (short)0xFF70, (short)0xFFF0, (short)0x0058, (short)0x0088, (short)0x00B8, (short)0x00D0, (short)0x00D8, (short)0x00E8, - (short)0x0138, (short)0x0160, (short)0x0158, (short)0x0170, (short)0x0178, (short)0x0160, (short)0x0168, (short)0x0160, - (short)0x0140, (short)0x0118, (short)0x00F0, (short)0x00C8, (short)0x0098, (short)0x0078, (short)0x0060, (short)0x0018, - (short)0xFFC0, (short)0xFF90, (short)0xFF48, (short)0xFF00, (short)0xFEE8, (short)0xFEC8, (short)0xFEB8, (short)0xFEB8, - (short)0xFEA0, (short)0xFE88, (short)0xFE80, (short)0xFEB8, (short)0xFEF8, (short)0xFF38, (short)0xFFA0, (short)0xFFE8, - (short)0x0008, (short)0x0030, (short)0x0058, (short)0x0068, (short)0x0068, (short)0x0070, (short)0x0068, (short)0x0050, - (short)0x0040, (short)0x0040, (short)0x0020, (short)0x0000, (short)0xFFE8, (short)0xFFF0, (short)0xFFF8, (short)0xFFF8, - (short)0x0038, (short)0x0068, (short)0x0078, (short)0x0038, (short)0x0008, (short)0xFFF0, (short)0xFFE0, (short)0xFFD8, - (short)0xFFD8, (short)0xFFE0, (short)0xFFD0, (short)0xFFC8, (short)0x0000, (short)0x0030, (short)0x0048, (short)0x0068, - (short)0x0080, (short)0x0088, (short)0x0088, (short)0x0088, (short)0x0088, (short)0x0088, (short)0x0088, (short)0x0078, - (short)0x0098, (short)0x00B0, (short)0x00B8, (short)0x0098, (short)0x0070, (short)0x0058, (short)0x0060, (short)0x0078, - (short)0x00A8, (short)0x00B8, (short)0x00A8, (short)0x00A0, (short)0x0080, (short)0x0068, (short)0x0060, (short)0x0058, - (short)0x0048, (short)0x0030, (short)0x0038, (short)0x0038, (short)0x0030, (short)0x0050, (short)0x0058, (short)0x0060, - (short)0x0030, (short)0x0008, (short)0xFFF8, (short)0xFF90, (short)0xFF48, (short)0xFF28, (short)0xFF10, (short)0xFEF8, - (short)0xFEF0, (short)0xFED8, (short)0xFEB0, (short)0xFEB0, (short)0xFEA8, (short)0xFEB8, (short)0xFED8, (short)0xFEF8, - (short)0xFF10, (short)0xFF20, (short)0xFF40, (short)0xFF58, (short)0xFF80, (short)0xFFA0, (short)0xFFB8, (short)0xFFC8, - (short)0xFFD8, (short)0xFFE0, (short)0xFFF0, (short)0x0048, (short)0x0098, (short)0x00B0, (short)0x0068, (short)0x0018, - (short)0xFFF8, (short)0xFFE8, (short)0xFFF0, (short)0xFFF8, (short)0x0020, (short)0x0038, (short)0x0038, (short)0x0050, - (short)0x0068, (short)0x0070, (short)0x0068, (short)0x0060, (short)0x0060, (short)0x0038, (short)0x0020, (short)0x0018, - (short)0x0040, (short)0x0060, (short)0x0068, (short)0x0040, (short)0x0010, (short)0x0000, (short)0xFFB0, (short)0xFF78, - (short)0xFF70, (short)0xFF90, (short)0xFFA8, (short)0xFFC8, (short)0xFF98, (short)0xFF50, (short)0xFF50, (short)0xFF50, - (short)0xFF58, (short)0xFF68, (short)0xFF48, (short)0xFF20, (short)0xFF18, (short)0xFF38, (short)0xFF60, (short)0xFF70, - (short)0xFF80, (short)0xFF98, (short)0xFFA0, (short)0xFFB8, (short)0xFFD0, (short)0xFFE0, (short)0x0018, (short)0x0048, - (short)0x0058, (short)0x00B0, (short)0x00F8, (short)0x0108, (short)0x0118, (short)0x0120, (short)0x0118, (short)0x0130, - (short)0x0148, (short)0x0140, (short)0x0130, (short)0x0120, (short)0x0108, (short)0x0098, (short)0x0038, (short)0x0018, - (short)0xFFD0, (short)0xFF90, (short)0xFF80, (short)0xFF58, (short)0xFF38, (short)0xFF30, (short)0xFF48, (short)0xFF68, - (short)0xFF78, (short)0xFF88, (short)0xFFB8, (short)0xFFD8, (short)0xFFE8, (short)0xFFD8, (short)0xFFF0, (short)0x0010, - (short)0x0020, (short)0x0020, (short)0x0018, (short)0x0028, (short)0x0030, (short)0x0030, (short)0x0038, (short)0x0060, - (short)0x0080, (short)0x0080, (short)0x00B0, (short)0x00D8, (short)0x00D0, (short)0x00B8, (short)0x00A8, (short)0x00A8, - (short)0x00A0, (short)0x0090, (short)0x0078, (short)0x0070, (short)0x0068, (short)0x0048, (short)0x0018, (short)0x0008, - (short)0x0008, (short)0x0000, (short)0x0000, (short)0xFFE8, (short)0xFFB0, (short)0xFF90, (short)0xFF88, (short)0xFF70, - (short)0xFF60, (short)0xFF60, (short)0xFF90, (short)0xFFC0, (short)0xFFD0, (short)0xFFD8, (short)0xFFE0, (short)0xFFE8, - (short)0x0018, (short)0x0050, (short)0x0058, (short)0x0030, (short)0x0008, (short)0x0000, (short)0x0018, (short)0x0038, - (short)0x0038, (short)0x0048, (short)0x0050, (short)0x0050, (short)0x0020, (short)0x0000, (short)0xFFF8, (short)0xFFB0, - (short)0xFF70, (short)0xFF68, (short)0xFFB0, (short)0xFFE8, (short)0xFFF8, (short)0xFFF8, (short)0xFFF8, (short)0xFFF0, - (short)0x0030, (short)0x0070, (short)0x0090, (short)0x0098, (short)0x0098, (short)0x0090, (short)0x00A0, (short)0x00B0, - (short)0x00B8, (short)0x00C0, (short)0x00C0, (short)0x00A8, (short)0x0098, (short)0x0088, (short)0x0078, (short)0x0050, - (short)0x0030, (short)0x0020, (short)0xFFD8, (short)0xFF98, (short)0xFF88, (short)0xFF50, (short)0xFF20, (short)0xFF18, - (short)0xFEF8, (short)0xFEE0, (short)0xFEE8, (short)0xFE70, (short)0xFE08, (short)0xFE00, (short)0xFE48, (short)0xFE98, - (short)0xFEB8, (short)0xFEE8, (short)0xFF10, (short)0xFF28, (short)0xFF18, (short)0xFF10, (short)0xFF18, (short)0xFF48, - (short)0xFF70, (short)0xFF88, (short)0xFFE0, (short)0x0028, (short)0x0040, (short)0x0058, (short)0x0068, (short)0x0070, - (short)0x0078, (short)0x0070, (short)0x0068, (short)0x0068, (short)0x0078, (short)0x0080, (short)0x0080, (short)0x0088, - (short)0x0088, (short)0x0080, (short)0x0058, (short)0x0030, (short)0x0020, (short)0x0018, (short)0x0018, (short)0x0018, - (short)0x0050, (short)0x0090, (short)0x00A0, (short)0x0080, (short)0x0060, (short)0x0050, (short)0x0030, (short)0x0018, - (short)0x0010, (short)0x0028, (short)0x0038, (short)0x0038, (short)0x0018, (short)0xFFF8, (short)0xFFF0, (short)0x0000, - (short)0x0020, (short)0x0020, (short)0x0030, (short)0x0030, (short)0x0030, (short)0x0040, (short)0x0050, (short)0x0050, - (short)0x0050, (short)0x0048, (short)0x0048, (short)0x0048, (short)0x0048, (short)0x0048, (short)0x0078, (short)0x00A0, - (short)0x00A8, (short)0x00C0, (short)0x00C8, (short)0x00C0, (short)0x00D0, (short)0x00E0, (short)0x00D8, (short)0x00E8, - (short)0x00F0, (short)0x00E0, (short)0x0100, (short)0x0118, (short)0x0110, (short)0x0100, (short)0x00F0, (short)0x00D8, - (short)0x0090, (short)0x0048, (short)0x0028, (short)0x0020, (short)0x0020, (short)0x0020, (short)0x0038, (short)0x0050, - (short)0x0050, (short)0x0050, (short)0x0048, (short)0x0040, (short)0x0050, (short)0x0060, (short)0x0060, (short)0x0040, - (short)0xFFC0, (short)0xFF58, (short)0xFF40, (short)0xFF90, (short)0xFFE8, (short)0x0000, (short)0x0020, (short)0x0030, - (short)0x0030, (short)0x0068, (short)0x0098, (short)0x00A8, (short)0x0110, (short)0x0168, (short)0x0170, (short)0x0148, - (short)0x0118, (short)0x00F0, (short)0x00E8, (short)0x00E0, (short)0x00D0, (short)0x0098, (short)0x0060, (short)0x0040, - (short)0x0000, (short)0xFFD8, (short)0xFFD8, (short)0xFFC0, (short)0xFFB0, (short)0xFFB0, (short)0xFF78, (short)0xFF30, - (short)0xFF10, (short)0xFEF0, (short)0xFEE8, (short)0xFEF0, (short)0xFEC8, (short)0xFED0, (short)0xFEF8, (short)0xFF00, - (short)0xFF10, (short)0xFF20, (short)0xFF50, (short)0xFF78, (short)0xFF90, (short)0xFF80, (short)0xFF70, (short)0xFF70, - (short)0xFF80, (short)0xFF98, (short)0xFFA0, (short)0xFFB8, (short)0xFFD0, (short)0xFFD8, (short)0xFFF0, (short)0x0000, - (short)0x0008, (short)0x0028, (short)0x0048, (short)0x0058, (short)0x0078, (short)0x0070, (short)0x0058, (short)0x0068, - (short)0x0098, (short)0x00B8, (short)0x00D8, (short)0x00F0, (short)0x00F0, (short)0x00E8, (short)0x00F8, (short)0x0100, - (short)0x00D8, (short)0x00D0, (short)0x00C8, (short)0x00E8, (short)0x0100, (short)0x00F0, (short)0x00E0, (short)0x00C8, - (short)0x00B8, (short)0x00A0, (short)0x0078, (short)0x0058, (short)0x0038, (short)0x0020, (short)0x0010, (short)0x0010, - (short)0x0018, (short)0x0010, (short)0x0010, (short)0x0010, (short)0x0018, (short)0x0028, (short)0x0008, (short)0xFFE0, - (short)0xFFC8, (short)0xFF80, (short)0xFF48, (short)0xFF38, (short)0xFF40, (short)0xFF48, (short)0xFF48, (short)0xFF70, - (short)0xFF90, (short)0xFFA8, (short)0xFFB8, (short)0xFFC0, (short)0xFFC8, (short)0xFFC0, (short)0xFFC0, (short)0xFFC0, - (short)0xFFB0, (short)0xFFA0, (short)0xFFA0, (short)0xFFA0, (short)0xFFA8, (short)0xFFB0, (short)0xFF68, (short)0xFF28, - (short)0xFF08, (short)0xFEF8, (short)0xFEF8, (short)0xFEE8, (short)0xFEE0, (short)0xFED8, (short)0xFEA8, (short)0xFE98, - (short)0xFEA8, (short)0xFEA8, (short)0xFEA0, (short)0xFEA0, (short)0xFED0, (short)0xFF00, (short)0xFF30, (short)0xFF28, - (short)0xFF38, (short)0xFF58, (short)0xFF48, (short)0xFF40, (short)0xFF48, (short)0xFFB0, (short)0x0010, (short)0x0038, - (short)0x0028, (short)0x0010, (short)0x0008, (short)0x0050, (short)0x00A0, (short)0x00B8, (short)0x00A0, (short)0x0080, - (short)0x0070, (short)0x0090, (short)0x00B0, (short)0x00B0, (short)0x00B8, (short)0x00B8, (short)0x00B0, (short)0x00C0, - (short)0x00D0, (short)0x00C8, (short)0x00A0, (short)0x0068, (short)0x0038, (short)0xFFF0, (short)0xFFB0, (short)0xFF88, - (short)0xFF78, (short)0xFF68, (short)0xFF60, (short)0xFF90, (short)0xFFC0, (short)0xFFE0, (short)0x0000, (short)0x0020, - (short)0x0030, (short)0x00A0, (short)0x0110, (short)0x0138, (short)0x0140, (short)0x0148, (short)0x0148, (short)0x0110, - (short)0x00E8, (short)0x00C0, (short)0x00A0, (short)0x0088, (short)0x0068, (short)0x0008, (short)0xFFB0, (short)0xFF88, - (short)0xFF58, (short)0xFF30, (short)0xFF20, (short)0xFEF8, (short)0xFED8, (short)0xFED8, (short)0xFF00, (short)0xFF20, - (short)0xFF38, (short)0xFF50, (short)0xFF68, (short)0xFF88, (short)0xFFA0, (short)0xFFB8, (short)0x0020, (short)0x0080, - (short)0x00A0, (short)0x00D8, (short)0x0100, (short)0x0100, (short)0x0138, (short)0x0168, (short)0x0148, (short)0x0128, - (short)0x0120, (short)0x00F8, (short)0x00E8, (short)0x00E0, (short)0x00C0, (short)0x00A8, (short)0x00B0, (short)0x0098, - (short)0x0070, (short)0x0048, (short)0x0030, (short)0xFFD0, (short)0xFF60, (short)0xFF48, (short)0xFF10, (short)0xFEA8, - (short)0xFEA8, (short)0xFEC0, (short)0xFEC0, (short)0xFEE8, (short)0xFEB0, (short)0xFE58, (short)0xFE88, (short)0xFED0, - (short)0xFEB8, (short)0xFE48, (short)0xFE58, (short)0xFEE8, (short)0xFF28, (short)0xFF18, (short)0xFF60, (short)0x00A0, - (short)0x01A0, (short)0x0188, (short)0x0178, (short)0x0208, (short)0x0208, (short)0x0100, (short)0x0018, (short)0xFFE0, - (short)0xFEE0, (short)0xFD68, (short)0xFD00, (short)0xFD60, (short)0xFD70, (short)0xFDA8, (short)0xFF00, (short)0x00A0, - (short)0x0170, (short)0x0210, (short)0x02D8, (short)0x0310, (short)0x0218, (short)0x00A0, (short)0xFFA0, (short)0xFDF0, - (short)0xFBD8, (short)0xFB08, (short)0xF9C0, (short)0xF830, (short)0xF8D8, (short)0xFCC0, (short)0x0038, (short)0x01A0, - (short)0x0380, (short)0x0A18, (short)0x0F50, (short)0x0DB0, (short)0x0C30, (short)0x0E18, (short)0x0CA8, (short)0x0570, - (short)0xFF98, (short)0xFE38, (short)0xFBA0, (short)0xF700, (short)0xF5D0, (short)0xF7C8, (short)0xF9A8, (short)0xFB48, - (short)0xFBB0, (short)0xFC78, (short)0xFF00, (short)0xFE98, (short)0xFB20, (short)0xFA48, (short)0xFAC0, (short)0xF8C8, - (short)0xF6E0, (short)0xF9C0, (short)0xFE08, (short)0xFF80, (short)0x0428, (short)0x0B70, (short)0x0E18, (short)0x0D38, - (short)0x0D38, (short)0x0C28, (short)0x01D0, (short)0xF578, (short)0xF108, (short)0xFB50, (short)0x0498, (short)0x0428, - (short)0x0CE8, (short)0x2190, (short)0x29F0, (short)0x22E0, (short)0x1F68, (short)0x2050, (short)0x1810, (short)0x0710, - (short)0xFA98, (short)0xF438, (short)0xEE68, (short)0xE950, (short)0xEBC8, (short)0xF538, (short)0xFEB8, (short)0x0240, - (short)0x0460, (short)0x09D0, (short)0x0978, (short)0xFFF8, (short)0xF810, (short)0xF190, (short)0xE8D0, (short)0xE290, - (short)0xDF60, (short)0xDFF0, (short)0xE668, (short)0xEC20, (short)0xF138, (short)0xFAC0, (short)0x04F0, (short)0x08D0, - (short)0x08C8, (short)0x0B18, (short)0x09F8, (short)0x0230, (short)0xFA38, (short)0xFA68, (short)0xFC78, (short)0xF9B8, - (short)0xF850, (short)0xFEA8, (short)0x05B8, (short)0x0690, (short)0x02E8, (short)0x0268, (short)0x0498, (short)0xFCB0, - (short)0xF018, (short)0xEDF8, (short)0x0090, (short)0x0F48, (short)0x0C70, (short)0x1278, (short)0x27B8, (short)0x2EA0, - (short)0x21F8, (short)0x1920, (short)0x1918, (short)0x1530, (short)0x0638, (short)0xF858, (short)0xF720, (short)0xF9F8, - (short)0xF600, (short)0xF850, (short)0x0590, (short)0x0EE0, (short)0x1000, (short)0x10D8, (short)0x1460, (short)0x10F8, - (short)0x0500, (short)0xFBC0, (short)0xF7A8, (short)0xF250, (short)0xEC00, (short)0xEB30, (short)0xF1C8, (short)0xF920, - (short)0xFC90, (short)0x0190, (short)0x0A60, (short)0x0E80, (short)0x0DB0, (short)0x0AD8, (short)0x0690, (short)0x0168, - (short)0xFF20, (short)0xFBD0, (short)0xF6F8, (short)0xF660, (short)0xF680, (short)0xF5B0, (short)0xF7C0, (short)0xF120, - (short)0xEA90, (short)0xF030, (short)0xEC18, (short)0xE190, (short)0xE558, (short)0xFF20, (short)0x1090, (short)0x0C50, - (short)0x1248, (short)0x2788, (short)0x2AD0, (short)0x1628, (short)0x08F0, (short)0x0BA8, (short)0x0538, (short)0xEF48, - (short)0xE410, (short)0xEB10, (short)0xEF68, (short)0xEA28, (short)0xEC40, (short)0xFC18, (short)0x08A8, (short)0x0818, - (short)0x0778, (short)0x0858, (short)0x02F8, (short)0xF8E8, (short)0xF1F0, (short)0xEF40, (short)0xECD0, (short)0xE958, - (short)0xEA70, (short)0xF260, (short)0xFAF0, (short)0xFFA0, (short)0x04A0, (short)0x0CF8, (short)0x10F8, (short)0x0EA0, - (short)0x0D48, (short)0x0BE8, (short)0x05E0, (short)0x03B0, (short)0x0358, (short)0xFF18, (short)0xFB40, (short)0xF9B0, - (short)0xF9C0, (short)0xF7C0, (short)0xEE90, (short)0xEAA0, (short)0xEE00, (short)0xE888, (short)0xE200, (short)0xEF00, - (short)0x0948, (short)0x1400, (short)0x1270, (short)0x1D88, (short)0x2CD8, (short)0x2488, (short)0x0DA8, (short)0x04B8, - (short)0x0548, (short)0xF7B0, (short)0xE3F0, (short)0xE268, (short)0xEFF8, (short)0xF5A0, (short)0xF320, (short)0xFC68, - (short)0x0BF0, (short)0x0FA0, (short)0x0A50, (short)0x01F8, (short)0xFE60, (short)0xFC48, (short)0xF340, (short)0xEB28, - (short)0xED58, (short)0xF3C0, (short)0xF5B8, (short)0xF738, (short)0x00F8, (short)0x0C70, (short)0x0E90, (short)0x0DE8, - (short)0x1190, (short)0x12B0, (short)0x1058, (short)0x0B98, (short)0x0638, (short)0x0868, (short)0x0998, (short)0x02B0, - (short)0xFE50, (short)0x0120, (short)0x02A0, (short)0xFC90, (short)0xF810, (short)0xF9D0, (short)0xF818, (short)0xF290, - (short)0xF240, (short)0xF6D0, (short)0x0A48, (short)0x1AD8, (short)0x1840, (short)0x1C18, (short)0x2B18, (short)0x29F0, - (short)0x1608, (short)0x08B8, (short)0x0778, (short)0x0128, (short)0xF118, (short)0xE868, (short)0xEDA0, (short)0xF310, - (short)0xF248, (short)0xF558, (short)0x0058, (short)0x0970, (short)0x0688, (short)0x0108, (short)0xFD08, (short)0xF988, - (short)0xF558, (short)0xF0A0, (short)0xF0B0, (short)0xF540, (short)0xF6E8, (short)0xFCA0, (short)0x0758, (short)0x0CD0, - (short)0x0F60, (short)0x1338, (short)0x1458, (short)0x1278, (short)0x0FD0, (short)0x0CA8, (short)0x0D50, (short)0x0D10, - (short)0x0798, (short)0x0398, (short)0x0428, (short)0x04F0, (short)0x0278, (short)0xFF98, (short)0x0178, (short)0x0088, - (short)0xFB08, (short)0xF660, (short)0xF1A8, (short)0xEF18, (short)0xF9E8, (short)0x0C00, (short)0x11C8, (short)0x1260, - (short)0x1B60, (short)0x21B0, (short)0x18E0, (short)0x0B08, (short)0x04C8, (short)0x0078, (short)0xF730, (short)0xEF60, - (short)0xEB18, (short)0xEC10, (short)0xF290, (short)0xF800, (short)0xFB60, (short)0xFF60, (short)0x0080, (short)0xFFA8, - (short)0xFB08, (short)0xF1A8, (short)0xED10, (short)0xEFF0, (short)0xEED0, (short)0xEB10, (short)0xEFE8, (short)0xF8F0, - (short)0xFDE0, (short)0x0298, (short)0x0528, (short)0x0598, (short)0x0928, (short)0x0A30, (short)0x0670, (short)0x08E8, - (short)0x0BC0, (short)0x0698, (short)0x0210, (short)0x0390, (short)0x0560, (short)0x0288, (short)0xF910, (short)0xF468, - (short)0xF560, (short)0xF3E0, (short)0xEE10, (short)0xE8B0, (short)0xE508, (short)0xEED0, (short)0x03E0, (short)0x0638, - (short)0xFFA8, (short)0x0BB8, (short)0x2078, (short)0x1FA8, (short)0x0EF0, (short)0x0648, (short)0x05C8, (short)0xFF18, - (short)0xF588, (short)0xEE20, (short)0xED88, (short)0xF5A0, (short)0xFBA8, (short)0xFBC0, (short)0xFA98, (short)0xFA20, - (short)0xF7D8, (short)0xF2D0, (short)0xEF48, (short)0xE998, (short)0xE378, (short)0xE530, (short)0xE868, (short)0xE890, - (short)0xEDD0, (short)0xF798, (short)0xFBC0, (short)0xFD20, (short)0x0178, (short)0x0490, (short)0x04A0, (short)0x0758, - (short)0x0858, (short)0x0490, (short)0x04F8, (short)0x0858, (short)0x06F0, (short)0x05F8, (short)0x0450, (short)0x0098, - (short)0xFE60, (short)0xFDA0, (short)0xF9E0, (short)0xF358, (short)0xEDC0, (short)0xF308, (short)0xFFE0, (short)0x0018, - (short)0xFB80, (short)0x0948, (short)0x1DB8, (short)0x1D08, (short)0x0F88, (short)0x0B48, (short)0x0C50, (short)0x09C0, - (short)0xFF78, (short)0xF1A0, (short)0xEF28, (short)0xF6B8, (short)0xF9F0, (short)0xF6F0, (short)0xF688, (short)0xF9E0, - (short)0xF9C0, (short)0xF4C8, (short)0xEBD8, (short)0xE7E8, (short)0xEBE0, (short)0xE8C8, (short)0xE100, (short)0xE518, - (short)0xF0B8, (short)0xF728, (short)0xF770, (short)0xF878, (short)0xFF58, (short)0x06B0, (short)0x0430, (short)0x0060, - (short)0x0390, (short)0x0A18, (short)0x0B98, (short)0x06C8, (short)0x0710, (short)0x0CF0, (short)0x08D0, (short)0x01F8, - (short)0x0280, (short)0x0238, (short)0xFD78, (short)0xF868, (short)0xF198, (short)0xF670, (short)0x0930, (short)0x0A78, - (short)0xFB38, (short)0x04F0, (short)0x1EB8, (short)0x1E98, (short)0x0F68, (short)0x0EC8, (short)0x1548, (short)0x1480, - (short)0x0C60, (short)0x00B0, (short)0xFEF8, (short)0x0830, (short)0x0838, (short)0x0160, (short)0x0380, (short)0x07E8, - (short)0x0270, (short)0xFBA0, (short)0xF9C0, (short)0xF450, (short)0xEE08, (short)0xED08, (short)0xEE10, (short)0xEF20, - (short)0xF1C0, (short)0xF800, (short)0xFE70, (short)0x00B0, (short)0x02D8, (short)0x07C8, (short)0x09F0, (short)0x09A8, - (short)0x0A60, (short)0x0B28, (short)0x0C80, (short)0x0D58, (short)0x0BD0, (short)0x0A48, (short)0x0900, (short)0x0768, - (short)0x03D0, (short)0x00E0, (short)0xFFF8, (short)0xFBD8, (short)0xF5E8, (short)0xFE18, (short)0x0FE8, (short)0x1060, - (short)0x05C8, (short)0x1078, (short)0x2638, (short)0x2580, (short)0x1740, (short)0x14E8, (short)0x19D0, (short)0x17D8, - (short)0x0E10, (short)0x0270, (short)0x0120, (short)0x0900, (short)0x0870, (short)0x0290, (short)0x03A0, (short)0x0600, - (short)0x0100, (short)0xFE28, (short)0xFF28, (short)0xF838, (short)0xF0B8, (short)0xF238, (short)0xF530, (short)0xF440, - (short)0xF440, (short)0xFA38, (short)0x0198, (short)0x03A8, (short)0x03D0, (short)0x0780, (short)0x0AB8, (short)0x0B58, - (short)0x0B10, (short)0x0AD8, (short)0x0A08, (short)0x0878, (short)0x07C8, (short)0x0648, (short)0x01A0, (short)0xFF48, - (short)0xFE58, (short)0xFA68, (short)0xF7D0, (short)0xF758, (short)0xF470, (short)0xF5B0, (short)0x02A8, (short)0x0A58, - (short)0x0448, (short)0x07C8, (short)0x1708, (short)0x1970, (short)0x0EC8, (short)0x0A40, (short)0x0CD0, (short)0x0D28, - (short)0x0838, (short)0x0010, (short)0xFAE0, (short)0xFCB0, (short)0xFEB8, (short)0xFCE8, (short)0xFBA8, (short)0xFD10, - (short)0xFBC8, (short)0xF910, (short)0xF960, (short)0xF830, (short)0xF4D8, (short)0xF500, (short)0xF860, (short)0xF9F0, - (short)0xFB58, (short)0xFE48, (short)0x0050, (short)0x0418, (short)0x0910, (short)0x0940, (short)0x0830, (short)0x0AC8, - (short)0x0C88, (short)0x0A50, (short)0x07C0, (short)0x0700, (short)0x0590, (short)0x0268, (short)0xFFF0, (short)0xFBA8, - (short)0xF720, (short)0xF698, (short)0xF2E0, (short)0xEB68, (short)0xEDA0, (short)0xFC00, (short)0x0358, (short)0xFF30, - (short)0x0398, (short)0x1220, (short)0x1860, (short)0x1368, (short)0x10C0, (short)0x12F0, (short)0x12A0, (short)0x0E08, - (short)0x0780, (short)0x0010, (short)0xFAD8, (short)0xF990, (short)0xF7E0, (short)0xF278, (short)0xEE10, (short)0xEB98, - (short)0xE7A0, (short)0xE6F8, (short)0xEA30, (short)0xE980, (short)0xE420, (short)0xE440, (short)0xEBA8, (short)0xEF98, - (short)0xEF68, (short)0xF288, (short)0xF7A8, (short)0xFC90, (short)0x01F8, (short)0x0528, (short)0x0630, (short)0x08E8, - (short)0x0C98, (short)0x0D50, (short)0x0B98, (short)0x0920, (short)0x0678, (short)0x03F0, (short)0x0260, (short)0xFE00, - (short)0xF810, (short)0xF4B8, (short)0xF0C0, (short)0xEB68, (short)0xEF58, (short)0xFAE8, (short)0xFDE0, (short)0xF680, - (short)0xF910, (short)0x06E0, (short)0x0C20, (short)0x05D8, (short)0x0408, (short)0x05C8, (short)0x0450, (short)0x02D0, - (short)0x0128, (short)0xFB78, (short)0xF668, (short)0xF430, (short)0xF150, (short)0xED90, (short)0xE870, (short)0xE448, - (short)0xE2E0, (short)0xE048, (short)0xDDD0, (short)0xDF08, (short)0xE0E0, (short)0xE098, (short)0xE258, (short)0xE520, - (short)0xE6A8, (short)0xEA28, (short)0xEF88, (short)0xF2A8, (short)0xF548, (short)0xFBA8, (short)0x01C8, (short)0x03F8, - (short)0x0748, (short)0x0C88, (short)0x0E98, (short)0x0DB8, (short)0x0D98, (short)0x0D50, (short)0x0B68, (short)0x0970, - (short)0x06C0, (short)0x0238, (short)0xFE18, (short)0xFB08, (short)0xF820, (short)0xF780, (short)0xF970, (short)0xF9B0, - (short)0xF880, (short)0xFA28, (short)0x0028, (short)0x0698, (short)0x0948, (short)0x08D0, (short)0x09E0, (short)0x0DD0, - (short)0x1010, (short)0x0D40, (short)0x0958, (short)0x0728, (short)0x0308, (short)0xFDA0, (short)0xF9F8, (short)0xF418, - (short)0xEC98, (short)0xE8B8, (short)0xE618, (short)0xE200, (short)0xDED0, (short)0xDF48, (short)0xE100, (short)0xE180, - (short)0xE160, (short)0xE3C8, (short)0xE898, (short)0xEDD8, (short)0xF250, (short)0xF558, (short)0xFB00, (short)0x02F8, - (short)0x07B0, (short)0x0B80, (short)0x1108, (short)0x1518, (short)0x1660, (short)0x1770, (short)0x1870, (short)0x16F8, - (short)0x1300, (short)0x0F78, (short)0x0FC0, (short)0x1070, (short)0x0CE8, (short)0x0AF8, (short)0x0BD8, (short)0x0D28, - (short)0x10A8, (short)0x1370, (short)0x10A0, (short)0x1040, (short)0x1518, (short)0x1740, (short)0x1550, (short)0x1398, - (short)0x10E0, (short)0x0AC8, (short)0x0640, (short)0x0348, (short)0xFD18, (short)0xF658, (short)0xF1D8, (short)0xEC20, - (short)0xE760, (short)0xE550, (short)0xE4B8, (short)0xE418, (short)0xE438, (short)0xE508, (short)0xE738, (short)0xEB18, - (short)0xF0C8, (short)0xF618, (short)0xF988, (short)0xFEC8, (short)0x0518, (short)0x09D8, (short)0x1118, (short)0x17F0, - (short)0x1BB0, (short)0x1E28, (short)0x2120, (short)0x23D8, (short)0x2638, (short)0x2418, (short)0x2080, (short)0x1D30, - (short)0x1CE8, (short)0x1D98, (short)0x1CA8, (short)0x1AD8, (short)0x1960, (short)0x17F8, (short)0x1A40, (short)0x1CF8, - (short)0x1D38, (short)0x1C30, (short)0x1A68, (short)0x1860, (short)0x1480, (short)0x1020, (short)0x0B68, (short)0x03E8, - (short)0xFBA8, (short)0xF508, (short)0xEE40, (short)0xE820, (short)0xE338, (short)0xDE88, (short)0xDA30, (short)0xD7D0, - (short)0xD728, (short)0xD7D8, (short)0xD998, (short)0xDC10, (short)0xDFB0, (short)0xE470, (short)0xE948, (short)0xEF98, - (short)0xF5F0, (short)0xFC38, (short)0x0228, (short)0x0798, (short)0x0D98, (short)0x1320, (short)0x1760, (short)0x1A70, - (short)0x1BE0, (short)0x1CC0, (short)0x1D98, (short)0x1A88, (short)0x1658, (short)0x12A0, (short)0x1180, (short)0x10A8, - (short)0x0ED0, (short)0x0CC8, (short)0x0AD8, (short)0x0920, (short)0x0B70, (short)0x0E30, (short)0x0EE8, (short)0x0D80, - (short)0x0BE0, (short)0x0AC0, (short)0x09B8, (short)0x0890, (short)0x0690, (short)0x01F8, (short)0xFD30, (short)0xF9F0, - (short)0xF5B0, (short)0xF188, (short)0xEE38, (short)0xE9E8, (short)0xE5E8, (short)0xE3E0, (short)0xE4A0, (short)0xE608, - (short)0xE738, (short)0xE858, (short)0xE980, (short)0xEC20, (short)0xF030, (short)0xF450, (short)0xF878, (short)0xFC68, - (short)0xFF68, (short)0x03C8, (short)0x08B8, (short)0x0D00, (short)0x1038, (short)0x12D8, (short)0x1490, (short)0x1648, - (short)0x16B8, (short)0x1468, (short)0x1160, (short)0x0FA8, (short)0x1038, (short)0x1058, (short)0x0F88, (short)0x0E50, - (short)0x0CC8, (short)0x0CC0, (short)0x0FC0, (short)0x1220, (short)0x12A0, (short)0x10F8, (short)0x0F20, (short)0x0D28, - (short)0x0C78, (short)0x0BB8, (short)0x08D0, (short)0x01C8, (short)0xFB38, (short)0xF660, (short)0xF330, (short)0xF078, - (short)0xEC28, (short)0xE6C8, (short)0xE2C0, (short)0xE050, (short)0xDFC8, (short)0xE038, (short)0xE160, (short)0xE300, - (short)0xE568, (short)0xE6B8, (short)0xE9A0, (short)0xED50, (short)0xF238, (short)0xF6D8, (short)0xFB08, (short)0xFF10, - (short)0x02E8, (short)0x06A0, (short)0x0AC0, (short)0x0DC8, (short)0x1010, (short)0x1168, (short)0x1018, (short)0x0E90, - (short)0x0BF8, (short)0x0B08, (short)0x0A50, (short)0x09F0, (short)0x0960, (short)0x0888, (short)0x0808, (short)0x09C8, - (short)0x0BA8, (short)0x0EE8, (short)0x1070, (short)0x10D0, (short)0x0F58, (short)0x0D60, (short)0x0BA0, (short)0x0A60, - (short)0x08F0, (short)0x0608, (short)0xFFB0, (short)0xF938, (short)0xF360, (short)0xF030, (short)0xEE20, (short)0xEB70, - (short)0xE7A8, (short)0xE410, (short)0xE140, (short)0xDFC8, (short)0xDFF8, (short)0xE1F0, (short)0xE448, (short)0xE6D0, - (short)0xE780, (short)0xE9E8, (short)0xECF0, (short)0xF248, (short)0xF730, (short)0xFBC0, (short)0xFF80, (short)0x0310, - (short)0x0670, (short)0x0A98, (short)0x0D88, (short)0x0FD8, (short)0x10C0, (short)0x0EB0, (short)0x0C48, (short)0x08B8, - (short)0x0998, (short)0x0AC0, (short)0x0C68, (short)0x0B78, (short)0x09C8, (short)0x0838, (short)0x08F8, (short)0x0A80, - (short)0x0CA0, (short)0x0E10, (short)0x0E48, (short)0x0D58, (short)0x0A28, (short)0x0750, (short)0x04F0, (short)0x0228, - (short)0xFEE8, (short)0xFA80, (short)0xF468, (short)0xEED0, (short)0xEAE0, (short)0xE8B8, (short)0xE718, (short)0xE5B0, - (short)0xE4A8, (short)0xE410, (short)0xE480, (short)0xE548, (short)0xE738, (short)0xE9B0, (short)0xED80, (short)0xF0B8, - (short)0xF480, (short)0xF7B0, (short)0xFB70, (short)0xFED0, (short)0x0328, (short)0x0720, (short)0x0A98, (short)0x0E00, - (short)0x10F8, (short)0x12E0, (short)0x12A8, (short)0x11B0, (short)0x0F58, (short)0x0F38, (short)0x0E88, (short)0x0F08, - (short)0x0FC0, (short)0x0FF0, (short)0x10B8, (short)0x1138, (short)0x1198, (short)0x13D0, (short)0x1638, (short)0x17E8, - (short)0x1758, (short)0x1628, (short)0x1460, (short)0x10E8, (short)0x0CA0, (short)0x0848, (short)0x0280, (short)0xFC90, - (short)0xF700, (short)0xF0F8, (short)0xEB18, (short)0xE638, (short)0xE1B8, (short)0xDE78, (short)0xDC58, (short)0xDBB8, - (short)0xDC28, (short)0xDDB0, (short)0xE030, (short)0xE330, (short)0xE6F0, (short)0xEC20, (short)0xF210, (short)0xF7C0, - (short)0xFCE0, (short)0x0150, (short)0x0570, (short)0x08F0, (short)0x0C70, (short)0x0F50, (short)0x12B8, (short)0x1560, - (short)0x16E0, (short)0x1630, (short)0x14E8, (short)0x1298, (short)0x11B8, (short)0x1170, (short)0x11B8, (short)0x11C0, - (short)0x0FE8, (short)0x0E58, (short)0x0CB8, (short)0x0C50, (short)0x0D68, (short)0x0E98, (short)0x0E30, (short)0x0C28, - (short)0x0A10, (short)0x06D8, (short)0x02E0, (short)0xFEA0, (short)0xFA18, (short)0xF4E8, (short)0xF018, (short)0xEB68, - (short)0xE6E8, (short)0xE310, (short)0xDFC8, (short)0xDD38, (short)0xDBF8, (short)0xDC38, (short)0xDDD0, (short)0xE070, - (short)0xE390, (short)0xE760, (short)0xEB88, (short)0xEF20, (short)0xF378, (short)0xF830, (short)0xFCE0, (short)0x00F8, - (short)0x0480, (short)0x0768, (short)0x0968, (short)0x0AE0, (short)0x0BB8, (short)0x0C10, (short)0x0BB0, (short)0x0A78, - (short)0x08E0, (short)0x06E8, (short)0x0540, (short)0x0870, (short)0x0BE0, (short)0x0ED0, (short)0x0E40, (short)0x0D10, - (short)0x0CC8, (short)0x0E28, (short)0x0FA0, (short)0x0FB0, (short)0x0F18, (short)0x0DD0, (short)0x0BC8, (short)0x08E8, - (short)0x0628, (short)0x0300, (short)0xFF18, (short)0xFB40, (short)0xF780, (short)0xF388, (short)0xF028, (short)0xED80, - (short)0xEB18, (short)0xE968, (short)0xE8C0, (short)0xE738, (short)0xE658, (short)0xE698, (short)0xE888, (short)0xEB38, - (short)0xEDA0, (short)0xF178, (short)0xF5B8, (short)0xFA28, (short)0xFEA8, (short)0x0300, (short)0x06C8, (short)0x0960, - (short)0x0B70, (short)0x0CE0, (short)0x0D70, (short)0x0D50, (short)0x0C60, (short)0x0890, (short)0x0418, (short)0x0028, - (short)0x01D0, (short)0x03F8, (short)0x05A8, (short)0x0700, (short)0x0808, (short)0x09A0, (short)0x0B18, (short)0x0CC8, - (short)0x0D90, (short)0x0E68, (short)0x0EC0, (short)0x0E30, (short)0x0C28, (short)0x09D8, (short)0x0730, (short)0x0308, - (short)0xFED8, (short)0xFAC0, (short)0xF598, (short)0xF0D8, (short)0xECE0, (short)0xEAA8, (short)0xE948, (short)0xE8D0, - (short)0xE850, (short)0xE888, (short)0xE910, (short)0xEAD0, (short)0xED68, (short)0xF018, (short)0xF350, (short)0xF6B8, - (short)0xFAE0, (short)0xFF00, (short)0x02D8, (short)0x05E8, (short)0x0830, (short)0x09F8, (short)0x0B08, (short)0x0B80, - (short)0x0B60, (short)0x0988, (short)0x0648, (short)0x02D0, (short)0x0150, (short)0x01E8, (short)0x0270, (short)0x03E0, - (short)0x0538, (short)0x0658, (short)0x0918, (short)0x0C00, (short)0x0E88, (short)0x10B8, (short)0x12A0, (short)0x13E0, - (short)0x1488, (short)0x1448, (short)0x1368, (short)0x1120, (short)0x0DD0, (short)0x0A40, (short)0x0608, (short)0x0148, - (short)0xFC80, (short)0xF860, (short)0xF4D8, (short)0xF1C0, (short)0xF008, (short)0xEF38, (short)0xEE78, (short)0xEE98, - (short)0xEF90, (short)0xF170, (short)0xF390, (short)0xF5C0, (short)0xF888, (short)0xFB48, (short)0xFDF0, (short)0x0078, - (short)0x03D0, (short)0x06C8, (short)0x08F8, (short)0x0AA0, (short)0x0BC8, (short)0x0C48, (short)0x0B30, (short)0x0978, - (short)0x06A8, (short)0x0530, (short)0x03F0, (short)0x0438, (short)0x03C0, (short)0x0350, (short)0x0360, (short)0x04E8, - (short)0x0698, (short)0x07D0, (short)0x08D0, (short)0x0998, (short)0x0A70, (short)0x0B48, (short)0x0B70, (short)0x0AD0, - (short)0x09C0, (short)0x0890, (short)0x0730, (short)0x0588, (short)0x0358, (short)0x0140, (short)0xFF58, (short)0xFD40, - (short)0xFB68, (short)0xF9E8, (short)0xF828, (short)0xF6D0, (short)0xF608, (short)0xF5D8, (short)0xF610, (short)0xF668, - (short)0xF778, (short)0xF8E8, (short)0xFA48, (short)0xFCC8, (short)0xFF50, (short)0x01C8, (short)0x0428, (short)0x0640, - (short)0x07D0, (short)0x09D0, (short)0x0B40, (short)0x0BF8, (short)0x0C30, (short)0x0C08, (short)0x0B08, (short)0x0988, - (short)0x07C0, (short)0x0670, (short)0x0608, (short)0x0590, (short)0x0588, (short)0x05B0, (short)0x05E0, (short)0x06B8, - (short)0x0748, (short)0x0758, (short)0x0700, (short)0x06A8, (short)0x0620, (short)0x05D8, (short)0x0590, (short)0x0528, - (short)0x03A8, (short)0x0240, (short)0x0108, (short)0xFF38, (short)0xFD50, (short)0xFBA0, (short)0xFA38, (short)0xF920, - (short)0xF860, (short)0xF6E8, (short)0xF640, (short)0xF628, (short)0xF680, (short)0xF720, (short)0xF800, (short)0xF8E0, - (short)0xF9A0, (short)0xFA78, (short)0xFB88, (short)0xFD20, (short)0xFEA0, (short)0x0008, (short)0x0110, (short)0x0200, - (short)0x0360, (short)0x04E0, (short)0x0608, (short)0x0738, (short)0x0838, (short)0x08D8, (short)0x0828, (short)0x0738, - (short)0x0600, (short)0x04A8, (short)0x02E0, (short)0x0130, (short)0xFFA0, (short)0xFF48, (short)0xFF10, (short)0xFEF0, - (short)0xFF30, (short)0xFFD0, (short)0x0090, (short)0x0090, (short)0x0070, (short)0x0060, (short)0xFFE8, (short)0xFF50, - (short)0xFEB8, (short)0xFE98, (short)0xFE88, (short)0xFE80, (short)0xFE58, (short)0xFE50, (short)0xFE58, (short)0xFDB0, - (short)0xFD08, (short)0xFC80, (short)0xFAF8, (short)0xF988, (short)0xF860, (short)0xF798, (short)0xF720, (short)0xF6E8, - (short)0xF728, (short)0xF7C0, (short)0xF8A8, (short)0xF8F8, (short)0xF960, (short)0xFA18, (short)0xFAC0, (short)0xFB58, - (short)0xFC18, (short)0xFCE0, (short)0xFDA0, (short)0xFE20, (short)0xFE88, (short)0xFEF8, (short)0xFEF0, (short)0xFEC8, - (short)0xFEA8, (short)0xFDE0, (short)0xFD10, (short)0xFC70, (short)0xFBA8, (short)0xFB10, (short)0xFAB8, (short)0xFAA0, - (short)0xFAD0, (short)0xFB18, (short)0xFA90, (short)0xFA18, (short)0xFA10, (short)0xFA80, (short)0xFB10, (short)0xFB88, - (short)0xFC90, (short)0xFDB8, (short)0xFEB8, (short)0xFF80, (short)0x0058, (short)0x0138, (short)0x0118, (short)0x00C8, - (short)0x00C0, (short)0xFF98, (short)0xFE30, (short)0xFD38, (short)0xFC68, (short)0xFB78, (short)0xFAB8, (short)0xFAE8, - (short)0xFB78, (short)0xFBD0, (short)0xFBE8, (short)0xFC18, (short)0xFC98, (short)0xFD28, (short)0xFD48, (short)0xFD68, - (short)0xFD68, (short)0xFD90, (short)0xFDB8, (short)0xFD90, (short)0xFD68, (short)0xFD78, (short)0xFCA0, (short)0xFB70, - (short)0xFAD0, (short)0xF9F0, (short)0xF870, (short)0xF748, (short)0xF748, (short)0xF770, (short)0xF748, (short)0xF720, - (short)0xF7A8, (short)0xF878, (short)0xF930, (short)0xF998, (short)0xFA38, (short)0xFC10, (short)0xFDA0, (short)0xFE70, - (short)0x0030, (short)0x0248, (short)0x03A0, (short)0x0568, (short)0x0738, (short)0x0870, (short)0x0960, (short)0x0A10, - (short)0x0A40, (short)0x0A28, (short)0x09B8, (short)0x08E8, (short)0x07E8, (short)0x06E0, (short)0x0588, (short)0x0430, - (short)0x0300, (short)0x0260, (short)0x01D0, (short)0x0118, (short)0xFFB0, (short)0xFE98, (short)0xFE18, (short)0xFDA0, - (short)0xFD08, (short)0xFCB8, (short)0xFCF8, (short)0xFD60, (short)0xFD90, (short)0xFD90, (short)0xFDD8, (short)0xFE50, - (short)0xFDA0, (short)0xFCE0, (short)0xFCC0, (short)0xFCE8, (short)0xFCB0, (short)0xFC60, (short)0xFC70, (short)0xFCB8, - (short)0xFCE0, (short)0xFD40, (short)0xFDD8, (short)0xFE68, (short)0xFF78, (short)0x0068, (short)0x0108, (short)0x0278, - (short)0x03A0, (short)0x0420, (short)0x0590, (short)0x0708, (short)0x07B8, (short)0x07D8, (short)0x0808, (short)0x0838, - (short)0x07D8, (short)0x06E8, (short)0x0600, (short)0x05B0, (short)0x0518, (short)0x0410, (short)0x02A0, (short)0x0198, - (short)0x00D0, (short)0x00C8, (short)0x00B0, (short)0x0068, (short)0x00C0, (short)0x0150, (short)0x0180, (short)0x0220, - (short)0x02D8, (short)0x0340, (short)0x0360, (short)0x0380, (short)0x0380, (short)0x0338, (short)0x02C8, (short)0x02B8, - (short)0x0280, (short)0x0200, (short)0x0100, (short)0x0098, (short)0x0080, (short)0x0020, (short)0xFFF0, (short)0x0000, - (short)0x0020, (short)0x0098, (short)0x0120, (short)0x0170, (short)0x0230, (short)0x02F0, (short)0x0350, (short)0x0480, - (short)0x05B8, (short)0x0650, (short)0x06A8, (short)0x0738, (short)0x0798, (short)0x07B0, (short)0x07C0, (short)0x0798, - (short)0x0668, (short)0x0598, (short)0x0530, (short)0x04C8, (short)0x0410, (short)0x0350, (short)0x0278, (short)0x01D8, - (short)0x0148, (short)0x0080, (short)0x0000, (short)0xFFC0, (short)0xFFD8, (short)0xFFA8, (short)0xFF60, (short)0xFF80, - (short)0x0018, (short)0x0070, (short)0xFFE0, (short)0xFF88, (short)0xFFC0, (short)0xFF38, (short)0xFE98, (short)0xFE50, - (short)0xFE10, (short)0xFDD8, (short)0xFD90, (short)0xFD30, (short)0xFDB8, (short)0xFE68, (short)0xFE70, (short)0xFE60, - (short)0xFE70, (short)0xFED0, (short)0xFF90, (short)0xFFE0, (short)0xFFF0, (short)0x00A8, (short)0x0168, (short)0x01D0, - (short)0x01F8, (short)0x0210, (short)0x0278, (short)0x0268, (short)0x0208, (short)0x0220, (short)0x01F8, (short)0x0198, - (short)0x0158, (short)0x0100, (short)0x00C0, (short)0x00A0, (short)0x0018, (short)0xFF98, (short)0xFF28, (short)0xFEC0, - (short)0xFE80, (short)0xFE60, (short)0xFD88, (short)0xFCF0, (short)0xFCC8, (short)0xFC70, (short)0xFC10, (short)0xFBC8, - (short)0xFBB0, (short)0xFBE8, (short)0xFBE8, (short)0xFB80, (short)0xFB88, (short)0xFB40, (short)0xFB18, (short)0xFB20, - (short)0xFAB8, (short)0xFA50, (short)0xFA50, (short)0xFAB8, (short)0xFAF8, (short)0xFB18, (short)0xFBB0, (short)0xFC88, - (short)0xFD10, (short)0xFD40, (short)0xFD98, (short)0xFE38, (short)0xFEE0, (short)0xFEF8, (short)0xFEF0, (short)0xFF18, - (short)0xFF18, (short)0xFF18, (short)0xFF68, (short)0xFF98, (short)0xFF98, (short)0xFFD0, (short)0xFFF8, (short)0x0048, - (short)0x0038, (short)0x0008, (short)0x0008, (short)0xFFE0, (short)0xFFB0, (short)0xFFB8, (short)0xFED0, (short)0xFE18, - (short)0xFE18, (short)0xFDF0, (short)0xFE38, (short)0xFE90, (short)0xFE90, (short)0xFDA8, (short)0xFD48, (short)0xFD70, - (short)0xFD68, (short)0xFD00, (short)0xFCB8, (short)0xFCB8, (short)0xFCF8, (short)0xFD00, (short)0xFC30, (short)0xFBD0, - (short)0xFC10, (short)0xFC20, (short)0xFBE0, (short)0xFBA8, (short)0xFC30, (short)0xFD00, (short)0xFD50, (short)0xFD90, - (short)0xFE10, (short)0xFEA8, (short)0xFF40, (short)0xFFA0, (short)0xFFD0, (short)0xFFC8, (short)0xFFC8, (short)0xFFD8, - (short)0xFFA0, (short)0xFF98, (short)0xFFB8, (short)0x0050, (short)0x00B8, (short)0x00B0, (short)0x01B0, (short)0x02E0, - (short)0x0318, (short)0x0330, (short)0x02E0, (short)0x02C8, (short)0x0278, (short)0x0150, (short)0x0050, (short)0xFFC0, - (short)0xFF88, (short)0xFF18, (short)0xFE90, (short)0xFE40, (short)0xFE30, (short)0xFDE8, (short)0xFDD0, (short)0xFD70, - (short)0xFD48, (short)0xFD10, (short)0xFC98, (short)0xFC38, (short)0xFC38, (short)0xFC78, (short)0xFC98, (short)0xFCF0, - (short)0xFDA8, (short)0xFE48, (short)0xFEC8, (short)0xFF30, (short)0xFF98, (short)0x0000, (short)0x0050, (short)0x0058, - (short)0x00A8, (short)0x00E8, (short)0x00D0, (short)0x0138, (short)0x01E0, (short)0x0218, (short)0x0208, (short)0x0230, - (short)0x0258, (short)0x0248, (short)0x02B0, (short)0x0318, (short)0x0330, (short)0x0358, (short)0x0380, (short)0x0378, - (short)0x0408, (short)0x0480, (short)0x0460, (short)0x03C8, (short)0x0318, (short)0x02B0, (short)0x01E8, (short)0x00B8, - (short)0xFFD8, (short)0xFF30, (short)0xFEC8, (short)0xFE60, (short)0xFE60, (short)0xFE78, (short)0xFE78, (short)0xFDC0, - (short)0xFD70, (short)0xFD50, (short)0xFD08, (short)0xFC88, (short)0xFC28, (short)0xFC98, (short)0xFD18, (short)0xFD60, - (short)0xFD60, (short)0xFDD8, (short)0xFE90, (short)0xFEE8, (short)0xFF10, (short)0xFF58, (short)0xFF90, (short)0xFFB8, - (short)0xFFE0, (short)0xFFF0, (short)0xFFF0, (short)0x00D0, (short)0x0190, (short)0x01C8, (short)0x0180, (short)0x0188, - (short)0x01B0, (short)0x0238, (short)0x0298, (short)0x02B8, (short)0x0268, (short)0x0258, (short)0x0258, (short)0x0230, - (short)0x0228, (short)0x0230, (short)0x0258, (short)0x0248, (short)0x01F8, (short)0x0150, (short)0x00C8, (short)0x0058, - (short)0x0058, (short)0x0038, (short)0x0000, (short)0xFF50, (short)0xFF00, (short)0xFEF8, (short)0xFE80, (short)0xFDB8, - (short)0xFD70, (short)0xFD00, (short)0xFC90, (short)0xFC40, (short)0xFC28, (short)0xFC58, (short)0xFC98, (short)0xFD10, - (short)0xFD78, (short)0xFDE0, (short)0xFE80, (short)0xFF08, (short)0xFF60, (short)0xFFD0, (short)0x0030, (short)0x0068, - (short)0x0110, (short)0x0198, (short)0x01C0, (short)0x0208, (short)0x0260, (short)0x0280, (short)0x0320, (short)0x0390, - (short)0x0398, (short)0x0410, (short)0x0488, (short)0x04A0, (short)0x0448, (short)0x0408, (short)0x03E0, (short)0x03C8, - (short)0x0398, (short)0x0350, (short)0x0308, (short)0x02C8, (short)0x0278, (short)0x01D8, (short)0x0148, (short)0x00E8, - (short)0x0040, (short)0xFFA0, (short)0xFF50, (short)0xFDC0, (short)0xFC88, (short)0xFC30, (short)0xFB88, (short)0xFAA8, - (short)0xFA50, (short)0xFA30, (short)0xFA40, (short)0xFA70, (short)0xFAB8, (short)0xFAE0, (short)0xFB28, (short)0xFB58, - (short)0xFB80, (short)0xFBB0, (short)0xFC00, (short)0xFC80, (short)0xFCF0, (short)0xFDB8, (short)0xFE58, (short)0xFED8, - (short)0x0008, (short)0x0100, (short)0x0180, (short)0x01D0, (short)0x0210, (short)0x0248, (short)0x0238, (short)0x0200, - (short)0x01D0, (short)0x02D0, (short)0x03A0, (short)0x03D8, (short)0x03C0, (short)0x03D8, (short)0x03F8, (short)0x0370, - (short)0x02C0, (short)0x0258, (short)0x01B8, (short)0x0120, (short)0x0090, (short)0x0088, (short)0x00A8, (short)0x00A8, - (short)0x0088, (short)0x0068, (short)0x0060, (short)0xFFE0, (short)0xFF00, (short)0xFE50, (short)0xFDC8, (short)0xFCF0, - (short)0xFC30, (short)0xFBB0, (short)0xFBD8, (short)0xFC20, (short)0xFC58, (short)0xFC30, (short)0xFC40, (short)0xFC78, - (short)0xFCC0, (short)0xFCE8, (short)0xFD10, (short)0xFD48, (short)0xFD88, (short)0xFDE8, (short)0xFF10, (short)0x0020, - (short)0x0110, (short)0x01B8, (short)0x0248, (short)0x02C0, (short)0x0358, (short)0x03B8, (short)0x03C8, (short)0x0320, - (short)0x0288, (short)0x0280, (short)0x0300, (short)0x0340, (short)0x0320, (short)0x0380, (short)0x03F8, (short)0x0418, - (short)0x0378, (short)0x02E0, (short)0x0288, (short)0x0280, (short)0x0238, (short)0x01D0, (short)0x0168, (short)0x0138, - (short)0x0110, (short)0x0140, (short)0x0148, (short)0x0150, (short)0x00A8, (short)0x0010, (short)0xFFB0, (short)0xFEB8, - (short)0xFDE0, (short)0xFD48, (short)0xFCE8, (short)0xFCA8, (short)0xFC78, (short)0xFC48, (short)0xFC50, (short)0xFC70, - (short)0xFCA8, (short)0xFCE8, (short)0xFD28, (short)0xFDD0, (short)0xFE70, (short)0xFED8, (short)0x0040, (short)0x0188, - (short)0x0258, (short)0x03C0, (short)0x04F0, (short)0x05B8, (short)0x0638, (short)0x0670, (short)0x0690, (short)0x0708, - (short)0x0708, (short)0x06B8, (short)0x0660, (short)0x0650, (short)0x0630, (short)0x05C8, (short)0x0578, (short)0x0548, - (short)0x0508, (short)0x0470, (short)0x03D0, (short)0x0350, (short)0x0278, (short)0x01A0, (short)0x00F8, (short)0x00B0, - (short)0x0078, (short)0x0030, (short)0xFFE8, (short)0xFFC8, (short)0xFFB8, (short)0xFED0, (short)0xFE08, (short)0xFD98, - (short)0xFC70, (short)0xFB60, (short)0xFAA8, (short)0xFA10, (short)0xF9B8, (short)0xF980, (short)0xF9A0, (short)0xFA00, - (short)0xFA68, (short)0xFB90, (short)0xFCB8, (short)0xFD98, (short)0xFE68, (short)0xFF18, (short)0xFFC0, (short)0x0078, - (short)0x00F8, (short)0x0218, (short)0x0320, (short)0x03C0, (short)0x0478, (short)0x0510, (short)0x0570, (short)0x05D8, - (short)0x05E0, (short)0x05B8, (short)0x0508, (short)0x0468, (short)0x03E0, (short)0x02F0, (short)0x0218, (short)0x0168, - (short)0x00F0, (short)0x0060, (short)0xFFD0, (short)0xFF58, (short)0xFEC0, (short)0xFE48, (short)0xFDB0, (short)0xFD58, - (short)0xFD38, (short)0xFCD8, (short)0xFC80, (short)0xFC50, (short)0xFC08, (short)0xFB48, (short)0xFA98, (short)0xF9F8, - (short)0xF8F8, (short)0xF810, (short)0xF7F8, (short)0xF818, (short)0xF848, (short)0xF8E8, (short)0xF9E0, (short)0xFB08, - (short)0xFC38, (short)0xFD10, (short)0xFDE8, (short)0xFF10, (short)0xFFD0, (short)0x0048, (short)0x00E0, (short)0x0160, - (short)0x01B8, (short)0x01C8, (short)0x01E0, (short)0x0200, (short)0x0228, (short)0x0240, (short)0x0240, (short)0x0240, - (short)0x0260, (short)0x0280, (short)0x0280, (short)0x02F0, (short)0x0370, (short)0x03C8, (short)0x03C8, (short)0x03A8, - (short)0x03A0, (short)0x02F8, (short)0x0220, (short)0x0150, (short)0x0098, (short)0xFFE0, (short)0xFF20, (short)0xFEA0, - (short)0xFE50, (short)0xFE18, (short)0xFD38, (short)0xFC60, (short)0xFBE0, (short)0xFAC8, (short)0xF9A0, (short)0xF8B8, - (short)0xF830, (short)0xF888, (short)0xF8B8, (short)0xF908, (short)0xFA80, (short)0xFBF8, (short)0xFD48, (short)0xFEC8, - (short)0x0040, (short)0x01B0, (short)0x0298, (short)0x0338, (short)0x03C0, (short)0x0470, (short)0x0520, (short)0x0588, - (short)0x0610, (short)0x0688, (short)0x06C8, (short)0x0670, (short)0x05E8, (short)0x0578, (short)0x0580, (short)0x0578, - (short)0x0528, (short)0x0498, (short)0x0408, (short)0x0390, (short)0x03F8, (short)0x0458, (short)0x0488, (short)0x0468, - (short)0x0450, (short)0x0458, (short)0x03A8, (short)0x02D0, (short)0x0210, (short)0x0158, (short)0x0088, (short)0xFFA8, - (short)0xFF00, (short)0xFE88, (short)0xFE30, (short)0xFD88, (short)0xFCB8, (short)0xFC28, (short)0xFB30, (short)0xF9F0, - (short)0xF8E8, (short)0xF890, (short)0xF890, (short)0xF8C0, (short)0xF978, (short)0xFA78, (short)0xFBE8, (short)0xFD20, - (short)0xFE28, (short)0xFF60, (short)0x00D8, (short)0x0220, (short)0x02F8, (short)0x0378, (short)0x03E0, (short)0x0438, - (short)0x0488, (short)0x0498, (short)0x04A8, (short)0x0480, (short)0x0440, (short)0x03C0, (short)0x02D8, (short)0x01E8, - (short)0x0140, (short)0x00D8, (short)0x0068, (short)0xFFE0, (short)0x0068, (short)0x0130, (short)0x0228, (short)0x0260, - (short)0x0278, (short)0x02D0, (short)0x02D8, (short)0x0290, (short)0x01E0, (short)0x00D0, (short)0xFFE0, (short)0xFEF8, - (short)0xFE08, (short)0xFD28, (short)0xFC88, (short)0xFBE0, (short)0xFB60, (short)0xFAD8, (short)0xFA08, (short)0xF978, - (short)0xF8E8, (short)0xF8B0, (short)0xF8B0, (short)0xF8D0, (short)0xF9D0, (short)0xFAF8, (short)0xFC18, (short)0xFDB0, - (short)0xFF38, (short)0x00A0, (short)0x01F8, (short)0x02F8, (short)0x03C0, (short)0x0460, (short)0x04B8, (short)0x04C8, - (short)0x04C8, (short)0x04C0, (short)0x0498, (short)0x0490, (short)0x0478, (short)0x0448, (short)0x0420, (short)0x03F8, - (short)0x0328, (short)0x0238, (short)0x01B0, (short)0x0170, (short)0x0128, (short)0x0090, (short)0x00E8, (short)0x01B8, - (short)0x02B8, (short)0x0280, (short)0x0218, (short)0x0218, (short)0x01F0, (short)0x0148, (short)0x0000, (short)0xFEC0, - (short)0xFE08, (short)0xFD70, (short)0xFCA0, (short)0xFBF0, (short)0xFBC0, (short)0xFBA0, (short)0xFB80, (short)0xFB18, - (short)0xFB28, (short)0xFB98, (short)0xFBC0, (short)0xFBD0, (short)0xFC08, (short)0xFC78, (short)0xFDC8, (short)0xFEC8, - (short)0xFF78, (short)0x00D0, (short)0x0238, (short)0x0360, (short)0x0398, (short)0x0360, (short)0x0368, (short)0x0380, - (short)0x0318, (short)0x0250, (short)0x0208, (short)0x0220, (short)0x0218, (short)0x01F0, (short)0x01C8, (short)0x0210, - (short)0x0270, (short)0x0270, (short)0x0240, (short)0x0290, (short)0x0310, (short)0x0360, (short)0x0340, (short)0x0310, - (short)0x0318, (short)0x0320, (short)0x02D8, (short)0x0240, (short)0x0158, (short)0x00A0, (short)0x0008, (short)0xFF30, - (short)0xFE50, (short)0xFDA8, (short)0xFD28, (short)0xFCC8, (short)0xFC60, (short)0xFBA8, (short)0xFB40, (short)0xFB10, - (short)0xFB18, (short)0xFB28, (short)0xFB48, (short)0xFB68, (short)0xFBA8, (short)0xFBF8, (short)0xFCB8, (short)0xFD78, - (short)0xFE00, (short)0xFE88, (short)0xFF30, (short)0xFF98, (short)0xFFC8, (short)0xFFE8, (short)0x0050, (short)0x00B0, - (short)0x00E0, (short)0x0040, (short)0xFF68, (short)0xFED8, (short)0xFEE8, (short)0xFEE0, (short)0xFE90, (short)0xFEA8, - (short)0xFF88, (short)0x0080, (short)0x0188, (short)0x0208, (short)0x0290, (short)0x0390, (short)0x0438, (short)0x0450, - (short)0x0428, (short)0x03F8, (short)0x03E0, (short)0x0388, (short)0x02E0, (short)0x0240, (short)0x0190, (short)0x00D0, - (short)0x0000, (short)0x0000, (short)0x0018, (short)0x00FF, (short)0x0068, (short)0x00FE, (short)0x00F8, (short)0x00FD +gsm_signal gsm_enc_pcmdata[ ] = { + ( short )0x0000, ( short )0x0000, ( short )0x0010, ( short )0x0010, ( short )0x0010, ( short )0x0020, ( short )0x0020, ( short )0x0018, + ( short )0x0028, ( short )0x0020, ( short )0x0020, ( short )0x0028, ( short )0x0028, ( short )0x0020, ( short )0x0030, ( short )0x0030, + ( short )0x0028, ( short )0x0010, ( short )0x0008, ( short )0x0000, ( short )0x0050, ( short )0x0060, ( short )0x0058, ( short )0x00D0, + ( short )0x00E0, ( short )0x00D0, ( short )0x0118, ( short )0x0128, ( short )0x0118, ( short )0x0128, ( short )0x0110, ( short )0x0100, + ( short )0x00A0, ( short )0x0058, ( short )0x0048, ( short )0x0058, ( short )0x0060, ( short )0x0058, ( short )0x0050, ( short )0x0048, + ( short )0x0040, ( short )0x0030, ( short )0x0020, ( short )0x0010, ( short )0x0008, ( short )0xFFF8, ( short )0xFFE8, ( short )0xFFE0, + ( short )0xFFD8, ( short )0xFFC8, ( short )0xFFC0, ( short )0xFFC0, ( short )0xFF98, ( short )0xFF78, ( short )0xFF78, ( short )0xFFC8, + ( short )0x0000, ( short )0x0010, ( short )0x0040, ( short )0x0060, ( short )0x0068, ( short )0x0078, ( short )0x0078, ( short )0x0070, + ( short )0x00A8, ( short )0x00C8, ( short )0x00C8, ( short )0x00E0, ( short )0x00F0, ( short )0x00E8, ( short )0x00F8, ( short )0x00F8, + ( short )0x00F0, ( short )0x00E0, ( short )0x00C8, ( short )0x00B8, ( short )0x00E8, ( short )0x0100, ( short )0x00F8, ( short )0x00E8, + ( short )0x00D8, ( short )0x00C0, ( short )0x00A8, ( short )0x0020, ( short )0xFFC0, ( short )0xFFA0, ( short )0xFFA0, ( short )0xFFA8, + ( short )0xFFB0, ( short )0xFFD0, ( short )0xFFF8, ( short )0x0000, ( short )0x0020, ( short )0x0030, ( short )0x0030, ( short )0x0030, + ( short )0x0028, ( short )0x0020, ( short )0xFFF0, ( short )0xFFD0, ( short )0xFFC8, ( short )0xFFC8, ( short )0xFFD0, ( short )0xFFD8, + ( short )0xFFE8, ( short )0xFFF8, ( short )0xFFF8, ( short )0x0008, ( short )0x0018, ( short )0x0018, ( short )0x0078, ( short )0x00B8, + ( short )0x00C0, ( short )0x0100, ( short )0x0130, ( short )0x0128, ( short )0x0108, ( short )0x00D8, ( short )0x00C0, ( short )0x0078, + ( short )0x0038, ( short )0x0020, ( short )0x0020, ( short )0x0000, ( short )0xFFE0, ( short )0xFFE0, ( short )0xFFD8, ( short )0xFFC8, + ( short )0xFFC8, ( short )0xFFA0, ( short )0xFF88, ( short )0xFF98, ( short )0xFF80, ( short )0xFF70, ( short )0xFF80, ( short )0xFF78, + ( short )0xFF78, ( short )0xFF90, ( short )0xFF80, ( short )0xFF78, ( short )0xFF78, ( short )0xFF50, ( short )0xFF30, ( short )0xFF50, + ( short )0xFF38, ( short )0xFF30, ( short )0xFF40, ( short )0xFF58, ( short )0xFF70, ( short )0xFF80, ( short )0xFF50, ( short )0xFF38, + ( short )0xFF40, ( short )0xFF18, ( short )0xFF00, ( short )0xFF08, ( short )0xFF40, ( short )0xFF68, ( short )0xFF80, ( short )0xFF88, + ( short )0xFF88, ( short )0xFF88, ( short )0xFF88, ( short )0xFFB8, ( short )0xFFE0, ( short )0xFFF0, ( short )0xFFD0, ( short )0xFFB8, + ( short )0xFFB8, ( short )0xFF90, ( short )0xFF70, ( short )0xFF70, ( short )0xFF50, ( short )0xFF40, ( short )0xFF40, ( short )0xFF58, + ( short )0xFF70, ( short )0xFF80, ( short )0xFFC8, ( short )0x0000, ( short )0x0018, ( short )0x0030, ( short )0x0048, ( short )0x0048, + ( short )0x0028, ( short )0x0008, ( short )0xFFF8, ( short )0xFFD8, ( short )0xFFC8, ( short )0xFFB8, ( short )0xFF98, ( short )0xFF78, + ( short )0xFF70, ( short )0xFFF0, ( short )0x0058, ( short )0x0088, ( short )0x00B8, ( short )0x00D0, ( short )0x00D8, ( short )0x00E8, + ( short )0x0138, ( short )0x0160, ( short )0x0158, ( short )0x0170, ( short )0x0178, ( short )0x0160, ( short )0x0168, ( short )0x0160, + ( short )0x0140, ( short )0x0118, ( short )0x00F0, ( short )0x00C8, ( short )0x0098, ( short )0x0078, ( short )0x0060, ( short )0x0018, + ( short )0xFFC0, ( short )0xFF90, ( short )0xFF48, ( short )0xFF00, ( short )0xFEE8, ( short )0xFEC8, ( short )0xFEB8, ( short )0xFEB8, + ( short )0xFEA0, ( short )0xFE88, ( short )0xFE80, ( short )0xFEB8, ( short )0xFEF8, ( short )0xFF38, ( short )0xFFA0, ( short )0xFFE8, + ( short )0x0008, ( short )0x0030, ( short )0x0058, ( short )0x0068, ( short )0x0068, ( short )0x0070, ( short )0x0068, ( short )0x0050, + ( short )0x0040, ( short )0x0040, ( short )0x0020, ( short )0x0000, ( short )0xFFE8, ( short )0xFFF0, ( short )0xFFF8, ( short )0xFFF8, + ( short )0x0038, ( short )0x0068, ( short )0x0078, ( short )0x0038, ( short )0x0008, ( short )0xFFF0, ( short )0xFFE0, ( short )0xFFD8, + ( short )0xFFD8, ( short )0xFFE0, ( short )0xFFD0, ( short )0xFFC8, ( short )0x0000, ( short )0x0030, ( short )0x0048, ( short )0x0068, + ( short )0x0080, ( short )0x0088, ( short )0x0088, ( short )0x0088, ( short )0x0088, ( short )0x0088, ( short )0x0088, ( short )0x0078, + ( short )0x0098, ( short )0x00B0, ( short )0x00B8, ( short )0x0098, ( short )0x0070, ( short )0x0058, ( short )0x0060, ( short )0x0078, + ( short )0x00A8, ( short )0x00B8, ( short )0x00A8, ( short )0x00A0, ( short )0x0080, ( short )0x0068, ( short )0x0060, ( short )0x0058, + ( short )0x0048, ( short )0x0030, ( short )0x0038, ( short )0x0038, ( short )0x0030, ( short )0x0050, ( short )0x0058, ( short )0x0060, + ( short )0x0030, ( short )0x0008, ( short )0xFFF8, ( short )0xFF90, ( short )0xFF48, ( short )0xFF28, ( short )0xFF10, ( short )0xFEF8, + ( short )0xFEF0, ( short )0xFED8, ( short )0xFEB0, ( short )0xFEB0, ( short )0xFEA8, ( short )0xFEB8, ( short )0xFED8, ( short )0xFEF8, + ( short )0xFF10, ( short )0xFF20, ( short )0xFF40, ( short )0xFF58, ( short )0xFF80, ( short )0xFFA0, ( short )0xFFB8, ( short )0xFFC8, + ( short )0xFFD8, ( short )0xFFE0, ( short )0xFFF0, ( short )0x0048, ( short )0x0098, ( short )0x00B0, ( short )0x0068, ( short )0x0018, + ( short )0xFFF8, ( short )0xFFE8, ( short )0xFFF0, ( short )0xFFF8, ( short )0x0020, ( short )0x0038, ( short )0x0038, ( short )0x0050, + ( short )0x0068, ( short )0x0070, ( short )0x0068, ( short )0x0060, ( short )0x0060, ( short )0x0038, ( short )0x0020, ( short )0x0018, + ( short )0x0040, ( short )0x0060, ( short )0x0068, ( short )0x0040, ( short )0x0010, ( short )0x0000, ( short )0xFFB0, ( short )0xFF78, + ( short )0xFF70, ( short )0xFF90, ( short )0xFFA8, ( short )0xFFC8, ( short )0xFF98, ( short )0xFF50, ( short )0xFF50, ( short )0xFF50, + ( short )0xFF58, ( short )0xFF68, ( short )0xFF48, ( short )0xFF20, ( short )0xFF18, ( short )0xFF38, ( short )0xFF60, ( short )0xFF70, + ( short )0xFF80, ( short )0xFF98, ( short )0xFFA0, ( short )0xFFB8, ( short )0xFFD0, ( short )0xFFE0, ( short )0x0018, ( short )0x0048, + ( short )0x0058, ( short )0x00B0, ( short )0x00F8, ( short )0x0108, ( short )0x0118, ( short )0x0120, ( short )0x0118, ( short )0x0130, + ( short )0x0148, ( short )0x0140, ( short )0x0130, ( short )0x0120, ( short )0x0108, ( short )0x0098, ( short )0x0038, ( short )0x0018, + ( short )0xFFD0, ( short )0xFF90, ( short )0xFF80, ( short )0xFF58, ( short )0xFF38, ( short )0xFF30, ( short )0xFF48, ( short )0xFF68, + ( short )0xFF78, ( short )0xFF88, ( short )0xFFB8, ( short )0xFFD8, ( short )0xFFE8, ( short )0xFFD8, ( short )0xFFF0, ( short )0x0010, + ( short )0x0020, ( short )0x0020, ( short )0x0018, ( short )0x0028, ( short )0x0030, ( short )0x0030, ( short )0x0038, ( short )0x0060, + ( short )0x0080, ( short )0x0080, ( short )0x00B0, ( short )0x00D8, ( short )0x00D0, ( short )0x00B8, ( short )0x00A8, ( short )0x00A8, + ( short )0x00A0, ( short )0x0090, ( short )0x0078, ( short )0x0070, ( short )0x0068, ( short )0x0048, ( short )0x0018, ( short )0x0008, + ( short )0x0008, ( short )0x0000, ( short )0x0000, ( short )0xFFE8, ( short )0xFFB0, ( short )0xFF90, ( short )0xFF88, ( short )0xFF70, + ( short )0xFF60, ( short )0xFF60, ( short )0xFF90, ( short )0xFFC0, ( short )0xFFD0, ( short )0xFFD8, ( short )0xFFE0, ( short )0xFFE8, + ( short )0x0018, ( short )0x0050, ( short )0x0058, ( short )0x0030, ( short )0x0008, ( short )0x0000, ( short )0x0018, ( short )0x0038, + ( short )0x0038, ( short )0x0048, ( short )0x0050, ( short )0x0050, ( short )0x0020, ( short )0x0000, ( short )0xFFF8, ( short )0xFFB0, + ( short )0xFF70, ( short )0xFF68, ( short )0xFFB0, ( short )0xFFE8, ( short )0xFFF8, ( short )0xFFF8, ( short )0xFFF8, ( short )0xFFF0, + ( short )0x0030, ( short )0x0070, ( short )0x0090, ( short )0x0098, ( short )0x0098, ( short )0x0090, ( short )0x00A0, ( short )0x00B0, + ( short )0x00B8, ( short )0x00C0, ( short )0x00C0, ( short )0x00A8, ( short )0x0098, ( short )0x0088, ( short )0x0078, ( short )0x0050, + ( short )0x0030, ( short )0x0020, ( short )0xFFD8, ( short )0xFF98, ( short )0xFF88, ( short )0xFF50, ( short )0xFF20, ( short )0xFF18, + ( short )0xFEF8, ( short )0xFEE0, ( short )0xFEE8, ( short )0xFE70, ( short )0xFE08, ( short )0xFE00, ( short )0xFE48, ( short )0xFE98, + ( short )0xFEB8, ( short )0xFEE8, ( short )0xFF10, ( short )0xFF28, ( short )0xFF18, ( short )0xFF10, ( short )0xFF18, ( short )0xFF48, + ( short )0xFF70, ( short )0xFF88, ( short )0xFFE0, ( short )0x0028, ( short )0x0040, ( short )0x0058, ( short )0x0068, ( short )0x0070, + ( short )0x0078, ( short )0x0070, ( short )0x0068, ( short )0x0068, ( short )0x0078, ( short )0x0080, ( short )0x0080, ( short )0x0088, + ( short )0x0088, ( short )0x0080, ( short )0x0058, ( short )0x0030, ( short )0x0020, ( short )0x0018, ( short )0x0018, ( short )0x0018, + ( short )0x0050, ( short )0x0090, ( short )0x00A0, ( short )0x0080, ( short )0x0060, ( short )0x0050, ( short )0x0030, ( short )0x0018, + ( short )0x0010, ( short )0x0028, ( short )0x0038, ( short )0x0038, ( short )0x0018, ( short )0xFFF8, ( short )0xFFF0, ( short )0x0000, + ( short )0x0020, ( short )0x0020, ( short )0x0030, ( short )0x0030, ( short )0x0030, ( short )0x0040, ( short )0x0050, ( short )0x0050, + ( short )0x0050, ( short )0x0048, ( short )0x0048, ( short )0x0048, ( short )0x0048, ( short )0x0048, ( short )0x0078, ( short )0x00A0, + ( short )0x00A8, ( short )0x00C0, ( short )0x00C8, ( short )0x00C0, ( short )0x00D0, ( short )0x00E0, ( short )0x00D8, ( short )0x00E8, + ( short )0x00F0, ( short )0x00E0, ( short )0x0100, ( short )0x0118, ( short )0x0110, ( short )0x0100, ( short )0x00F0, ( short )0x00D8, + ( short )0x0090, ( short )0x0048, ( short )0x0028, ( short )0x0020, ( short )0x0020, ( short )0x0020, ( short )0x0038, ( short )0x0050, + ( short )0x0050, ( short )0x0050, ( short )0x0048, ( short )0x0040, ( short )0x0050, ( short )0x0060, ( short )0x0060, ( short )0x0040, + ( short )0xFFC0, ( short )0xFF58, ( short )0xFF40, ( short )0xFF90, ( short )0xFFE8, ( short )0x0000, ( short )0x0020, ( short )0x0030, + ( short )0x0030, ( short )0x0068, ( short )0x0098, ( short )0x00A8, ( short )0x0110, ( short )0x0168, ( short )0x0170, ( short )0x0148, + ( short )0x0118, ( short )0x00F0, ( short )0x00E8, ( short )0x00E0, ( short )0x00D0, ( short )0x0098, ( short )0x0060, ( short )0x0040, + ( short )0x0000, ( short )0xFFD8, ( short )0xFFD8, ( short )0xFFC0, ( short )0xFFB0, ( short )0xFFB0, ( short )0xFF78, ( short )0xFF30, + ( short )0xFF10, ( short )0xFEF0, ( short )0xFEE8, ( short )0xFEF0, ( short )0xFEC8, ( short )0xFED0, ( short )0xFEF8, ( short )0xFF00, + ( short )0xFF10, ( short )0xFF20, ( short )0xFF50, ( short )0xFF78, ( short )0xFF90, ( short )0xFF80, ( short )0xFF70, ( short )0xFF70, + ( short )0xFF80, ( short )0xFF98, ( short )0xFFA0, ( short )0xFFB8, ( short )0xFFD0, ( short )0xFFD8, ( short )0xFFF0, ( short )0x0000, + ( short )0x0008, ( short )0x0028, ( short )0x0048, ( short )0x0058, ( short )0x0078, ( short )0x0070, ( short )0x0058, ( short )0x0068, + ( short )0x0098, ( short )0x00B8, ( short )0x00D8, ( short )0x00F0, ( short )0x00F0, ( short )0x00E8, ( short )0x00F8, ( short )0x0100, + ( short )0x00D8, ( short )0x00D0, ( short )0x00C8, ( short )0x00E8, ( short )0x0100, ( short )0x00F0, ( short )0x00E0, ( short )0x00C8, + ( short )0x00B8, ( short )0x00A0, ( short )0x0078, ( short )0x0058, ( short )0x0038, ( short )0x0020, ( short )0x0010, ( short )0x0010, + ( short )0x0018, ( short )0x0010, ( short )0x0010, ( short )0x0010, ( short )0x0018, ( short )0x0028, ( short )0x0008, ( short )0xFFE0, + ( short )0xFFC8, ( short )0xFF80, ( short )0xFF48, ( short )0xFF38, ( short )0xFF40, ( short )0xFF48, ( short )0xFF48, ( short )0xFF70, + ( short )0xFF90, ( short )0xFFA8, ( short )0xFFB8, ( short )0xFFC0, ( short )0xFFC8, ( short )0xFFC0, ( short )0xFFC0, ( short )0xFFC0, + ( short )0xFFB0, ( short )0xFFA0, ( short )0xFFA0, ( short )0xFFA0, ( short )0xFFA8, ( short )0xFFB0, ( short )0xFF68, ( short )0xFF28, + ( short )0xFF08, ( short )0xFEF8, ( short )0xFEF8, ( short )0xFEE8, ( short )0xFEE0, ( short )0xFED8, ( short )0xFEA8, ( short )0xFE98, + ( short )0xFEA8, ( short )0xFEA8, ( short )0xFEA0, ( short )0xFEA0, ( short )0xFED0, ( short )0xFF00, ( short )0xFF30, ( short )0xFF28, + ( short )0xFF38, ( short )0xFF58, ( short )0xFF48, ( short )0xFF40, ( short )0xFF48, ( short )0xFFB0, ( short )0x0010, ( short )0x0038, + ( short )0x0028, ( short )0x0010, ( short )0x0008, ( short )0x0050, ( short )0x00A0, ( short )0x00B8, ( short )0x00A0, ( short )0x0080, + ( short )0x0070, ( short )0x0090, ( short )0x00B0, ( short )0x00B0, ( short )0x00B8, ( short )0x00B8, ( short )0x00B0, ( short )0x00C0, + ( short )0x00D0, ( short )0x00C8, ( short )0x00A0, ( short )0x0068, ( short )0x0038, ( short )0xFFF0, ( short )0xFFB0, ( short )0xFF88, + ( short )0xFF78, ( short )0xFF68, ( short )0xFF60, ( short )0xFF90, ( short )0xFFC0, ( short )0xFFE0, ( short )0x0000, ( short )0x0020, + ( short )0x0030, ( short )0x00A0, ( short )0x0110, ( short )0x0138, ( short )0x0140, ( short )0x0148, ( short )0x0148, ( short )0x0110, + ( short )0x00E8, ( short )0x00C0, ( short )0x00A0, ( short )0x0088, ( short )0x0068, ( short )0x0008, ( short )0xFFB0, ( short )0xFF88, + ( short )0xFF58, ( short )0xFF30, ( short )0xFF20, ( short )0xFEF8, ( short )0xFED8, ( short )0xFED8, ( short )0xFF00, ( short )0xFF20, + ( short )0xFF38, ( short )0xFF50, ( short )0xFF68, ( short )0xFF88, ( short )0xFFA0, ( short )0xFFB8, ( short )0x0020, ( short )0x0080, + ( short )0x00A0, ( short )0x00D8, ( short )0x0100, ( short )0x0100, ( short )0x0138, ( short )0x0168, ( short )0x0148, ( short )0x0128, + ( short )0x0120, ( short )0x00F8, ( short )0x00E8, ( short )0x00E0, ( short )0x00C0, ( short )0x00A8, ( short )0x00B0, ( short )0x0098, + ( short )0x0070, ( short )0x0048, ( short )0x0030, ( short )0xFFD0, ( short )0xFF60, ( short )0xFF48, ( short )0xFF10, ( short )0xFEA8, + ( short )0xFEA8, ( short )0xFEC0, ( short )0xFEC0, ( short )0xFEE8, ( short )0xFEB0, ( short )0xFE58, ( short )0xFE88, ( short )0xFED0, + ( short )0xFEB8, ( short )0xFE48, ( short )0xFE58, ( short )0xFEE8, ( short )0xFF28, ( short )0xFF18, ( short )0xFF60, ( short )0x00A0, + ( short )0x01A0, ( short )0x0188, ( short )0x0178, ( short )0x0208, ( short )0x0208, ( short )0x0100, ( short )0x0018, ( short )0xFFE0, + ( short )0xFEE0, ( short )0xFD68, ( short )0xFD00, ( short )0xFD60, ( short )0xFD70, ( short )0xFDA8, ( short )0xFF00, ( short )0x00A0, + ( short )0x0170, ( short )0x0210, ( short )0x02D8, ( short )0x0310, ( short )0x0218, ( short )0x00A0, ( short )0xFFA0, ( short )0xFDF0, + ( short )0xFBD8, ( short )0xFB08, ( short )0xF9C0, ( short )0xF830, ( short )0xF8D8, ( short )0xFCC0, ( short )0x0038, ( short )0x01A0, + ( short )0x0380, ( short )0x0A18, ( short )0x0F50, ( short )0x0DB0, ( short )0x0C30, ( short )0x0E18, ( short )0x0CA8, ( short )0x0570, + ( short )0xFF98, ( short )0xFE38, ( short )0xFBA0, ( short )0xF700, ( short )0xF5D0, ( short )0xF7C8, ( short )0xF9A8, ( short )0xFB48, + ( short )0xFBB0, ( short )0xFC78, ( short )0xFF00, ( short )0xFE98, ( short )0xFB20, ( short )0xFA48, ( short )0xFAC0, ( short )0xF8C8, + ( short )0xF6E0, ( short )0xF9C0, ( short )0xFE08, ( short )0xFF80, ( short )0x0428, ( short )0x0B70, ( short )0x0E18, ( short )0x0D38, + ( short )0x0D38, ( short )0x0C28, ( short )0x01D0, ( short )0xF578, ( short )0xF108, ( short )0xFB50, ( short )0x0498, ( short )0x0428, + ( short )0x0CE8, ( short )0x2190, ( short )0x29F0, ( short )0x22E0, ( short )0x1F68, ( short )0x2050, ( short )0x1810, ( short )0x0710, + ( short )0xFA98, ( short )0xF438, ( short )0xEE68, ( short )0xE950, ( short )0xEBC8, ( short )0xF538, ( short )0xFEB8, ( short )0x0240, + ( short )0x0460, ( short )0x09D0, ( short )0x0978, ( short )0xFFF8, ( short )0xF810, ( short )0xF190, ( short )0xE8D0, ( short )0xE290, + ( short )0xDF60, ( short )0xDFF0, ( short )0xE668, ( short )0xEC20, ( short )0xF138, ( short )0xFAC0, ( short )0x04F0, ( short )0x08D0, + ( short )0x08C8, ( short )0x0B18, ( short )0x09F8, ( short )0x0230, ( short )0xFA38, ( short )0xFA68, ( short )0xFC78, ( short )0xF9B8, + ( short )0xF850, ( short )0xFEA8, ( short )0x05B8, ( short )0x0690, ( short )0x02E8, ( short )0x0268, ( short )0x0498, ( short )0xFCB0, + ( short )0xF018, ( short )0xEDF8, ( short )0x0090, ( short )0x0F48, ( short )0x0C70, ( short )0x1278, ( short )0x27B8, ( short )0x2EA0, + ( short )0x21F8, ( short )0x1920, ( short )0x1918, ( short )0x1530, ( short )0x0638, ( short )0xF858, ( short )0xF720, ( short )0xF9F8, + ( short )0xF600, ( short )0xF850, ( short )0x0590, ( short )0x0EE0, ( short )0x1000, ( short )0x10D8, ( short )0x1460, ( short )0x10F8, + ( short )0x0500, ( short )0xFBC0, ( short )0xF7A8, ( short )0xF250, ( short )0xEC00, ( short )0xEB30, ( short )0xF1C8, ( short )0xF920, + ( short )0xFC90, ( short )0x0190, ( short )0x0A60, ( short )0x0E80, ( short )0x0DB0, ( short )0x0AD8, ( short )0x0690, ( short )0x0168, + ( short )0xFF20, ( short )0xFBD0, ( short )0xF6F8, ( short )0xF660, ( short )0xF680, ( short )0xF5B0, ( short )0xF7C0, ( short )0xF120, + ( short )0xEA90, ( short )0xF030, ( short )0xEC18, ( short )0xE190, ( short )0xE558, ( short )0xFF20, ( short )0x1090, ( short )0x0C50, + ( short )0x1248, ( short )0x2788, ( short )0x2AD0, ( short )0x1628, ( short )0x08F0, ( short )0x0BA8, ( short )0x0538, ( short )0xEF48, + ( short )0xE410, ( short )0xEB10, ( short )0xEF68, ( short )0xEA28, ( short )0xEC40, ( short )0xFC18, ( short )0x08A8, ( short )0x0818, + ( short )0x0778, ( short )0x0858, ( short )0x02F8, ( short )0xF8E8, ( short )0xF1F0, ( short )0xEF40, ( short )0xECD0, ( short )0xE958, + ( short )0xEA70, ( short )0xF260, ( short )0xFAF0, ( short )0xFFA0, ( short )0x04A0, ( short )0x0CF8, ( short )0x10F8, ( short )0x0EA0, + ( short )0x0D48, ( short )0x0BE8, ( short )0x05E0, ( short )0x03B0, ( short )0x0358, ( short )0xFF18, ( short )0xFB40, ( short )0xF9B0, + ( short )0xF9C0, ( short )0xF7C0, ( short )0xEE90, ( short )0xEAA0, ( short )0xEE00, ( short )0xE888, ( short )0xE200, ( short )0xEF00, + ( short )0x0948, ( short )0x1400, ( short )0x1270, ( short )0x1D88, ( short )0x2CD8, ( short )0x2488, ( short )0x0DA8, ( short )0x04B8, + ( short )0x0548, ( short )0xF7B0, ( short )0xE3F0, ( short )0xE268, ( short )0xEFF8, ( short )0xF5A0, ( short )0xF320, ( short )0xFC68, + ( short )0x0BF0, ( short )0x0FA0, ( short )0x0A50, ( short )0x01F8, ( short )0xFE60, ( short )0xFC48, ( short )0xF340, ( short )0xEB28, + ( short )0xED58, ( short )0xF3C0, ( short )0xF5B8, ( short )0xF738, ( short )0x00F8, ( short )0x0C70, ( short )0x0E90, ( short )0x0DE8, + ( short )0x1190, ( short )0x12B0, ( short )0x1058, ( short )0x0B98, ( short )0x0638, ( short )0x0868, ( short )0x0998, ( short )0x02B0, + ( short )0xFE50, ( short )0x0120, ( short )0x02A0, ( short )0xFC90, ( short )0xF810, ( short )0xF9D0, ( short )0xF818, ( short )0xF290, + ( short )0xF240, ( short )0xF6D0, ( short )0x0A48, ( short )0x1AD8, ( short )0x1840, ( short )0x1C18, ( short )0x2B18, ( short )0x29F0, + ( short )0x1608, ( short )0x08B8, ( short )0x0778, ( short )0x0128, ( short )0xF118, ( short )0xE868, ( short )0xEDA0, ( short )0xF310, + ( short )0xF248, ( short )0xF558, ( short )0x0058, ( short )0x0970, ( short )0x0688, ( short )0x0108, ( short )0xFD08, ( short )0xF988, + ( short )0xF558, ( short )0xF0A0, ( short )0xF0B0, ( short )0xF540, ( short )0xF6E8, ( short )0xFCA0, ( short )0x0758, ( short )0x0CD0, + ( short )0x0F60, ( short )0x1338, ( short )0x1458, ( short )0x1278, ( short )0x0FD0, ( short )0x0CA8, ( short )0x0D50, ( short )0x0D10, + ( short )0x0798, ( short )0x0398, ( short )0x0428, ( short )0x04F0, ( short )0x0278, ( short )0xFF98, ( short )0x0178, ( short )0x0088, + ( short )0xFB08, ( short )0xF660, ( short )0xF1A8, ( short )0xEF18, ( short )0xF9E8, ( short )0x0C00, ( short )0x11C8, ( short )0x1260, + ( short )0x1B60, ( short )0x21B0, ( short )0x18E0, ( short )0x0B08, ( short )0x04C8, ( short )0x0078, ( short )0xF730, ( short )0xEF60, + ( short )0xEB18, ( short )0xEC10, ( short )0xF290, ( short )0xF800, ( short )0xFB60, ( short )0xFF60, ( short )0x0080, ( short )0xFFA8, + ( short )0xFB08, ( short )0xF1A8, ( short )0xED10, ( short )0xEFF0, ( short )0xEED0, ( short )0xEB10, ( short )0xEFE8, ( short )0xF8F0, + ( short )0xFDE0, ( short )0x0298, ( short )0x0528, ( short )0x0598, ( short )0x0928, ( short )0x0A30, ( short )0x0670, ( short )0x08E8, + ( short )0x0BC0, ( short )0x0698, ( short )0x0210, ( short )0x0390, ( short )0x0560, ( short )0x0288, ( short )0xF910, ( short )0xF468, + ( short )0xF560, ( short )0xF3E0, ( short )0xEE10, ( short )0xE8B0, ( short )0xE508, ( short )0xEED0, ( short )0x03E0, ( short )0x0638, + ( short )0xFFA8, ( short )0x0BB8, ( short )0x2078, ( short )0x1FA8, ( short )0x0EF0, ( short )0x0648, ( short )0x05C8, ( short )0xFF18, + ( short )0xF588, ( short )0xEE20, ( short )0xED88, ( short )0xF5A0, ( short )0xFBA8, ( short )0xFBC0, ( short )0xFA98, ( short )0xFA20, + ( short )0xF7D8, ( short )0xF2D0, ( short )0xEF48, ( short )0xE998, ( short )0xE378, ( short )0xE530, ( short )0xE868, ( short )0xE890, + ( short )0xEDD0, ( short )0xF798, ( short )0xFBC0, ( short )0xFD20, ( short )0x0178, ( short )0x0490, ( short )0x04A0, ( short )0x0758, + ( short )0x0858, ( short )0x0490, ( short )0x04F8, ( short )0x0858, ( short )0x06F0, ( short )0x05F8, ( short )0x0450, ( short )0x0098, + ( short )0xFE60, ( short )0xFDA0, ( short )0xF9E0, ( short )0xF358, ( short )0xEDC0, ( short )0xF308, ( short )0xFFE0, ( short )0x0018, + ( short )0xFB80, ( short )0x0948, ( short )0x1DB8, ( short )0x1D08, ( short )0x0F88, ( short )0x0B48, ( short )0x0C50, ( short )0x09C0, + ( short )0xFF78, ( short )0xF1A0, ( short )0xEF28, ( short )0xF6B8, ( short )0xF9F0, ( short )0xF6F0, ( short )0xF688, ( short )0xF9E0, + ( short )0xF9C0, ( short )0xF4C8, ( short )0xEBD8, ( short )0xE7E8, ( short )0xEBE0, ( short )0xE8C8, ( short )0xE100, ( short )0xE518, + ( short )0xF0B8, ( short )0xF728, ( short )0xF770, ( short )0xF878, ( short )0xFF58, ( short )0x06B0, ( short )0x0430, ( short )0x0060, + ( short )0x0390, ( short )0x0A18, ( short )0x0B98, ( short )0x06C8, ( short )0x0710, ( short )0x0CF0, ( short )0x08D0, ( short )0x01F8, + ( short )0x0280, ( short )0x0238, ( short )0xFD78, ( short )0xF868, ( short )0xF198, ( short )0xF670, ( short )0x0930, ( short )0x0A78, + ( short )0xFB38, ( short )0x04F0, ( short )0x1EB8, ( short )0x1E98, ( short )0x0F68, ( short )0x0EC8, ( short )0x1548, ( short )0x1480, + ( short )0x0C60, ( short )0x00B0, ( short )0xFEF8, ( short )0x0830, ( short )0x0838, ( short )0x0160, ( short )0x0380, ( short )0x07E8, + ( short )0x0270, ( short )0xFBA0, ( short )0xF9C0, ( short )0xF450, ( short )0xEE08, ( short )0xED08, ( short )0xEE10, ( short )0xEF20, + ( short )0xF1C0, ( short )0xF800, ( short )0xFE70, ( short )0x00B0, ( short )0x02D8, ( short )0x07C8, ( short )0x09F0, ( short )0x09A8, + ( short )0x0A60, ( short )0x0B28, ( short )0x0C80, ( short )0x0D58, ( short )0x0BD0, ( short )0x0A48, ( short )0x0900, ( short )0x0768, + ( short )0x03D0, ( short )0x00E0, ( short )0xFFF8, ( short )0xFBD8, ( short )0xF5E8, ( short )0xFE18, ( short )0x0FE8, ( short )0x1060, + ( short )0x05C8, ( short )0x1078, ( short )0x2638, ( short )0x2580, ( short )0x1740, ( short )0x14E8, ( short )0x19D0, ( short )0x17D8, + ( short )0x0E10, ( short )0x0270, ( short )0x0120, ( short )0x0900, ( short )0x0870, ( short )0x0290, ( short )0x03A0, ( short )0x0600, + ( short )0x0100, ( short )0xFE28, ( short )0xFF28, ( short )0xF838, ( short )0xF0B8, ( short )0xF238, ( short )0xF530, ( short )0xF440, + ( short )0xF440, ( short )0xFA38, ( short )0x0198, ( short )0x03A8, ( short )0x03D0, ( short )0x0780, ( short )0x0AB8, ( short )0x0B58, + ( short )0x0B10, ( short )0x0AD8, ( short )0x0A08, ( short )0x0878, ( short )0x07C8, ( short )0x0648, ( short )0x01A0, ( short )0xFF48, + ( short )0xFE58, ( short )0xFA68, ( short )0xF7D0, ( short )0xF758, ( short )0xF470, ( short )0xF5B0, ( short )0x02A8, ( short )0x0A58, + ( short )0x0448, ( short )0x07C8, ( short )0x1708, ( short )0x1970, ( short )0x0EC8, ( short )0x0A40, ( short )0x0CD0, ( short )0x0D28, + ( short )0x0838, ( short )0x0010, ( short )0xFAE0, ( short )0xFCB0, ( short )0xFEB8, ( short )0xFCE8, ( short )0xFBA8, ( short )0xFD10, + ( short )0xFBC8, ( short )0xF910, ( short )0xF960, ( short )0xF830, ( short )0xF4D8, ( short )0xF500, ( short )0xF860, ( short )0xF9F0, + ( short )0xFB58, ( short )0xFE48, ( short )0x0050, ( short )0x0418, ( short )0x0910, ( short )0x0940, ( short )0x0830, ( short )0x0AC8, + ( short )0x0C88, ( short )0x0A50, ( short )0x07C0, ( short )0x0700, ( short )0x0590, ( short )0x0268, ( short )0xFFF0, ( short )0xFBA8, + ( short )0xF720, ( short )0xF698, ( short )0xF2E0, ( short )0xEB68, ( short )0xEDA0, ( short )0xFC00, ( short )0x0358, ( short )0xFF30, + ( short )0x0398, ( short )0x1220, ( short )0x1860, ( short )0x1368, ( short )0x10C0, ( short )0x12F0, ( short )0x12A0, ( short )0x0E08, + ( short )0x0780, ( short )0x0010, ( short )0xFAD8, ( short )0xF990, ( short )0xF7E0, ( short )0xF278, ( short )0xEE10, ( short )0xEB98, + ( short )0xE7A0, ( short )0xE6F8, ( short )0xEA30, ( short )0xE980, ( short )0xE420, ( short )0xE440, ( short )0xEBA8, ( short )0xEF98, + ( short )0xEF68, ( short )0xF288, ( short )0xF7A8, ( short )0xFC90, ( short )0x01F8, ( short )0x0528, ( short )0x0630, ( short )0x08E8, + ( short )0x0C98, ( short )0x0D50, ( short )0x0B98, ( short )0x0920, ( short )0x0678, ( short )0x03F0, ( short )0x0260, ( short )0xFE00, + ( short )0xF810, ( short )0xF4B8, ( short )0xF0C0, ( short )0xEB68, ( short )0xEF58, ( short )0xFAE8, ( short )0xFDE0, ( short )0xF680, + ( short )0xF910, ( short )0x06E0, ( short )0x0C20, ( short )0x05D8, ( short )0x0408, ( short )0x05C8, ( short )0x0450, ( short )0x02D0, + ( short )0x0128, ( short )0xFB78, ( short )0xF668, ( short )0xF430, ( short )0xF150, ( short )0xED90, ( short )0xE870, ( short )0xE448, + ( short )0xE2E0, ( short )0xE048, ( short )0xDDD0, ( short )0xDF08, ( short )0xE0E0, ( short )0xE098, ( short )0xE258, ( short )0xE520, + ( short )0xE6A8, ( short )0xEA28, ( short )0xEF88, ( short )0xF2A8, ( short )0xF548, ( short )0xFBA8, ( short )0x01C8, ( short )0x03F8, + ( short )0x0748, ( short )0x0C88, ( short )0x0E98, ( short )0x0DB8, ( short )0x0D98, ( short )0x0D50, ( short )0x0B68, ( short )0x0970, + ( short )0x06C0, ( short )0x0238, ( short )0xFE18, ( short )0xFB08, ( short )0xF820, ( short )0xF780, ( short )0xF970, ( short )0xF9B0, + ( short )0xF880, ( short )0xFA28, ( short )0x0028, ( short )0x0698, ( short )0x0948, ( short )0x08D0, ( short )0x09E0, ( short )0x0DD0, + ( short )0x1010, ( short )0x0D40, ( short )0x0958, ( short )0x0728, ( short )0x0308, ( short )0xFDA0, ( short )0xF9F8, ( short )0xF418, + ( short )0xEC98, ( short )0xE8B8, ( short )0xE618, ( short )0xE200, ( short )0xDED0, ( short )0xDF48, ( short )0xE100, ( short )0xE180, + ( short )0xE160, ( short )0xE3C8, ( short )0xE898, ( short )0xEDD8, ( short )0xF250, ( short )0xF558, ( short )0xFB00, ( short )0x02F8, + ( short )0x07B0, ( short )0x0B80, ( short )0x1108, ( short )0x1518, ( short )0x1660, ( short )0x1770, ( short )0x1870, ( short )0x16F8, + ( short )0x1300, ( short )0x0F78, ( short )0x0FC0, ( short )0x1070, ( short )0x0CE8, ( short )0x0AF8, ( short )0x0BD8, ( short )0x0D28, + ( short )0x10A8, ( short )0x1370, ( short )0x10A0, ( short )0x1040, ( short )0x1518, ( short )0x1740, ( short )0x1550, ( short )0x1398, + ( short )0x10E0, ( short )0x0AC8, ( short )0x0640, ( short )0x0348, ( short )0xFD18, ( short )0xF658, ( short )0xF1D8, ( short )0xEC20, + ( short )0xE760, ( short )0xE550, ( short )0xE4B8, ( short )0xE418, ( short )0xE438, ( short )0xE508, ( short )0xE738, ( short )0xEB18, + ( short )0xF0C8, ( short )0xF618, ( short )0xF988, ( short )0xFEC8, ( short )0x0518, ( short )0x09D8, ( short )0x1118, ( short )0x17F0, + ( short )0x1BB0, ( short )0x1E28, ( short )0x2120, ( short )0x23D8, ( short )0x2638, ( short )0x2418, ( short )0x2080, ( short )0x1D30, + ( short )0x1CE8, ( short )0x1D98, ( short )0x1CA8, ( short )0x1AD8, ( short )0x1960, ( short )0x17F8, ( short )0x1A40, ( short )0x1CF8, + ( short )0x1D38, ( short )0x1C30, ( short )0x1A68, ( short )0x1860, ( short )0x1480, ( short )0x1020, ( short )0x0B68, ( short )0x03E8, + ( short )0xFBA8, ( short )0xF508, ( short )0xEE40, ( short )0xE820, ( short )0xE338, ( short )0xDE88, ( short )0xDA30, ( short )0xD7D0, + ( short )0xD728, ( short )0xD7D8, ( short )0xD998, ( short )0xDC10, ( short )0xDFB0, ( short )0xE470, ( short )0xE948, ( short )0xEF98, + ( short )0xF5F0, ( short )0xFC38, ( short )0x0228, ( short )0x0798, ( short )0x0D98, ( short )0x1320, ( short )0x1760, ( short )0x1A70, + ( short )0x1BE0, ( short )0x1CC0, ( short )0x1D98, ( short )0x1A88, ( short )0x1658, ( short )0x12A0, ( short )0x1180, ( short )0x10A8, + ( short )0x0ED0, ( short )0x0CC8, ( short )0x0AD8, ( short )0x0920, ( short )0x0B70, ( short )0x0E30, ( short )0x0EE8, ( short )0x0D80, + ( short )0x0BE0, ( short )0x0AC0, ( short )0x09B8, ( short )0x0890, ( short )0x0690, ( short )0x01F8, ( short )0xFD30, ( short )0xF9F0, + ( short )0xF5B0, ( short )0xF188, ( short )0xEE38, ( short )0xE9E8, ( short )0xE5E8, ( short )0xE3E0, ( short )0xE4A0, ( short )0xE608, + ( short )0xE738, ( short )0xE858, ( short )0xE980, ( short )0xEC20, ( short )0xF030, ( short )0xF450, ( short )0xF878, ( short )0xFC68, + ( short )0xFF68, ( short )0x03C8, ( short )0x08B8, ( short )0x0D00, ( short )0x1038, ( short )0x12D8, ( short )0x1490, ( short )0x1648, + ( short )0x16B8, ( short )0x1468, ( short )0x1160, ( short )0x0FA8, ( short )0x1038, ( short )0x1058, ( short )0x0F88, ( short )0x0E50, + ( short )0x0CC8, ( short )0x0CC0, ( short )0x0FC0, ( short )0x1220, ( short )0x12A0, ( short )0x10F8, ( short )0x0F20, ( short )0x0D28, + ( short )0x0C78, ( short )0x0BB8, ( short )0x08D0, ( short )0x01C8, ( short )0xFB38, ( short )0xF660, ( short )0xF330, ( short )0xF078, + ( short )0xEC28, ( short )0xE6C8, ( short )0xE2C0, ( short )0xE050, ( short )0xDFC8, ( short )0xE038, ( short )0xE160, ( short )0xE300, + ( short )0xE568, ( short )0xE6B8, ( short )0xE9A0, ( short )0xED50, ( short )0xF238, ( short )0xF6D8, ( short )0xFB08, ( short )0xFF10, + ( short )0x02E8, ( short )0x06A0, ( short )0x0AC0, ( short )0x0DC8, ( short )0x1010, ( short )0x1168, ( short )0x1018, ( short )0x0E90, + ( short )0x0BF8, ( short )0x0B08, ( short )0x0A50, ( short )0x09F0, ( short )0x0960, ( short )0x0888, ( short )0x0808, ( short )0x09C8, + ( short )0x0BA8, ( short )0x0EE8, ( short )0x1070, ( short )0x10D0, ( short )0x0F58, ( short )0x0D60, ( short )0x0BA0, ( short )0x0A60, + ( short )0x08F0, ( short )0x0608, ( short )0xFFB0, ( short )0xF938, ( short )0xF360, ( short )0xF030, ( short )0xEE20, ( short )0xEB70, + ( short )0xE7A8, ( short )0xE410, ( short )0xE140, ( short )0xDFC8, ( short )0xDFF8, ( short )0xE1F0, ( short )0xE448, ( short )0xE6D0, + ( short )0xE780, ( short )0xE9E8, ( short )0xECF0, ( short )0xF248, ( short )0xF730, ( short )0xFBC0, ( short )0xFF80, ( short )0x0310, + ( short )0x0670, ( short )0x0A98, ( short )0x0D88, ( short )0x0FD8, ( short )0x10C0, ( short )0x0EB0, ( short )0x0C48, ( short )0x08B8, + ( short )0x0998, ( short )0x0AC0, ( short )0x0C68, ( short )0x0B78, ( short )0x09C8, ( short )0x0838, ( short )0x08F8, ( short )0x0A80, + ( short )0x0CA0, ( short )0x0E10, ( short )0x0E48, ( short )0x0D58, ( short )0x0A28, ( short )0x0750, ( short )0x04F0, ( short )0x0228, + ( short )0xFEE8, ( short )0xFA80, ( short )0xF468, ( short )0xEED0, ( short )0xEAE0, ( short )0xE8B8, ( short )0xE718, ( short )0xE5B0, + ( short )0xE4A8, ( short )0xE410, ( short )0xE480, ( short )0xE548, ( short )0xE738, ( short )0xE9B0, ( short )0xED80, ( short )0xF0B8, + ( short )0xF480, ( short )0xF7B0, ( short )0xFB70, ( short )0xFED0, ( short )0x0328, ( short )0x0720, ( short )0x0A98, ( short )0x0E00, + ( short )0x10F8, ( short )0x12E0, ( short )0x12A8, ( short )0x11B0, ( short )0x0F58, ( short )0x0F38, ( short )0x0E88, ( short )0x0F08, + ( short )0x0FC0, ( short )0x0FF0, ( short )0x10B8, ( short )0x1138, ( short )0x1198, ( short )0x13D0, ( short )0x1638, ( short )0x17E8, + ( short )0x1758, ( short )0x1628, ( short )0x1460, ( short )0x10E8, ( short )0x0CA0, ( short )0x0848, ( short )0x0280, ( short )0xFC90, + ( short )0xF700, ( short )0xF0F8, ( short )0xEB18, ( short )0xE638, ( short )0xE1B8, ( short )0xDE78, ( short )0xDC58, ( short )0xDBB8, + ( short )0xDC28, ( short )0xDDB0, ( short )0xE030, ( short )0xE330, ( short )0xE6F0, ( short )0xEC20, ( short )0xF210, ( short )0xF7C0, + ( short )0xFCE0, ( short )0x0150, ( short )0x0570, ( short )0x08F0, ( short )0x0C70, ( short )0x0F50, ( short )0x12B8, ( short )0x1560, + ( short )0x16E0, ( short )0x1630, ( short )0x14E8, ( short )0x1298, ( short )0x11B8, ( short )0x1170, ( short )0x11B8, ( short )0x11C0, + ( short )0x0FE8, ( short )0x0E58, ( short )0x0CB8, ( short )0x0C50, ( short )0x0D68, ( short )0x0E98, ( short )0x0E30, ( short )0x0C28, + ( short )0x0A10, ( short )0x06D8, ( short )0x02E0, ( short )0xFEA0, ( short )0xFA18, ( short )0xF4E8, ( short )0xF018, ( short )0xEB68, + ( short )0xE6E8, ( short )0xE310, ( short )0xDFC8, ( short )0xDD38, ( short )0xDBF8, ( short )0xDC38, ( short )0xDDD0, ( short )0xE070, + ( short )0xE390, ( short )0xE760, ( short )0xEB88, ( short )0xEF20, ( short )0xF378, ( short )0xF830, ( short )0xFCE0, ( short )0x00F8, + ( short )0x0480, ( short )0x0768, ( short )0x0968, ( short )0x0AE0, ( short )0x0BB8, ( short )0x0C10, ( short )0x0BB0, ( short )0x0A78, + ( short )0x08E0, ( short )0x06E8, ( short )0x0540, ( short )0x0870, ( short )0x0BE0, ( short )0x0ED0, ( short )0x0E40, ( short )0x0D10, + ( short )0x0CC8, ( short )0x0E28, ( short )0x0FA0, ( short )0x0FB0, ( short )0x0F18, ( short )0x0DD0, ( short )0x0BC8, ( short )0x08E8, + ( short )0x0628, ( short )0x0300, ( short )0xFF18, ( short )0xFB40, ( short )0xF780, ( short )0xF388, ( short )0xF028, ( short )0xED80, + ( short )0xEB18, ( short )0xE968, ( short )0xE8C0, ( short )0xE738, ( short )0xE658, ( short )0xE698, ( short )0xE888, ( short )0xEB38, + ( short )0xEDA0, ( short )0xF178, ( short )0xF5B8, ( short )0xFA28, ( short )0xFEA8, ( short )0x0300, ( short )0x06C8, ( short )0x0960, + ( short )0x0B70, ( short )0x0CE0, ( short )0x0D70, ( short )0x0D50, ( short )0x0C60, ( short )0x0890, ( short )0x0418, ( short )0x0028, + ( short )0x01D0, ( short )0x03F8, ( short )0x05A8, ( short )0x0700, ( short )0x0808, ( short )0x09A0, ( short )0x0B18, ( short )0x0CC8, + ( short )0x0D90, ( short )0x0E68, ( short )0x0EC0, ( short )0x0E30, ( short )0x0C28, ( short )0x09D8, ( short )0x0730, ( short )0x0308, + ( short )0xFED8, ( short )0xFAC0, ( short )0xF598, ( short )0xF0D8, ( short )0xECE0, ( short )0xEAA8, ( short )0xE948, ( short )0xE8D0, + ( short )0xE850, ( short )0xE888, ( short )0xE910, ( short )0xEAD0, ( short )0xED68, ( short )0xF018, ( short )0xF350, ( short )0xF6B8, + ( short )0xFAE0, ( short )0xFF00, ( short )0x02D8, ( short )0x05E8, ( short )0x0830, ( short )0x09F8, ( short )0x0B08, ( short )0x0B80, + ( short )0x0B60, ( short )0x0988, ( short )0x0648, ( short )0x02D0, ( short )0x0150, ( short )0x01E8, ( short )0x0270, ( short )0x03E0, + ( short )0x0538, ( short )0x0658, ( short )0x0918, ( short )0x0C00, ( short )0x0E88, ( short )0x10B8, ( short )0x12A0, ( short )0x13E0, + ( short )0x1488, ( short )0x1448, ( short )0x1368, ( short )0x1120, ( short )0x0DD0, ( short )0x0A40, ( short )0x0608, ( short )0x0148, + ( short )0xFC80, ( short )0xF860, ( short )0xF4D8, ( short )0xF1C0, ( short )0xF008, ( short )0xEF38, ( short )0xEE78, ( short )0xEE98, + ( short )0xEF90, ( short )0xF170, ( short )0xF390, ( short )0xF5C0, ( short )0xF888, ( short )0xFB48, ( short )0xFDF0, ( short )0x0078, + ( short )0x03D0, ( short )0x06C8, ( short )0x08F8, ( short )0x0AA0, ( short )0x0BC8, ( short )0x0C48, ( short )0x0B30, ( short )0x0978, + ( short )0x06A8, ( short )0x0530, ( short )0x03F0, ( short )0x0438, ( short )0x03C0, ( short )0x0350, ( short )0x0360, ( short )0x04E8, + ( short )0x0698, ( short )0x07D0, ( short )0x08D0, ( short )0x0998, ( short )0x0A70, ( short )0x0B48, ( short )0x0B70, ( short )0x0AD0, + ( short )0x09C0, ( short )0x0890, ( short )0x0730, ( short )0x0588, ( short )0x0358, ( short )0x0140, ( short )0xFF58, ( short )0xFD40, + ( short )0xFB68, ( short )0xF9E8, ( short )0xF828, ( short )0xF6D0, ( short )0xF608, ( short )0xF5D8, ( short )0xF610, ( short )0xF668, + ( short )0xF778, ( short )0xF8E8, ( short )0xFA48, ( short )0xFCC8, ( short )0xFF50, ( short )0x01C8, ( short )0x0428, ( short )0x0640, + ( short )0x07D0, ( short )0x09D0, ( short )0x0B40, ( short )0x0BF8, ( short )0x0C30, ( short )0x0C08, ( short )0x0B08, ( short )0x0988, + ( short )0x07C0, ( short )0x0670, ( short )0x0608, ( short )0x0590, ( short )0x0588, ( short )0x05B0, ( short )0x05E0, ( short )0x06B8, + ( short )0x0748, ( short )0x0758, ( short )0x0700, ( short )0x06A8, ( short )0x0620, ( short )0x05D8, ( short )0x0590, ( short )0x0528, + ( short )0x03A8, ( short )0x0240, ( short )0x0108, ( short )0xFF38, ( short )0xFD50, ( short )0xFBA0, ( short )0xFA38, ( short )0xF920, + ( short )0xF860, ( short )0xF6E8, ( short )0xF640, ( short )0xF628, ( short )0xF680, ( short )0xF720, ( short )0xF800, ( short )0xF8E0, + ( short )0xF9A0, ( short )0xFA78, ( short )0xFB88, ( short )0xFD20, ( short )0xFEA0, ( short )0x0008, ( short )0x0110, ( short )0x0200, + ( short )0x0360, ( short )0x04E0, ( short )0x0608, ( short )0x0738, ( short )0x0838, ( short )0x08D8, ( short )0x0828, ( short )0x0738, + ( short )0x0600, ( short )0x04A8, ( short )0x02E0, ( short )0x0130, ( short )0xFFA0, ( short )0xFF48, ( short )0xFF10, ( short )0xFEF0, + ( short )0xFF30, ( short )0xFFD0, ( short )0x0090, ( short )0x0090, ( short )0x0070, ( short )0x0060, ( short )0xFFE8, ( short )0xFF50, + ( short )0xFEB8, ( short )0xFE98, ( short )0xFE88, ( short )0xFE80, ( short )0xFE58, ( short )0xFE50, ( short )0xFE58, ( short )0xFDB0, + ( short )0xFD08, ( short )0xFC80, ( short )0xFAF8, ( short )0xF988, ( short )0xF860, ( short )0xF798, ( short )0xF720, ( short )0xF6E8, + ( short )0xF728, ( short )0xF7C0, ( short )0xF8A8, ( short )0xF8F8, ( short )0xF960, ( short )0xFA18, ( short )0xFAC0, ( short )0xFB58, + ( short )0xFC18, ( short )0xFCE0, ( short )0xFDA0, ( short )0xFE20, ( short )0xFE88, ( short )0xFEF8, ( short )0xFEF0, ( short )0xFEC8, + ( short )0xFEA8, ( short )0xFDE0, ( short )0xFD10, ( short )0xFC70, ( short )0xFBA8, ( short )0xFB10, ( short )0xFAB8, ( short )0xFAA0, + ( short )0xFAD0, ( short )0xFB18, ( short )0xFA90, ( short )0xFA18, ( short )0xFA10, ( short )0xFA80, ( short )0xFB10, ( short )0xFB88, + ( short )0xFC90, ( short )0xFDB8, ( short )0xFEB8, ( short )0xFF80, ( short )0x0058, ( short )0x0138, ( short )0x0118, ( short )0x00C8, + ( short )0x00C0, ( short )0xFF98, ( short )0xFE30, ( short )0xFD38, ( short )0xFC68, ( short )0xFB78, ( short )0xFAB8, ( short )0xFAE8, + ( short )0xFB78, ( short )0xFBD0, ( short )0xFBE8, ( short )0xFC18, ( short )0xFC98, ( short )0xFD28, ( short )0xFD48, ( short )0xFD68, + ( short )0xFD68, ( short )0xFD90, ( short )0xFDB8, ( short )0xFD90, ( short )0xFD68, ( short )0xFD78, ( short )0xFCA0, ( short )0xFB70, + ( short )0xFAD0, ( short )0xF9F0, ( short )0xF870, ( short )0xF748, ( short )0xF748, ( short )0xF770, ( short )0xF748, ( short )0xF720, + ( short )0xF7A8, ( short )0xF878, ( short )0xF930, ( short )0xF998, ( short )0xFA38, ( short )0xFC10, ( short )0xFDA0, ( short )0xFE70, + ( short )0x0030, ( short )0x0248, ( short )0x03A0, ( short )0x0568, ( short )0x0738, ( short )0x0870, ( short )0x0960, ( short )0x0A10, + ( short )0x0A40, ( short )0x0A28, ( short )0x09B8, ( short )0x08E8, ( short )0x07E8, ( short )0x06E0, ( short )0x0588, ( short )0x0430, + ( short )0x0300, ( short )0x0260, ( short )0x01D0, ( short )0x0118, ( short )0xFFB0, ( short )0xFE98, ( short )0xFE18, ( short )0xFDA0, + ( short )0xFD08, ( short )0xFCB8, ( short )0xFCF8, ( short )0xFD60, ( short )0xFD90, ( short )0xFD90, ( short )0xFDD8, ( short )0xFE50, + ( short )0xFDA0, ( short )0xFCE0, ( short )0xFCC0, ( short )0xFCE8, ( short )0xFCB0, ( short )0xFC60, ( short )0xFC70, ( short )0xFCB8, + ( short )0xFCE0, ( short )0xFD40, ( short )0xFDD8, ( short )0xFE68, ( short )0xFF78, ( short )0x0068, ( short )0x0108, ( short )0x0278, + ( short )0x03A0, ( short )0x0420, ( short )0x0590, ( short )0x0708, ( short )0x07B8, ( short )0x07D8, ( short )0x0808, ( short )0x0838, + ( short )0x07D8, ( short )0x06E8, ( short )0x0600, ( short )0x05B0, ( short )0x0518, ( short )0x0410, ( short )0x02A0, ( short )0x0198, + ( short )0x00D0, ( short )0x00C8, ( short )0x00B0, ( short )0x0068, ( short )0x00C0, ( short )0x0150, ( short )0x0180, ( short )0x0220, + ( short )0x02D8, ( short )0x0340, ( short )0x0360, ( short )0x0380, ( short )0x0380, ( short )0x0338, ( short )0x02C8, ( short )0x02B8, + ( short )0x0280, ( short )0x0200, ( short )0x0100, ( short )0x0098, ( short )0x0080, ( short )0x0020, ( short )0xFFF0, ( short )0x0000, + ( short )0x0020, ( short )0x0098, ( short )0x0120, ( short )0x0170, ( short )0x0230, ( short )0x02F0, ( short )0x0350, ( short )0x0480, + ( short )0x05B8, ( short )0x0650, ( short )0x06A8, ( short )0x0738, ( short )0x0798, ( short )0x07B0, ( short )0x07C0, ( short )0x0798, + ( short )0x0668, ( short )0x0598, ( short )0x0530, ( short )0x04C8, ( short )0x0410, ( short )0x0350, ( short )0x0278, ( short )0x01D8, + ( short )0x0148, ( short )0x0080, ( short )0x0000, ( short )0xFFC0, ( short )0xFFD8, ( short )0xFFA8, ( short )0xFF60, ( short )0xFF80, + ( short )0x0018, ( short )0x0070, ( short )0xFFE0, ( short )0xFF88, ( short )0xFFC0, ( short )0xFF38, ( short )0xFE98, ( short )0xFE50, + ( short )0xFE10, ( short )0xFDD8, ( short )0xFD90, ( short )0xFD30, ( short )0xFDB8, ( short )0xFE68, ( short )0xFE70, ( short )0xFE60, + ( short )0xFE70, ( short )0xFED0, ( short )0xFF90, ( short )0xFFE0, ( short )0xFFF0, ( short )0x00A8, ( short )0x0168, ( short )0x01D0, + ( short )0x01F8, ( short )0x0210, ( short )0x0278, ( short )0x0268, ( short )0x0208, ( short )0x0220, ( short )0x01F8, ( short )0x0198, + ( short )0x0158, ( short )0x0100, ( short )0x00C0, ( short )0x00A0, ( short )0x0018, ( short )0xFF98, ( short )0xFF28, ( short )0xFEC0, + ( short )0xFE80, ( short )0xFE60, ( short )0xFD88, ( short )0xFCF0, ( short )0xFCC8, ( short )0xFC70, ( short )0xFC10, ( short )0xFBC8, + ( short )0xFBB0, ( short )0xFBE8, ( short )0xFBE8, ( short )0xFB80, ( short )0xFB88, ( short )0xFB40, ( short )0xFB18, ( short )0xFB20, + ( short )0xFAB8, ( short )0xFA50, ( short )0xFA50, ( short )0xFAB8, ( short )0xFAF8, ( short )0xFB18, ( short )0xFBB0, ( short )0xFC88, + ( short )0xFD10, ( short )0xFD40, ( short )0xFD98, ( short )0xFE38, ( short )0xFEE0, ( short )0xFEF8, ( short )0xFEF0, ( short )0xFF18, + ( short )0xFF18, ( short )0xFF18, ( short )0xFF68, ( short )0xFF98, ( short )0xFF98, ( short )0xFFD0, ( short )0xFFF8, ( short )0x0048, + ( short )0x0038, ( short )0x0008, ( short )0x0008, ( short )0xFFE0, ( short )0xFFB0, ( short )0xFFB8, ( short )0xFED0, ( short )0xFE18, + ( short )0xFE18, ( short )0xFDF0, ( short )0xFE38, ( short )0xFE90, ( short )0xFE90, ( short )0xFDA8, ( short )0xFD48, ( short )0xFD70, + ( short )0xFD68, ( short )0xFD00, ( short )0xFCB8, ( short )0xFCB8, ( short )0xFCF8, ( short )0xFD00, ( short )0xFC30, ( short )0xFBD0, + ( short )0xFC10, ( short )0xFC20, ( short )0xFBE0, ( short )0xFBA8, ( short )0xFC30, ( short )0xFD00, ( short )0xFD50, ( short )0xFD90, + ( short )0xFE10, ( short )0xFEA8, ( short )0xFF40, ( short )0xFFA0, ( short )0xFFD0, ( short )0xFFC8, ( short )0xFFC8, ( short )0xFFD8, + ( short )0xFFA0, ( short )0xFF98, ( short )0xFFB8, ( short )0x0050, ( short )0x00B8, ( short )0x00B0, ( short )0x01B0, ( short )0x02E0, + ( short )0x0318, ( short )0x0330, ( short )0x02E0, ( short )0x02C8, ( short )0x0278, ( short )0x0150, ( short )0x0050, ( short )0xFFC0, + ( short )0xFF88, ( short )0xFF18, ( short )0xFE90, ( short )0xFE40, ( short )0xFE30, ( short )0xFDE8, ( short )0xFDD0, ( short )0xFD70, + ( short )0xFD48, ( short )0xFD10, ( short )0xFC98, ( short )0xFC38, ( short )0xFC38, ( short )0xFC78, ( short )0xFC98, ( short )0xFCF0, + ( short )0xFDA8, ( short )0xFE48, ( short )0xFEC8, ( short )0xFF30, ( short )0xFF98, ( short )0x0000, ( short )0x0050, ( short )0x0058, + ( short )0x00A8, ( short )0x00E8, ( short )0x00D0, ( short )0x0138, ( short )0x01E0, ( short )0x0218, ( short )0x0208, ( short )0x0230, + ( short )0x0258, ( short )0x0248, ( short )0x02B0, ( short )0x0318, ( short )0x0330, ( short )0x0358, ( short )0x0380, ( short )0x0378, + ( short )0x0408, ( short )0x0480, ( short )0x0460, ( short )0x03C8, ( short )0x0318, ( short )0x02B0, ( short )0x01E8, ( short )0x00B8, + ( short )0xFFD8, ( short )0xFF30, ( short )0xFEC8, ( short )0xFE60, ( short )0xFE60, ( short )0xFE78, ( short )0xFE78, ( short )0xFDC0, + ( short )0xFD70, ( short )0xFD50, ( short )0xFD08, ( short )0xFC88, ( short )0xFC28, ( short )0xFC98, ( short )0xFD18, ( short )0xFD60, + ( short )0xFD60, ( short )0xFDD8, ( short )0xFE90, ( short )0xFEE8, ( short )0xFF10, ( short )0xFF58, ( short )0xFF90, ( short )0xFFB8, + ( short )0xFFE0, ( short )0xFFF0, ( short )0xFFF0, ( short )0x00D0, ( short )0x0190, ( short )0x01C8, ( short )0x0180, ( short )0x0188, + ( short )0x01B0, ( short )0x0238, ( short )0x0298, ( short )0x02B8, ( short )0x0268, ( short )0x0258, ( short )0x0258, ( short )0x0230, + ( short )0x0228, ( short )0x0230, ( short )0x0258, ( short )0x0248, ( short )0x01F8, ( short )0x0150, ( short )0x00C8, ( short )0x0058, + ( short )0x0058, ( short )0x0038, ( short )0x0000, ( short )0xFF50, ( short )0xFF00, ( short )0xFEF8, ( short )0xFE80, ( short )0xFDB8, + ( short )0xFD70, ( short )0xFD00, ( short )0xFC90, ( short )0xFC40, ( short )0xFC28, ( short )0xFC58, ( short )0xFC98, ( short )0xFD10, + ( short )0xFD78, ( short )0xFDE0, ( short )0xFE80, ( short )0xFF08, ( short )0xFF60, ( short )0xFFD0, ( short )0x0030, ( short )0x0068, + ( short )0x0110, ( short )0x0198, ( short )0x01C0, ( short )0x0208, ( short )0x0260, ( short )0x0280, ( short )0x0320, ( short )0x0390, + ( short )0x0398, ( short )0x0410, ( short )0x0488, ( short )0x04A0, ( short )0x0448, ( short )0x0408, ( short )0x03E0, ( short )0x03C8, + ( short )0x0398, ( short )0x0350, ( short )0x0308, ( short )0x02C8, ( short )0x0278, ( short )0x01D8, ( short )0x0148, ( short )0x00E8, + ( short )0x0040, ( short )0xFFA0, ( short )0xFF50, ( short )0xFDC0, ( short )0xFC88, ( short )0xFC30, ( short )0xFB88, ( short )0xFAA8, + ( short )0xFA50, ( short )0xFA30, ( short )0xFA40, ( short )0xFA70, ( short )0xFAB8, ( short )0xFAE0, ( short )0xFB28, ( short )0xFB58, + ( short )0xFB80, ( short )0xFBB0, ( short )0xFC00, ( short )0xFC80, ( short )0xFCF0, ( short )0xFDB8, ( short )0xFE58, ( short )0xFED8, + ( short )0x0008, ( short )0x0100, ( short )0x0180, ( short )0x01D0, ( short )0x0210, ( short )0x0248, ( short )0x0238, ( short )0x0200, + ( short )0x01D0, ( short )0x02D0, ( short )0x03A0, ( short )0x03D8, ( short )0x03C0, ( short )0x03D8, ( short )0x03F8, ( short )0x0370, + ( short )0x02C0, ( short )0x0258, ( short )0x01B8, ( short )0x0120, ( short )0x0090, ( short )0x0088, ( short )0x00A8, ( short )0x00A8, + ( short )0x0088, ( short )0x0068, ( short )0x0060, ( short )0xFFE0, ( short )0xFF00, ( short )0xFE50, ( short )0xFDC8, ( short )0xFCF0, + ( short )0xFC30, ( short )0xFBB0, ( short )0xFBD8, ( short )0xFC20, ( short )0xFC58, ( short )0xFC30, ( short )0xFC40, ( short )0xFC78, + ( short )0xFCC0, ( short )0xFCE8, ( short )0xFD10, ( short )0xFD48, ( short )0xFD88, ( short )0xFDE8, ( short )0xFF10, ( short )0x0020, + ( short )0x0110, ( short )0x01B8, ( short )0x0248, ( short )0x02C0, ( short )0x0358, ( short )0x03B8, ( short )0x03C8, ( short )0x0320, + ( short )0x0288, ( short )0x0280, ( short )0x0300, ( short )0x0340, ( short )0x0320, ( short )0x0380, ( short )0x03F8, ( short )0x0418, + ( short )0x0378, ( short )0x02E0, ( short )0x0288, ( short )0x0280, ( short )0x0238, ( short )0x01D0, ( short )0x0168, ( short )0x0138, + ( short )0x0110, ( short )0x0140, ( short )0x0148, ( short )0x0150, ( short )0x00A8, ( short )0x0010, ( short )0xFFB0, ( short )0xFEB8, + ( short )0xFDE0, ( short )0xFD48, ( short )0xFCE8, ( short )0xFCA8, ( short )0xFC78, ( short )0xFC48, ( short )0xFC50, ( short )0xFC70, + ( short )0xFCA8, ( short )0xFCE8, ( short )0xFD28, ( short )0xFDD0, ( short )0xFE70, ( short )0xFED8, ( short )0x0040, ( short )0x0188, + ( short )0x0258, ( short )0x03C0, ( short )0x04F0, ( short )0x05B8, ( short )0x0638, ( short )0x0670, ( short )0x0690, ( short )0x0708, + ( short )0x0708, ( short )0x06B8, ( short )0x0660, ( short )0x0650, ( short )0x0630, ( short )0x05C8, ( short )0x0578, ( short )0x0548, + ( short )0x0508, ( short )0x0470, ( short )0x03D0, ( short )0x0350, ( short )0x0278, ( short )0x01A0, ( short )0x00F8, ( short )0x00B0, + ( short )0x0078, ( short )0x0030, ( short )0xFFE8, ( short )0xFFC8, ( short )0xFFB8, ( short )0xFED0, ( short )0xFE08, ( short )0xFD98, + ( short )0xFC70, ( short )0xFB60, ( short )0xFAA8, ( short )0xFA10, ( short )0xF9B8, ( short )0xF980, ( short )0xF9A0, ( short )0xFA00, + ( short )0xFA68, ( short )0xFB90, ( short )0xFCB8, ( short )0xFD98, ( short )0xFE68, ( short )0xFF18, ( short )0xFFC0, ( short )0x0078, + ( short )0x00F8, ( short )0x0218, ( short )0x0320, ( short )0x03C0, ( short )0x0478, ( short )0x0510, ( short )0x0570, ( short )0x05D8, + ( short )0x05E0, ( short )0x05B8, ( short )0x0508, ( short )0x0468, ( short )0x03E0, ( short )0x02F0, ( short )0x0218, ( short )0x0168, + ( short )0x00F0, ( short )0x0060, ( short )0xFFD0, ( short )0xFF58, ( short )0xFEC0, ( short )0xFE48, ( short )0xFDB0, ( short )0xFD58, + ( short )0xFD38, ( short )0xFCD8, ( short )0xFC80, ( short )0xFC50, ( short )0xFC08, ( short )0xFB48, ( short )0xFA98, ( short )0xF9F8, + ( short )0xF8F8, ( short )0xF810, ( short )0xF7F8, ( short )0xF818, ( short )0xF848, ( short )0xF8E8, ( short )0xF9E0, ( short )0xFB08, + ( short )0xFC38, ( short )0xFD10, ( short )0xFDE8, ( short )0xFF10, ( short )0xFFD0, ( short )0x0048, ( short )0x00E0, ( short )0x0160, + ( short )0x01B8, ( short )0x01C8, ( short )0x01E0, ( short )0x0200, ( short )0x0228, ( short )0x0240, ( short )0x0240, ( short )0x0240, + ( short )0x0260, ( short )0x0280, ( short )0x0280, ( short )0x02F0, ( short )0x0370, ( short )0x03C8, ( short )0x03C8, ( short )0x03A8, + ( short )0x03A0, ( short )0x02F8, ( short )0x0220, ( short )0x0150, ( short )0x0098, ( short )0xFFE0, ( short )0xFF20, ( short )0xFEA0, + ( short )0xFE50, ( short )0xFE18, ( short )0xFD38, ( short )0xFC60, ( short )0xFBE0, ( short )0xFAC8, ( short )0xF9A0, ( short )0xF8B8, + ( short )0xF830, ( short )0xF888, ( short )0xF8B8, ( short )0xF908, ( short )0xFA80, ( short )0xFBF8, ( short )0xFD48, ( short )0xFEC8, + ( short )0x0040, ( short )0x01B0, ( short )0x0298, ( short )0x0338, ( short )0x03C0, ( short )0x0470, ( short )0x0520, ( short )0x0588, + ( short )0x0610, ( short )0x0688, ( short )0x06C8, ( short )0x0670, ( short )0x05E8, ( short )0x0578, ( short )0x0580, ( short )0x0578, + ( short )0x0528, ( short )0x0498, ( short )0x0408, ( short )0x0390, ( short )0x03F8, ( short )0x0458, ( short )0x0488, ( short )0x0468, + ( short )0x0450, ( short )0x0458, ( short )0x03A8, ( short )0x02D0, ( short )0x0210, ( short )0x0158, ( short )0x0088, ( short )0xFFA8, + ( short )0xFF00, ( short )0xFE88, ( short )0xFE30, ( short )0xFD88, ( short )0xFCB8, ( short )0xFC28, ( short )0xFB30, ( short )0xF9F0, + ( short )0xF8E8, ( short )0xF890, ( short )0xF890, ( short )0xF8C0, ( short )0xF978, ( short )0xFA78, ( short )0xFBE8, ( short )0xFD20, + ( short )0xFE28, ( short )0xFF60, ( short )0x00D8, ( short )0x0220, ( short )0x02F8, ( short )0x0378, ( short )0x03E0, ( short )0x0438, + ( short )0x0488, ( short )0x0498, ( short )0x04A8, ( short )0x0480, ( short )0x0440, ( short )0x03C0, ( short )0x02D8, ( short )0x01E8, + ( short )0x0140, ( short )0x00D8, ( short )0x0068, ( short )0xFFE0, ( short )0x0068, ( short )0x0130, ( short )0x0228, ( short )0x0260, + ( short )0x0278, ( short )0x02D0, ( short )0x02D8, ( short )0x0290, ( short )0x01E0, ( short )0x00D0, ( short )0xFFE0, ( short )0xFEF8, + ( short )0xFE08, ( short )0xFD28, ( short )0xFC88, ( short )0xFBE0, ( short )0xFB60, ( short )0xFAD8, ( short )0xFA08, ( short )0xF978, + ( short )0xF8E8, ( short )0xF8B0, ( short )0xF8B0, ( short )0xF8D0, ( short )0xF9D0, ( short )0xFAF8, ( short )0xFC18, ( short )0xFDB0, + ( short )0xFF38, ( short )0x00A0, ( short )0x01F8, ( short )0x02F8, ( short )0x03C0, ( short )0x0460, ( short )0x04B8, ( short )0x04C8, + ( short )0x04C8, ( short )0x04C0, ( short )0x0498, ( short )0x0490, ( short )0x0478, ( short )0x0448, ( short )0x0420, ( short )0x03F8, + ( short )0x0328, ( short )0x0238, ( short )0x01B0, ( short )0x0170, ( short )0x0128, ( short )0x0090, ( short )0x00E8, ( short )0x01B8, + ( short )0x02B8, ( short )0x0280, ( short )0x0218, ( short )0x0218, ( short )0x01F0, ( short )0x0148, ( short )0x0000, ( short )0xFEC0, + ( short )0xFE08, ( short )0xFD70, ( short )0xFCA0, ( short )0xFBF0, ( short )0xFBC0, ( short )0xFBA0, ( short )0xFB80, ( short )0xFB18, + ( short )0xFB28, ( short )0xFB98, ( short )0xFBC0, ( short )0xFBD0, ( short )0xFC08, ( short )0xFC78, ( short )0xFDC8, ( short )0xFEC8, + ( short )0xFF78, ( short )0x00D0, ( short )0x0238, ( short )0x0360, ( short )0x0398, ( short )0x0360, ( short )0x0368, ( short )0x0380, + ( short )0x0318, ( short )0x0250, ( short )0x0208, ( short )0x0220, ( short )0x0218, ( short )0x01F0, ( short )0x01C8, ( short )0x0210, + ( short )0x0270, ( short )0x0270, ( short )0x0240, ( short )0x0290, ( short )0x0310, ( short )0x0360, ( short )0x0340, ( short )0x0310, + ( short )0x0318, ( short )0x0320, ( short )0x02D8, ( short )0x0240, ( short )0x0158, ( short )0x00A0, ( short )0x0008, ( short )0xFF30, + ( short )0xFE50, ( short )0xFDA8, ( short )0xFD28, ( short )0xFCC8, ( short )0xFC60, ( short )0xFBA8, ( short )0xFB40, ( short )0xFB10, + ( short )0xFB18, ( short )0xFB28, ( short )0xFB48, ( short )0xFB68, ( short )0xFBA8, ( short )0xFBF8, ( short )0xFCB8, ( short )0xFD78, + ( short )0xFE00, ( short )0xFE88, ( short )0xFF30, ( short )0xFF98, ( short )0xFFC8, ( short )0xFFE8, ( short )0x0050, ( short )0x00B0, + ( short )0x00E0, ( short )0x0040, ( short )0xFF68, ( short )0xFED8, ( short )0xFEE8, ( short )0xFEE0, ( short )0xFE90, ( short )0xFEA8, + ( short )0xFF88, ( short )0x0080, ( short )0x0188, ( short )0x0208, ( short )0x0290, ( short )0x0390, ( short )0x0438, ( short )0x0450, + ( short )0x0428, ( short )0x03F8, ( short )0x03E0, ( short )0x0388, ( short )0x02E0, ( short )0x0240, ( short )0x0190, ( short )0x00D0, + ( short )0x0000, ( short )0x0000, ( short )0x0018, ( short )0x00FF, ( short )0x0068, ( short )0x00FE, ( short )0x00F8, ( short )0x00FD }; -gsm_byte gsm_enc_gsmdata[] = { +gsm_byte gsm_enc_gsmdata[ ] = { 0xD5, 0x1F, 0x74, 0x21, 0xA0, 0x50, 0x40, 0xC9, 0x24, 0x7B, 0xFA, 0x6B, 0x52, 0xE0, 0xB6, 0xD6, 0x8E, 0xB9, 0x2B, 0xAE, 0xE0, 0x8B, 0x23, 0x52, 0x3B, 0x13, 0x86, 0xE0, 0x14, 0x4A, 0x41, 0x44, 0x32, 0xD3, 0xA1, 0x83, 0xA1, 0x1D, 0xA6, 0x80, 0xBA, 0xD2, 0x96, 0x26, 0xFB, 0x84, 0x80, 0x6D, diff --git a/bench/sequential/gsm_enc/gsm_enc.c b/bench/sequential/gsm_enc/gsm_enc.c old mode 100644 new mode 100755 index 72dd091e35c6d1998c97ebcc21f4188b5a35ebde..069d46e4aa8192211bc873e791607288cd4bc9c1 --- a/bench/sequential/gsm_enc/gsm_enc.c +++ b/bench/sequential/gsm_enc/gsm_enc.c @@ -1,134 +1,134 @@ /* gsm_enc_encode.c */ /* - * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische - * Universitaet Berlin. See the accompanying file "COPYRIGHT" for - * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. - */ + Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + Universitaet Berlin. See the accompanying file "COPYRIGHT" for + details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. +*/ #include "private.h" /* - * Prototypes from add.c - */ + Prototypes from add.c +*/ -extern word gsm_enc_div (word num, word denum); +extern word gsm_enc_div ( word num, word denum ); -extern word gsm_enc_sub (word a, word b); +extern word gsm_enc_sub ( word a, word b ); -extern word gsm_enc_norm ( longword a ); +extern word gsm_enc_norm ( longword a ); -extern word gsm_enc_asl (word a, int n); +extern word gsm_enc_asl ( word a, int n ); -extern word gsm_enc_asr (word a, int n); +extern word gsm_enc_asr ( word a, int n ); /* - * Inlined functions from add.h - */ + Inlined functions from add.h +*/ -#define GSM_MULT_R(a, b) /* word a, word b, !(a == b == MIN_WORD) */ \ - (SASR( ((longword)(a) * (longword)(b) + 16384), 15 )) +#define GSM_MULT_R(a, b) /* word a, word b, !(a == b == MIN_WORD) */ \ + (SASR( ((longword)(a) * (longword)(b) + 16384), 15 )) -# define GSM_MULT(a,b) /* word a, word b, !(a == b == MIN_WORD) */ \ - (SASR( ((longword)(a) * (longword)(b)), 15 )) +# define GSM_MULT(a,b) /* word a, word b, !(a == b == MIN_WORD) */ \ + (SASR( ((longword)(a) * (longword)(b)), 15 )) -# define GSM_L_ADD(a, b) \ - ( (a) < 0 ? ( (b) >= 0 ? (a) + (b) \ - : (utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1)) \ - >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)utmp-2 ) \ - : ((b) <= 0 ? (a) + (b) \ - : (utmp = (ulongword)(a) + (ulongword)(b)) >= (ulongword)MAX_LONGWORD \ - ? MAX_LONGWORD : a + b)) +# define GSM_L_ADD(a, b) \ + ( (a) < 0 ? ( (b) >= 0 ? (a) + (b) \ + : (utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1)) \ + >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)utmp-2 ) \ + : ((b) <= 0 ? (a) + (b) \ + : (utmp = (ulongword)(a) + (ulongword)(b)) >= (ulongword)MAX_LONGWORD \ + ? MAX_LONGWORD : a + b)) -#define GSM_ADD(a, b) \ - ((ulongword)((ltmp = (longword)(a) + (longword)(b)) - MIN_WORD) > \ - MAX_WORD - MIN_WORD ? (ltmp > 0 ? MAX_WORD : MIN_WORD) : ltmp) +#define GSM_ADD(a, b) \ + ((ulongword)((ltmp = (longword)(a) + (longword)(b)) - MIN_WORD) > \ + MAX_WORD - MIN_WORD ? (ltmp > 0 ? MAX_WORD : MIN_WORD) : ltmp) -# define GSM_SUB(a, b) \ - ((ltmp = (longword)(a) - (longword)(b)) >= MAX_WORD \ - ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp) +# define GSM_SUB(a, b) \ + ((ltmp = (longword)(a) - (longword)(b)) >= MAX_WORD \ + ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp) -# define GSM_ABS(a) ((a) < 0 ? ((a) == MIN_WORD ? MAX_WORD : -(a)) : (a)) +# define GSM_ABS(a) ((a) < 0 ? ((a) == MIN_WORD ? MAX_WORD : -(a)) : (a)) -#define saturate(x) \ - ((x) < MIN_WORD ? MIN_WORD : (x) > MAX_WORD ? MAX_WORD: (x)) +#define saturate(x) \ + ((x) < MIN_WORD ? MIN_WORD : (x) > MAX_WORD ? MAX_WORD: (x)) /* Use these if necessary: -# define GSM_MULT_R(a, b) gsm_enc_mult_r(a, b) -# define GSM_MULT(a, b) gsm_enc_mult(a, b) -# define GSM_L_MULT(a, b) gsm_enc_L_mult(a, b) + # define GSM_MULT_R(a, b) gsm_enc_mult_r(a, b) + # define GSM_MULT(a, b) gsm_enc_mult(a, b) + # define GSM_L_MULT(a, b) gsm_enc_L_mult(a, b) -# define GSM_L_ADD(a, b) gsm_enc_L_add(a, b) -# define GSM_ADD(a, b) gsm_enc_add(a, b) -# define GSM_SUB(a, b) gsm_enc_sub(a, b) + # define GSM_L_ADD(a, b) gsm_enc_L_add(a, b) + # define GSM_ADD(a, b) gsm_enc_add(a, b) + # define GSM_SUB(a, b) gsm_enc_sub(a, b) -# define GSM_ABS(a) gsm_enc_abs(a) + # define GSM_ABS(a) gsm_enc_abs(a) */ /* - * More prototypes from implementations.. - */ + More prototypes from implementations.. +*/ extern void gsm_enc_Gsm_Coder ( - struct gsm_state * S, - word * s, /* [0..159] samples IN */ - word * LARc, /* [0..7] LAR coefficients OUT */ - word * Nc, /* [0..3] LTP lag OUT */ - word * bc, /* [0..3] coded LTP gain OUT */ - word * Mc, /* [0..3] RPE grid selection OUT */ - word * xmaxc,/* [0..3] Coded maximum amplitude OUT */ - word * xMc /* [13*4] normalized RPE samples OUT */); - -extern void gsm_enc_Gsm_Long_Term_Predictor ( /* 4x for 160 samples */ - word * d, /* [0..39] residual signal IN */ - word * dp, /* [-120..-1] d' IN */ - word * e, /* [0..40] OUT */ - word * dpp, /* [0..40] OUT */ - word * Nc, /* correlation lag OUT */ - word * bc /* gain factor OUT */); + struct gsm_state *S, + word *s, /* [ 0..159 ] samples IN */ + word *LARc, /* [ 0..7 ] LAR coefficients OUT */ + word *Nc, /* [ 0..3 ] LTP lag OUT */ + word *bc, /* [ 0..3 ] coded LTP gain OUT */ + word *Mc, /* [ 0..3 ] RPE grid selection OUT */ + word *xmaxc,/* [ 0..3 ] Coded maximum amplitude OUT */ + word *xMc /* [ 13*4 ] normalized RPE samples OUT */ ); + +extern void gsm_enc_Gsm_Long_Term_Predictor ( /* 4x for 160 samples */ + word *d, /* [ 0..39 ] residual signal IN */ + word *dp, /* [ -120..-1 ] d' IN */ + word *e, /* [ 0..40 ] OUT */ + word *dpp, /* [ 0..40 ] OUT */ + word *Nc, /* correlation lag OUT */ + word *bc /* gain factor OUT */ ); extern void gsm_enc_Gsm_LPC_Analysis ( - word * s, /* 0..159 signals IN/OUT */ - word * LARc); /* 0..7 LARc's OUT */ + word *s, /* 0..159 signals IN/OUT */ + word *LARc ); /* 0..7 LARc's OUT */ extern void gsm_enc_Gsm_Preprocess ( - struct gsm_state * S, - word * s, word * so); + struct gsm_state *S, + word *s, word *so ); extern void gsm_enc_Gsm_Short_Term_Analysis_Filter ( - struct gsm_state * S, - word * LARc, /* coded log area ratio [0..7] IN */ - word * d /* st res. signal [0..159] IN/OUT */); + struct gsm_state *S, + word *LARc, /* coded log area ratio [ 0..7 ] IN */ + word *d /* st res. signal [ 0..159 ] IN/OUT */ ); void gsm_enc_Gsm_RPE_Encoding ( - word * e, /* -5..-1][0..39][40..44 IN/OUT */ - word * xmaxc, /* OUT */ - word * Mc, /* OUT */ - word * xMc); /* [0..12] OUT */ + word *e, /* -5..-1 ][ 0..39 ][ 40..44 IN/OUT */ + word *xmaxc, /* OUT */ + word *Mc, /* OUT */ + word *xMc ); /* [ 0..12 ] OUT */ /**************** end #include "private.h" **********************************/ /* - * Interface - */ + Interface +*/ -typedef struct gsm_state * gsm; -typedef short gsm_signal; /* signed 16 bit */ -typedef unsigned char gsm_byte; -typedef gsm_byte gsm_frame[33]; /* 33 * 8 bits */ +typedef struct gsm_state *gsm; +typedef short gsm_signal; /* signed 16 bit */ +typedef unsigned char gsm_byte; +typedef gsm_byte gsm_frame[ 33 ]; /* 33 * 8 bits */ -#define GSM_MAGIC 0xD /* 13 kbit/s RPE-LTP */ +#define GSM_MAGIC 0xD /* 13 kbit/s RPE-LTP */ -#define GSM_PATCHLEVEL 6 -#define GSM_MINOR 0 -#define GSM_MAJOR 1 +#define GSM_PATCHLEVEL 6 +#define GSM_MINOR 0 +#define GSM_MAJOR 1 #include "data.h" -extern void gsm_enc_encode (gsm, gsm_signal *, gsm_byte *); +extern void gsm_enc_encode ( gsm, gsm_signal *, gsm_byte * ); -extern int gsm_enc_explode (gsm, gsm_byte *, gsm_signal *); -extern void gsm_enc_implode (gsm, gsm_signal *, gsm_byte *); +extern int gsm_enc_explode ( gsm, gsm_byte *, gsm_signal * ); +extern void gsm_enc_implode ( gsm, gsm_signal *, gsm_byte * ); /******************* end #include "gsm.h" **********************************/ @@ -146,303 +146,303 @@ volatile int gsm_enc_result; /* add.c */ -word gsm_enc_sub (word a, word b) +word gsm_enc_sub ( word a, word b ) { - longword diff = (longword)a - (longword)b; - return saturate(diff); + longword diff = ( longword )a - ( longword )b; + return saturate( diff ); } unsigned char gsm_enc_bitoff[ 256 ] = { - 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -void gsm_enc_encode (gsm s, gsm_signal * source, gsm_byte * c) +void gsm_enc_encode ( gsm s, gsm_signal *source, gsm_byte *c ) { - word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4]; - - gsm_enc_Gsm_Coder(s, source, LARc, Nc, bc, Mc, xmaxc, xmc); - - - /* variable size - - GSM_MAGIC 4 - - LARc[0] 6 - LARc[1] 6 - LARc[2] 5 - LARc[3] 5 - LARc[4] 4 - LARc[5] 4 - LARc[6] 3 - LARc[7] 3 - - Nc[0] 7 - bc[0] 2 - Mc[0] 2 - xmaxc[0] 6 - xmc[0] 3 - xmc[1] 3 - xmc[2] 3 - xmc[3] 3 - xmc[4] 3 - xmc[5] 3 - xmc[6] 3 - xmc[7] 3 - xmc[8] 3 - xmc[9] 3 - xmc[10] 3 - xmc[11] 3 - xmc[12] 3 - - Nc[1] 7 - bc[1] 2 - Mc[1] 2 - xmaxc[1] 6 - xmc[13] 3 - xmc[14] 3 - xmc[15] 3 - xmc[16] 3 - xmc[17] 3 - xmc[18] 3 - xmc[19] 3 - xmc[20] 3 - xmc[21] 3 - xmc[22] 3 - xmc[23] 3 - xmc[24] 3 - xmc[25] 3 - - Nc[2] 7 - bc[2] 2 - Mc[2] 2 - xmaxc[2] 6 - xmc[26] 3 - xmc[27] 3 - xmc[28] 3 - xmc[29] 3 - xmc[30] 3 - xmc[31] 3 - xmc[32] 3 - xmc[33] 3 - xmc[34] 3 - xmc[35] 3 - xmc[36] 3 - xmc[37] 3 - xmc[38] 3 - - Nc[3] 7 - bc[3] 2 - Mc[3] 2 - xmaxc[3] 6 - xmc[39] 3 - xmc[40] 3 - xmc[41] 3 - xmc[42] 3 - xmc[43] 3 - xmc[44] 3 - xmc[45] 3 - xmc[46] 3 - xmc[47] 3 - xmc[48] 3 - xmc[49] 3 - xmc[50] 3 - xmc[51] 3 - */ + word LARc[ 8 ], Nc[ 4 ], Mc[ 4 ], bc[ 4 ], xmaxc[ 4 ], xmc[ 13 * 4 ]; + + gsm_enc_Gsm_Coder( s, source, LARc, Nc, bc, Mc, xmaxc, xmc ); + + + /* variable size + + GSM_MAGIC 4 + + LARc[ 0 ] 6 + LARc[ 1 ] 6 + LARc[ 2 ] 5 + LARc[ 3 ] 5 + LARc[ 4 ] 4 + LARc[ 5 ] 4 + LARc[ 6 ] 3 + LARc[ 7 ] 3 + + Nc[ 0 ] 7 + bc[ 0 ] 2 + Mc[ 0 ] 2 + xmaxc[ 0 ] 6 + xmc[ 0 ] 3 + xmc[ 1 ] 3 + xmc[ 2 ] 3 + xmc[ 3 ] 3 + xmc[ 4 ] 3 + xmc[ 5 ] 3 + xmc[ 6 ] 3 + xmc[ 7 ] 3 + xmc[ 8 ] 3 + xmc[ 9 ] 3 + xmc[ 10 ] 3 + xmc[ 11 ] 3 + xmc[ 12 ] 3 + + Nc[ 1 ] 7 + bc[ 1 ] 2 + Mc[ 1 ] 2 + xmaxc[ 1 ] 6 + xmc[ 13 ] 3 + xmc[ 14 ] 3 + xmc[ 15 ] 3 + xmc[ 16 ] 3 + xmc[ 17 ] 3 + xmc[ 18 ] 3 + xmc[ 19 ] 3 + xmc[ 20 ] 3 + xmc[ 21 ] 3 + xmc[ 22 ] 3 + xmc[ 23 ] 3 + xmc[ 24 ] 3 + xmc[ 25 ] 3 + + Nc[ 2 ] 7 + bc[ 2 ] 2 + Mc[ 2 ] 2 + xmaxc[ 2 ] 6 + xmc[ 26 ] 3 + xmc[ 27 ] 3 + xmc[ 28 ] 3 + xmc[ 29 ] 3 + xmc[ 30 ] 3 + xmc[ 31 ] 3 + xmc[ 32 ] 3 + xmc[ 33 ] 3 + xmc[ 34 ] 3 + xmc[ 35 ] 3 + xmc[ 36 ] 3 + xmc[ 37 ] 3 + xmc[ 38 ] 3 + + Nc[ 3 ] 7 + bc[ 3 ] 2 + Mc[ 3 ] 2 + xmaxc[ 3 ] 6 + xmc[ 39 ] 3 + xmc[ 40 ] 3 + xmc[ 41 ] 3 + xmc[ 42 ] 3 + xmc[ 43 ] 3 + xmc[ 44 ] 3 + xmc[ 45 ] 3 + xmc[ 46 ] 3 + xmc[ 47 ] 3 + xmc[ 48 ] 3 + xmc[ 49 ] 3 + xmc[ 50 ] 3 + xmc[ 51 ] 3 + */ - *c++ = ((GSM_MAGIC & 0xF) << 4) /* 1 */ - | ((LARc[0] >> 2) & 0xF); - *c++ = ((LARc[0] & 0x3) << 6) - | (LARc[1] & 0x3F); - *c++ = ((LARc[2] & 0x1F) << 3) - | ((LARc[3] >> 2) & 0x7); - *c++ = ((LARc[3] & 0x3) << 6) - | ((LARc[4] & 0xF) << 2) - | ((LARc[5] >> 2) & 0x3); - *c++ = ((LARc[5] & 0x3) << 6) - | ((LARc[6] & 0x7) << 3) - | (LARc[7] & 0x7); - *c++ = ((Nc[0] & 0x7F) << 1) - | ((bc[0] >> 1) & 0x1); - *c++ = ((bc[0] & 0x1) << 7) - | ((Mc[0] & 0x3) << 5) - | ((xmaxc[0] >> 1) & 0x1F); - *c++ = ((xmaxc[0] & 0x1) << 7) - | ((xmc[0] & 0x7) << 4) - | ((xmc[1] & 0x7) << 1) - | ((xmc[2] >> 2) & 0x1); - *c++ = ((xmc[2] & 0x3) << 6) - | ((xmc[3] & 0x7) << 3) - | (xmc[4] & 0x7); - *c++ = ((xmc[5] & 0x7) << 5) /* 10 */ - | ((xmc[6] & 0x7) << 2) - | ((xmc[7] >> 1) & 0x3); - *c++ = ((xmc[7] & 0x1) << 7) - | ((xmc[8] & 0x7) << 4) - | ((xmc[9] & 0x7) << 1) - | ((xmc[10] >> 2) & 0x1); - *c++ = ((xmc[10] & 0x3) << 6) - | ((xmc[11] & 0x7) << 3) - | (xmc[12] & 0x7); - *c++ = ((Nc[1] & 0x7F) << 1) - | ((bc[1] >> 1) & 0x1); - *c++ = ((bc[1] & 0x1) << 7) - | ((Mc[1] & 0x3) << 5) - | ((xmaxc[1] >> 1) & 0x1F); - *c++ = ((xmaxc[1] & 0x1) << 7) - | ((xmc[13] & 0x7) << 4) - | ((xmc[14] & 0x7) << 1) - | ((xmc[15] >> 2) & 0x1); - *c++ = ((xmc[15] & 0x3) << 6) - | ((xmc[16] & 0x7) << 3) - | (xmc[17] & 0x7); - *c++ = ((xmc[18] & 0x7) << 5) - | ((xmc[19] & 0x7) << 2) - | ((xmc[20] >> 1) & 0x3); - *c++ = ((xmc[20] & 0x1) << 7) - | ((xmc[21] & 0x7) << 4) - | ((xmc[22] & 0x7) << 1) - | ((xmc[23] >> 2) & 0x1); - *c++ = ((xmc[23] & 0x3) << 6) - | ((xmc[24] & 0x7) << 3) - | (xmc[25] & 0x7); - *c++ = ((Nc[2] & 0x7F) << 1) /* 20 */ - | ((bc[2] >> 1) & 0x1); - *c++ = ((bc[2] & 0x1) << 7) - | ((Mc[2] & 0x3) << 5) - | ((xmaxc[2] >> 1) & 0x1F); - *c++ = ((xmaxc[2] & 0x1) << 7) - | ((xmc[26] & 0x7) << 4) - | ((xmc[27] & 0x7) << 1) - | ((xmc[28] >> 2) & 0x1); - *c++ = ((xmc[28] & 0x3) << 6) - | ((xmc[29] & 0x7) << 3) - | (xmc[30] & 0x7); - *c++ = ((xmc[31] & 0x7) << 5) - | ((xmc[32] & 0x7) << 2) - | ((xmc[33] >> 1) & 0x3); - *c++ = ((xmc[33] & 0x1) << 7) - | ((xmc[34] & 0x7) << 4) - | ((xmc[35] & 0x7) << 1) - | ((xmc[36] >> 2) & 0x1); - *c++ = ((xmc[36] & 0x3) << 6) - | ((xmc[37] & 0x7) << 3) - | (xmc[38] & 0x7); - *c++ = ((Nc[3] & 0x7F) << 1) - | ((bc[3] >> 1) & 0x1); - *c++ = ((bc[3] & 0x1) << 7) - | ((Mc[3] & 0x3) << 5) - | ((xmaxc[3] >> 1) & 0x1F); - *c++ = ((xmaxc[3] & 0x1) << 7) - | ((xmc[39] & 0x7) << 4) - | ((xmc[40] & 0x7) << 1) - | ((xmc[41] >> 2) & 0x1); - *c++ = ((xmc[41] & 0x3) << 6) /* 30 */ - | ((xmc[42] & 0x7) << 3) - | (xmc[43] & 0x7); - *c++ = ((xmc[44] & 0x7) << 5) - | ((xmc[45] & 0x7) << 2) - | ((xmc[46] >> 1) & 0x3); - *c++ = ((xmc[46] & 0x1) << 7) - | ((xmc[47] & 0x7) << 4) - | ((xmc[48] & 0x7) << 1) - | ((xmc[49] >> 2) & 0x1); - *c++ = ((xmc[49] & 0x3) << 6) - | ((xmc[50] & 0x7) << 3) - | (xmc[51] & 0x7); + *c++ = ( ( GSM_MAGIC & 0xF ) << 4 ) /* 1 */ + | ( ( LARc[ 0 ] >> 2 ) & 0xF ); + *c++ = ( ( LARc[ 0 ] & 0x3 ) << 6 ) + | ( LARc[ 1 ] & 0x3F ); + *c++ = ( ( LARc[ 2 ] & 0x1F ) << 3 ) + | ( ( LARc[ 3 ] >> 2 ) & 0x7 ); + *c++ = ( ( LARc[ 3 ] & 0x3 ) << 6 ) + | ( ( LARc[ 4 ] & 0xF ) << 2 ) + | ( ( LARc[ 5 ] >> 2 ) & 0x3 ); + *c++ = ( ( LARc[ 5 ] & 0x3 ) << 6 ) + | ( ( LARc[ 6 ] & 0x7 ) << 3 ) + | ( LARc[ 7 ] & 0x7 ); + *c++ = ( ( Nc[ 0 ] & 0x7F ) << 1 ) + | ( ( bc[ 0 ] >> 1 ) & 0x1 ); + *c++ = ( ( bc[ 0 ] & 0x1 ) << 7 ) + | ( ( Mc[ 0 ] & 0x3 ) << 5 ) + | ( ( xmaxc[ 0 ] >> 1 ) & 0x1F ); + *c++ = ( ( xmaxc[ 0 ] & 0x1 ) << 7 ) + | ( ( xmc[ 0 ] & 0x7 ) << 4 ) + | ( ( xmc[ 1 ] & 0x7 ) << 1 ) + | ( ( xmc[ 2 ] >> 2 ) & 0x1 ); + *c++ = ( ( xmc[ 2 ] & 0x3 ) << 6 ) + | ( ( xmc[ 3 ] & 0x7 ) << 3 ) + | ( xmc[ 4 ] & 0x7 ); + *c++ = ( ( xmc[ 5 ] & 0x7 ) << 5 ) /* 10 */ + | ( ( xmc[ 6 ] & 0x7 ) << 2 ) + | ( ( xmc[ 7 ] >> 1 ) & 0x3 ); + *c++ = ( ( xmc[ 7 ] & 0x1 ) << 7 ) + | ( ( xmc[ 8 ] & 0x7 ) << 4 ) + | ( ( xmc[ 9 ] & 0x7 ) << 1 ) + | ( ( xmc[ 10 ] >> 2 ) & 0x1 ); + *c++ = ( ( xmc[ 10 ] & 0x3 ) << 6 ) + | ( ( xmc[ 11 ] & 0x7 ) << 3 ) + | ( xmc[ 12 ] & 0x7 ); + *c++ = ( ( Nc[ 1 ] & 0x7F ) << 1 ) + | ( ( bc[ 1 ] >> 1 ) & 0x1 ); + *c++ = ( ( bc[ 1 ] & 0x1 ) << 7 ) + | ( ( Mc[ 1 ] & 0x3 ) << 5 ) + | ( ( xmaxc[ 1 ] >> 1 ) & 0x1F ); + *c++ = ( ( xmaxc[ 1 ] & 0x1 ) << 7 ) + | ( ( xmc[ 13 ] & 0x7 ) << 4 ) + | ( ( xmc[ 14 ] & 0x7 ) << 1 ) + | ( ( xmc[ 15 ] >> 2 ) & 0x1 ); + *c++ = ( ( xmc[ 15 ] & 0x3 ) << 6 ) + | ( ( xmc[ 16 ] & 0x7 ) << 3 ) + | ( xmc[ 17 ] & 0x7 ); + *c++ = ( ( xmc[ 18 ] & 0x7 ) << 5 ) + | ( ( xmc[ 19 ] & 0x7 ) << 2 ) + | ( ( xmc[ 20 ] >> 1 ) & 0x3 ); + *c++ = ( ( xmc[ 20 ] & 0x1 ) << 7 ) + | ( ( xmc[ 21 ] & 0x7 ) << 4 ) + | ( ( xmc[ 22 ] & 0x7 ) << 1 ) + | ( ( xmc[ 23 ] >> 2 ) & 0x1 ); + *c++ = ( ( xmc[ 23 ] & 0x3 ) << 6 ) + | ( ( xmc[ 24 ] & 0x7 ) << 3 ) + | ( xmc[ 25 ] & 0x7 ); + *c++ = ( ( Nc[ 2 ] & 0x7F ) << 1 ) /* 20 */ + | ( ( bc[ 2 ] >> 1 ) & 0x1 ); + *c++ = ( ( bc[ 2 ] & 0x1 ) << 7 ) + | ( ( Mc[ 2 ] & 0x3 ) << 5 ) + | ( ( xmaxc[ 2 ] >> 1 ) & 0x1F ); + *c++ = ( ( xmaxc[ 2 ] & 0x1 ) << 7 ) + | ( ( xmc[ 26 ] & 0x7 ) << 4 ) + | ( ( xmc[ 27 ] & 0x7 ) << 1 ) + | ( ( xmc[ 28 ] >> 2 ) & 0x1 ); + *c++ = ( ( xmc[ 28 ] & 0x3 ) << 6 ) + | ( ( xmc[ 29 ] & 0x7 ) << 3 ) + | ( xmc[ 30 ] & 0x7 ); + *c++ = ( ( xmc[ 31 ] & 0x7 ) << 5 ) + | ( ( xmc[ 32 ] & 0x7 ) << 2 ) + | ( ( xmc[ 33 ] >> 1 ) & 0x3 ); + *c++ = ( ( xmc[ 33 ] & 0x1 ) << 7 ) + | ( ( xmc[ 34 ] & 0x7 ) << 4 ) + | ( ( xmc[ 35 ] & 0x7 ) << 1 ) + | ( ( xmc[ 36 ] >> 2 ) & 0x1 ); + *c++ = ( ( xmc[ 36 ] & 0x3 ) << 6 ) + | ( ( xmc[ 37 ] & 0x7 ) << 3 ) + | ( xmc[ 38 ] & 0x7 ); + *c++ = ( ( Nc[ 3 ] & 0x7F ) << 1 ) + | ( ( bc[ 3 ] >> 1 ) & 0x1 ); + *c++ = ( ( bc[ 3 ] & 0x1 ) << 7 ) + | ( ( Mc[ 3 ] & 0x3 ) << 5 ) + | ( ( xmaxc[ 3 ] >> 1 ) & 0x1F ); + *c++ = ( ( xmaxc[ 3 ] & 0x1 ) << 7 ) + | ( ( xmc[ 39 ] & 0x7 ) << 4 ) + | ( ( xmc[ 40 ] & 0x7 ) << 1 ) + | ( ( xmc[ 41 ] >> 2 ) & 0x1 ); + *c++ = ( ( xmc[ 41 ] & 0x3 ) << 6 ) /* 30 */ + | ( ( xmc[ 42 ] & 0x7 ) << 3 ) + | ( xmc[ 43 ] & 0x7 ); + *c++ = ( ( xmc[ 44 ] & 0x7 ) << 5 ) + | ( ( xmc[ 45 ] & 0x7 ) << 2 ) + | ( ( xmc[ 46 ] >> 1 ) & 0x3 ); + *c++ = ( ( xmc[ 46 ] & 0x1 ) << 7 ) + | ( ( xmc[ 47 ] & 0x7 ) << 4 ) + | ( ( xmc[ 48 ] & 0x7 ) << 1 ) + | ( ( xmc[ 49 ] >> 2 ) & 0x1 ); + *c++ = ( ( xmc[ 49 ] & 0x3 ) << 6 ) + | ( ( xmc[ 50 ] & 0x7 ) << 3 ) + | ( xmc[ 51 ] & 0x7 ); } /* decode.c */ /* - * 4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER - */ + 4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER +*/ /* code.c */ void gsm_enc_Gsm_Coder ( - struct gsm_state * S, + struct gsm_state *S, - word * s, /* [0..159] samples IN */ + word *s, /* [ 0..159 ] samples IN */ -/* - * The RPE-LTD coder works on a frame by frame basis. The length of - * the frame is equal to 160 samples. Some computations are done - * once per frame to produce at the output of the coder the - * LARc[1..8] parameters which are the coded LAR coefficients and - * also to realize the inverse filtering operation for the entire - * frame (160 samples of signal d[0..159]). These parts produce at - * the output of the coder: - */ + /* + The RPE-LTD coder works on a frame by frame basis. The length of + the frame is equal to 160 samples. Some computations are done + once per frame to produce at the output of the coder the + LARc[ 1..8 ] parameters which are the coded LAR coefficients and + also to realize the inverse filtering operation for the entire + frame (160 samples of signal d[ 0..159 ]). These parts produce at + the output of the coder: + */ - word * LARc, /* [0..7] LAR coefficients OUT */ + word *LARc, /* [ 0..7 ] LAR coefficients OUT */ -/* - * Procedure 4.2.11 to 4.2.18 are to be executed four times per - * frame. That means once for each sub-segment RPE-LTP analysis of - * 40 samples. These parts produce at the output of the coder: - */ - - word * Nc, /* [0..3] LTP lag OUT */ - word * bc, /* [0..3] coded LTP gain OUT */ - word * Mc, /* [0..3] RPE grid selection OUT */ - word * xmaxc,/* [0..3] Coded maximum amplitude OUT */ - word * xMc /* [13*4] normalized RPE samples OUT */ + /* + Procedure 4.2.11 to 4.2.18 are to be executed four times per + frame. That means once for each sub-segment RPE-LTP analysis of + 40 samples. These parts produce at the output of the coder: + */ + + word *Nc, /* [ 0..3 ] LTP lag OUT */ + word *bc, /* [ 0..3 ] coded LTP gain OUT */ + word *Mc, /* [ 0..3 ] RPE grid selection OUT */ + word *xmaxc,/* [ 0..3 ] Coded maximum amplitude OUT */ + word *xMc /* [ 13*4 ] normalized RPE samples OUT */ ) { - int k; - word * dp = S->dp0 + 120; /* [ -120...-1 ] */ - word * dpp = dp; /* [ 0...39 ] */ + int k; + word *dp = S->dp0 + 120; /* [ -120...-1 ] */ + word *dpp = dp; /* [ 0...39 ] */ - static word e [50] = {0}; + static word e [ 50 ] = {0}; - word so[160]; + word so[ 160 ]; - gsm_enc_Gsm_Preprocess (S, s, so); - gsm_enc_Gsm_LPC_Analysis (so, LARc); - gsm_enc_Gsm_Short_Term_Analysis_Filter (S, LARc, so); + gsm_enc_Gsm_Preprocess ( S, s, so ); + gsm_enc_Gsm_LPC_Analysis ( so, LARc ); + gsm_enc_Gsm_Short_Term_Analysis_Filter ( S, LARc, so ); - _Pragma("loopbound min 4 max 4") - for (k = 0; k <= 3; k++, xMc += 13) { + _Pragma( "loopbound min 4 max 4" ) + for ( k = 0; k <= 3; k++, xMc += 13 ) { - gsm_enc_Gsm_Long_Term_Predictor ( - so+k*40, /* d [0..39] IN */ - dp, /* dp [-120..-1] IN */ - e + 5, /* e [0..39] OUT */ - dpp, /* dpp [0..39] OUT */ - Nc++, - bc++); + gsm_enc_Gsm_Long_Term_Predictor ( + so + k * 40, /* d [ 0..39 ] IN */ + dp, /* dp [ -120..-1 ] IN */ + e + 5, /* e [ 0..39 ] OUT */ + dpp, /* dpp [ 0..39 ] OUT */ + Nc++, + bc++ ); - gsm_enc_Gsm_RPE_Encoding ( - e + 5, /* e ][0..39][ IN/OUT */ - xmaxc++, Mc++, xMc ); + gsm_enc_Gsm_RPE_Encoding ( + e + 5, /* e ][ 0..39 ][ IN/OUT */ + xmaxc++, Mc++, xMc ); /* - * gsm_enc_Gsm_Update_of_reconstructed_short_time_residual_signal - * ( dpp, e + 5, dp ); - */ + gsm_enc_Gsm_Update_of_reconstructed_short_time_residual_signal + ( dpp, e + 5, dp ); + */ - { int i; + { + int i; longword ltmp; - _Pragma("loopbound min 40 max 40") - for (i = 0; i <= 39; i++) { - dp[ i ] = GSM_ADD( e[5 + i], dpp[i] ); - } + _Pragma( "loopbound min 40 max 40" ) + for ( i = 0; i <= 39; i++ ) + dp[ i ] = GSM_ADD( e[ 5 + i ], dpp[ i ] ); } dp += 40; @@ -450,156 +450,174 @@ void gsm_enc_Gsm_Coder ( } // //(void)memcpy( (char *)S->dp0, (char *)(S->dp0 + 160), -// // 120 * sizeof(*S->dp0) ); +// // 120 * sizeof(*S->dp0) ); } /* rpe.c */ /* 4.2.13 .. 4.2.17 RPE ENCODING SECTION - */ +*/ /* 4.2.13 */ void gsm_enc_Weighting_filter ( - word * e, /* signal [-5..0.39.44] IN */ - word * x /* signal [0..39] OUT */ + word *e, /* signal [ -5..0.39.44 ] IN */ + word *x /* signal [ 0..39 ] OUT */ ) /* - * The coefficients of the weighting filter are stored in a table - * (see table 4.4). The following scaling is used: - * - * H[0..10] = integer( real_H[ 0..10] * 8192 ); - */ + The coefficients of the weighting filter are stored in a table + (see table 4.4). The following scaling is used: + + H[ 0..10 ] = integer( real_H[ 0..10 ] * 8192 ); +*/ { - /* word wt[ 50 ]; */ + /* word wt[ 50 ]; */ - longword L_result; - int k /* , i */ ; + longword L_result; + int k /* , i */ ; - /* Initialization of a temporary working array wt[0...49] + /* Initialization of a temporary working array wt[ 0...49 ] */ - /* for (k = 0; k <= 4; k++) wt[k] = 0; - * for (k = 5; k <= 44; k++) wt[k] = *e++; - * for (k = 45; k <= 49; k++) wt[k] = 0; - * - * (e[-5..-1] and e[40..44] are allocated by the caller, - * are initially zero and are not written anywhere.) - */ + /* for (k = 0; k <= 4; k++) wt[ k ] = 0; + for (k = 5; k <= 44; k++) wt[ k ] = *e++; + for (k = 45; k <= 49; k++) wt[ k ] = 0; + + (e[ -5..-1 ] and e[ 40..44 ] are allocated by the caller, + are initially zero and are not written anywhere.) + */ e -= 5; - /* Compute the signal x[0..39] - */ - _Pragma("loopbound min 40 max 40") - for (k = 0; k <= 39; k++) { + /* Compute the signal x[ 0..39 ] + */ + _Pragma( "loopbound min 40 max 40" ) + for ( k = 0; k <= 39; k++ ) { L_result = 8192 >> 1; /* for (i = 0; i <= 10; i++) { - * L_temp = GSM_L_MULT( wt[k+i], gsm_enc_H[i] ); - * L_result = GSM_L_ADD( L_result, L_temp ); - * } - */ + L_temp = GSM_L_MULT( wt[ k+i ], gsm_enc_H[ i ] ); + L_result = GSM_L_ADD( L_result, L_temp ); + } + */ -#undef STEP -#define STEP( i, H ) (e[ k + i ] * (longword)H) +#undef STEP +#define STEP( i, H ) (e[ k + i ] * (longword)H) /* Every one of these multiplications is done twice -- - * but I don't see an elegant way to optimize this. - * Do you? - */ - -#ifdef STUPID_COMPILER - L_result += STEP( 0, -134 ) ; - L_result += STEP( 1, -374 ) ; - /* + STEP( 2, 0 ) */ - L_result += STEP( 3, 2054 ) ; - L_result += STEP( 4, 5741 ) ; - L_result += STEP( 5, 8192 ) ; - L_result += STEP( 6, 5741 ) ; - L_result += STEP( 7, 2054 ) ; - /* + STEP( 8, 0 ) */ - L_result += STEP( 9, -374 ) ; - L_result += STEP( 10, -134 ) ; -#else + but I don't see an elegant way to optimize this. + Do you? + */ + + #ifdef STUPID_COMPILER + L_result += STEP( 0, -134 ) ; + L_result += STEP( 1, -374 ) ; + /* + STEP( 2, 0 ) */ + L_result += STEP( 3, 2054 ) ; + L_result += STEP( 4, 5741 ) ; + L_result += STEP( 5, 8192 ) ; + L_result += STEP( 6, 5741 ) ; + L_result += STEP( 7, 2054 ) ; + /* + STEP( 8, 0 ) */ + L_result += STEP( 9, -374 ) ; + L_result += STEP( 10, -134 ) ; + #else L_result += - STEP( 0, -134 ) - + STEP( 1, -374 ) - /* + STEP( 2, 0 ) */ - + STEP( 3, 2054 ) - + STEP( 4, 5741 ) - + STEP( 5, 8192 ) - + STEP( 6, 5741 ) - + STEP( 7, 2054 ) - /* + STEP( 8, 0 ) */ - + STEP( 9, -374 ) - + STEP(10, -134 ) + STEP( 0, -134 ) + + STEP( 1, -374 ) + /* + STEP( 2, 0 ) */ + + STEP( 3, 2054 ) + + STEP( 4, 5741 ) + + STEP( 5, 8192 ) + + STEP( 6, 5741 ) + + STEP( 7, 2054 ) + /* + STEP( 8, 0 ) */ + + STEP( 9, -374 ) + + STEP( 10, -134 ) ; -#endif + #endif /* L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x2) *) - * L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x4) *) - * - * x[k] = SASR( L_result, 16 ); - */ + L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x4) *) + + x[ k ] = SASR( L_result, 16 ); + */ /* 2 adds vs. >>16 => 14, minus one shift to compensate for - * those we lost when replacing L_MULT by '*'. - */ + those we lost when replacing L_MULT by '*'. + */ L_result = SASR( L_result, 13 ); - x[k] = ( L_result < MIN_WORD ? MIN_WORD - : (L_result > MAX_WORD ? MAX_WORD : L_result )); + x[ k ] = ( L_result < MIN_WORD ? MIN_WORD + : ( L_result > MAX_WORD ? MAX_WORD : L_result ) ); } } /* 4.2.14 */ void gsm_enc_RPE_grid_selection ( - word * x, /* [0..39] IN */ - word * xM, /* [0..12] OUT */ - word * Mc_out /* OUT */ + word *x, /* [ 0..39 ] IN */ + word *xM, /* [ 0..12 ] OUT */ + word *Mc_out /* OUT */ ) /* - * The signal x[0..39] is used to select the RPE grid which is - * represented by Mc. - */ + The signal x[ 0..39 ] is used to select the RPE grid which is + represented by Mc. +*/ { - /* word temp1; */ - int /* m, */ i; - longword L_result, L_temp; - longword EM; /* xxx should be L_EM? */ - word Mc; + /* word temp1; */ + int /* m, */ i; + longword L_result, L_temp; + longword EM; /* xxx should be L_EM? */ + word Mc; - longword L_common_0_3; + longword L_common_0_3; Mc = 0; -#undef STEP -#define STEP( m, i ) L_temp = SASR( x[m + 3 * i], 2 ); \ +#undef STEP +#define STEP( m, i ) L_temp = SASR( x[ m + 3 * i ], 2 ); \ L_result += L_temp * L_temp; /* common part of 0 and 3 */ L_result = 0; - STEP( 0, 1 ); STEP( 0, 2 ); STEP( 0, 3 ); STEP( 0, 4 ); - STEP( 0, 5 ); STEP( 0, 6 ); STEP( 0, 7 ); STEP( 0, 8 ); - STEP( 0, 9 ); STEP( 0, 10); STEP( 0, 11); STEP( 0, 12); + STEP( 0, 1 ); + STEP( 0, 2 ); + STEP( 0, 3 ); + STEP( 0, 4 ); + STEP( 0, 5 ); + STEP( 0, 6 ); + STEP( 0, 7 ); + STEP( 0, 8 ); + STEP( 0, 9 ); + STEP( 0, 10 ); + STEP( 0, 11 ); + STEP( 0, 12 ); L_common_0_3 = L_result; /* i = 0 */ STEP( 0, 0 ); - L_result <<= 1; /* implicit in L_MULT */ + L_result <<= 1; /* implicit in L_MULT */ EM = L_result; /* i = 1 */ L_result = 0; STEP( 1, 0 ); - STEP( 1, 1 ); STEP( 1, 2 ); STEP( 1, 3 ); STEP( 1, 4 ); - STEP( 1, 5 ); STEP( 1, 6 ); STEP( 1, 7 ); STEP( 1, 8 ); - STEP( 1, 9 ); STEP( 1, 10); STEP( 1, 11); STEP( 1, 12); + STEP( 1, 1 ); + STEP( 1, 2 ); + STEP( 1, 3 ); + STEP( 1, 4 ); + STEP( 1, 5 ); + STEP( 1, 6 ); + STEP( 1, 7 ); + STEP( 1, 8 ); + STEP( 1, 9 ); + STEP( 1, 10 ); + STEP( 1, 11 ); + STEP( 1, 12 ); L_result <<= 1; - if (L_result > EM) { + if ( L_result > EM ) { Mc = 1; EM = L_result; } @@ -608,11 +626,20 @@ void gsm_enc_RPE_grid_selection ( L_result = 0; STEP( 2, 0 ); - STEP( 2, 1 ); STEP( 2, 2 ); STEP( 2, 3 ); STEP( 2, 4 ); - STEP( 2, 5 ); STEP( 2, 6 ); STEP( 2, 7 ); STEP( 2, 8 ); - STEP( 2, 9 ); STEP( 2, 10); STEP( 2, 11); STEP( 2, 12); + STEP( 2, 1 ); + STEP( 2, 2 ); + STEP( 2, 3 ); + STEP( 2, 4 ); + STEP( 2, 5 ); + STEP( 2, 6 ); + STEP( 2, 7 ); + STEP( 2, 8 ); + STEP( 2, 9 ); + STEP( 2, 10 ); + STEP( 2, 11 ); + STEP( 2, 12 ); L_result <<= 1; - if (L_result > EM) { + if ( L_result > EM ) { Mc = 2; EM = L_result; } @@ -622,17 +649,16 @@ void gsm_enc_RPE_grid_selection ( L_result = L_common_0_3; STEP( 3, 12 ); L_result <<= 1; - if (L_result > EM) { + if ( L_result > EM ) Mc = 3; - } /**/ - /* Down-sampling by a factor 3 to get the selected xM[0..12] - * RPE sequence. - */ - _Pragma("loopbound min 13 max 13") - for (i = 0; i <= 12; i ++) xM[i] = x[Mc + 3*i]; + /* Down-sampling by a factor 3 to get the selected xM[ 0..12 ] + RPE sequence. + */ + _Pragma( "loopbound min 13 max 13" ) + for ( i = 0; i <= 12; i ++ ) xM[ i ] = x[ Mc + 3 * i ]; *Mc_out = Mc; } @@ -640,28 +666,27 @@ void gsm_enc_RPE_grid_selection ( /* 4.12.15 */ void gsm_enc_APCM_quantization_xmaxc_to_exp_mant ( - word xmaxc, /* IN */ - word * exp_out, /* OUT */ - word * mant_out ) /* OUT */ + word xmaxc, /* IN */ + word *exp_out, /* OUT */ + word *mant_out ) /* OUT */ { - word exp, mant; + word exp, mant; /* Compute exponent and mantissa of the decoded version of xmaxc */ exp = 0; - if (xmaxc > 15) exp = SASR(xmaxc, 3) - 1; - mant = xmaxc - (exp << 3); + if ( xmaxc > 15 ) exp = SASR( xmaxc, 3 ) - 1; + mant = xmaxc - ( exp << 3 ); - if (mant == 0) { + if ( mant == 0 ) { exp = -4; mant = 7; - } - else { - _Pragma("loopbound min 0 max 3") - while (mant <= 7) { - mant = mant << 1 | 1; - exp--; - } + } else { + _Pragma( "loopbound min 0 max 3" ) + while ( mant <= 7 ) { + mant = mant << 1 | 1; + exp--; + } mant -= 8; } @@ -671,31 +696,31 @@ void gsm_enc_APCM_quantization_xmaxc_to_exp_mant ( } void gsm_enc_APCM_quantization ( - word * xM, /* [0..12] IN */ + word *xM, /* [ 0..12 ] IN */ - word * xMc, /* [0..12] OUT */ - word * mant_out, /* OUT */ - word * exp_out, /* OUT */ - word * xmaxc_out /* OUT */ + word *xMc, /* [ 0..12 ] OUT */ + word *mant_out, /* OUT */ + word *exp_out, /* OUT */ + word *xmaxc_out /* OUT */ ) { - int i, itest; + int i, itest; - word xmax, xmaxc, temp, temp1, temp2; - word exp, mant; + word xmax, xmaxc, temp, temp1, temp2; + word exp, mant; - /* Find the maximum absolute value xmax of xM[0..12]. + /* Find the maximum absolute value xmax of xM[ 0..12 ]. */ xmax = 0; - _Pragma("loopbound min 13 max 13") - for (i = 0; i <= 12; i++) { - temp = xM[i]; - temp = GSM_ABS(temp); - if (temp > xmax) xmax = temp; - } + _Pragma( "loopbound min 13 max 13" ) + for ( i = 0; i <= 12; i++ ) { + temp = xM[ i ]; + temp = GSM_ABS( temp ); + if ( temp > xmax ) xmax = temp; + } /* Qantizing and coding of xmax to get xmaxc. */ @@ -704,54 +729,54 @@ void gsm_enc_APCM_quantization ( temp = SASR( xmax, 9 ); itest = 0; - _Pragma("loopbound min 6 max 6") - for (i = 0; i <= 5; i++) { + _Pragma( "loopbound min 6 max 6" ) + for ( i = 0; i <= 5; i++ ) { - itest |= (temp <= 0); - temp = SASR( temp, 1 ); + itest |= ( temp <= 0 ); + temp = SASR( temp, 1 ); - if (itest == 0) exp++; // exp = add (exp, 1) - } + if ( itest == 0 ) exp++; // exp = add (exp, 1) + } temp = exp + 5; //xmaxc = gsm_enc_add( SASR(xmax, temp), exp << 3 ); - xmaxc = saturate( ( SASR(xmax, temp) + (exp << 3) )); + xmaxc = saturate( ( SASR( xmax, temp ) + ( exp << 3 ) ) ); - /* Quantizing and coding of the xM[0..12] RPE sequence - * to get the xMc[0..12] - */ + /* Quantizing and coding of the xM[ 0..12 ] RPE sequence + to get the xMc[ 0..12 ] + */ gsm_enc_APCM_quantization_xmaxc_to_exp_mant( xmaxc, &exp, &mant ); /* This computation uses the fact that the decoded version of xmaxc - * can be calculated by using the exponent and the mantissa part of - * xmaxc (logarithmic table). - * So, this method avoids any division and uses only a scaling - * of the RPE samples by a function of the exponent. A direct - * multiplication by the inverse of the mantissa (NRFAC[0..7] - * found in table 4.5) gives the 3 bit coded version xMc[0..12] - * of the RPE samples. - */ + can be calculated by using the exponent and the mantissa part of + xmaxc (logarithmic table). + So, this method avoids any division and uses only a scaling + of the RPE samples by a function of the exponent. A direct + multiplication by the inverse of the mantissa (NRFAC[ 0..7 ] + found in table 4.5) gives the 3 bit coded version xMc[ 0..12 ] + of the RPE samples. + */ - /* Direct computation of xMc[0..12] using table 4.5 + /* Direct computation of xMc[ 0..12 ] using table 4.5 */ - temp1 = 6 - exp; /* normalization by the exponent */ - temp2 = gsm_enc_NRFAC[ mant ]; /* inverse mantissa */ + temp1 = 6 - exp; /* normalization by the exponent */ + temp2 = gsm_enc_NRFAC[ mant ]; /* inverse mantissa */ - _Pragma("loopbound min 13 max 13") - for (i = 0; i <= 12; i++) { + _Pragma( "loopbound min 13 max 13" ) + for ( i = 0; i <= 12; i++ ) { - temp = xM[i] << temp1; - temp = GSM_MULT( temp, temp2 ); - temp = SASR(temp, 12); - xMc[i] = temp + 4; /* see note below */ - } + temp = xM[ i ] << temp1; + temp = GSM_MULT( temp, temp2 ); + temp = SASR( temp, 12 ); + xMc[ i ] = temp + 4; /* see note below */ + } - /* NOTE: This equation is used to make all the xMc[i] positive. + /* NOTE: This equation is used to make all the xMc[ i ] positive. */ *mant_out = mant; @@ -763,31 +788,31 @@ void gsm_enc_APCM_quantization ( /* 4.2.16 */ void gsm_enc_APCM_inverse_quantization ( - word * xMc, /* [0..12] IN */ - word mant, - word exp, - word * xMp) /* [0..12] OUT */ -/* - * This part is for decoding the RPE sequence of coded xMc[0..12] - * samples to obtain the xMp[0..12] array. Table 4.6 is used to get - * the mantissa of xmaxc (FAC[0..7]). - */ + word *xMc, /* [ 0..12 ] IN */ + word mant, + word exp, + word *xMp ) /* [ 0..12 ] OUT */ +/* + This part is for decoding the RPE sequence of coded xMc[ 0..12 ] + samples to obtain the xMp[ 0..12 ] array. Table 4.6 is used to get + the mantissa of xmaxc (FAC[ 0..7 ]). +*/ { - int i; - word temp, temp1, temp2, temp3; - longword ltmp; + int i; + word temp, temp1, temp2, temp3; + longword ltmp; - temp1 = gsm_enc_FAC[ mant ]; /* see 4.2-15 for mant */ - temp2 = gsm_enc_sub( 6, exp ); /* see 4.2-15 for exp */ - temp3 = gsm_enc_asl( 1, gsm_enc_sub( temp2, 1 )); + temp1 = gsm_enc_FAC[ mant ]; /* see 4.2-15 for mant */ + temp2 = gsm_enc_sub( 6, exp ); /* see 4.2-15 for exp */ + temp3 = gsm_enc_asl( 1, gsm_enc_sub( temp2, 1 ) ); - _Pragma("loopbound min 13 max 13") - for (i = 13; i--;) { + _Pragma( "loopbound min 13 max 13" ) + for ( i = 13; i--; ) { /* temp = gsm_enc_sub( *xMc++ << 1, 7 ); */ - temp = (*xMc++ << 1) - 7; /* restore sign */ + temp = ( *xMc++ << 1 ) - 7; /* restore sign */ - temp <<= 12; /* 16 bit signed */ + temp <<= 12; /* 16 bit signed */ temp = GSM_MULT_R( temp1, temp ); temp = GSM_ADD( temp, temp3 ); *xMp++ = gsm_enc_asr( temp, temp2 ); @@ -797,236 +822,263 @@ void gsm_enc_APCM_inverse_quantization ( /* 4.2.17 */ void gsm_enc_RPE_grid_positioning ( - word Mc, /* grid position IN */ - word * xMp, /* [0..12] IN */ - word * ep /* [0..39] OUT */ + word Mc, /* grid position IN */ + word *xMp, /* [ 0..12 ] IN */ + word *ep /* [ 0..39 ] OUT */ ) /* - * This procedure computes the reconstructed long term residual signal - * ep[0..39] for the LTP analysis filter. The inputs are the Mc - * which is the grid position selection and the xMp[0..12] decoded - * RPE samples which are upsampled by a factor of 3 by inserting zero - * values. - */ + This procedure computes the reconstructed long term residual signal + ep[ 0..39 ] for the LTP analysis filter. The inputs are the Mc + which is the grid position selection and the xMp[ 0..12 ] decoded + RPE samples which are upsampled by a factor of 3 by inserting zero + values. +*/ { - int i = 13; + int i = 13; // // TODO: rewritten Duff's device for WCET analysis! // - switch (Mc) { - case 3: *ep++ = 0; - case 2: *ep++ = 0; - case 1: *ep++ = 0; - case 0: *ep++ = *xMp++; - i--; + switch ( Mc ) { + case 3: + *ep++ = 0; + case 2: + *ep++ = 0; + case 1: + *ep++ = 0; + case 0: + *ep++ = *xMp++; + i--; } - _Pragma("loopbound min 12 max 12") + _Pragma( "loopbound min 12 max 12" ) do { *ep++ = 0; *ep++ = 0; *ep++ = *xMp++; - } while (--i); + } while ( --i ); - _Pragma("loopbound min 0 max 3") - while (++Mc < 4) *ep++ = 0; + _Pragma( "loopbound min 0 max 3" ) + while ( ++Mc < 4 ) *ep++ = 0; } /* -{ - int i = 13; + { + int i = 13; // //TODO: removed for WCET analysis -//_Pragma("marker outside") + //_Pragma("marker outside") switch (Mc) { case 3: *ep++ = 0; - case 2: - _Pragma("loopbound min 13 max 13") - do { - *ep++ = 0; - case 1: *ep++ = 0; - case 0: - //_Pragma("marker inside") - *ep++ = *xMp++; - } while (--i); + case 2: + _Pragma("loopbound min 13 max 13") + do { + ep++ = 0; + case 1: *ep++ = 0; + case 0: + //_Pragma("marker inside") + ep++ = *xMp++; + } while (--i); } - + //_Pragma("flowrestriction 1*inside <= 13*outside") _Pragma("loopbound min 0 max 3") while (++Mc < 4) *ep++ = 0; -} + } */ /* 4.2.18 */ /* This procedure adds the reconstructed long term residual signal - * ep[0..39] to the estimated signal dpp[0..39] from the long term - * analysis filter to compute the reconstructed short term residual - * signal dp[-40..-1]; also the reconstructed short term residual - * array dp[-120..-41] is updated. - */ - -#if 0 /* Has been inlined in code.c */ -void gsm_enc_Gsm_Update_of_reconstructed_short_time_residual_signal P3((dpp, ep, dp), - word * dpp, /* [0...39] IN */ - word * ep, /* [0...39] IN */ - word * dp) /* [-120...-1] IN/OUT */ + ep[ 0..39 ] to the estimated signal dpp[ 0..39 ] from the long term + analysis filter to compute the reconstructed short term residual + signal dp[ -40..-1 ]; also the reconstructed short term residual + array dp[ -120..-41 ] is updated. +*/ + +#if 0 /* Has been inlined in code.c */ +void gsm_enc_Gsm_Update_of_reconstructed_short_time_residual_signal P3( ( dpp, + ep, dp ), + word *dpp, /* [ 0...39 ] IN */ + word *ep, /* [ 0...39 ] IN */ + word *dp ) /* [ -120...-1 ] IN/OUT */ { - int k; + int k; - for (k = 0; k <= 79; k++) - dp[ -120 + k ] = dp[ -80 + k ]; + _Pragma( "loopbound min 80 max 80" ) + for ( k = 0; k <= 79; k++ ) + dp[ -120 + k ] = dp[ -80 + k ]; - for (k = 0; k <= 39; k++) - dp[ -40 + k ] = gsm_enc_add( ep[k], dpp[k] ); + _Pragma( "loopbound min 40 max 40" ) + for ( k = 0; k <= 39; k++ ) + dp[ -40 + k ] = gsm_enc_add( ep[ k ], dpp[ k ] ); } -#endif /* Has been inlined in code.c */ +#endif /* Has been inlined in code.c */ void gsm_enc_Gsm_RPE_Encoding ( - word * e, /* -5..-1][0..39][40..44 IN/OUT */ - word * xmaxc, /* OUT */ - word * Mc, /* OUT */ - word * xMc) /* [0..12] OUT */ + word *e, /* -5..-1 ][ 0..39 ][ 40..44 IN/OUT */ + word *xmaxc, /* OUT */ + word *Mc, /* OUT */ + word *xMc ) /* [ 0..12 ] OUT */ { - word x[40]; - word xM[13], xMp[13]; - word mant, exp; + word x[ 40 ]; + word xM[ 13 ], xMp[ 13 ]; + word mant, exp; - gsm_enc_Weighting_filter(e, x); - gsm_enc_RPE_grid_selection(x, xM, Mc); + gsm_enc_Weighting_filter( e, x ); + gsm_enc_RPE_grid_selection( x, xM, Mc ); - gsm_enc_APCM_quantization( xM, xMc, &mant, &exp, xmaxc); - gsm_enc_APCM_inverse_quantization( xMc, mant, exp, xMp); + gsm_enc_APCM_quantization( xM, xMc, &mant, &exp, xmaxc ); + gsm_enc_APCM_inverse_quantization( xMc, mant, exp, xMp ); gsm_enc_RPE_grid_positioning( *Mc, xMp, e ); } /* long_term.c */ -#ifdef USE_TABLE_MUL +#ifdef USE_TABLE_MUL -unsigned int umul_table[ 513 ][ 256 ]; +unsigned int umul_table[ 513 ][ 256 ]; -# define umul(x9, x15) \ - ((int)(umul_table[x9][x15 & 0x0FF] + (umul_table[x9][ x15 >> 8 ] << 8))) +# define umul(x9, x15) \ + ((int)(umul_table[ x9 ][ x15 & 0x0FF ] + (umul_table[ x9 ][ x15 >> 8 ] << 8))) -# define table_mul(a, b) \ - ( (a < 0) ? ((b < 0) ? umul(-a, -b) : -umul(-a, b)) \ - : ((b < 0) ? -umul(a, -b) : umul(a, b))) +# define table_mul(a, b) \ + ( (a < 0) ? ((b < 0) ? umul(-a, -b) : -umul(-a, b)) \ + : ((b < 0) ? -umul(a, -b) : umul(a, b))) #endif /* USE_TABLE_MUL */ /* - * 4.2.11 .. 4.2.12 LONG TERM PREDICTOR (LTP) SECTION - */ + 4.2.11 .. 4.2.12 LONG TERM PREDICTOR (LTP) SECTION +*/ /* - * This procedure computes the LTP gain (bc) and the LTP lag (Nc) - * for the long term analysis filter. This is done by calculating a - * maximum of the cross-correlation function between the current - * sub-segment short term residual signal d[0..39] (output of - * the short term analysis filter; for simplification the index - * of this array begins at 0 and ends at 39 for each sub-segment of the - * RPE-LTP analysis) and the previous reconstructed short term - * residual signal dp[ -120 .. -1 ]. A dynamic scaling must be - * performed to avoid overflow. - */ - - /* This procedure exists in four versions. First, the two integer - * versions with or without table-multiplication (as one function); - * then, the two floating point versions (as another function), with - * or without scaling. - */ + This procedure computes the LTP gain (bc) and the LTP lag (Nc) + for the long term analysis filter. This is done by calculating a + maximum of the cross-correlation function between the current + sub-segment short term residual signal d[ 0..39 ] (output of + the short term analysis filter; for simplification the index + of this array begins at 0 and ends at 39 for each sub-segment of the + RPE-LTP analysis) and the previous reconstructed short term + residual signal dp[ -120 .. -1 ]. A dynamic scaling must be + performed to avoid overflow. +*/ + +/* This procedure exists in four versions. First, the two integer + versions with or without table-multiplication (as one function); + then, the two floating point versions (as another function), with + or without scaling. +*/ #ifndef USE_FLOAT_MUL void gsm_enc_Calculation_of_the_LTP_parameters ( - word * d, /* [0..39] IN */ - word * dp, /* [-120..-1] IN */ - word * bc_out, /* OUT */ - word * Nc_out /* OUT */ + word *d, /* [ 0..39 ] IN */ + word *dp, /* [ -120..-1 ] IN */ + word *bc_out, /* OUT */ + word *Nc_out /* OUT */ ) { - int k, lambda; - word Nc, bc; - word wt[40]; + int k, lambda; + word Nc, bc; + word wt[ 40 ]; - longword L_max, L_power; - word R, S, dmax, scal; - word temp; + longword L_max, L_power; + word R, S, dmax, scal; + word temp; - /* Search of the optimum scaling of d[0..39]. + /* Search of the optimum scaling of d[ 0..39 ]. */ dmax = 0; - _Pragma("loopbound min 40 max 40") - for (k = 0; k <= 39; k++) { - temp = d[k]; + _Pragma( "loopbound min 40 max 40" ) + for ( k = 0; k <= 39; k++ ) { + temp = d[ k ]; temp = GSM_ABS( temp ); - if (temp > dmax) dmax = temp; + if ( temp > dmax ) dmax = temp; } temp = 0; - if (dmax != 0) - temp = gsm_enc_norm( (longword)dmax << 16 ); + if ( dmax != 0 ) + temp = gsm_enc_norm( ( longword )dmax << 16 ); - if (temp > 6) scal = 0; + if ( temp > 6 ) scal = 0; else scal = 6 - temp; /* Initialization of a working array wt */ - _Pragma("loopbound min 40 max 40") - for (k = 0; k <= 39; k++) wt[k] = SASR( d[k], scal ); + _Pragma( "loopbound min 40 max 40" ) + for ( k = 0; k <= 39; k++ ) wt[ k ] = SASR( d[ k ], scal ); /* Search for the maximum cross-correlation and coding of the LTP lag */ L_max = 0; - Nc = 40; /* index for the maximum cross-correlation */ + Nc = 40; /* index for the maximum cross-correlation */ - _Pragma("loopbound min 81 max 81") - for (lambda = 40; lambda <= 120; lambda++) { + _Pragma( "loopbound min 81 max 81" ) + for ( lambda = 40; lambda <= 120; lambda++ ) { # undef STEP -# ifdef USE_TABLE_MUL -# define STEP(k) (table_mul(wt[k], dp[k - lambda])) -# else -# define STEP(k) (wt[k] * dp[k - lambda]) -# endif + # ifdef USE_TABLE_MUL +# define STEP(k) (table_mul(wt[ k ], dp[ k - lambda ])) + # else +# define STEP(k) (wt[ k ] * dp[ k - lambda ]) + # endif longword L_result; - L_result = STEP(0) ; L_result += STEP(1) ; - L_result += STEP(2) ; L_result += STEP(3) ; - L_result += STEP(4) ; L_result += STEP(5) ; - L_result += STEP(6) ; L_result += STEP(7) ; - L_result += STEP(8) ; L_result += STEP(9) ; - L_result += STEP(10) ; L_result += STEP(11) ; - L_result += STEP(12) ; L_result += STEP(13) ; - L_result += STEP(14) ; L_result += STEP(15) ; - L_result += STEP(16) ; L_result += STEP(17) ; - L_result += STEP(18) ; L_result += STEP(19) ; - L_result += STEP(20) ; L_result += STEP(21) ; - L_result += STEP(22) ; L_result += STEP(23) ; - L_result += STEP(24) ; L_result += STEP(25) ; - L_result += STEP(26) ; L_result += STEP(27) ; - L_result += STEP(28) ; L_result += STEP(29) ; - L_result += STEP(30) ; L_result += STEP(31) ; - L_result += STEP(32) ; L_result += STEP(33) ; - L_result += STEP(34) ; L_result += STEP(35) ; - L_result += STEP(36) ; L_result += STEP(37) ; - L_result += STEP(38) ; L_result += STEP(39) ; - - if (L_result > L_max) { + L_result = STEP( 0 ) ; + L_result += STEP( 1 ) ; + L_result += STEP( 2 ) ; + L_result += STEP( 3 ) ; + L_result += STEP( 4 ) ; + L_result += STEP( 5 ) ; + L_result += STEP( 6 ) ; + L_result += STEP( 7 ) ; + L_result += STEP( 8 ) ; + L_result += STEP( 9 ) ; + L_result += STEP( 10 ) ; + L_result += STEP( 11 ) ; + L_result += STEP( 12 ) ; + L_result += STEP( 13 ) ; + L_result += STEP( 14 ) ; + L_result += STEP( 15 ) ; + L_result += STEP( 16 ) ; + L_result += STEP( 17 ) ; + L_result += STEP( 18 ) ; + L_result += STEP( 19 ) ; + L_result += STEP( 20 ) ; + L_result += STEP( 21 ) ; + L_result += STEP( 22 ) ; + L_result += STEP( 23 ) ; + L_result += STEP( 24 ) ; + L_result += STEP( 25 ) ; + L_result += STEP( 26 ) ; + L_result += STEP( 27 ) ; + L_result += STEP( 28 ) ; + L_result += STEP( 29 ) ; + L_result += STEP( 30 ) ; + L_result += STEP( 31 ) ; + L_result += STEP( 32 ) ; + L_result += STEP( 33 ) ; + L_result += STEP( 34 ) ; + L_result += STEP( 35 ) ; + L_result += STEP( 36 ) ; + L_result += STEP( 37 ) ; + L_result += STEP( 38 ) ; + L_result += STEP( 39 ) ; + + if ( L_result > L_max ) { Nc = lambda; L_max = L_result; @@ -1039,30 +1091,30 @@ void gsm_enc_Calculation_of_the_LTP_parameters ( /* Rescaling of L_max */ - L_max = L_max >> (6 - scal); /* sub(6, scal) */ + L_max = L_max >> ( 6 - scal ); /* sub(6, scal) */ /* Compute the power of the reconstructed short term residual - * signal dp[..] - */ + signal dp[ .. ] + */ L_power = 0; - _Pragma("loopbound min 40 max 40") - for (k = 0; k <= 39; k++) { + _Pragma( "loopbound min 40 max 40" ) + for ( k = 0; k <= 39; k++ ) { longword L_temp; - L_temp = SASR( dp[k - Nc], 3 ); + L_temp = SASR( dp[ k - Nc ], 3 ); L_power += L_temp * L_temp; } - L_power <<= 1; /* from L_MULT */ + L_power <<= 1; /* from L_MULT */ /* Normalization of L_max and L_power */ - if (L_max <= 0) { + if ( L_max <= 0 ) { *bc_out = 0; return; } - if (L_max >= L_power) { + if ( L_max >= L_power ) { *bc_out = 3; return; } @@ -1075,129 +1127,189 @@ void gsm_enc_Calculation_of_the_LTP_parameters ( /* Coding of the LTP gain */ - /* Table 4.3a must be used to obtain the level DLB[i] for the - * quantization of the LTP gain b to get the coded version bc. - */ - _Pragma("loopbound min 3 max 3") - for (bc = 0; bc <= 2; bc++) - /* Replaced by macro function. */ - //if (R <= gsm_enc_mult(S, gsm_enc_DLB[bc])) - if (R <= GSM_MULT(S, gsm_enc_DLB[bc])) - break; + /* Table 4.3a must be used to obtain the level DLB[ i ] for the + quantization of the LTP gain b to get the coded version bc. + */ + _Pragma( "loopbound min 3 max 3" ) + for ( bc = 0; bc <= 2; bc++ ) + /* Replaced by macro function. */ + //if (R <= gsm_enc_mult(S, gsm_enc_DLB[ bc ])) + if ( R <= GSM_MULT( S, gsm_enc_DLB[ bc ] ) ) + break; *bc_out = bc; } -#else /* USE_FLOAT_MUL */ +#else /* USE_FLOAT_MUL */ void gsm_enc_Calculation_of_the_LTP_parameters ( - word * d, /* [0..39] IN */ - word * dp, /* [-120..-1] IN */ - word * bc_out, /* OUT */ - word * Nc_out /* OUT */ + word *d, /* [ 0..39 ] IN */ + word *dp, /* [ -120..-1 ] IN */ + word *bc_out, /* OUT */ + word *Nc_out /* OUT */ ) { - int k, lambda; - word Nc, bc; + int k, lambda; + word Nc, bc; - float wt_float[40]; - float dp_float_base[120], * dp_float = dp_float_base + 120; + float wt_float[ 40 ]; + float dp_float_base[ 120 ], * dp_float = dp_float_base + 120; - longword L_max, L_power; - word R, S, dmax, scal; - word temp; + longword L_max, L_power; + word R, S, dmax, scal; + word temp; - /* Search of the optimum scaling of d[0..39]. + /* Search of the optimum scaling of d[ 0..39 ]. */ dmax = 0; - for (k = 0; k <= 39; k++) { - temp = d[k]; + _Pragma( "loopbound min 40 max 40" ) + for ( k = 0; k <= 39; k++ ) { + temp = d[ k ]; temp = GSM_ABS( temp ); - if (temp > dmax) dmax = temp; + if ( temp > dmax ) dmax = temp; } temp = 0; - if (dmax == 0) scal = 0; - else { - temp = gsm_enc_norm( (longword)dmax << 16 ); - } + if ( dmax == 0 ) scal = 0; + else + temp = gsm_enc_norm( ( longword )dmax << 16 ); - if (temp > 6) scal = 0; + if ( temp > 6 ) scal = 0; else scal = 6 - temp; /* Initialization of a working array wt */ - for (k = 0; k < 40; k++) wt_float[k] = SASR( d[k], scal ); - for (k = -120; k < 0; k++) dp_float[k] = dp[k]; + _Pragma( "loopbound min 40 max 40" ) + for ( k = 0; k < 40; k++ ) wt_float[ k ] = SASR( d[ k ], scal ); + _Pragma( "loopbound min 120 max 120" ) + for ( k = -120; k < 0; k++ ) dp_float[ k ] = dp[ k ]; /* Search for the maximum cross-correlation and coding of the LTP lag */ L_max = 0; - Nc = 40; /* index for the maximum cross-correlation */ + Nc = 40; /* index for the maximum cross-correlation */ - for (lambda = 40; lambda <= 120; lambda += 9) { + _Pragma( "loopbound min 9 max 9" ) + for ( lambda = 40; lambda <= 120; lambda += 9 ) { /* Calculate L_result for l = lambda .. lambda + 9. */ float *lp = dp_float - lambda; - float W; - float a = lp[-8], b = lp[-7], c = lp[-6], - d = lp[-5], e = lp[-4], f = lp[-3], - g = lp[-2], h = lp[-1]; - float E; + float W; + float a = lp[ -8 ], b = lp[ -7 ], c = lp[ -6 ], + d = lp[ -5 ], e = lp[ -4 ], f = lp[ -3 ], + g = lp[ -2 ], h = lp[ -1 ]; + float E; float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, - S5 = 0, S6 = 0, S7 = 0, S8 = 0; - -# undef STEP -# define STEP(K, a, b, c, d, e, f, g, h) \ - W = wt_float[K]; \ - E = W * a; S8 += E; \ - E = W * b; S7 += E; \ - E = W * c; S6 += E; \ - E = W * d; S5 += E; \ - E = W * e; S4 += E; \ - E = W * f; S3 += E; \ - E = W * g; S2 += E; \ - E = W * h; S1 += E; \ - a = lp[K]; \ + S5 = 0, S6 = 0, S7 = 0, S8 = 0; + +# undef STEP +# define STEP(K, a, b, c, d, e, f, g, h) \ + W = wt_float[ K ]; \ + E = W * a; S8 += E; \ + E = W * b; S7 += E; \ + E = W * c; S6 += E; \ + E = W * d; S5 += E; \ + E = W * e; S4 += E; \ + E = W * f; S3 += E; \ + E = W * g; S2 += E; \ + E = W * h; S1 += E; \ + a = lp[ K ]; \ E = W * a; S0 += E -# define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) -# define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) -# define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) -# define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) -# define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) -# define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) -# define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) -# define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) - - STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3); - STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7); - - STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11); - STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15); - - STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19); - STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23); - - STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27); - STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31); - - STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35); - STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39); - - if (S0 > L_max) { L_max = S0; Nc = lambda; } - if (S1 > L_max) { L_max = S1; Nc = lambda + 1; } - if (S2 > L_max) { L_max = S2; Nc = lambda + 2; } - if (S3 > L_max) { L_max = S3; Nc = lambda + 3; } - if (S4 > L_max) { L_max = S4; Nc = lambda + 4; } - if (S5 > L_max) { L_max = S5; Nc = lambda + 5; } - if (S6 > L_max) { L_max = S6; Nc = lambda + 6; } - if (S7 > L_max) { L_max = S7; Nc = lambda + 7; } - if (S8 > L_max) { L_max = S8; Nc = lambda + 8; } +# define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) +# define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) +# define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) +# define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) +# define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) +# define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) +# define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) +# define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) + + STEP_A( 0 ); + STEP_B( 1 ); + STEP_C( 2 ); + STEP_D( 3 ); + STEP_E( 4 ); + STEP_F( 5 ); + STEP_G( 6 ); + STEP_H( 7 ); + + STEP_A( 8 ); + STEP_B( 9 ); + STEP_C( 10 ); + STEP_D( 11 ); + STEP_E( 12 ); + STEP_F( 13 ); + STEP_G( 14 ); + STEP_H( 15 ); + + STEP_A( 16 ); + STEP_B( 17 ); + STEP_C( 18 ); + STEP_D( 19 ); + STEP_E( 20 ); + STEP_F( 21 ); + STEP_G( 22 ); + STEP_H( 23 ); + + STEP_A( 24 ); + STEP_B( 25 ); + STEP_C( 26 ); + STEP_D( 27 ); + STEP_E( 28 ); + STEP_F( 29 ); + STEP_G( 30 ); + STEP_H( 31 ); + + STEP_A( 32 ); + STEP_B( 33 ); + STEP_C( 34 ); + STEP_D( 35 ); + STEP_E( 36 ); + STEP_F( 37 ); + STEP_G( 38 ); + STEP_H( 39 ); + + if ( S0 > L_max ) { + L_max = S0; + Nc = lambda; + } + if ( S1 > L_max ) { + L_max = S1; + Nc = lambda + 1; + } + if ( S2 > L_max ) { + L_max = S2; + Nc = lambda + 2; + } + if ( S3 > L_max ) { + L_max = S3; + Nc = lambda + 3; + } + if ( S4 > L_max ) { + L_max = S4; + Nc = lambda + 4; + } + if ( S5 > L_max ) { + L_max = S5; + Nc = lambda + 5; + } + if ( S6 > L_max ) { + L_max = S6; + Nc = lambda + 6; + } + if ( S7 > L_max ) { + L_max = S7; + Nc = lambda + 7; + } + if ( S8 > L_max ) { + L_max = S8; + Nc = lambda + 8; + } } *Nc_out = Nc; @@ -1205,29 +1317,30 @@ void gsm_enc_Calculation_of_the_LTP_parameters ( /* Rescaling of L_max */ - L_max = L_max >> (6 - scal); /* sub(6, scal) */ + L_max = L_max >> ( 6 - scal ); /* sub(6, scal) */ /* Compute the power of the reconstructed short term residual - * signal dp[..] - */ + signal dp[ .. ] + */ L_power = 0; - for (k = 0; k <= 39; k++) { + _Pragma( "loopbound min 40 max 40" ) + for ( k = 0; k <= 39; k++ ) { longword L_temp; - L_temp = SASR( dp[k - Nc], 3 ); + L_temp = SASR( dp[ k - Nc ], 3 ); L_power += L_temp * L_temp; } - L_power <<= 1; /* from L_MULT */ + L_power <<= 1; /* from L_MULT */ /* Normalization of L_max and L_power */ - if (L_max <= 0) { + if ( L_max <= 0 ) { *bc_out = 0; return; } - if (L_max >= L_power) { + if ( L_max >= L_power ) { *bc_out = 3; return; } @@ -1240,100 +1353,109 @@ void gsm_enc_Calculation_of_the_LTP_parameters ( /* Coding of the LTP gain */ - /* Table 4.3a must be used to obtain the level DLB[i] for the - * quantization of the LTP gain b to get the coded version bc. - */ + /* Table 4.3a must be used to obtain the level DLB[ i ] for the + quantization of the LTP gain b to get the coded version bc. + */ // Replaced by macro function. - //for (bc = 0; bc <= 2; bc++) if (R <= gsm_enc_mult(S, gsm_enc_DLB[bc])) break; - for (bc = 0; bc <= 2; bc++) if (R <= GSM_MULT(S, gsm_enc_DLB[bc])) break; + //for (bc = 0; bc <= 2; bc++) if (R <= gsm_enc_mult(S, gsm_enc_DLB[ bc ])) break; + _Pragma( "loopbound min 3 max 3" ) + for ( bc = 0; bc <= 2; bc++ ) if ( R <= GSM_MULT( S, gsm_enc_DLB[ bc ] ) ) break; *bc_out = bc; } -#endif /* USE_FLOAT_MUL */ +#endif /* USE_FLOAT_MUL */ /* 4.2.12 */ void gsm_enc_Long_term_analysis_filtering ( - word bc, /* IN */ - word Nc, /* IN */ - word * dp, /* previous d [-120..-1] IN */ - word * d, /* d [0..39] IN */ - word * dpp, /* estimate [0..39] OUT */ - word * e /* long term res. signal [0..39] OUT */ + word bc, /* IN */ + word Nc, /* IN */ + word *dp, /* previous d [ -120..-1 ] IN */ + word *d, /* d [ 0..39 ] IN */ + word *dpp, /* estimate [ 0..39 ] OUT */ + word *e /* long term res. signal [ 0..39 ] OUT */ ) /* - * In this part, we have to decode the bc parameter to compute - * the samples of the estimate dpp[0..39]. The decoding of bc needs the - * use of table 4.3b. The long term residual signal e[0..39] - * is then calculated to be fed to the RPE encoding section. - */ + In this part, we have to decode the bc parameter to compute + the samples of the estimate dpp[ 0..39 ]. The decoding of bc needs the + use of table 4.3b. The long term residual signal e[ 0..39 ] + is then calculated to be fed to the RPE encoding section. +*/ { int k; longword ltmp; -# undef STEP -# define STEP(BP) \ +# undef STEP +# define STEP(BP) \ _Pragma("loopbound min 40 max 40") \ - for (k = 0; k <= 39; k++) { \ - dpp[k] = GSM_MULT_R( BP, dp[k - Nc]); \ - e[k] = GSM_SUB( d[k], dpp[k] ); \ + for (k = 0; k <= 39; k++) { \ + dpp[ k ] = GSM_MULT_R( BP, dp[ k - Nc ]); \ + e[ k ] = GSM_SUB( d[ k ], dpp[ k ] ); \ } - switch (bc) { - case 0: STEP( 3277 ); break; - case 1: STEP( 11469 ); break; - case 2: STEP( 21299 ); break; - case 3: STEP( 32767 ); break; + switch ( bc ) { + case 0: + STEP( 3277 ); + break; + case 1: + STEP( 11469 ); + break; + case 2: + STEP( 21299 ); + break; + case 3: + STEP( 32767 ); + break; } } void gsm_enc_Gsm_Long_Term_Predictor ( - word * d, /* [0..39] residual signal IN */ - word * dp, /* [-120..-1] d' IN */ + word *d, /* [ 0..39 ] residual signal IN */ + word *dp, /* [ -120..-1 ] d' IN */ - word * e, /* [0..39] OUT */ - word * dpp, /* [0..39] OUT */ - word * Nc, /* correlation lag OUT */ - word * bc /* gain factor OUT */ + word *e, /* [ 0..39 ] OUT */ + word *dpp, /* [ 0..39 ] OUT */ + word *Nc, /* correlation lag OUT */ + word *bc /* gain factor OUT */ ) { - gsm_enc_Calculation_of_the_LTP_parameters( d, dp, bc, Nc ); + gsm_enc_Calculation_of_the_LTP_parameters( d, dp, bc, Nc ); gsm_enc_Long_term_analysis_filtering( *bc, *Nc, dp, d, dpp, e ); } /* short_term.c */ /* - * SHORT TERM ANALYSIS FILTERING SECTION - */ + SHORT TERM ANALYSIS FILTERING SECTION +*/ /* 4.2.8 */ void gsm_enc_Decoding_of_the_coded_Log_Area_Ratios ( - word * LARc, /* coded log area ratio [0..7] IN */ - word * LARpp) /* out: decoded .. */ + word *LARc, /* coded log area ratio [ 0..7 ] IN */ + word *LARpp ) /* out: decoded .. */ { - word temp1 /* , temp2 */; - long ltmp; /* for GSM_ADD */ + word temp1 /* , temp2 */; + long ltmp; /* for GSM_ADD */ /* This procedure requires for efficient implementation - * two tables. - * - * INVA[1..8] = integer( (32768 * 8) / real_A[1..8]) - * MIC[1..8] = minimum value of the LARc[1..8] - */ + two tables. - /* Compute the LARpp[1..8] + INVA[ 1..8 ] = integer( (32768 * 8) / real_A[ 1..8 ]) + MIC[ 1..8 ] = minimum value of the LARc[ 1..8 ] */ -#undef STEP -#define STEP( B, MIC, INVA ) \ - temp1 = GSM_ADD( *LARc++, MIC ) << 10; \ - temp1 = GSM_SUB( temp1, (B >= 0 ? B << 1 : -((-B) << 1))); \ - temp1 = GSM_MULT_R( INVA, temp1 ); \ + /* Compute the LARpp[ 1..8 ] + */ + +#undef STEP +#define STEP( B, MIC, INVA ) \ + temp1 = GSM_ADD( *LARc++, MIC ) << 10; \ + temp1 = GSM_SUB( temp1, (B >= 0 ? B << 1 : -((-B) << 1))); \ + temp1 = GSM_MULT_R( INVA, temp1 ); \ *LARpp++ = GSM_ADD( temp1, temp1 ); STEP( 0, -32, 13107 ); @@ -1347,118 +1469,116 @@ void gsm_enc_Decoding_of_the_coded_Log_Area_Ratios ( STEP( -1144, -4, 29708 ); /* NOTE: the addition of *MIC is used to restore - * the sign of *LARc. - */ + the sign of *LARc. + */ } /* 4.2.9 */ -/* Computation of the quantized reflection coefficients - */ +/* Computation of the quantized reflection coefficients +*/ -/* 4.2.9.1 Interpolation of the LARpp[1..8] to get the LARp[1..8] - */ +/* 4.2.9.1 Interpolation of the LARpp[ 1..8 ] to get the LARp[ 1..8 ] +*/ /* - * Within each frame of 160 analyzed speech samples the short term - * analysis and synthesis filters operate with four different sets of - * coefficients, derived from the previous set of decoded LARs(LARpp(j-1)) - * and the actual set of decoded LARs (LARpp(j)) - * - * (Initial value: LARpp(j-1)[1..8] = 0.) - */ + Within each frame of 160 analyzed speech samples the short term + analysis and synthesis filters operate with four different sets of + coefficients, derived from the previous set of decoded LARs(LARpp(j-1)) + and the actual set of decoded LARs (LARpp(j)) + + (Initial value: LARpp(j-1)[ 1..8 ] = 0.) +*/ void gsm_enc_Coefficients_0_12 ( - word * LARpp_j_1, - word * LARpp_j, - word * LARp) + word *LARpp_j_1, + word *LARpp_j, + word *LARp ) { - int i; + int i; longword ltmp; - _Pragma("loopbound min 8 max 8") - for (i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++) { - *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 )); - *LARp = GSM_ADD( *LARp, SASR( *LARpp_j_1, 1)); + _Pragma( "loopbound min 8 max 8" ) + for ( i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++ ) { + *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 ) ); + *LARp = GSM_ADD( *LARp, SASR( *LARpp_j_1, 1 ) ); } } void gsm_enc_Coefficients_13_26 ( - word * LARpp_j_1, - word * LARpp_j, - word * LARp) + word *LARpp_j_1, + word *LARpp_j, + word *LARp ) { int i; longword ltmp; - _Pragma("loopbound min 8 max 8") - for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) { - *LARp = GSM_ADD( SASR( *LARpp_j_1, 1), SASR( *LARpp_j, 1 )); - } + _Pragma( "loopbound min 8 max 8" ) + for ( i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++ ) + *LARp = GSM_ADD( SASR( *LARpp_j_1, 1 ), SASR( *LARpp_j, 1 ) ); } void gsm_enc_Coefficients_27_39 ( - word * LARpp_j_1, - word * LARpp_j, - word * LARp) + word *LARpp_j_1, + word *LARpp_j, + word *LARp ) { int i; longword ltmp; - _Pragma("loopbound min 8 max 8") - for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) { - *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 )); - *LARp = GSM_ADD( *LARp, SASR( *LARpp_j, 1 )); + _Pragma( "loopbound min 8 max 8" ) + for ( i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++ ) { + *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 ) ); + *LARp = GSM_ADD( *LARp, SASR( *LARpp_j, 1 ) ); } } void gsm_enc_Coefficients_40_159 ( - word * LARpp_j, - word * LARp) + word *LARpp_j, + word *LARp ) { int i; - _Pragma("loopbound min 8 max 8") - for (i = 1; i <= 8; i++, LARp++, LARpp_j++) { - *LARp = *LARpp_j; - } + _Pragma( "loopbound min 8 max 8" ) + for ( i = 1; i <= 8; i++, LARp++, LARpp_j++ ) + *LARp = *LARpp_j; } /* 4.2.9.2 */ void gsm_enc_LARp_to_rp ( - word * LARp) /* [0..7] IN/OUT */ + word *LARp ) /* [ 0..7 ] IN/OUT */ /* - * The input of this procedure is the interpolated LARp[0..7] array. - * The reflection coefficients, rp[i], are used in the analysis - * filter and in the synthesis filter. - */ + The input of this procedure is the interpolated LARp[ 0..7 ] array. + The reflection coefficients, rp[ i ], are used in the analysis + filter and in the synthesis filter. +*/ { - int i; - word temp; - longword ltmp; + int i; + word temp; + longword ltmp; - _Pragma("loopbound min 8 max 8") - for (i = 1; i <= 8; i++, LARp++) { + _Pragma( "loopbound min 8 max 8" ) + for ( i = 1; i <= 8; i++, LARp++ ) { /* temp = GSM_ABS( *LARp ); - * - * if (temp < 11059) temp <<= 1; - * else if (temp < 20070) temp += 11059; - * else temp = GSM_ADD( temp >> 2, 26112 ); - * + + if (temp < 11059) temp <<= 1; + else if (temp < 20070) temp += 11059; + else temp = GSM_ADD( temp >> 2, 26112 ); + * *LARp = *LARp < 0 ? -temp : temp; - */ + */ - if (*LARp < 0) { - temp = *LARp == MIN_WORD ? MAX_WORD : -(*LARp); - *LARp = - ((temp < 11059) ? temp << 1 - : ((temp < 20070) ? temp + 11059 - : GSM_ADD( temp >> 2, 26112 ))); + if ( *LARp < 0 ) { + temp = *LARp == MIN_WORD ? MAX_WORD : -( *LARp ); + *LARp = - ( ( temp < 11059 ) ? temp << 1 + : ( ( temp < 20070 ) ? temp + 11059 + : GSM_ADD( temp >> 2, 26112 ) ) ); } else { temp = *LARp; - *LARp = (temp < 11059) ? temp << 1 - : ((temp < 20070) ? temp + 11059 - : GSM_ADD( temp >> 2, 26112 )); + *LARp = ( temp < 11059 ) ? temp << 1 + : ( ( temp < 20070 ) ? temp + 11059 + : GSM_ADD( temp >> 2, 26112 ) ); } } } @@ -1466,44 +1586,44 @@ void gsm_enc_LARp_to_rp ( /* 4.2.10 */ void gsm_enc_Short_term_analysis_filtering ( - struct gsm_state * S, - word * rp, /* [0..7] IN */ - int k_n, /* k_end - k_start */ - word * s /* [0..n-1] IN/OUT */ + struct gsm_state *S, + word *rp, /* [ 0..7 ] IN */ + int k_n, /* k_end - k_start */ + word *s /* [ 0..n-1 ] IN/OUT */ ) /* - * This procedure computes the short term residual signal d[..] to be fed - * to the RPE-LTP loop from the s[..] signal and from the local rp[..] - * array (quantized reflection coefficients). As the call of this - * procedure can be done in many ways (see the interpolation of the LAR - * coefficient), it is assumed that the computation begins with index - * k_start (for arrays d[..] and s[..]) and stops with index k_end - * (k_start and k_end are defined in 4.2.9.1). This procedure also - * needs to keep the array u[0..7] in memory for each call. - */ + This procedure computes the short term residual signal d[ .. ] to be fed + to the RPE-LTP loop from the s[ .. ] signal and from the local rp[ .. ] + array (quantized reflection coefficients). As the call of this + procedure can be done in many ways (see the interpolation of the LAR + coefficient), it is assumed that the computation begins with index + k_start (for arrays d[ .. ] and s[ .. ]) and stops with index k_end + (k_start and k_end are defined in 4.2.9.1). This procedure also + needs to keep the array u[ 0..7 ] in memory for each call. +*/ { - word * u = S->u; - int i; - word di, zzz, ui, sav, rpi; - longword ltmp; + word *u = S->u; + int i; + word di, zzz, ui, sav, rpi; + longword ltmp; int j; - _Pragma("loopbound min 13 max 120") - for (j=0; j<k_n; ++j) { + _Pragma( "loopbound min 13 max 120" ) + for ( j = 0; j < k_n; ++j ) { di = sav = *s; - _Pragma("loopbound min 8 max 8") - for (i = 0; i < 8; i++) { /* YYY */ + _Pragma( "loopbound min 8 max 8" ) + for ( i = 0; i < 8; i++ ) { /* YYY */ - ui = u[i]; - rpi = rp[i]; - u[i] = sav; + ui = u[ i ]; + rpi = rp[ i ]; + u[ i ] = sav; - zzz = GSM_MULT_R(rpi, di); - sav = GSM_ADD( ui, zzz); + zzz = GSM_MULT_R( rpi, di ); + sav = GSM_ADD( ui, zzz ); - zzz = GSM_MULT_R(rpi, ui); + zzz = GSM_MULT_R( rpi, ui ); di = GSM_ADD( di, zzz ); } @@ -1514,222 +1634,257 @@ void gsm_enc_Short_term_analysis_filtering ( void gsm_enc_Gsm_Short_Term_Analysis_Filter ( - struct gsm_state * S, + struct gsm_state *S, - word * LARc, /* coded log area ratio [0..7] IN */ - word * s /* signal [0..159] IN/OUT */ + word *LARc, /* coded log area ratio [ 0..7 ] IN */ + word *s /* signal [ 0..159 ] IN/OUT */ ) { - word * LARpp_j = S->LARpp[ S->j ]; - word * LARpp_j_1 = S->LARpp[ S->j ^= 1 ]; + word *LARpp_j = S->LARpp[ S->j ]; + word *LARpp_j_1 = S->LARpp[ S->j ^= 1 ]; - word LARp[8]; + word LARp[ 8 ]; -#undef FILTER -# define FILTER gsm_enc_Short_term_analysis_filtering +#undef FILTER +# define FILTER gsm_enc_Short_term_analysis_filtering gsm_enc_Decoding_of_the_coded_Log_Area_Ratios( LARc, LARpp_j ); gsm_enc_Coefficients_0_12( LARpp_j_1, LARpp_j, LARp ); gsm_enc_LARp_to_rp( LARp ); - FILTER( S, LARp, 13, s); + FILTER( S, LARp, 13, s ); - gsm_enc_Coefficients_13_26( LARpp_j_1, LARpp_j, LARp); + gsm_enc_Coefficients_13_26( LARpp_j_1, LARpp_j, LARp ); gsm_enc_LARp_to_rp( LARp ); - FILTER( S, LARp, 14, s + 13); + FILTER( S, LARp, 14, s + 13 ); - gsm_enc_Coefficients_27_39( LARpp_j_1, LARpp_j, LARp); + gsm_enc_Coefficients_27_39( LARpp_j_1, LARpp_j, LARp ); gsm_enc_LARp_to_rp( LARp ); - FILTER( S, LARp, 13, s + 27); + FILTER( S, LARp, 13, s + 27 ); - gsm_enc_Coefficients_40_159( LARpp_j, LARp); + gsm_enc_Coefficients_40_159( LARpp_j, LARp ); gsm_enc_LARp_to_rp( LARp ); - FILTER( S, LARp, 120, s + 40); + FILTER( S, LARp, 120, s + 40 ); } /* lpc.c */ -#undef P +#undef P /* - * 4.2.4 .. 4.2.7 LPC ANALYSIS SECTION - */ + 4.2.4 .. 4.2.7 LPC ANALYSIS SECTION +*/ /* 4.2.4 */ void gsm_enc_Autocorrelation ( - word * s, /* [0..159] IN/OUT */ - longword * L_ACF) /* [0..8] OUT */ + word *s, /* [ 0..159 ] IN/OUT */ + longword *L_ACF ) /* [ 0..8 ] OUT */ /* - * The goal is to compute the array L_ACF[k]. The signal s[i] must - * be scaled in order to avoid an overflow situation. - */ + The goal is to compute the array L_ACF[ k ]. The signal s[ i ] must + be scaled in order to avoid an overflow situation. +*/ { - int k, i; - - word temp, smax, scalauto; - - /* Dynamic scaling of the array s[0..159] - */ - - /* Search for the maximum. - */ - smax = 0; - - _Pragma("loopbound min 160 max 160") - for (k = 0; k <= 159; k++) { - temp = GSM_ABS( s[k] ); - if (temp > smax) smax = temp; - } - - /* Computation of the scaling factor. - */ - if (smax == 0) scalauto = 0; - else { - scalauto = 4 - gsm_enc_norm( (longword)smax << 16 );/* sub(4,..) */ - } - - /* Scaling of the array s[0...159] - */ - - if (scalauto > 0) { - -# define SCALE(n) \ - case n: \ - _Pragma("loopbound min 160 max 160") \ - for (k = 0; k <= 159; k++) \ - s[k] = GSM_MULT_R( s[k], 16384 >> (n-1) );\ - break; - - switch (scalauto) { - SCALE(1) - SCALE(2) - SCALE(3) - SCALE(4) - } -# undef SCALE - } - - /* Compute the L_ACF[..]. - */ - { - word * sp = s; - word sl = *sp; + int k, i; + + word temp, smax, scalauto; + + /* Dynamic scaling of the array s[ 0..159 ] + */ + + /* Search for the maximum. + */ + smax = 0; + + _Pragma( "loopbound min 160 max 160" ) + for ( k = 0; k <= 159; k++ ) { + temp = GSM_ABS( s[ k ] ); + if ( temp > smax ) smax = temp; + } + + /* Computation of the scaling factor. + */ + if ( smax == 0 ) scalauto = 0; + else { + scalauto = 4 - gsm_enc_norm( ( longword )smax << 16 ); /* sub(4,..) */ + } + + /* Scaling of the array s[ 0...159 ] + */ + + if ( scalauto > 0 ) { + +# define SCALE(n) \ + case n: \ + _Pragma("loopbound min 160 max 160") \ + for (k = 0; k <= 159; k++) \ + s[ k ] = GSM_MULT_R( s[ k ], 16384 >> (n-1) );\ + break; + + switch ( scalauto ) { + SCALE( 1 ) + SCALE( 2 ) + SCALE( 3 ) + SCALE( 4 ) + } +# undef SCALE + } + + /* Compute the L_ACF[ .. ]. + */ + { + word *sp = s; + word sl = *sp; #undef STEP -# define STEP(k) L_ACF[k] += ((longword)sl * sp[ -(k) ]); - -# define NEXTI sl = *++sp - - - _Pragma("loopbound min 9 max 9") - for (k = 9; k--; L_ACF[k] = 0) ; - - STEP (0); - NEXTI; - STEP(0); STEP(1); - NEXTI; - STEP(0); STEP(1); STEP(2); - NEXTI; - STEP(0); STEP(1); STEP(2); STEP(3); - NEXTI; - STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); - NEXTI; - STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); - NEXTI; - STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); - NEXTI; - STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); STEP(7); - - _Pragma("loopbound min 152 max 152") - for (i = 8; i <= 159; i++) { - - NEXTI; - - STEP(0); - STEP(1); STEP(2); STEP(3); STEP(4); - STEP(5); STEP(6); STEP(7); STEP(8); - } - - _Pragma("loopbound min 9 max 9") - for (k = 9; k--; L_ACF[k] <<= 1) ; - - } - /* Rescaling of the array s[0..159] - */ - if (scalauto > 0) { - _Pragma("loopbound min 160 max 160") - for (k = 160; k--; *s++ <<= scalauto) ; - } +# define STEP(k) L_ACF[ k ] += ((longword)sl * sp[ -(k) ]); + +# define NEXTI sl = *++sp + + + _Pragma( "loopbound min 9 max 9" ) + for ( k = 9; k--; L_ACF[ k ] = 0 ) ; + + STEP ( 0 ); + NEXTI; + STEP( 0 ); + STEP( 1 ); + NEXTI; + STEP( 0 ); + STEP( 1 ); + STEP( 2 ); + NEXTI; + STEP( 0 ); + STEP( 1 ); + STEP( 2 ); + STEP( 3 ); + NEXTI; + STEP( 0 ); + STEP( 1 ); + STEP( 2 ); + STEP( 3 ); + STEP( 4 ); + NEXTI; + STEP( 0 ); + STEP( 1 ); + STEP( 2 ); + STEP( 3 ); + STEP( 4 ); + STEP( 5 ); + NEXTI; + STEP( 0 ); + STEP( 1 ); + STEP( 2 ); + STEP( 3 ); + STEP( 4 ); + STEP( 5 ); + STEP( 6 ); + NEXTI; + STEP( 0 ); + STEP( 1 ); + STEP( 2 ); + STEP( 3 ); + STEP( 4 ); + STEP( 5 ); + STEP( 6 ); + STEP( 7 ); + + _Pragma( "loopbound min 152 max 152" ) + for ( i = 8; i <= 159; i++ ) { + + NEXTI; + + STEP( 0 ); + STEP( 1 ); + STEP( 2 ); + STEP( 3 ); + STEP( 4 ); + STEP( 5 ); + STEP( 6 ); + STEP( 7 ); + STEP( 8 ); + } + + _Pragma( "loopbound min 9 max 9" ) + for ( k = 9; k--; L_ACF[ k ] <<= 1 ) ; + + } + /* Rescaling of the array s[ 0..159 ] + */ + if ( scalauto > 0 ) { + _Pragma( "loopbound min 160 max 160" ) + for ( k = 160; k--; *s++ <<= scalauto ) ; + } } /* 4.2.5 */ -void gsm_enc_Reflection_coefficients ( - longword * L_ACF, /* 0...8 IN */ - word * r /* 0...7 OUT */ +void gsm_enc_Reflection_coefficients ( + longword *L_ACF, /* 0...8 IN */ + word *r /* 0...7 OUT */ ) { - int i, m, n; - word temp; + int i, m, n; + word temp; longword ltmp; - word ACF[9]; /* 0..8 */ - word P[ 9]; /* 0..8 */ - word K[ 9]; /* 2..8 */ + word ACF[ 9 ]; /* 0..8 */ + word P[ 9 ]; /* 0..8 */ + word K[ 9 ]; /* 2..8 */ /* Schur recursion with 16 bits arithmetic. */ - if (L_ACF[0] == 0) { - _Pragma("loopbound min 8 max 8") - for (i = 8; i--; *r++ = 0) ; + if ( L_ACF[ 0 ] == 0 ) { + _Pragma( "loopbound min 8 max 8" ) + for ( i = 8; i--; *r++ = 0 ) ; return; } - temp = gsm_enc_norm( L_ACF[0] ); + temp = gsm_enc_norm( L_ACF[ 0 ] ); /* ? overflow ? */ - _Pragma("loopbound min 9 max 9") - for (i = 0; i <= 8; i++) ACF[i] = SASR( L_ACF[i] << temp, 16 ); + _Pragma( "loopbound min 9 max 9" ) + for ( i = 0; i <= 8; i++ ) ACF[ i ] = SASR( L_ACF[ i ] << temp, 16 ); - /* Initialize array P[..] and K[..] for the recursion. + /* Initialize array P[ .. ] and K[ .. ] for the recursion. */ - _Pragma("loopbound min 7 max 7") - for (i = 1; i <= 7; i++) K[ i ] = ACF[ i ]; + _Pragma( "loopbound min 7 max 7" ) + for ( i = 1; i <= 7; i++ ) K[ i ] = ACF[ i ]; - _Pragma("loopbound min 9 max 9") - for (i = 0; i <= 8; i++) P[ i ] = ACF[ i ]; + _Pragma( "loopbound min 9 max 9" ) + for ( i = 0; i <= 8; i++ ) P[ i ] = ACF[ i ]; /* Compute reflection coefficients */ - _Pragma("loopbound min 8 max 8") - for (n = 1; n <= 8; n++, r++) { - - temp = P[1]; - temp = GSM_ABS(temp); - if (P[0] < temp) { - _Pragma("loopbound min 8 max 8") - for (i = n; i <= 8; i++) *r++ = 0; - return; + _Pragma( "loopbound min 8 max 8" ) + _Pragma( "marker outer-marker" ) + for ( n = 1; n <= 8; n++, r++ ) { + + temp = P[ 1 ]; + temp = GSM_ABS( temp ); + if ( P[ 0 ] < temp ) { + + for ( i = n; i <= 8; i++ ) *r++ = 0; _Pragma( "marker inner-marker" ) + return; _Pragma( "flowrestriction 1*inner-marker <= 36*outer-marker" ) } - *r = gsm_enc_div( temp, P[0] ); + *r = gsm_enc_div( temp, P[ 0 ] ); - if (P[1] > 0) *r = -*r; /* r[n] = sub(0, r[n]) */ - if (n == 8) return; + if ( P[ 1 ] > 0 ) *r = -*r; /* r[ n ] = sub(0, r[ n ]) */ + if ( n == 8 ) return; /* Schur recursion */ - temp = GSM_MULT_R( P[1], *r ); - P[0] = GSM_ADD( P[0], temp ); + temp = GSM_MULT_R( P[ 1 ], *r ); + P[ 0 ] = GSM_ADD( P[ 0 ], temp ); - _Pragma("loopbound min 1 max 7") - for (m = 1; m <= 8 - n; ++m) { - temp = GSM_MULT_R( K[ m ], *r ); - P[m] = GSM_ADD( P[ m+1 ], temp ); + _Pragma( "loopbound min 1 max 7" ) + for ( m = 1; m <= 8 - n; ++m ) { + temp = GSM_MULT_R( K[ m ], *r ); + P[ m ] = GSM_ADD( P[ m + 1 ], temp ); - temp = GSM_MULT_R( P[ m+1 ], *r ); - K[m] = GSM_ADD( K[ m ], temp ); + temp = GSM_MULT_R( P[ m + 1 ], *r ); + K[ m ] = GSM_ADD( K[ m ], temp ); } } } @@ -1737,36 +1892,39 @@ void gsm_enc_Reflection_coefficients ( /* 4.2.6 */ void gsm_enc_Transformation_to_Log_Area_Ratios ( - word * r /* 0..7 IN/OUT */ + word *r /* 0..7 IN/OUT */ ) /* - * The following scaling for r[..] and LAR[..] has been used: - * - * r[..] = integer( real_r[..]*32768. ); -1 <= real_r < 1. - * LAR[..] = integer( real_LAR[..] * 16384 ); - * with -1.625 <= real_LAR <= 1.625 - */ + The following scaling for r[ .. ] and LAR[ .. ] has been used: + + r[ .. ] = integer( real_r[ .. ]*32768. ); -1 <= real_r < 1. + LAR[ .. ] = integer( real_LAR[ .. ] * 16384 ); + with -1.625 <= real_LAR <= 1.625 +*/ { - word temp; - int i; + word temp; + int i; - /* Computation of the LAR[0..7] from the r[0..7] + /* Computation of the LAR[ 0..7 ] from the r[ 0..7 ] */ - _Pragma("loopbound min 8 max 8") - for (i = 1; i <= 8; i++, r++) { + _Pragma( "loopbound min 8 max 8" ) + for ( i = 1; i <= 8; i++, r++ ) { temp = *r; - temp = GSM_ABS(temp); + temp = GSM_ABS( temp ); - if (temp < 22118) { + if ( temp < 22118 ) temp >>= 1; - } else if (temp < 31130) { - temp -= 11059; - } else { - temp -= 26112; - temp <<= 2; - } + + else + if ( temp < 31130 ) + temp -= 11059; + + else { + temp -= 26112; + temp <<= 2; + } *r = *r < 0 ? -temp : temp; } @@ -1775,28 +1933,28 @@ void gsm_enc_Transformation_to_Log_Area_Ratios ( /* 4.2.7 */ void gsm_enc_Quantization_and_coding ( - word * LAR /* [0..7] IN/OUT */ + word *LAR /* [ 0..7 ] IN/OUT */ ) { - word temp; - longword ltmp; + word temp; + longword ltmp; /* This procedure needs four tables; the following equations - * give the optimum scaling for the constants: - * - * A[0..7] = integer( real_A[0..7] * 1024 ) - * B[0..7] = integer( real_B[0..7] * 512 ) - * MAC[0..7] = maximum of the LARc[0..7] - * MIC[0..7] = minimum of the LARc[0..7] - */ - -# undef STEP -# define STEP( A, B, MAC, MIC ) \ - temp = GSM_MULT( A, *LAR ); \ - temp = GSM_ADD( temp, B ); \ - temp = GSM_ADD( temp, 256 ); \ - temp = SASR( temp, 9 ); \ + give the optimum scaling for the constants: + + A[ 0..7 ] = integer( real_A[ 0..7 ] * 1024 ) + B[ 0..7 ] = integer( real_B[ 0..7 ] * 512 ) + MAC[ 0..7 ] = maximum of the LARc[ 0..7 ] + MIC[ 0..7 ] = minimum of the LARc[ 0..7 ] + */ + +# undef STEP +# define STEP( A, B, MAC, MIC ) \ + temp = GSM_MULT( A, *LAR ); \ + temp = GSM_ADD( temp, B ); \ + temp = GSM_ADD( temp, 256 ); \ + temp = SASR( temp, 9 ); \ *LAR = temp>MAC ? MAC - MIC : (temp<MIC ? 0 : temp - MIC); \ LAR++; @@ -1810,64 +1968,64 @@ void gsm_enc_Quantization_and_coding ( STEP( 8534, -341, 3, -4 ); STEP( 9036, -1144, 3, -4 ); -# undef STEP +# undef STEP } void gsm_enc_Gsm_LPC_Analysis ( - word * s, /* 0..159 signals IN/OUT */ - word * LARc) /* 0..7 LARc's OUT */ + word *s, /* 0..159 signals IN/OUT */ + word *LARc ) /* 0..7 LARc's OUT */ { - longword L_ACF[9]; + longword L_ACF[ 9 ]; - gsm_enc_Autocorrelation (s, L_ACF ); - gsm_enc_Reflection_coefficients (L_ACF, LARc ); - gsm_enc_Transformation_to_Log_Area_Ratios (LARc); - gsm_enc_Quantization_and_coding (LARc); + gsm_enc_Autocorrelation ( s, L_ACF ); + gsm_enc_Reflection_coefficients ( L_ACF, LARc ); + gsm_enc_Transformation_to_Log_Area_Ratios ( LARc ); + gsm_enc_Quantization_and_coding ( LARc ); } /* preprocess.c */ -/* 4.2.0 .. 4.2.3 PREPROCESSING SECTION - * - * After A-law to linear conversion (or directly from the - * Ato D converter) the following scaling is assumed for - * input to the RPE-LTP algorithm: - * - * in: 0.1.....................12 - * S.v.v.v.v.v.v.v.v.v.v.v.v.*.*.* - * - * Where S is the sign bit, v a valid bit, and * a "don't care" bit. - * The original signal is called sop[..] - * - * out: 0.1................... 12 - * S.S.v.v.v.v.v.v.v.v.v.v.v.v.0.0 - */ +/* 4.2.0 .. 4.2.3 PREPROCESSING SECTION + + After A-law to linear conversion (or directly from the + Ato D converter) the following scaling is assumed for + input to the RPE-LTP algorithm: + + in: 0.1.....................12 + S.v.v.v.v.v.v.v.v.v.v.v.v.*.*. + + Where S is the sign bit, v a valid bit, and * a "don't care" bit. + The original signal is called sop[ .. ] + + out: 0.1................... 12 + S.S.v.v.v.v.v.v.v.v.v.v.v.v.0.0 +*/ void gsm_enc_Gsm_Preprocess ( - struct gsm_state * S, - word * s, - word * so ) /* [0..159] IN/OUT */ + struct gsm_state *S, + word *s, + word *so ) /* [ 0..159 ] IN/OUT */ { word z1 = S->z1; longword L_z2 = S->L_z2; - word mp = S->mp; + word mp = S->mp; - word s1; + word s1; longword L_s2; longword L_temp; - word msp, lsp; - word SO; + word msp, lsp; + word SO; - longword ltmp; /* for ADD */ - ulongword utmp; /* for L_ADD */ + longword ltmp; /* for ADD */ + ulongword utmp; /* for L_ADD */ - int k = 160; + int k = 160; - _Pragma("loopbound min 160 max 160") - while (k--) { + _Pragma( "loopbound min 160 max 160" ) + while ( k-- ) { /* 4.2.1 Downscaling of the input signal */ @@ -1875,16 +2033,16 @@ void gsm_enc_Gsm_Preprocess ( s++; /* 4.2.2 Offset compensation - * - * This part implements a high-pass filter and requires extended - * arithmetic precision for the recursive part of this filter. - * The input of this procedure is the array so[0...159] and the - * output the array sof[ 0...159 ]. - */ + + This part implements a high-pass filter and requires extended + arithmetic precision for the recursive part of this filter. + The input of this procedure is the array so[ 0...159 ] and the + output the array sof[ 0...159 ]. + */ /* Compute the non-recursive part */ - s1 = SO - z1; /* s1 = gsm_enc_sub( *so, z1 ); */ + s1 = SO - z1; /* s1 = gsm_enc_sub( *so, z1 ); */ z1 = SO; /* Compute the recursive part @@ -1896,13 +2054,13 @@ void gsm_enc_Gsm_Preprocess ( */ msp = SASR( L_z2, 15 ); - lsp = L_z2-((longword)msp<<15); /* gsm_enc_L_sub(L_z2,(msp<<15)); */ + lsp = L_z2 - ( ( longword )msp << 15 ); /* gsm_enc_L_sub(L_z2,(msp<<15)); */ L_s2 += GSM_MULT_R( lsp, 32735 ); - L_temp = (longword)msp * 32735; /* GSM_L_MULT(msp,32735) >> 1;*/ + L_temp = ( longword )msp * 32735; /* GSM_L_MULT(msp,32735) >> 1;*/ L_z2 = GSM_L_ADD( L_temp, L_s2 ); - /* Compute sof[k] with rounding + /* Compute sof[ k ] with rounding */ L_temp = GSM_L_ADD( L_z2, 16384 ); @@ -1921,92 +2079,92 @@ void gsm_enc_Gsm_Preprocess ( /* gsm_enc_bench.c */ -word gsm_enc_norm (longword a ) +word gsm_enc_norm ( longword a ) /* - * the number of left shifts needed to normalize the 32 bit - * variable L_var1 for positive values on the interval - * - * with minimum of - * minimum of 1073741824 (01000000000000000000000000000000) and - * maximum of 2147483647 (01111111111111111111111111111111) - * - * - * and for negative values on the interval with - * minimum of -2147483648 (-10000000000000000000000000000000) and - * maximum of -1073741824 ( -1000000000000000000000000000000). - * - * in order to normalize the result, the following - * operation must be done: L_norm_var1 = L_var1 << norm( L_var1 ); - * - * (That's 'ffs', only from the left, not the right..) - */ + the number of left shifts needed to normalize the 32 bit + variable L_var1 for positive values on the interval + + with minimum of + minimum of 1073741824 (01000000000000000000000000000000) and + maximum of 2147483647 (01111111111111111111111111111111) + + + and for negative values on the interval with + minimum of -2147483648 (-10000000000000000000000000000000) and + maximum of -1073741824 ( -1000000000000000000000000000000). + + in order to normalize the result, the following + operation must be done: L_norm_var1 = L_var1 << norm( L_var1 ); + + (That's 'ffs', only from the left, not the right..) +*/ { - if (a < 0) { - if (a <= -1073741824) return 0; + if ( a < 0 ) { + if ( a <= -1073741824 ) return 0; a = ~a; } - return a & 0xffff0000 - ? ( a & 0xff000000 - ? -1 + gsm_enc_bitoff[ 0xFF & (a >> 24) ] - : 7 + gsm_enc_bitoff[ 0xFF & (a >> 16) ] ) - : ( a & 0xff00 - ? 15 + gsm_enc_bitoff[ 0xFF & (a >> 8) ] - : 23 + gsm_enc_bitoff[ 0xFF & a ] ); + return a & 0xffff0000 + ? ( a & 0xff000000 + ? -1 + gsm_enc_bitoff[ 0xFF & ( a >> 24 ) ] + : 7 + gsm_enc_bitoff[ 0xFF & ( a >> 16 ) ] ) + : ( a & 0xff00 + ? 15 + gsm_enc_bitoff[ 0xFF & ( a >> 8 ) ] + : 23 + gsm_enc_bitoff[ 0xFF & a ] ); } -word gsm_enc_asl (word a, int n) +word gsm_enc_asl ( word a, int n ) { - if (n >= 16) return 0; - if (n <= -16) return -(a < 0); - if (n < 0) return gsm_enc_asr(a, -n); + if ( n >= 16 ) return 0; + if ( n <= -16 ) return -( a < 0 ); + if ( n < 0 ) return gsm_enc_asr( a, -n ); return a << n; } -word gsm_enc_asr (word a, int n) +word gsm_enc_asr ( word a, int n ) { - if (n >= 16) return -(a < 0); - if (n <= -16) return 0; - if (n < 0) return a << -n; + if ( n >= 16 ) return -( a < 0 ); + if ( n <= -16 ) return 0; + if ( n < 0 ) return a << -n; -# ifdef SASR + # ifdef SASR return a >> n; -# else - if (a >= 0) return a >> n; - else return -(word)( -(uword)a >> n ); -# endif + # else + if ( a >= 0 ) return a >> n; + else return -( word )( -( uword )a >> n ); + # endif } -/* - * (From p. 46, end of section 4.2.5) - * - * NOTE: The following lines gives [sic] one correct implementation - * of the div(num, denum) arithmetic operation. Compute div - * which is the integer division of num by denum: with denum - * >= num > 0 - */ +/* + (From p. 46, end of section 4.2.5) -word gsm_enc_div ( word num, word denum) + NOTE: The following lines gives [ sic ] one correct implementation + of the div(num, denum) arithmetic operation. Compute div + which is the integer division of num by denum: with denum + >= num > 0 +*/ + +word gsm_enc_div ( word num, word denum ) { - longword L_num = num; - longword L_denum = denum; - word div = 0; - int k = 15; + longword L_num = num; + longword L_denum = denum; + word div = 0; + int k = 15; /* The parameter num sometimes becomes zero. - * Although this is explicitly guarded against in 4.2.5, - * we assume that the result should then be zero as well. - */ + Although this is explicitly guarded against in 4.2.5, + we assume that the result should then be zero as well. + */ - if (num == 0) + if ( num == 0 ) return 0; - _Pragma("loopbound min 15 max 15") - while (k--) { + _Pragma( "loopbound min 15 max 15" ) + while ( k-- ) { div <<= 1; L_num <<= 1; - if (L_num >= L_denum) { + if ( L_num >= L_denum ) { L_num -= L_denum; div++; } @@ -2017,16 +2175,16 @@ word gsm_enc_div ( word num, word denum) -gsm gsm_enc_create( void ) +gsm gsm_enc_create( void ) { unsigned int i; gsm r; r = &gsm_enc_state; - _Pragma("loopbound min 648 max 648") - for(i=0; i < sizeof(*r); i++) - ((char *)r)[i]=0; + _Pragma( "loopbound min 648 max 648" ) + for ( i = 0; i < sizeof( *r ); i++ ) + ( ( char * )r )[ i ] = 0; r->nrp = 40; @@ -2043,7 +2201,7 @@ int gsm_enc_return( void ) return gsm_enc_result; } -void gsm_enc_main( void ) +void _Pragma( "entrypoint" ) gsm_enc_main( void ) { gsm r; unsigned i; @@ -2051,10 +2209,10 @@ void gsm_enc_main( void ) r = gsm_enc_state_ptr; - _Pragma("loopbound min 20 max 20") - for (i=0; i < SAMPLES; i++) { - gsm_enc_encode(r, gsm_enc_pcmdata + i * 160, gsm_enc_gsmdata + i * sizeof(gsm_frame)); - } + _Pragma( "loopbound min 20 max 20" ) + for ( i = 0; i < SAMPLES; i++ ) + gsm_enc_encode( r, gsm_enc_pcmdata + i * 160, + gsm_enc_gsmdata + i * sizeof( gsm_frame ) ); } int main( void ) diff --git a/bench/sequential/gsm_enc/private.h b/bench/sequential/gsm_enc/private.h old mode 100644 new mode 100755 index 48786b319e9865c0ce56dd7425de64f59898b5c5..ed59e7626a481f46131d4c0fd33823eab4c8684d --- a/bench/sequential/gsm_enc/private.h +++ b/bench/sequential/gsm_enc/private.h @@ -1,56 +1,56 @@ -#ifndef PRIVATE_H -#define PRIVATE_H +#ifndef PRIVATE_H +#define PRIVATE_H -typedef short word; /* 16 bit signed int */ -typedef long longword; /* 32 bit signed int */ +typedef short word; /* 16 bit signed int */ +typedef long longword; /* 32 bit signed int */ -typedef unsigned short uword; /* unsigned word */ -typedef unsigned long ulongword; /* unsigned longword */ +typedef unsigned short uword; /* unsigned word */ +typedef unsigned long ulongword; /* unsigned longword */ struct gsm_state { - word dp0[ 280 ]; + word dp0[ 280 ]; - word z1; /* preprocessing.c, Offset_com. */ - longword L_z2; /* Offset_com. */ - int mp; /* Preemphasis */ + word z1; /* preprocessing.c, Offset_com. */ + longword L_z2; /* Offset_com. */ + int mp; /* Preemphasis */ - word u[8]; /* short_term_aly_filter.c */ - word LARpp[2][8]; /* */ - word j; /* */ + word u[ 8 ]; /* short_term_aly_filter.c */ + word LARpp[ 2 ][ 8 ]; /* */ + word j; /* */ - word nrp; /* 40 */ /* long_term.c, synthesis */ - word v[9]; /* short_term.c, synthesis */ - word msr; /* decoder.c, Postprocessing */ + word nrp; /* 40 */ /* long_term.c, synthesis */ + word v[ 9 ]; /* short_term.c, synthesis */ + word msr; /* decoder.c, Postprocessing */ - char verbose; /* only used if !NDEBUG */ - char fast; /* only used if FAST */ + char verbose; /* only used if !NDEBUG */ + char fast; /* only used if FAST */ }; -#define MIN_WORD ((-32767)-1) -#define MAX_WORD ( 32767) +#define MIN_WORD ((-32767)-1) +#define MAX_WORD ( 32767) -#define MIN_LONGWORD ((-2147483647)-1) -#define MAX_LONGWORD ( 2147483647) +#define MIN_LONGWORD ((-2147483647)-1) +#define MAX_LONGWORD ( 2147483647) -#define SASR(x, by) ((x) >> (by)) +#define SASR(x, by) ((x) >> (by)) /* Table 4.3a Decision level of the LTP gain quantizer - */ -/* bc 0 1 2 3 */ -word gsm_enc_DLB[4] = { 6554, 16384, 26214, 32767 }; +*/ +/* bc 0 1 2 3 */ +word gsm_enc_DLB[ 4 ] = { 6554, 16384, 26214, 32767 }; -/* Table 4.5 Normalized inverse mantissa used to compute xM/xmax - */ -/* i 0 1 2 3 4 5 6 7 */ -word gsm_enc_NRFAC[8] = { 29128, 26215, 23832, 21846, 20165, 18725, 17476, 16384 }; +/* Table 4.5 Normalized inverse mantissa used to compute xM/xmax +*/ +/* i 0 1 2 3 4 5 6 7 */ +word gsm_enc_NRFAC[ 8 ] = { 29128, 26215, 23832, 21846, 20165, 18725, 17476, 16384 }; -/* Table 4.6 Normalized direct mantissa used to compute xM/xmax - */ +/* Table 4.6 Normalized direct mantissa used to compute xM/xmax +*/ /* i 0 1 2 3 4 5 6 7 */ -word gsm_enc_FAC[8] = { 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767 }; +word gsm_enc_FAC[ 8 ] = { 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767 }; #endif /* PRIVATE_H */ diff --git a/bench/sequential/h264_dec/changeLog.txt b/bench/sequential/h264_dec/changeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/h264_dec/copyright.txt b/bench/sequential/h264_dec/copyright.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/h264_dec/h264_dec.c b/bench/sequential/h264_dec/h264_dec.c old mode 100644 new mode 100755 index ef7ca632cbfd7d359e867b9bd8a9d024d51f135a..a595655507a87f90a6009d7b53fa8efbe40b9827 --- a/bench/sequential/h264_dec/h264_dec.c +++ b/bench/sequential/h264_dec/h264_dec.c @@ -43,12 +43,12 @@ int main( void ); Declaration of global variables */ -extern signed char h264_dec_mv_array[65][65][2]; -extern short h264_dec_list_imgUV[2][45][45]; -extern int h264_dec_img_m7[16][16]; +extern signed char h264_dec_mv_array[ 65 ][ 65 ][ 2 ]; +extern short h264_dec_list_imgUV[ 2 ][ 45 ][ 45 ]; +extern int h264_dec_img_m7[ 16 ][ 16 ]; -char h264_dec_img_mpr[7][7]; -char h264_dec_dec_picture_imgUV[2][64][54]; +char h264_dec_img_mpr[ 7 ][ 7 ]; +char h264_dec_dec_picture_imgUV[ 2 ][ 64 ][ 54 ]; struct h264_dec_img_par h264_dec_img; @@ -58,7 +58,7 @@ struct h264_dec_img_par h264_dec_img; int h264_dec_return () { - return ( h264_dec_img_mpr[0][0] + h264_dec_dec_picture_imgUV[0][0][0] + 128 != + return ( h264_dec_img_mpr[ 0 ][ 0 ] + h264_dec_dec_picture_imgUV[ 0 ][ 0 ][ 0 ] + 128 != 0 ); } @@ -71,17 +71,17 @@ void h264_dec_init () /* Apply volatile XOR-bitmask to entire input array. */ - p = ( unsigned char * ) &h264_dec_mv_array[ 0 ]; - _Pragma( "loopbound min 33800 max 33800" ) + p = ( unsigned char * ) &h264_dec_mv_array[ 0 ]; + _Pragma( "loopbound min 33800 max 33800" ) for ( i = 0; i < sizeof( h264_dec_mv_array ); ++i, ++p ) *p ^= bitmask; - p = ( unsigned char * ) &h264_dec_list_imgUV[ 0 ]; - _Pragma( "loopbound min 16200 max 16200" ) + p = ( unsigned char * ) &h264_dec_list_imgUV[ 0 ]; + _Pragma( "loopbound min 16200 max 16200" ) for ( i = 0; i < sizeof( h264_dec_list_imgUV ); ++i, ++p ) *p ^= bitmask; - p = ( unsigned char * ) &h264_dec_img_m7[ 0 ]; + p = ( unsigned char * ) &h264_dec_img_m7[ 0 ]; _Pragma( "loopbound min 1024 max 1024" ) for ( i = 0; i < sizeof( h264_dec_img_m7 ); ++i, ++p ) *p ^= bitmask; @@ -173,18 +173,18 @@ void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img ) _Pragma( "loopbound min 4 max 4" ) for ( ii = 0; ii < 4; ii++ ) { ifx = ( ( i4 + ii ) / ( img->mb_cr_size_x / 4 ) ) % 64; - i1 = ( i4 + ii ) * f1_x + h264_dec_mv_array[jf][ifx][0]; + i1 = ( i4 + ii ) * f1_x + h264_dec_mv_array[ jf ][ ifx ][ 0 ]; if ( !curr_mb_field ) - j1 = ( j4 + jj ) * f1_y + h264_dec_mv_array[jf][ifx][1]; + j1 = ( j4 + jj ) * f1_y + h264_dec_mv_array[ jf ][ ifx ][ 1 ]; else { if ( mb_nr % 2 == 0 ) { j1 = ( ( img->pix_c_y / 2 ) + jj + joff ) * f1_y + - h264_dec_mv_array[jf][ifx][1]; + h264_dec_mv_array[ jf ][ ifx ][ 1 ]; } else { j1 = ( ( img->pix_c_y - img->mb_cr_size_y ) / 2 + jj + joff ) * f1_y + - h264_dec_mv_array[jf][ifx][1]; + h264_dec_mv_array[ jf ][ ifx ][ 1 ]; } ++mb_nr; } @@ -218,11 +218,11 @@ void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img ) if ( img->apply_weights ) { } else { - h264_dec_img_mpr[ii + ioff][jj + joff] - = ( if0 * jf0 * h264_dec_list_imgUV[uv][jj0][ii0] - + if1 * jf0 * h264_dec_list_imgUV[uv][jj0][ii1] - + if0 * jf1 * h264_dec_list_imgUV[uv][jj1][ii0] - + if1 * jf1 * h264_dec_list_imgUV[uv][jj1][ii1] + h264_dec_img_mpr[ ii + ioff ][ jj + joff ] + = ( if0 * jf0 * h264_dec_list_imgUV[ uv ][ jj0 ][ ii0 ] + + if1 * jf0 * h264_dec_list_imgUV[ uv ][ jj0 ][ ii1 ] + + if0 * jf1 * h264_dec_list_imgUV[ uv ][ jj1 ][ ii0 ] + + if1 * jf1 * h264_dec_list_imgUV[ uv ][ jj1 ][ ii1 ] + f4 ) / f3; } } @@ -253,19 +253,19 @@ void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img ) if ( direct_pdir == 0 || direct_pdir == 2 ) { i1 = ( img->pix_c_x + ii + ioff ) * f1_x + - h264_dec_mv_array[jf][ifx][0]; + h264_dec_mv_array[ jf ][ ifx ][ 0 ]; if ( !curr_mb_field ) { j1 = ( img->pix_c_y + jj + joff ) * f1_y + - h264_dec_mv_array[jf][ifx][1]; + h264_dec_mv_array[ jf ][ ifx ][ 1 ]; } else { if ( mb_nr % 2 == 0 ) { j1 = ( ( img->pix_c_y ) / 2 + jj + joff ) * - f1_y + h264_dec_mv_array[jf][ifx][1]; + f1_y + h264_dec_mv_array[ jf ][ ifx ][ 1 ]; } else { j1 = ( ( img->pix_c_y - img->mb_cr_size_y ) / 2 + jj + joff ) * f1_y - + h264_dec_mv_array[jf][ifx][1]; + + h264_dec_mv_array[ jf ][ ifx ][ 1 ]; } } @@ -303,30 +303,30 @@ void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img ) jf0 = f1_y - jf1; fw_pred = ( if0 * jf0 * - h264_dec_list_imgUV[uv][jj0][ii0] + + h264_dec_list_imgUV[ uv ][ jj0 ][ ii0 ] + if1 * jf0 * - h264_dec_list_imgUV[uv][jj0][ii1] + + h264_dec_list_imgUV[ uv ][ jj0 ][ ii1 ] + if0 * jf1 * - h264_dec_list_imgUV[uv][jj1][ii0] + + h264_dec_list_imgUV[ uv ][ jj1 ][ ii0 ] + if1 * jf1 * - h264_dec_list_imgUV[uv][jj1][ii1] + + h264_dec_list_imgUV[ uv ][ jj1 ][ ii1 ] + f4 ) / f3; } if ( direct_pdir == 1 || direct_pdir == 2 ) { i1 = ( img->pix_c_x + ii + ioff ) * f1_x + - h264_dec_mv_array[jf][ifx][0]; + h264_dec_mv_array[ jf ][ ifx ][ 0 ]; if ( !curr_mb_field ) { j1 = ( img->pix_c_y + jj + joff ) * f1_y + - h264_dec_mv_array[jf][ifx][1]; + h264_dec_mv_array[ jf ][ ifx ][ 1 ]; } else { if ( mb_nr % 2 == 0 ) { j1 = ( ( img->pix_c_y ) / 2 + jj + joff ) * f1_y - + h264_dec_mv_array[jf][ifx][1]; + + h264_dec_mv_array[ jf ][ ifx ][ 1 ]; } else { j1 = ( ( img->pix_c_y - img->mb_cr_size_y ) / 2 + jj + joff ) * f1_y - + h264_dec_mv_array[jf][ifx][1]; + + h264_dec_mv_array[ jf ][ ifx ][ 1 ]; } } if ( active_sps_chroma_format_idc == 1 ) @@ -359,13 +359,13 @@ void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img ) jf0 = f1_y - jf1; bw_pred = ( if0 * jf0 * - h264_dec_list_imgUV[uv][jj0][ii0] + + h264_dec_list_imgUV[ uv ][ jj0 ][ ii0 ] + if1 * jf0 * - h264_dec_list_imgUV[uv][jj0][ii1] + + h264_dec_list_imgUV[ uv ][ jj0 ][ ii1 ] + if0 * jf1 * - h264_dec_list_imgUV[uv][jj1][ii0] + + h264_dec_list_imgUV[ uv ][ jj1 ][ ii0 ] + if1 * jf1 * - h264_dec_list_imgUV[uv][jj1][ii1] + + h264_dec_list_imgUV[ uv ][ jj1 ][ ii1 ] + f4 ) / f3; } @@ -377,19 +377,19 @@ void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img ) bw_ref_idx = bw_refframe; i1 = ( img->pix_c_x + ii + ioff ) * f1_x + - h264_dec_mv_array[jf][ifx][0]; + h264_dec_mv_array[ jf ][ ifx ][ 0 ]; if ( !curr_mb_field ) { j1 = ( img->pix_c_y + jj + joff ) * f1_y + - h264_dec_mv_array[jf][ifx][1]; + h264_dec_mv_array[ jf ][ ifx ][ 1 ]; } else { if ( mb_nr % 2 == 0 ) { j1 = ( ( img->pix_c_y ) / 2 + jj + joff ) * f1_y + - h264_dec_mv_array[jf][ifx][1]; + h264_dec_mv_array[ jf ][ ifx ][ 1 ]; } else { j1 = ( ( img->pix_c_y - img->mb_cr_size_y ) / 2 + jj + joff ) * f1_y - + h264_dec_mv_array[jf][ifx][1]; + + h264_dec_mv_array[ jf ][ ifx ][ 1 ]; } } @@ -423,26 +423,26 @@ void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img ) if0 = f1_x - if1; jf0 = f1_y - jf1; - fw_pred = ( if0 * jf0 * h264_dec_list_imgUV[uv][jj0][ii0] + - if1 * jf0 * h264_dec_list_imgUV[uv][jj0][ii1] + - if0 * jf1 * h264_dec_list_imgUV[uv][jj1][ii0] + - if1 * jf1 * h264_dec_list_imgUV[uv][jj1][ii1] + + fw_pred = ( if0 * jf0 * h264_dec_list_imgUV[ uv ][ jj0 ][ ii0 ] + + if1 * jf0 * h264_dec_list_imgUV[ uv ][ jj0 ][ ii1 ] + + if0 * jf1 * h264_dec_list_imgUV[ uv ][ jj1 ][ ii0 ] + + if1 * jf1 * h264_dec_list_imgUV[ uv ][ jj1 ][ ii1 ] + f4 ) / f3; i1 = ( img->pix_c_x + ii + ioff ) * f1_x + - h264_dec_mv_array[jf][ifx][0]; + h264_dec_mv_array[ jf ][ ifx ][ 0 ]; if ( !curr_mb_field ) { j1 = ( img->pix_c_y + jj + joff ) * f1_y + - h264_dec_mv_array[jf][ifx][1]; + h264_dec_mv_array[ jf ][ ifx ][ 1 ]; } else { if ( mb_nr % 2 == 0 ) { j1 = ( ( img->pix_c_y ) / 2 + jj + joff ) * f1_y - + h264_dec_mv_array[jf][ifx][1]; + + h264_dec_mv_array[ jf ][ ifx ][ 1 ]; } else { j1 = ( ( img->pix_c_y - img->mb_cr_size_y ) / 2 + jj + joff ) * f1_y - + h264_dec_mv_array[jf][ifx][1]; + + h264_dec_mv_array[ jf ][ ifx ][ 1 ]; } } @@ -474,10 +474,10 @@ void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img ) if0 = f1_x - if1; jf0 = f1_y - jf1; - bw_pred = ( if0 * jf0 * h264_dec_list_imgUV[uv][jj0][ii0] + - if1 * jf0 * h264_dec_list_imgUV[uv][jj0][ii1] + - if0 * jf1 * h264_dec_list_imgUV[uv][jj1][ii0] + - if1 * jf1 * h264_dec_list_imgUV[uv][jj1][ii1] + + bw_pred = ( if0 * jf0 * h264_dec_list_imgUV[ uv ][ jj0 ][ ii0 ] + + if1 * jf0 * h264_dec_list_imgUV[ uv ][ jj0 ][ ii1 ] + + if0 * jf1 * h264_dec_list_imgUV[ uv ][ jj1 ][ ii0 ] + + if1 * jf1 * h264_dec_list_imgUV[ uv ][ jj1 ][ ii1 ] + f4 ) / f3; } @@ -493,7 +493,7 @@ void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img ) if ( img->direct_spatial_mv_pred_flag && direct_pdir == 1 ) { - img->mpr[ii + ioff][jj + joff] = + img->mpr[ ii + ioff ][ jj + joff ] = ( ( ( img->wp_round_chroma ) >> img->chroma_log2_weight_denom ) < 0 ? 0 : ( ( img->wp_round_chroma ) >> @@ -501,7 +501,7 @@ void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img ) } else if ( img->direct_spatial_mv_pred_flag && direct_pdir == 0 ) { - img->mpr[ii + ioff][jj + joff] = + img->mpr[ ii + ioff ][ jj + joff ] = ( ( ( ( img->wp_round_chroma ) >> img->chroma_log2_weight_denom ) ) < 0 ? 0 : @@ -512,7 +512,7 @@ void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img ) int alpha_fw = 0; int alpha_bw = 0; - img->mpr[ii + ioff][jj + joff] = + img->mpr[ ii + ioff ][ jj + joff ] = ( ( ( alpha_fw * fw_pred + alpha_bw * bw_pred + ( 1 << img->chroma_log2_weight_denom ) ) >> ( @@ -525,13 +525,13 @@ void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img ) } else { if ( img->direct_spatial_mv_pred_flag && direct_pdir == 1 ) - img->mpr[ii + ioff][jj + joff] = bw_pred; + img->mpr[ ii + ioff ][ jj + joff ] = bw_pred; else if ( img->direct_spatial_mv_pred_flag && direct_pdir == 0 ) - img->mpr[ii + ioff][jj + joff] = fw_pred; + img->mpr[ ii + ioff ][ jj + joff ] = fw_pred; else { - img->mpr[ii + ioff][jj + joff] = ( fw_pred + bw_pred + img->mpr[ ii + ioff ][ jj + joff ] = ( fw_pred + bw_pred + 1 ) / 2; } @@ -548,9 +548,9 @@ void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img ) _Pragma( "loopbound min 4 max 4" ) for ( ; jj < 4; jj++ ) { if ( !residue_transform_flag ) { - h264_dec_dec_picture_imgUV[uv][( j4 + jj ) % 64] - [( i4 + ii ) % 54] - = h264_dec_img_m7[ii][jj]; + h264_dec_dec_picture_imgUV[ uv ][ ( j4 + jj ) % 64 ] + [ ( i4 + ii ) % 54 ] + = h264_dec_img_m7[ ii ][ jj ]; } } } @@ -572,9 +572,9 @@ void h264_dec_decode_one_macroblock( struct h264_dec_img_par *img ) for ( ii = 0; ii < 4; ii++ ) _Pragma( "loopbound min 4 max 4" ) for ( jj = 0; jj < 4; jj++ ) { - h264_dec_dec_picture_imgUV[uv][( j4 + jj ) % 64] - [( i4 + ii ) % 54] - = h264_dec_img_m7[ii][jj]; + h264_dec_dec_picture_imgUV[ uv ][ ( j4 + jj ) % 64 ] + [ ( i4 + ii ) % 54 ] + = h264_dec_img_m7[ ii ][ jj ]; } } } diff --git a/bench/sequential/h264_dec/h264_dec.h b/bench/sequential/h264_dec/h264_dec.h old mode 100644 new mode 100755 index ad33a25eb86378c7bb937b9cf53c8248af2b78d9..aad86c876ffdb27f5d798805d59273816675f59a --- a/bench/sequential/h264_dec/h264_dec.h +++ b/bench/sequential/h264_dec/h264_dec.h @@ -16,7 +16,7 @@ typedef struct h264_dec_img_par { int width_cr; int pix_c_y; int pix_c_x; - unsigned short mpr[16][16]; + unsigned short mpr[ 16 ][ 16 ]; unsigned int chroma_log2_weight_denom; int wp_round_chroma; unsigned int apply_weights; diff --git a/bench/sequential/h264_dec/h264_decinput.c b/bench/sequential/h264_dec/h264_decinput.c old mode 100644 new mode 100755 index 505517924928a9b9597d53a09ad6268a22e5e514..fb118dc49d6540219789f2603190fa659c463eba --- a/bench/sequential/h264_dec/h264_decinput.c +++ b/bench/sequential/h264_dec/h264_decinput.c @@ -1,4 +1,4 @@ -signed char h264_dec_mv_array[65][65][2] = { +signed char h264_dec_mv_array[ 65 ][ 65 ][ 2 ] = { { {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, @@ -326,7 +326,7 @@ signed char h264_dec_mv_array[65][65][2] = { } }; -short h264_dec_list_imgUV[2][45][45] = {{ +short h264_dec_list_imgUV[ 2 ][ 45 ][ 45 ] = {{ { 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, @@ -781,7 +781,7 @@ short h264_dec_list_imgUV[2][45][45] = {{ } }; -int h264_dec_img_m7[16][16] = { +int h264_dec_img_m7[ 16 ][ 16 ] = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, diff --git a/bench/sequential/huff_dec/ChangeLog.txt b/bench/sequential/huff_dec/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/huff_dec/compress.txt b/bench/sequential/huff_dec/compress.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/huff_dec/huff_dec.c b/bench/sequential/huff_dec/huff_dec.c old mode 100644 new mode 100755 index 7c8f5eccbb4d94996c7002463d48e777115a950e..09e180ce45388f826bc87e897d63405af8d4e573 --- a/bench/sequential/huff_dec/huff_dec.c +++ b/bench/sequential/huff_dec/huff_dec.c @@ -18,28 +18,28 @@ License: -The source code files (codrl1.c, dcodrl1.c, codrle2.c, dcodrle2.c, codrle3.c, -dcodrle3.c, codrle4.c, dcodrle4.c, codhuff.c, dcodhuff.c) are copyrighted. -They have been uploaded on ftp in turing.imag.fr (129.88.31.7):/pub/compression -on 22/5/94 and have been modified on 22/9/94. -(c) David Bourgin - 1994 -The source codes I provide have no buggs (!) but being that I make them -available for free I have some notes to make. They can change at any time -without notice. I assume no responsability or liability for any errors or -inaccurracies, make no warranty of any kind (express, implied or statutory) -with respect to this publication and expressly disclaim any and all warranties -of merchantability, fitness for particular purposes. Of course, if you have -some problems to use the information presented here, I will try to help you if -I can. - -If you include the source codes in your application, here are the conditions: -- You have to put my name in the header of your source file (not in the -excutable program if you don't want) (this item is a must) -- I would like to see your resulting application, if possible (this item is not -a must, because some applications must remain secret) -- Whenever you gain money with your application, I would like to receive a very -little part in order to be encouraged to update my source codes and to develop -new schemes (this item is not a must) + The source code files (codrl1.c, dcodrl1.c, codrle2.c, dcodrle2.c, codrle3.c, + dcodrle3.c, codrle4.c, dcodrle4.c, codhuff.c, dcodhuff.c) are copyrighted. + They have been uploaded on ftp in turing.imag.fr (129.88.31.7):/pub/compression + on 22/5/94 and have been modified on 22/9/94. + (c) David Bourgin - 1994 + The source codes I provide have no buggs (!) but being that I make them + available for free I have some notes to make. They can change at any time + without notice. I assume no responsability or liability for any errors or + inaccurracies, make no warranty of any kind (express, implied or statutory) + with respect to this publication and expressly disclaim any and all warranties + of merchantability, fitness for particular purposes. Of course, if you have + some problems to use the information presented here, I will try to help you if + I can. + + If you include the source codes in your application, here are the conditions: + - You have to put my name in the header of your source file (not in the + excutable program if you don't want) (this item is a must) + - I would like to see your resulting application, if possible (this item is not + a must, because some applications must remain secret) + - Whenever you gain money with your application, I would like to receive a very + little part in order to be encouraged to update my source codes and to develop + new schemes (this item is not a must) */ @@ -56,7 +56,7 @@ typedef struct s_tree { } huff_dec_t_tree; typedef struct { - unsigned char bits[32]; + unsigned char bits[ 32 ]; unsigned int bits_nb; unsigned char presence; } t_bin_val; @@ -73,9 +73,9 @@ int huff_dec_read_byte(); void huff_dec_write_byte( char ch ); unsigned char huff_dec_read_code_1_bit(); unsigned int huff_dec_read_code_n_bits( unsigned int n ); -void huff_dec_read_header( t_bin_val codes_table[257] ); -huff_dec_t_tree *huff_dec_tree_encoding( t_bin_val codes_table[257], - huff_dec_t_tree heap[514] ); +void huff_dec_read_header( t_bin_val codes_table[ 257 ] ); +huff_dec_t_tree *huff_dec_tree_encoding( t_bin_val codes_table[ 257 ], + huff_dec_t_tree heap[ 514 ] ); void huff_dec_main( void ); int main( void ); @@ -86,7 +86,7 @@ int main( void ); static int huff_dec_input_pos; static int huff_dec_output_pos; -static char huff_dec_output[1024]; +static char huff_dec_output[ 1024 ]; unsigned char huff_dec_byte_nb_to_read = 0; unsigned int huff_dec_val_to_read = 0; @@ -107,7 +107,7 @@ static const char *huff_dec_plaintext = "in the text you are reading, you'll fast understand the compression ratio..."; #define huff_dec_encoded_len 419 -static unsigned char huff_dec_encoded[huff_dec_encoded_len] = { +static unsigned char huff_dec_encoded[ huff_dec_encoded_len ] = { 128, 0, 0, 0, 80, 133, 32, 32, 128, 100, 4, 32, 63, 239, 255, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 167, 21, 129, 232, 69, 120, 132, 217, 20, 162, 19, 164, 39, 133, @@ -148,9 +148,9 @@ void huff_dec_init( void ) int huff_dec_return( void ) { int i; - _Pragma( "loopbound min 1 max 600" ) + _Pragma( "loopbound min 600 max 600" ) for ( i = 0; i < huff_dec_plaintext_len; i++ ) { - if ( huff_dec_plaintext[i] != huff_dec_output[i] ) return i + 1; + if ( huff_dec_plaintext[ i ] != huff_dec_output[ i ] ) return i + 1; } return 0; } @@ -168,13 +168,13 @@ int huff_dec_end_of_data() int huff_dec_read_byte() { - return huff_dec_encoded[huff_dec_input_pos++]; + return huff_dec_encoded[ huff_dec_input_pos++ ]; } void huff_dec_write_byte( char ch ) { - huff_dec_output[huff_dec_output_pos++] = ch; + huff_dec_output[ huff_dec_output_pos++ ] = ch; } @@ -221,7 +221,7 @@ unsigned int huff_dec_read_code_n_bits( unsigned int n ) huff_dec_byte_nb_to_read = 0; } else { result = ( result << i ) + ( ( huff_dec_val_to_read >> - ( huff_dec_byte_nb_to_read - i ) ) & ( ( 1 << i ) - 1 ) ); + ( huff_dec_byte_nb_to_read - i ) ) & ( ( 1 << i ) - 1 ) ); huff_dec_byte_nb_to_read -= i; i = 0; } @@ -230,7 +230,7 @@ unsigned int huff_dec_read_code_n_bits( unsigned int n ) } -void huff_dec_read_header( t_bin_val codes_table[257] ) +void huff_dec_read_header( t_bin_val codes_table[ 257 ] ) /* Returned parameters: The contain of 'codes_table' is modified Action: Rebuilds the binary encoding array by using the header Errors: An input/output error could disturb the running of the program @@ -241,11 +241,10 @@ void huff_dec_read_header( t_bin_val codes_table[257] ) _Pragma ( "loopbound min 257 max 257" ) for ( i = 0; i < 257; i++ ) { - codes_table[i].bits_nb = 0; + codes_table[ i ].bits_nb = 0; _Pragma ( "loopbound min 32 max 32" ) - for ( j = 0; j < 32; j++ ) { - codes_table[i].bits[j] = 0; - } + for ( j = 0; j < 32; j++ ) + codes_table[ i ].bits[ j ] = 0; } /* == Decoding of the first part of the header === */ @@ -254,33 +253,33 @@ void huff_dec_read_header( t_bin_val codes_table[257] ) =1 => Present bytes coded on 256 bits */ _Pragma ( "loopbound min 256 max 256" ) for ( i = 0; i <= 255; i++ ) - codes_table[i].presence = huff_dec_read_code_1_bit(); + codes_table[ i ].presence = huff_dec_read_code_1_bit(); else { i = huff_dec_read_code_n_bits( 5 ) + 1; _Pragma ( "loopbound min 1 max 32" ) while ( i ) { - codes_table[huff_dec_read_code_n_bits( 8 )].presence = 1; + codes_table[ huff_dec_read_code_n_bits( 8 ) ].presence = 1; i--; } } - codes_table[256].presence = 1; + codes_table[ 256 ].presence = 1; /* Presence of a fictive 256-byte is enforced! */ /* == Decoding the second part of the header == */ _Pragma ( "loopbound min 257 max 257" ) for ( i = 0; i <= 256; i++ ) - if ( codes_table[i].presence ) { + if ( codes_table[ i ].presence ) { if ( huff_dec_read_code_1_bit() ) /* First bit=0 => 5 bits of binary length-1 followed by a binary word =1 => 8 bits of binary length-1 followed by a binary word */ j = huff_dec_read_code_n_bits( 8 ) + 1; else j = huff_dec_read_code_n_bits( 5 ) + 1; - codes_table[i].bits_nb = j; + codes_table[ i ].bits_nb = j; /* Reading of a binary word */ num_byte = ( j - 1 ) >> 3; if ( j & 7 ) { /* Reads the bits that takes less than one byte */ - codes_table[i].bits[num_byte] = + codes_table[ i ].bits[ num_byte ] = ( unsigned char )huff_dec_read_code_n_bits( j & 7 ); j -= j & 7; num_byte--; @@ -289,7 +288,7 @@ void huff_dec_read_header( t_bin_val codes_table[257] ) _Pragma ( "loopbound min 0 max 1" ) while ( j >= 8 ) { /* Reads the bits that takes one byte, at least */ - codes_table[i].bits[num_byte] = + codes_table[ i ].bits[ num_byte ] = ( unsigned char )huff_dec_read_code_n_bits( 8 ); j -= 8; num_byte--; @@ -298,8 +297,8 @@ void huff_dec_read_header( t_bin_val codes_table[257] ) } -huff_dec_t_tree *huff_dec_tree_encoding( t_bin_val codes_table[257], - huff_dec_t_tree heap[514] ) +huff_dec_t_tree *huff_dec_tree_encoding( t_bin_val codes_table[ 257 ], + huff_dec_t_tree heap[ 514 ] ) /* Returned parameters: A binary tree is returned Action: Returns the decoding binary tree built from 'codes_table' Errors: None @@ -311,25 +310,25 @@ huff_dec_t_tree *huff_dec_tree_encoding( t_bin_val codes_table[257], huff_dec_t_tree *ptr_tree; huff_dec_t_tree *current_node; - ptr_tree = &heap[heap_top++]; + ptr_tree = &heap[ heap_top++ ]; ptr_tree->byte = 257; ptr_tree->left_ptr = 0; ptr_tree->right_ptr = 0; _Pragma ( "loopbound min 257 max 257" ) for ( i = 0; i <= 256; i++ ) { _Pragma ( "loopbound min 0 max 9" ) - for ( current_node = ptr_tree, j = codes_table[i].bits_nb; j; j-- ) { - if ( codes_table[i].bits[( j - 1 ) >> 3] & ( 1 << ( ( + for ( current_node = ptr_tree, j = codes_table[ i ].bits_nb; j; j-- ) { + if ( codes_table[ i ].bits[ ( j - 1 ) >> 3 ] & ( 1 << ( ( j - 1 ) & 7 ) ) ) if ( current_node->left_ptr == 0 ) { - current_node->left_ptr = &heap[heap_top++]; + current_node->left_ptr = &heap[ heap_top++ ]; current_node = current_node->left_ptr; current_node->left_ptr = 0; current_node->right_ptr = 0; } else current_node = current_node->left_ptr; else if ( current_node->right_ptr == 0 ) { - current_node->right_ptr = &heap[heap_top++]; + current_node->right_ptr = &heap[ heap_top++ ]; current_node = current_node->right_ptr; current_node->left_ptr = 0; current_node->right_ptr = 0; @@ -350,15 +349,15 @@ void _Pragma( "entrypoint" ) huff_dec_main( void ) Errors: An input/output error could disturb the running of the program */ { - t_bin_val encoding_table[257]; - huff_dec_t_tree heap[514]; /* space for dynamically allocated nodes */ + t_bin_val encoding_table[ 257 ]; + huff_dec_t_tree heap[ 514 ]; /* space for dynamically allocated nodes */ huff_dec_t_tree *ptr_tree; huff_dec_t_tree *current_node; if ( !huff_dec_end_of_data() ) { /* Are there data to compress? */ huff_dec_read_header( encoding_table ); ptr_tree = huff_dec_tree_encoding( encoding_table, heap ); - _Pragma ( "loopbound min 602 max 602" ) + _Pragma ( "loopbound min 601 max 601" ) do { current_node = ptr_tree; _Pragma ( "loopbound min 3 max 9" ) diff --git a/bench/sequential/huff_enc/ChangeLog.txt b/bench/sequential/huff_enc/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/huff_enc/compress.txt b/bench/sequential/huff_enc/compress.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/huff_enc/huff_enc.c b/bench/sequential/huff_enc/huff_enc.c old mode 100644 new mode 100755 index 2a8ba116d8a0521f5f4795178a9e8871d3d695e4..c14e3b277389a7bbea9af2231c7e7c52b7f66788 --- a/bench/sequential/huff_enc/huff_enc.c +++ b/bench/sequential/huff_enc/huff_enc.c @@ -19,28 +19,28 @@ License: -The source code files (codrl1.c, dcodrl1.c, codrle2.c, dcodrle2.c, codrle3.c, -dcodrle3.c, codrle4.c, dcodrle4.c, codhuff.c, dcodhuff.c) are copyrighted. -They have been uploaded on ftp in turing.imag.fr (129.88.31.7):/pub/compression -on 22/5/94 and have been modified on 22/9/94. -(c) David Bourgin - 1994 -The source codes I provide have no buggs (!) but being that I make them -available for free I have some notes to make. They can change at any time -without notice. I assume no responsability or liability for any errors or -inaccurracies, make no warranty of any kind (express, implied or statutory) -with respect to this publication and expressly disclaim any and all warranties -of merchantability, fitness for particular purposes. Of course, if you have -some problems to use the information presented here, I will try to help you if -I can. - -If you include the source codes in your application, here are the conditions: -- You have to put my name in the header of your source file (not in the -excutable program if you don't want) (this item is a must) -- I would like to see your resulting application, if possible (this item is not -a must, because some applications must remain secret) -- Whenever you gain money with your application, I would like to receive a very -little part in order to be encouraged to update my source codes and to develop -new schemes (this item is not a must) + The source code files (codrl1.c, dcodrl1.c, codrle2.c, dcodrle2.c, codrle3.c, + dcodrle3.c, codrle4.c, dcodrle4.c, codhuff.c, dcodhuff.c) are copyrighted. + They have been uploaded on ftp in turing.imag.fr (129.88.31.7):/pub/compression + on 22/5/94 and have been modified on 22/9/94. + (c) David Bourgin - 1994 + The source codes I provide have no buggs (!) but being that I make them + available for free I have some notes to make. They can change at any time + without notice. I assume no responsability or liability for any errors or + inaccurracies, make no warranty of any kind (express, implied or statutory) + with respect to this publication and expressly disclaim any and all warranties + of merchantability, fitness for particular purposes. Of course, if you have + some problems to use the information presented here, I will try to help you if + I can. + + If you include the source codes in your application, here are the conditions: + - You have to put my name in the header of your source file (not in the + excutable program if you don't want) (this item is a must) + - I would like to see your resulting application, if possible (this item is not + a must, because some applications must remain secret) + - Whenever you gain money with your application, I would like to receive a very + little part in order to be encouraged to update my source codes and to develop + new schemes (this item is not a must) */ @@ -48,7 +48,8 @@ new schemes (this item is not a must) /* Declaration of types */ - +int printf(const char * restrict format, ... ); +int counter1 = 0; typedef struct huff_enc_s_tree { unsigned int byte; /* A byte has to be coded as an unsigned integer to allow a node to have a value over 255 */ @@ -58,7 +59,7 @@ typedef struct huff_enc_s_tree { } huff_enc_t_tree; typedef struct { - unsigned char bits[32]; + unsigned char bits[ 32 ]; unsigned int bits_nb; } huff_enc_t_bin_val; @@ -75,16 +76,16 @@ int huff_enc_read_byte(); void huff_enc_write_byte( char ch ); void huff_enc_write_bin_val( huff_enc_t_bin_val bin_val ); void huff_enc_fill_encoding( void ); -void huff_enc_write_header( huff_enc_t_bin_val codes_table[257] ); +void huff_enc_write_header( huff_enc_t_bin_val codes_table[ 257 ] ); int huff_enc_weighhuff_enc_t_tree_comp( const void *t1, const void *t2 ); void huff_enc_swapi( char *ii, char *ij, unsigned long es ); char *huff_enc_pivot( char *a, unsigned long n, unsigned long es ); void huff_enc_qsort( char *a, unsigned long n, unsigned long es ); -huff_enc_t_tree *huff_enc_build_tree_encoding( huff_enc_t_tree heap[514] ); +huff_enc_t_tree *huff_enc_build_tree_encoding( huff_enc_t_tree heap[ 514 ] ); void huff_enc_encode_codes_table( huff_enc_t_tree *tree, - huff_enc_t_bin_val codes_table[257], huff_enc_t_bin_val *code_val ); + huff_enc_t_bin_val codes_table[ 257 ], huff_enc_t_bin_val *code_val ); void huff_enc_create_codes_table( huff_enc_t_tree *tree, - huff_enc_t_bin_val codes_table[257] ); + huff_enc_t_bin_val codes_table[ 257 ] ); void huff_enc_main(); int main( void ); @@ -95,7 +96,7 @@ int main( void ); static int huff_enc_input_pos; static int huff_enc_output_pos; -static unsigned char huff_enc_output[1024]; +static unsigned char huff_enc_output[ 1024 ]; static unsigned char huff_enc_byte_nb_to_write = 0; static unsigned char huff_enc_val_to_write = 0; @@ -116,7 +117,7 @@ static const char *huff_enc_plaintext = "in the text you are reading, you'll fast understand the compression ratio..."; #define huff_enc_encoded_len 419 -static unsigned char huff_enc_encoded[huff_enc_encoded_len] = { +static unsigned char huff_enc_encoded[ huff_enc_encoded_len ] = { 128, 0, 0, 0, 80, 133, 32, 32, 128, 100, 4, 32, 63, 239, 255, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 167, 21, 129, 232, 69, 120, 132, 217, 20, 162, 19, 164, 39, 133, @@ -157,9 +158,9 @@ void huff_enc_init( void ) int huff_enc_return( void ) { int i; - _Pragma( "loopbound min 1 max 419" ) + _Pragma( "loopbound min 419 max 419" ) for ( i = 0; i < huff_enc_encoded_len; i++ ) { - if ( huff_enc_encoded[i] != huff_enc_output[i] ) return i + 1; + if ( huff_enc_encoded[ i ] != huff_enc_output[ i ] ) return i + 1; } return 0; } @@ -183,13 +184,13 @@ int huff_enc_end_of_data() int huff_enc_read_byte() { - return huff_enc_plaintext[huff_enc_input_pos++]; + return huff_enc_plaintext[ huff_enc_input_pos++ ]; } void huff_enc_write_byte( char ch ) { - huff_enc_output[huff_enc_output_pos++] = ch; + huff_enc_output[ huff_enc_output_pos++ ] = ch; } @@ -203,12 +204,13 @@ void huff_enc_write_bin_val( huff_enc_t_bin_val bin_val ) unsigned char bin_pos = ( bin_val.bits_nb - 1 ) & 7; unsigned int pos_byte = ( bin_val.bits_nb - 1 ) >> 3; - for ( bit_indice = 1; + _Pragma( "loopbound min 1 max 9" ) + for ( bit_indice = 1; bit_indice <= bin_val.bits_nb; bit_indice++ ) { /* Watch for the current bit to write */ huff_enc_val_to_write = ( huff_enc_val_to_write << 1 ) | - ( ( bin_val.bits[pos_byte] >> bin_pos ) & 1 ); + ( ( bin_val.bits[ pos_byte ] >> bin_pos ) & 1 ); /* Move to the next bit to write */ if ( !bin_pos ) { pos_byte--; @@ -237,7 +239,7 @@ void huff_enc_fill_encoding( void ) } -void huff_enc_write_header( huff_enc_t_bin_val codes_table[257] ) +void huff_enc_write_header( huff_enc_t_bin_val codes_table[ 257 ] ) /* Returned parameters: None Action: Writes the header in the stream of codes Errors: An input/output error could disturb the running of the program @@ -253,8 +255,9 @@ void huff_enc_write_header( huff_enc_t_bin_val codes_table[257] ) bin_val_to_0.bits_nb = 1; *bin_val_to_1.bits = 1; bin_val_to_1.bits_nb = 1; + _Pragma( "loopbound min 256 max 256" ) for ( i = 0, j = 0; j <= 255; j++ ) - if ( codes_table[j].bits_nb ) i++; + if ( codes_table[ j ].bits_nb ) i++; /* From there, i contains the number of bytes of the several non 0 occurrences to encode. First part of the header: Specifies the bytes that appear @@ -266,23 +269,26 @@ void huff_enc_write_header( huff_enc_t_bin_val codes_table[257] ) *bin_val.bits = ( unsigned char )( i - 1 ); huff_enc_write_bin_val( bin_val ); bin_val.bits_nb = 8; + _Pragma( "loopbound min 256 max 256" ) for ( j = 0; j <= 255; j++ ) - if ( codes_table[j].bits_nb ) { + if ( codes_table[ j ].bits_nb ) { *bin_val.bits = ( unsigned char )j; huff_enc_write_bin_val( bin_val ); } } else { /* Encoding of the appeared bytes with a block of bits */ huff_enc_write_bin_val( bin_val_to_1 ); + _Pragma( "loopbound min 256 max 256" ) for ( j = 0; j <= 255; j++ ) - if ( codes_table[j].bits_nb ) + if ( codes_table[ j ].bits_nb ) huff_enc_write_bin_val( bin_val_to_1 ); else huff_enc_write_bin_val( bin_val_to_0 ); }; /* Second part of the header: Specifies the encoding of the bytes (fictive or not) that appear in the source of encoding */ + _Pragma( "loopbound min 257 max 257" ) for ( i = 0; i <= 256; i++ ) - if ( ( j = codes_table[i].bits_nb ) != 0 ) { + if ( ( j = codes_table[ i ].bits_nb ) != 0 ) { if ( j < 33 ) { huff_enc_write_bin_val( bin_val_to_0 ); bin_val.bits_nb = 5; @@ -292,7 +298,7 @@ void huff_enc_write_header( huff_enc_t_bin_val codes_table[257] ) } *bin_val.bits = ( unsigned char )( j - 1 ); huff_enc_write_bin_val( bin_val ); - huff_enc_write_bin_val( codes_table[i] ); + huff_enc_write_bin_val( codes_table[ i ] ); } } @@ -305,8 +311,8 @@ int huff_enc_weighhuff_enc_t_tree_comp( const void *t1, const void *t2 ) Errors: None */ { - huff_enc_t_tree *const *tree1 = ( huff_enc_t_tree *const * ) t1; - huff_enc_t_tree *const *tree2 = ( huff_enc_t_tree *const * ) t2; + huff_enc_t_tree *const *tree1 = ( huff_enc_t_tree * const * ) t1; + huff_enc_t_tree *const *tree2 = ( huff_enc_t_tree * const * ) t2; return ( ( *tree2 )->weight ^ ( *tree1 )->weight ) ? ( ( ( *tree2 )->weight < ( *tree1 )->weight ) ? -1 : 1 ) : 0; } @@ -318,7 +324,7 @@ void huff_enc_swapi( char *ii, char *ij, unsigned long es ) i = ( char * )ii; j = ( char * )ij; - _Pragma( "loopbound min 4 max 4" ) + _Pragma( "loopbound min 8 max 8" ) do { c = *i; *i++ = *j; @@ -355,28 +361,29 @@ char *huff_enc_pivot( char *a, unsigned long n, unsigned long es ) } -void huff_enc_qsort( char *a, unsigned long n, unsigned long es ) +void huff_enc_qsort( char *a, unsigned long n, unsigned long es ) //wird insgesamt 648 ausgeführt (rekursion) { unsigned long j; char *pi, *pj, *pn; unsigned int flowfactdummy = 0; - - _Pragma( "loopbound min 0 max 8" ) + counter1++; + printf("%d\n", counter1); + _Pragma( "loopbound min 0 max 7" ) while ( n > 1 ) { - if ( n > 10 ) { + if ( n > 10 ) pi = huff_enc_pivot( a, n, es ); - } else { + + else pi = a + ( n >> 1 ) * es; - } huff_enc_swapi( a, pi, es ); pi = a; pn = a + n * es; pj = pn; - _Pragma( "loopbound min 1 max 110" ) + _Pragma( "loopbound min 0 max 109" ) while ( 1 ) { /* wcc note: this assignment expression was added to avoid assignment of - * multiple loop bound annotations to same loop (cf. Ticket #0002323). */ + multiple loop bound annotations to same loop (cf. Ticket #0002323). */ flowfactdummy++; _Pragma( "loopbound min 1 max 19" ) do { @@ -405,7 +412,7 @@ void huff_enc_qsort( char *a, unsigned long n, unsigned long es ) } -huff_enc_t_tree *huff_enc_build_tree_encoding( huff_enc_t_tree heap[514] ) +huff_enc_t_tree *huff_enc_build_tree_encoding( huff_enc_t_tree heap[ 514 ] ) /* Returned parameters: Returns a tree of encoding Action: Generates an Huffman encoding tree based on the data from the stream to compress @@ -414,47 +421,51 @@ huff_enc_t_tree *huff_enc_build_tree_encoding( huff_enc_t_tree heap[514] ) { unsigned int i; unsigned int heap_top = 0; - huff_enc_t_tree *occurrences_table[257]; + huff_enc_t_tree *occurrences_table[ 257 ]; huff_enc_t_tree *ptr_fictive_tree; /* Sets up the occurrences number of all bytes to 0 */ + _Pragma( "loopbound min 257 max 257" ) for ( i = 0; i <= 256; i++ ) { - occurrences_table[i] = &heap[heap_top++]; - occurrences_table[i]->byte = i; - occurrences_table[i]->weight = 0; - occurrences_table[i]->left_ptr = 0; - occurrences_table[i]->right_ptr = 0; + occurrences_table[ i ] = &heap[ heap_top++ ]; + occurrences_table[ i ]->byte = i; + occurrences_table[ i ]->weight = 0; + occurrences_table[ i ]->left_ptr = 0; + occurrences_table[ i ]->right_ptr = 0; } /* Valids the occurrences of 'occurrences_table' with regard to the data to compress */ if ( !huff_enc_end_of_data() ) { + _Pragma( "loopbound min 600 max 600" ) while ( !huff_enc_end_of_data() ) { i = huff_enc_read_byte(); - occurrences_table[i]->weight++; + occurrences_table[ i ]->weight++; } - occurrences_table[256]->weight = 1; + occurrences_table[ 256 ]->weight = 1; /* Sorts the occurrences table depending on the weight of each character */ huff_enc_qsort( ( char * )occurrences_table, 257, sizeof( huff_enc_t_tree * ) ); - for ( i = 256; ( i != 0 ) && ( !occurrences_table[i]->weight ); i-- ) - ; + _Pragma( "loopbound min 218 max 218" ) + for ( i = 256; ( i != 0 ) && ( !occurrences_table[ i ]->weight ); i-- ) + ; i++; /* From there, 'i' gives the number of different bytes with a 0 occurrence in the stream to compress */ + _Pragma( "loopbound min 38 max 38" ) while ( i > 0 ) { /* Looks up (i+1)/2 times the occurrence table to link the nodes in an unique tree */ - ptr_fictive_tree = &heap[heap_top++]; + ptr_fictive_tree = &heap[ heap_top++ ]; ptr_fictive_tree->byte = 257; - ptr_fictive_tree->weight = occurrences_table[--i]->weight; - ptr_fictive_tree->left_ptr = occurrences_table[i]; + ptr_fictive_tree->weight = occurrences_table[ --i ]->weight; + ptr_fictive_tree->left_ptr = occurrences_table[ i ]; if ( i ) { i--; - ptr_fictive_tree->weight += occurrences_table[i]->weight; - ptr_fictive_tree->right_ptr = occurrences_table[i]; + ptr_fictive_tree->weight += occurrences_table[ i ]->weight; + ptr_fictive_tree->right_ptr = occurrences_table[ i ]; } else ptr_fictive_tree->right_ptr = 0; - occurrences_table[i] = ptr_fictive_tree; + occurrences_table[ i ] = ptr_fictive_tree; //qsort( ( char * )occurrences_table, i + 1, sizeof( *huff_enc_t_tree ), //huff_enc_weighhuff_enc_t_tree_comp ); @@ -470,8 +481,8 @@ huff_enc_t_tree *huff_enc_build_tree_encoding( huff_enc_t_tree heap[514] ) void huff_enc_encode_codes_table( huff_enc_t_tree *tree, - huff_enc_t_bin_val codes_table[257], - huff_enc_t_bin_val *code_val ) + huff_enc_t_bin_val codes_table[ 257 ], + huff_enc_t_bin_val *code_val ) /* Returned parameters: The data of 'codes_table' can have been modified Action: Stores the encoding tree as a binary encoding table to speed up the access. 'val_code' gives the encoding for the current node of the tree @@ -486,9 +497,10 @@ void huff_enc_encode_codes_table( huff_enc_t_tree *tree, /* The sub-trees on left begin with an bit set to 1 */ { tmp_code_val = *code_val; + _Pragma( "loopbound min 31 max 31" ) for ( i = 31; i > 0; i-- ) - code_val->bits[i] = ( code_val->bits[i] << 1 ) | - ( code_val->bits[i - 1] >> 7 ); + code_val->bits[ i ] = ( code_val->bits[ i ] << 1 ) | + ( code_val->bits[ i - 1 ] >> 7 ); *code_val->bits = ( *code_val->bits << 1 ) | 1; code_val->bits_nb++; huff_enc_encode_codes_table( tree->left_ptr, codes_table, code_val ); @@ -498,20 +510,21 @@ void huff_enc_encode_codes_table( huff_enc_t_tree *tree, /* The sub-trees on right begin with an bit set to 0 */ { tmp_code_val = *code_val; + _Pragma( "loopbound min 31 max 31" ) for ( i = 31; i > 0; i-- ) - code_val->bits[i] = ( code_val->bits[i] << 1 ) | - ( code_val->bits[i - 1] >> 7 ); + code_val->bits[ i ] = ( code_val->bits[ i ] << 1 ) | + ( code_val->bits[ i - 1 ] >> 7 ); *code_val->bits <<= 1; code_val->bits_nb++; huff_enc_encode_codes_table( tree->right_ptr, codes_table, code_val ); *code_val = tmp_code_val; }; - } else codes_table[tree->byte] = *code_val; + } else codes_table[ tree->byte ] = *code_val; } void huff_enc_create_codes_table( huff_enc_t_tree *tree, - huff_enc_t_bin_val codes_table[257] ) + huff_enc_t_bin_val codes_table[ 257 ] ) /* Returned parameters: The data in 'codes_table' will be modified Action: Stores the encoding tree as a binary encoding table to speed up the access by calling encode_codes_table @@ -522,17 +535,15 @@ void huff_enc_create_codes_table( huff_enc_t_tree *tree, huff_enc_t_bin_val code_val; _Pragma( "loopbound min 32 max 32" ) - for ( i = 0; i < 32; i++ ) { - code_val.bits[i] = 0; - } + for ( i = 0; i < 32; i++ ) + code_val.bits[ i ] = 0; code_val.bits_nb = 0; _Pragma( "loopbound min 257 max 257" ) for ( j = 0; j < 257; j++ ) { _Pragma( "loopbound min 32 max 32" ) - for ( i = 0; i < 32; i++ ) { - codes_table[j].bits[i] = 0; - } - codes_table[j].bits_nb = 0; + for ( i = 0; i < 32; i++ ) + codes_table[ j ].bits[ i ] = 0; + codes_table[ j ].bits_nb = 0; } _Pragma( "marker call_encode" ) _Pragma( "flowrestriction 1*huff_enc_encode_codes_table <= 77*call_encode" ) @@ -548,8 +559,8 @@ void _Pragma( "entrypoint" ) huff_enc_main() */ { huff_enc_t_tree *tree; - huff_enc_t_tree heap[514]; - huff_enc_t_bin_val encoding_table[257]; + huff_enc_t_tree heap[ 514 ]; + huff_enc_t_bin_val encoding_table[ 257 ]; unsigned char byte_read; if ( !huff_enc_end_of_data() ) { @@ -561,11 +572,12 @@ void _Pragma( "entrypoint" ) huff_enc_main() huff_enc_write_header( encoding_table ); /* Writes the defintion of the encoding */ huff_enc_beginning_of_data(); /* Real compression of the data */ + _Pragma( "loopbound min 600 max 600" ) while ( !huff_enc_end_of_data() ) { byte_read = huff_enc_read_byte(); - huff_enc_write_bin_val( encoding_table[byte_read] ); + huff_enc_write_bin_val( encoding_table[ byte_read ] ); } - huff_enc_write_bin_val( encoding_table[256] ); + huff_enc_write_bin_val( encoding_table[ 256 ] ); /* Code of the end of encoding */ huff_enc_fill_encoding(); /* Fills the last byte before closing file, if any */ diff --git a/bench/sequential/mpeg2/ChangeLog.txt b/bench/sequential/mpeg2/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/mpeg2/mpeg2.c b/bench/sequential/mpeg2/mpeg2.c old mode 100644 new mode 100755 index 975a27054cede4b1304d6b0cfd7569d94e5ecf57..ffa5d18959a9f55d8bf1be8688b8ca32898c9268 --- a/bench/sequential/mpeg2/mpeg2.c +++ b/bench/sequential/mpeg2/mpeg2.c @@ -11403,7 +11403,7 @@ void mpeg2_init( void ) /* Apply volatile XOR-bitmask to entire input array. */ - p = (unsigned char *) &mpeg2_oldorgframe[ 0 ]; + p = ( unsigned char * ) &mpeg2_oldorgframe[ 0 ]; _Pragma( "loopbound min 90112 max 90112" ) for ( i = 0; i < sizeof( mpeg2_oldorgframe ); ++i, ++p ) *p ^= bitmask; @@ -11432,7 +11432,7 @@ int mpeg2_return( void ) } } - return( checksum ); + return ( checksum ); } @@ -11515,336 +11515,336 @@ void mpeg2_frame_ME( unsigned char *oldorg, unsigned char *neworg, mbi->mb_type = 1; else - if ( mpeg2_pict_type == 2 ) { - if ( mpeg2_frame_pred_dct ) { - dmc = - mpeg2_fullsearch( - oldorg, oldref, mb, mpeg2_width, i, j, sxf, syf, 16, mpeg2_width, - mpeg2_height, &imin, &jmin ); - vmc = - mpeg2_dist2( - oldref + ( imin >> 1 ) + mpeg2_width * ( jmin >> 1 ), mb, mpeg2_width, - imin & 1, jmin & 1, 16 ); - mbi->motion_type = 2; - } else { - mpeg2_frame_estimate( - oldorg, oldref, mb, i, j, sxf, syf, &imin, &jmin, &imint, &jmint, - &iminb, &jminb, &dmc, &dmcfield, &tsel, &bsel, imins, jmins ); - - if ( mpeg2_M == 1 ) - mpeg2_dpframe_estimate( - oldref, mb, i, j >> 1, imins, jmins, &imindp, &jmindp, &imindmv, - &jmindmv, &dmc_dp, &vmc_dp ); - - /* select between dual prime, frame and field prediction */ - if ( ( mpeg2_M == 1 ) && ( dmc_dp < dmc ) && ( dmc_dp < dmcfield ) ) { - mbi->motion_type = 3; - dmc = dmc_dp; - vmc = vmc_dp; - } else - - if ( dmc <= dmcfield ) { - mbi->motion_type = 2; + if ( mpeg2_pict_type == 2 ) { + if ( mpeg2_frame_pred_dct ) { + dmc = + mpeg2_fullsearch( + oldorg, oldref, mb, mpeg2_width, i, j, sxf, syf, 16, mpeg2_width, + mpeg2_height, &imin, &jmin ); vmc = mpeg2_dist2( - oldref + ( imin >> 1 ) + mpeg2_width * ( jmin >> 1 ), mb, - mpeg2_width, imin & 1, jmin & 1, 16 ); + oldref + ( imin >> 1 ) + mpeg2_width * ( jmin >> 1 ), mb, mpeg2_width, + imin & 1, jmin & 1, 16 ); + mbi->motion_type = 2; } else { - mbi->motion_type = 1; - dmc = dmcfield; - vmc = - mpeg2_dist2( - oldref + ( tsel ? mpeg2_width : 0 ) + ( imint >> 1 ) - + ( mpeg2_width << 1 ) * ( jmint >> 1 ), - mb, mpeg2_width << 1, imint & 1, jmint & 1, 8 ); - vmc += - mpeg2_dist2( - oldref + ( bsel ? mpeg2_width : 0 ) + ( iminb >> 1 ) - + ( mpeg2_width << 1 ) * ( jminb >> 1 ), - mb + mpeg2_width, mpeg2_width << 1, iminb & 1, jminb & 1, 8 ); - } - } - - /* - select between intra or non-intra coding: + mpeg2_frame_estimate( + oldorg, oldref, mb, i, j, sxf, syf, &imin, &jmin, &imint, &jmint, + &iminb, &jminb, &dmc, &dmcfield, &tsel, &bsel, imins, jmins ); + + if ( mpeg2_M == 1 ) + mpeg2_dpframe_estimate( + oldref, mb, i, j >> 1, imins, jmins, &imindp, &jmindp, &imindmv, + &jmindmv, &dmc_dp, &vmc_dp ); + + /* select between dual prime, frame and field prediction */ + if ( ( mpeg2_M == 1 ) && ( dmc_dp < dmc ) && ( dmc_dp < dmcfield ) ) { + mbi->motion_type = 3; + dmc = dmc_dp; + vmc = vmc_dp; + } else - selection is based on intra block variance (var) vs. - prediction error variance (vmc) + if ( dmc <= dmcfield ) { + mbi->motion_type = 2; + vmc = + mpeg2_dist2( + oldref + ( imin >> 1 ) + mpeg2_width * ( jmin >> 1 ), mb, + mpeg2_width, imin & 1, jmin & 1, 16 ); + } else { + mbi->motion_type = 1; + dmc = dmcfield; + vmc = + mpeg2_dist2( + oldref + ( tsel ? mpeg2_width : 0 ) + ( imint >> 1 ) + + ( mpeg2_width << 1 ) * ( jmint >> 1 ), + mb, mpeg2_width << 1, imint & 1, jmint & 1, 8 ); + vmc += + mpeg2_dist2( + oldref + ( bsel ? mpeg2_width : 0 ) + ( iminb >> 1 ) + + ( mpeg2_width << 1 ) * ( jminb >> 1 ), + mb + mpeg2_width, mpeg2_width << 1, iminb & 1, jminb & 1, 8 ); + } + } - blocks with small prediction error are always coded non-intra - even if variance is smaller (is this reasonable?) - */ - if ( ( vmc > var ) && ( vmc >= 9 * 256 ) ) - mbi->mb_type = 1; - else { /* - select between MC / No-MC + select between intra or non-intra coding: - use No-MC if var(No-MC) <= 1.25*var(MC) - (i.e slightly biased towards No-MC) + selection is based on intra block variance (var) vs. + prediction error variance (vmc) - blocks with small prediction error are always coded as No-MC - (requires no motion vectors, allows skipping) + blocks with small prediction error are always coded non-intra + even if variance is smaller (is this reasonable?) */ - v0 = - mpeg2_dist2( oldref + i + mpeg2_width * j, mb, mpeg2_width, 0, 0, 16 ); - - if ( ( 4 * v0 > 5 * vmc ) && ( v0 >= 9 * 256 ) ) { - /* use MC */ - var = vmc; - mbi->mb_type = 8; - - if ( mbi->motion_type == 2 ) { - mbi->MV[ 0 ][ 0 ][ 0 ] = imin - ( i << 1 ); - mbi->MV[ 0 ][ 0 ][ 1 ] = jmin - ( j << 1 ); - } else - - if ( mbi->motion_type == 3 ) { - /* these are FRAME vectors */ - /* same parity vector */ - mbi->MV[ 0 ][ 0 ][ 0 ] = imindp - ( i << 1 ); - mbi->MV[ 0 ][ 0 ][ 1 ] = ( jmindp << 1 ) - ( j << 1 ); - - /* opposite parity vector */ - mbi->dmvector[ 0 ] = imindmv; - mbi->dmvector[ 1 ] = jmindmv; + if ( ( vmc > var ) && ( vmc >= 9 * 256 ) ) + mbi->mb_type = 1; + else { + /* + select between MC / No-MC + + use No-MC if var(No-MC) <= 1.25*var(MC) + (i.e slightly biased towards No-MC) + + blocks with small prediction error are always coded as No-MC + (requires no motion vectors, allows skipping) + */ + v0 = + mpeg2_dist2( oldref + i + mpeg2_width * j, mb, mpeg2_width, 0, 0, 16 ); + + if ( ( 4 * v0 > 5 * vmc ) && ( v0 >= 9 * 256 ) ) { + /* use MC */ + var = vmc; + mbi->mb_type = 8; + + if ( mbi->motion_type == 2 ) { + mbi->MV[ 0 ][ 0 ][ 0 ] = imin - ( i << 1 ); + mbi->MV[ 0 ][ 0 ][ 1 ] = jmin - ( j << 1 ); + } else + + if ( mbi->motion_type == 3 ) { + /* these are FRAME vectors */ + /* same parity vector */ + mbi->MV[ 0 ][ 0 ][ 0 ] = imindp - ( i << 1 ); + mbi->MV[ 0 ][ 0 ][ 1 ] = ( jmindp << 1 ) - ( j << 1 ); + + /* opposite parity vector */ + mbi->dmvector[ 0 ] = imindmv; + mbi->dmvector[ 1 ] = jmindmv; + } else { + /* these are FRAME vectors */ + mbi->MV[ 0 ][ 0 ][ 0 ] = imint - ( i << 1 ); + mbi->MV[ 0 ][ 0 ][ 1 ] = ( jmint << 1 ) - ( j << 1 ); + mbi->MV[ 1 ][ 0 ][ 0 ] = iminb - ( i << 1 ); + mbi->MV[ 1 ][ 0 ][ 1 ] = ( jminb << 1 ) - ( j << 1 ); + mbi->mv_field_sel[ 0 ][ 0 ] = tsel; + mbi->mv_field_sel[ 1 ][ 0 ] = bsel; + } } else { - /* these are FRAME vectors */ - mbi->MV[ 0 ][ 0 ][ 0 ] = imint - ( i << 1 ); - mbi->MV[ 0 ][ 0 ][ 1 ] = ( jmint << 1 ) - ( j << 1 ); - mbi->MV[ 1 ][ 0 ][ 0 ] = iminb - ( i << 1 ); - mbi->MV[ 1 ][ 0 ][ 1 ] = ( jminb << 1 ) - ( j << 1 ); - mbi->mv_field_sel[ 0 ][ 0 ] = tsel; - mbi->mv_field_sel[ 1 ][ 0 ] = bsel; + /* No-MC */ + var = v0; + mbi->mb_type = 0; + mbi->motion_type = 2; + mbi->MV[ 0 ][ 0 ][ 0 ] = 0; + mbi->MV[ 0 ][ 0 ][ 1 ] = 0; } - } else { - /* No-MC */ - var = v0; - mbi->mb_type = 0; - mbi->motion_type = 2; - mbi->MV[ 0 ][ 0 ][ 0 ] = 0; - mbi->MV[ 0 ][ 0 ][ 1 ] = 0; } - } - } else { /* if (mpeg2_pict_type==B_TYPE) */ - - if ( mpeg2_frame_pred_dct ) { - /* forward */ - dmcf = - mpeg2_fullsearch( - oldorg, oldref, mb, mpeg2_width, i, j, sxf, syf, 16, mpeg2_width, - mpeg2_height, &iminf, &jminf ); - vmcf = - mpeg2_dist2( - oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ), mb, - mpeg2_width, iminf & 1, jminf & 1, 16 ); - - /* backward */ - dmcr = - mpeg2_fullsearch( - neworg, newref, mb, mpeg2_width, i, j, sxb, syb, 16, mpeg2_width, - mpeg2_height, &iminr, &jminr ); - vmcr = - mpeg2_dist2( - newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ), mb, - mpeg2_width, iminr & 1, jminr & 1, 16 ); - - /* interpolated (bidirectional) */ - vmci = - mpeg2_bdist2( - oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ), - newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ), - mb, mpeg2_width, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 ); - - /* decisions */ - - /* - select between forward/backward/interpolated prediction: - use the one with smallest mean sqaured prediction error - */ - if ( ( vmcf <= vmcr ) && ( vmcf <= vmci ) ) { - vmc = vmcf; - mbi->mb_type = 8; - } else + } else { /* if (mpeg2_pict_type==B_TYPE) */ - if ( vmcr <= vmci ) { - vmc = vmcr; - mbi->mb_type = 4; - } else { - vmc = vmci; - mbi->mb_type = 8 | 4; - } + if ( mpeg2_frame_pred_dct ) { + /* forward */ + dmcf = + mpeg2_fullsearch( + oldorg, oldref, mb, mpeg2_width, i, j, sxf, syf, 16, mpeg2_width, + mpeg2_height, &iminf, &jminf ); + vmcf = + mpeg2_dist2( + oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ), mb, + mpeg2_width, iminf & 1, jminf & 1, 16 ); - mbi->motion_type = 2; - } else { - /* forward prediction */ - mpeg2_frame_estimate( - oldorg, oldref, mb, i, j, sxf, syf, &iminf, &jminf, &imintf, &jmintf, - &iminbf, &jminbf, &dmcf, &dmcfieldf, &tself, &bself, imins, jmins ); + /* backward */ + dmcr = + mpeg2_fullsearch( + neworg, newref, mb, mpeg2_width, i, j, sxb, syb, 16, mpeg2_width, + mpeg2_height, &iminr, &jminr ); + vmcr = + mpeg2_dist2( + newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ), mb, + mpeg2_width, iminr & 1, jminr & 1, 16 ); - /* backward prediction */ - mpeg2_frame_estimate( - neworg, newref, mb, i, j, sxb, syb, &iminr, &jminr, &imintr, &jmintr, - &iminbr, &jminbr, &dmcr, &dmcfieldr, &tselr, &bselr, imins, jmins ); + /* interpolated (bidirectional) */ + vmci = + mpeg2_bdist2( + oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ), + newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ), + mb, mpeg2_width, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 ); - /* calculate interpolated distance */ - /* frame */ - dmci = - mpeg2_bdist1( - oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ), - newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ), - mb, mpeg2_width, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 ); + /* decisions */ - /* top field */ - dmcfieldi = - mpeg2_bdist1( - oldref + ( imintf >> 1 ) + ( tself ? mpeg2_width : 0 ) - + ( mpeg2_width << 1 ) * ( jmintf >> 1 ), - newref + ( imintr >> 1 ) + ( tselr ? mpeg2_width : 0 ) - + ( mpeg2_width << 1 ) * ( jmintr >> 1 ), - mb, mpeg2_width << 1, imintf & 1, jmintf & 1, imintr & 1, jmintr & 1, - 8 ); + /* + select between forward/backward/interpolated prediction: + use the one with smallest mean sqaured prediction error + */ + if ( ( vmcf <= vmcr ) && ( vmcf <= vmci ) ) { + vmc = vmcf; + mbi->mb_type = 8; + } else - /* bottom field */ - dmcfieldi += - mpeg2_bdist1( - oldref + ( iminbf >> 1 ) + ( bself ? mpeg2_width : 0 ) - + ( mpeg2_width << 1 ) * ( jminbf >> 1 ), - newref + ( iminbr >> 1 ) + ( bselr ? mpeg2_width : 0 ) - + ( mpeg2_width << 1 ) * ( jminbr >> 1 ), - mb + mpeg2_width, mpeg2_width << 1, iminbf & 1, jminbf & 1, iminbr & 1, - jminbr & 1, 8 ); + if ( vmcr <= vmci ) { + vmc = vmcr; + mbi->mb_type = 4; + } else { + vmc = vmci; + mbi->mb_type = 8 | 4; + } - /* - select prediction type of minimum distance from the - six candidates (field/frame * forward/backward/interpolated) - */ - if ( ( dmci < dmcfieldi ) && ( dmci < dmcf ) && ( dmci < dmcfieldf ) && - ( dmci < dmcr ) && ( dmci < dmcfieldr ) ) { - /* frame, interpolated */ - mbi->mb_type = 8 | 4; mbi->motion_type = 2; - vmc = - mpeg2_bdist2( + } else { + /* forward prediction */ + mpeg2_frame_estimate( + oldorg, oldref, mb, i, j, sxf, syf, &iminf, &jminf, &imintf, &jmintf, + &iminbf, &jminbf, &dmcf, &dmcfieldf, &tself, &bself, imins, jmins ); + + /* backward prediction */ + mpeg2_frame_estimate( + neworg, newref, mb, i, j, sxb, syb, &iminr, &jminr, &imintr, &jmintr, + &iminbr, &jminbr, &dmcr, &dmcfieldr, &tselr, &bselr, imins, jmins ); + + /* calculate interpolated distance */ + /* frame */ + dmci = + mpeg2_bdist1( oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ), newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ), mb, mpeg2_width, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 ); - } else - if ( ( dmcfieldi < dmcf ) && ( dmcfieldi < dmcfieldf ) && - ( dmcfieldi < dmcr ) && ( dmcfieldi < dmcfieldr ) ) { - /* field, interpolated */ - mbi->mb_type = 8 | 4; - mbi->motion_type = 1; - vmc = - mpeg2_bdist2( + /* top field */ + dmcfieldi = + mpeg2_bdist1( oldref + ( imintf >> 1 ) + ( tself ? mpeg2_width : 0 ) - + ( mpeg2_width << 1 ) * ( jmintf >> 1 ), + + ( mpeg2_width << 1 ) * ( jmintf >> 1 ), newref + ( imintr >> 1 ) + ( tselr ? mpeg2_width : 0 ) - + ( mpeg2_width << 1 ) * ( jmintr >> 1 ), + + ( mpeg2_width << 1 ) * ( jmintr >> 1 ), mb, mpeg2_width << 1, imintf & 1, jmintf & 1, imintr & 1, jmintr & 1, 8 ); - vmc += - mpeg2_bdist2( + + /* bottom field */ + dmcfieldi += + mpeg2_bdist1( oldref + ( iminbf >> 1 ) + ( bself ? mpeg2_width : 0 ) - + ( mpeg2_width << 1 ) * ( jminbf >> 1 ), + + ( mpeg2_width << 1 ) * ( jminbf >> 1 ), newref + ( iminbr >> 1 ) + ( bselr ? mpeg2_width : 0 ) - + ( mpeg2_width << 1 ) * ( jminbr >> 1 ), - mb + mpeg2_width, mpeg2_width << 1, iminbf & 1, jminbf & 1, - iminbr & 1, jminbr & 1, 8 ); - } else - - if ( ( dmcf < dmcfieldf ) && ( dmcf < dmcr ) && ( dmcf < dmcfieldr ) ) { - /* frame, forward */ - mbi->mb_type = 8; - mbi->motion_type = 2; - vmc = - mpeg2_dist2( - oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ), mb, - mpeg2_width, iminf & 1, jminf & 1, 16 ); - } else - - if ( ( dmcfieldf < dmcr ) && ( dmcfieldf < dmcfieldr ) ) { - /* field, forward */ - mbi->mb_type = 8; - mbi->motion_type = 1; - vmc = - mpeg2_dist2( - oldref + ( tself ? mpeg2_width : 0 ) + ( imintf >> 1 ) - + ( mpeg2_width << 1 ) * ( jmintf >> 1 ), - mb, mpeg2_width << 1, imintf & 1, jmintf & 1, 8 ); - vmc += - mpeg2_dist2( - oldref + ( bself ? mpeg2_width : 0 ) + ( iminbf >> 1 ) - + ( mpeg2_width << 1 ) * ( jminbf >> 1 ), - mb + mpeg2_width, mpeg2_width << 1, iminbf & 1, jminbf & 1, 8 ); - } else + + ( mpeg2_width << 1 ) * ( jminbr >> 1 ), + mb + mpeg2_width, mpeg2_width << 1, iminbf & 1, jminbf & 1, iminbr & 1, + jminbr & 1, 8 ); + + /* + select prediction type of minimum distance from the + six candidates (field/frame * forward/backward/interpolated) + */ + if ( ( dmci < dmcfieldi ) && ( dmci < dmcf ) && ( dmci < dmcfieldf ) && + ( dmci < dmcr ) && ( dmci < dmcfieldr ) ) { + /* frame, interpolated */ + mbi->mb_type = 8 | 4; + mbi->motion_type = 2; + vmc = + mpeg2_bdist2( + oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ), + newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ), + mb, mpeg2_width, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 ); + } else - if ( dmcr < dmcfieldr ) { - /* frame, backward */ - mbi->mb_type = 4; - mbi->motion_type = 2; - vmc = - mpeg2_dist2( - newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ), mb, - mpeg2_width, iminr & 1, jminr & 1, 16 ); - } else { - /* field, backward */ - mbi->mb_type = 4; - mbi->motion_type = 1; - vmc = - mpeg2_dist2( - newref + ( tselr ? mpeg2_width : 0 ) + ( imintr >> 1 ) - + ( mpeg2_width << 1 ) * ( jmintr >> 1 ), - mb, mpeg2_width << 1, imintr & 1, jmintr & 1, 8 ); - vmc += - mpeg2_dist2( - newref + ( bselr ? mpeg2_width : 0 ) + ( iminbr >> 1 ) - + ( mpeg2_width << 1 ) * ( jminbr >> 1 ), - mb + mpeg2_width, mpeg2_width << 1, iminbr & 1, jminbr & 1, 8 ); + if ( ( dmcfieldi < dmcf ) && ( dmcfieldi < dmcfieldf ) && + ( dmcfieldi < dmcr ) && ( dmcfieldi < dmcfieldr ) ) { + /* field, interpolated */ + mbi->mb_type = 8 | 4; + mbi->motion_type = 1; + vmc = + mpeg2_bdist2( + oldref + ( imintf >> 1 ) + ( tself ? mpeg2_width : 0 ) + + ( mpeg2_width << 1 ) * ( jmintf >> 1 ), + newref + ( imintr >> 1 ) + ( tselr ? mpeg2_width : 0 ) + + ( mpeg2_width << 1 ) * ( jmintr >> 1 ), + mb, mpeg2_width << 1, imintf & 1, jmintf & 1, imintr & 1, jmintr & 1, + 8 ); + vmc += + mpeg2_bdist2( + oldref + ( iminbf >> 1 ) + ( bself ? mpeg2_width : 0 ) + + ( mpeg2_width << 1 ) * ( jminbf >> 1 ), + newref + ( iminbr >> 1 ) + ( bselr ? mpeg2_width : 0 ) + + ( mpeg2_width << 1 ) * ( jminbr >> 1 ), + mb + mpeg2_width, mpeg2_width << 1, iminbf & 1, jminbf & 1, + iminbr & 1, jminbr & 1, 8 ); + } else + + if ( ( dmcf < dmcfieldf ) && ( dmcf < dmcr ) && ( dmcf < dmcfieldr ) ) { + /* frame, forward */ + mbi->mb_type = 8; + mbi->motion_type = 2; + vmc = + mpeg2_dist2( + oldref + ( iminf >> 1 ) + mpeg2_width * ( jminf >> 1 ), mb, + mpeg2_width, iminf & 1, jminf & 1, 16 ); + } else + + if ( ( dmcfieldf < dmcr ) && ( dmcfieldf < dmcfieldr ) ) { + /* field, forward */ + mbi->mb_type = 8; + mbi->motion_type = 1; + vmc = + mpeg2_dist2( + oldref + ( tself ? mpeg2_width : 0 ) + ( imintf >> 1 ) + + ( mpeg2_width << 1 ) * ( jmintf >> 1 ), + mb, mpeg2_width << 1, imintf & 1, jmintf & 1, 8 ); + vmc += + mpeg2_dist2( + oldref + ( bself ? mpeg2_width : 0 ) + ( iminbf >> 1 ) + + ( mpeg2_width << 1 ) * ( jminbf >> 1 ), + mb + mpeg2_width, mpeg2_width << 1, iminbf & 1, jminbf & 1, 8 ); + } else + + if ( dmcr < dmcfieldr ) { + /* frame, backward */ + mbi->mb_type = 4; + mbi->motion_type = 2; + vmc = + mpeg2_dist2( + newref + ( iminr >> 1 ) + mpeg2_width * ( jminr >> 1 ), mb, + mpeg2_width, iminr & 1, jminr & 1, 16 ); + } else { + /* field, backward */ + mbi->mb_type = 4; + mbi->motion_type = 1; + vmc = + mpeg2_dist2( + newref + ( tselr ? mpeg2_width : 0 ) + ( imintr >> 1 ) + + ( mpeg2_width << 1 ) * ( jmintr >> 1 ), + mb, mpeg2_width << 1, imintr & 1, jmintr & 1, 8 ); + vmc += + mpeg2_dist2( + newref + ( bselr ? mpeg2_width : 0 ) + ( iminbr >> 1 ) + + ( mpeg2_width << 1 ) * ( jminbr >> 1 ), + mb + mpeg2_width, mpeg2_width << 1, iminbr & 1, jminbr & 1, 8 ); + } } - } - /* - select between intra or non-intra coding: + /* + select between intra or non-intra coding: - selection is based on intra block variance (var) vs. - prediction error variance (vmc) + selection is based on intra block variance (var) vs. + prediction error variance (vmc) - blocks with small prediction error are always coded non-intra - even if variance is smaller (is this reasonable?) - */ - if ( ( vmc > var ) && ( vmc >= 9 * 256 ) ) - mbi->mb_type = 1; - else { - var = vmc; + blocks with small prediction error are always coded non-intra + even if variance is smaller (is this reasonable?) + */ + if ( ( vmc > var ) && ( vmc >= 9 * 256 ) ) + mbi->mb_type = 1; + else { + var = vmc; - if ( mbi->motion_type == 2 ) { - /* forward */ - mbi->MV[ 0 ][ 0 ][ 0 ] = iminf - ( i << 1 ); - mbi->MV[ 0 ][ 0 ][ 1 ] = jminf - ( j << 1 ); - /* backward */ - mbi->MV[ 0 ][ 1 ][ 0 ] = iminr - ( i << 1 ); - mbi->MV[ 0 ][ 1 ][ 1 ] = jminr - ( j << 1 ); - } else { - /* these are FRAME vectors */ - /* forward */ - mbi->MV[ 0 ][ 0 ][ 0 ] = imintf - ( i << 1 ); - mbi->MV[ 0 ][ 0 ][ 1 ] = ( jmintf << 1 ) - ( j << 1 ); - mbi->MV[ 1 ][ 0 ][ 0 ] = iminbf - ( i << 1 ); - mbi->MV[ 1 ][ 0 ][ 1 ] = ( jminbf << 1 ) - ( j << 1 ); - mbi->mv_field_sel[ 0 ][ 0 ] = tself; - mbi->mv_field_sel[ 1 ][ 0 ] = bself; - /* backward */ - mbi->MV[ 0 ][ 1 ][ 0 ] = imintr - ( i << 1 ); - mbi->MV[ 0 ][ 1 ][ 1 ] = ( jmintr << 1 ) - ( j << 1 ); - mbi->MV[ 1 ][ 1 ][ 0 ] = iminbr - ( i << 1 ); - mbi->MV[ 1 ][ 1 ][ 1 ] = ( jminbr << 1 ) - ( j << 1 ); - mbi->mv_field_sel[ 0 ][ 1 ] = tselr; - mbi->mv_field_sel[ 1 ][ 1 ] = bselr; + if ( mbi->motion_type == 2 ) { + /* forward */ + mbi->MV[ 0 ][ 0 ][ 0 ] = iminf - ( i << 1 ); + mbi->MV[ 0 ][ 0 ][ 1 ] = jminf - ( j << 1 ); + /* backward */ + mbi->MV[ 0 ][ 1 ][ 0 ] = iminr - ( i << 1 ); + mbi->MV[ 0 ][ 1 ][ 1 ] = jminr - ( j << 1 ); + } else { + /* these are FRAME vectors */ + /* forward */ + mbi->MV[ 0 ][ 0 ][ 0 ] = imintf - ( i << 1 ); + mbi->MV[ 0 ][ 0 ][ 1 ] = ( jmintf << 1 ) - ( j << 1 ); + mbi->MV[ 1 ][ 0 ][ 0 ] = iminbf - ( i << 1 ); + mbi->MV[ 1 ][ 0 ][ 1 ] = ( jminbf << 1 ) - ( j << 1 ); + mbi->mv_field_sel[ 0 ][ 0 ] = tself; + mbi->mv_field_sel[ 1 ][ 0 ] = bself; + /* backward */ + mbi->MV[ 0 ][ 1 ][ 0 ] = imintr - ( i << 1 ); + mbi->MV[ 0 ][ 1 ][ 1 ] = ( jmintr << 1 ) - ( j << 1 ); + mbi->MV[ 1 ][ 1 ][ 0 ] = iminbr - ( i << 1 ); + mbi->MV[ 1 ][ 1 ][ 1 ] = ( jminbr << 1 ) - ( j << 1 ); + mbi->mv_field_sel[ 0 ][ 1 ] = tselr; + mbi->mv_field_sel[ 1 ][ 1 ] = bselr; + } } } - } mbi->var = var; } @@ -11908,294 +11908,294 @@ void mpeg2_field_ME( unsigned char *oldorg, unsigned char *neworg, mbi->mb_type = 1; else - if ( mpeg2_pict_type == 2 ) { - toporg = oldorg; - topref = oldref; - botorg = oldorg + mpeg2_width; - botref = oldref + mpeg2_width; - - if ( secondfield ) { - /* opposite parity field is in same frame */ - if ( mpeg2_pict_struct == 1 ) { - /* current is top field */ - botorg = cur + mpeg2_width; - botref = curref + mpeg2_width; - } else { - /* current is bottom field */ - toporg = cur; - topref = curref; + if ( mpeg2_pict_type == 2 ) { + toporg = oldorg; + topref = oldref; + botorg = oldorg + mpeg2_width; + botref = oldref + mpeg2_width; + + if ( secondfield ) { + /* opposite parity field is in same frame */ + if ( mpeg2_pict_struct == 1 ) { + /* current is top field */ + botorg = cur + mpeg2_width; + botref = curref + mpeg2_width; + } else { + /* current is bottom field */ + toporg = cur; + topref = curref; + } } - } - - mpeg2_field_estimate( - toporg, topref, botorg, botref, mb, i, j, sxf, syf, ipflag, &imin, &jmin, - &imin8u, &jmin8u, &imin8l, &jmin8l, &dmcfield, &dmc8, &sel, &sel8u, - &sel8l, &imins, &jmins, &ds ); - - if ( ( mpeg2_M == 1 ) && !ipflag ) - /* generic condition which permits Dual Prime */ - mpeg2_dpfield_estimate( - topref, botref, mb, i, j, imins, jmins, &imindmv, &jmindmv, &dmc_dp, - &vmc_dp ); - - /* select between dual prime, field and 16x8 prediction */ - if ( ( mpeg2_M == 1 ) && !ipflag && ( dmc_dp < dmc8 ) && - ( dmc_dp < dmcfield ) ) { - /* Dual Prime prediction */ - mbi->motion_type = 3; - vmc = vmc_dp; /* we already calculated L2 error for Dual */ - } else - - if ( dmc8 < dmcfield ) { - /* 16x8 prediction */ - mbi->motion_type = 2; - /* upper half block */ - vmc = - mpeg2_dist2( - ( sel8u ? botref : topref ) + ( imin8u >> 1 ) + w2 * ( jmin8u >> 1 ), - mb, w2, imin8u & 1, jmin8u & 1, 8 ); - /* lower half block */ - vmc += - mpeg2_dist2( - ( sel8l ? botref : topref ) + ( imin8l >> 1 ) + w2 * ( jmin8l >> 1 ), - mb + 8 * w2, w2, imin8l & 1, jmin8l & 1, 8 ); - } else { - /* field prediction */ - mbi->motion_type = 1; - vmc = - mpeg2_dist2( - ( sel ? botref : topref ) + ( imin >> 1 ) + w2 * ( jmin >> 1 ), - mb, w2, imin & 1, jmin & 1, 16 ); - } - - /* select between intra and non-intra coding */ - if ( ( vmc > var ) && ( vmc >= 9 * 256 ) ) - mbi->mb_type = 1; - else { - /* - zero MV field prediction from same parity ref. field - (not allowed if ipflag is set) - */ - if ( !ipflag ) - v0 = - mpeg2_dist2( - ( ( mpeg2_pict_struct == 2 ) ? botref : topref ) + i + w2 * j, mb, - w2, 0, 0, 16 ); - - if ( ipflag || ( ( 4 * v0 > 5 * vmc ) && ( v0 >= 9 * 256 ) ) ) { - var = vmc; - mbi->mb_type = 8; + mpeg2_field_estimate( + toporg, topref, botorg, botref, mb, i, j, sxf, syf, ipflag, &imin, &jmin, + &imin8u, &jmin8u, &imin8l, &jmin8l, &dmcfield, &dmc8, &sel, &sel8u, + &sel8l, &imins, &jmins, &ds ); + + if ( ( mpeg2_M == 1 ) && !ipflag ) + /* generic condition which permits Dual Prime */ + mpeg2_dpfield_estimate( + topref, botref, mb, i, j, imins, jmins, &imindmv, &jmindmv, &dmc_dp, + &vmc_dp ); + + /* select between dual prime, field and 16x8 prediction */ + if ( ( mpeg2_M == 1 ) && !ipflag && ( dmc_dp < dmc8 ) && + ( dmc_dp < dmcfield ) ) { + /* Dual Prime prediction */ + mbi->motion_type = 3; + vmc = vmc_dp; /* we already calculated L2 error for Dual */ - if ( mbi->motion_type == 1 ) { - mbi->MV[ 0 ][ 0 ][ 0 ] = imin - ( i << 1 ); - mbi->MV[ 0 ][ 0 ][ 1 ] = jmin - ( j << 1 ); - mbi->mv_field_sel[ 0 ][ 0 ] = sel; - } else + } else - if ( mbi->motion_type == 3 ) { - /* same parity vector */ - mbi->MV[ 0 ][ 0 ][ 0 ] = imins - ( i << 1 ); - mbi->MV[ 0 ][ 0 ][ 1 ] = jmins - ( j << 1 ); + if ( dmc8 < dmcfield ) { + /* 16x8 prediction */ + mbi->motion_type = 2; + /* upper half block */ + vmc = + mpeg2_dist2( + ( sel8u ? botref : topref ) + ( imin8u >> 1 ) + w2 * ( jmin8u >> 1 ), + mb, w2, imin8u & 1, jmin8u & 1, 8 ); + /* lower half block */ + vmc += + mpeg2_dist2( + ( sel8l ? botref : topref ) + ( imin8l >> 1 ) + w2 * ( jmin8l >> 1 ), + mb + 8 * w2, w2, imin8l & 1, jmin8l & 1, 8 ); + } else { + /* field prediction */ + mbi->motion_type = 1; + vmc = + mpeg2_dist2( + ( sel ? botref : topref ) + ( imin >> 1 ) + w2 * ( jmin >> 1 ), + mb, w2, imin & 1, jmin & 1, 16 ); + } - /* opposite parity vector */ - mbi->dmvector[ 0 ] = imindmv; - mbi->dmvector[ 1 ] = jmindmv; + /* select between intra and non-intra coding */ + if ( ( vmc > var ) && ( vmc >= 9 * 256 ) ) + mbi->mb_type = 1; + else { + /* + zero MV field prediction from same parity ref. field + (not allowed if ipflag is set) + */ + if ( !ipflag ) + v0 = + mpeg2_dist2( + ( ( mpeg2_pict_struct == 2 ) ? botref : topref ) + i + w2 * j, mb, + w2, 0, 0, 16 ); + + if ( ipflag || ( ( 4 * v0 > 5 * vmc ) && ( v0 >= 9 * 256 ) ) ) { + var = vmc; + mbi->mb_type = 8; + + if ( mbi->motion_type == 1 ) { + mbi->MV[ 0 ][ 0 ][ 0 ] = imin - ( i << 1 ); + mbi->MV[ 0 ][ 0 ][ 1 ] = jmin - ( j << 1 ); + mbi->mv_field_sel[ 0 ][ 0 ] = sel; + } else + + if ( mbi->motion_type == 3 ) { + /* same parity vector */ + mbi->MV[ 0 ][ 0 ][ 0 ] = imins - ( i << 1 ); + mbi->MV[ 0 ][ 0 ][ 1 ] = jmins - ( j << 1 ); + + /* opposite parity vector */ + mbi->dmvector[ 0 ] = imindmv; + mbi->dmvector[ 1 ] = jmindmv; + } else { + mbi->MV[ 0 ][ 0 ][ 0 ] = imin8u - ( i << 1 ); + mbi->MV[ 0 ][ 0 ][ 1 ] = jmin8u - ( j << 1 ); + mbi->MV[ 1 ][ 0 ][ 0 ] = imin8l - ( i << 1 ); + mbi->MV[ 1 ][ 0 ][ 1 ] = jmin8l - ( ( j + 8 ) << 1 ); + mbi->mv_field_sel[ 0 ][ 0 ] = sel8u; + mbi->mv_field_sel[ 1 ][ 0 ] = sel8l; + } } else { - mbi->MV[ 0 ][ 0 ][ 0 ] = imin8u - ( i << 1 ); - mbi->MV[ 0 ][ 0 ][ 1 ] = jmin8u - ( j << 1 ); - mbi->MV[ 1 ][ 0 ][ 0 ] = imin8l - ( i << 1 ); - mbi->MV[ 1 ][ 0 ][ 1 ] = jmin8l - ( ( j + 8 ) << 1 ); - mbi->mv_field_sel[ 0 ][ 0 ] = sel8u; - mbi->mv_field_sel[ 1 ][ 0 ] = sel8l; + /* No MC */ + var = v0; + mbi->mb_type = 0; + mbi->motion_type = 1; + mbi->MV[ 0 ][ 0 ][ 0 ] = 0; + mbi->MV[ 0 ][ 0 ][ 1 ] = 0; + mbi->mv_field_sel[ 0 ][ 0 ] = ( mpeg2_pict_struct == 2 ); } - } else { - /* No MC */ - var = v0; - mbi->mb_type = 0; - mbi->motion_type = 1; - mbi->MV[ 0 ][ 0 ][ 0 ] = 0; - mbi->MV[ 0 ][ 0 ][ 1 ] = 0; - mbi->mv_field_sel[ 0 ][ 0 ] = ( mpeg2_pict_struct == 2 ); } - } - } else { /* if (mpeg2_pict_type==B_TYPE) */ - /* forward prediction */ - mpeg2_field_estimate( - oldorg, oldref, oldorg + mpeg2_width, oldref + mpeg2_width, mb, i, j, sxf, - syf, 0, &iminf, &jminf, &imin8uf, &jmin8uf, &imin8lf, &jmin8lf, - &dmcfieldf, &dmc8f, &self, &sel8uf, &sel8lf, &imins, &jmins, &ds ); - - /* backward prediction */ - mpeg2_field_estimate( - neworg, newref, neworg + mpeg2_width, newref + mpeg2_width, mb, i, j, sxb, - syb, 0, &iminr, &jminr, &imin8ur, &jmin8ur, &imin8lr, &jmin8lr, - &dmcfieldr, &dmc8r, &selr, &sel8ur, &sel8lr, &imins, &jmins, &ds ); - - /* calculate distances for bidirectional prediction */ - /* field */ - dmcfieldi = - mpeg2_bdist1( - oldref + ( self ? mpeg2_width : 0 ) + ( iminf >> 1 ) - + w2 * ( jminf >> 1 ), - newref + ( selr ? mpeg2_width : 0 ) + ( iminr >> 1 ) - + w2 * ( jminr >> 1 ), - mb, w2, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 ); - - /* 16x8 upper half block */ - dmc8i = - mpeg2_bdist1( - oldref + ( sel8uf ? mpeg2_width : 0 ) + ( imin8uf >> 1 ) - + w2 * ( jmin8uf >> 1 ), - newref + ( sel8ur ? mpeg2_width : 0 ) + ( imin8ur >> 1 ) - + w2 * ( jmin8ur >> 1 ), - mb, w2, imin8uf & 1, jmin8uf & 1, imin8ur & 1, jmin8ur & 1, 8 ); - - /* 16x8 lower half block */ - dmc8i += - mpeg2_bdist1( - oldref + ( sel8lf ? mpeg2_width : 0 ) + ( imin8lf >> 1 ) - + w2 * ( jmin8lf >> 1 ), - newref + ( sel8lr ? mpeg2_width : 0 ) + ( imin8lr >> 1 ) - + w2 * ( jmin8lr >> 1 ), - mb + 8 * w2, w2, imin8lf & 1, jmin8lf & 1, imin8lr & 1, jmin8lr & 1, - 8 ); - - /* select prediction type of minimum distance */ - if ( ( dmcfieldi < dmc8i ) && ( dmcfieldi < dmcfieldf ) && - ( dmcfieldi < dmc8f ) && ( dmcfieldi < dmcfieldr ) && - ( dmcfieldi < dmc8r ) ) { - /* field, interpolated */ - mbi->mb_type = 8 | 5; - mbi->motion_type = 1; - vmc = - mpeg2_bdist2( + } else { /* if (mpeg2_pict_type==B_TYPE) */ + /* forward prediction */ + mpeg2_field_estimate( + oldorg, oldref, oldorg + mpeg2_width, oldref + mpeg2_width, mb, i, j, sxf, + syf, 0, &iminf, &jminf, &imin8uf, &jmin8uf, &imin8lf, &jmin8lf, + &dmcfieldf, &dmc8f, &self, &sel8uf, &sel8lf, &imins, &jmins, &ds ); + + /* backward prediction */ + mpeg2_field_estimate( + neworg, newref, neworg + mpeg2_width, newref + mpeg2_width, mb, i, j, sxb, + syb, 0, &iminr, &jminr, &imin8ur, &jmin8ur, &imin8lr, &jmin8lr, + &dmcfieldr, &dmc8r, &selr, &sel8ur, &sel8lr, &imins, &jmins, &ds ); + + /* calculate distances for bidirectional prediction */ + /* field */ + dmcfieldi = + mpeg2_bdist1( oldref + ( self ? mpeg2_width : 0 ) + ( iminf >> 1 ) - + w2 * ( jminf >> 1 ), + + w2 * ( jminf >> 1 ), newref + ( selr ? mpeg2_width : 0 ) + ( iminr >> 1 ) - + w2 * ( jminr >> 1 ), + + w2 * ( jminr >> 1 ), mb, w2, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 ); - } else - - if ( ( dmc8i < dmcfieldf ) && ( dmc8i < dmc8f ) && ( dmc8i < dmcfieldr ) && - ( dmc8i < dmc8r ) ) { - /* 16x8, interpolated */ - mbi->mb_type = 8 | 4; - mbi->motion_type = 2; - /* upper half block */ - vmc = - mpeg2_bdist2( + /* 16x8 upper half block */ + dmc8i = + mpeg2_bdist1( oldref + ( sel8uf ? mpeg2_width : 0 ) + ( imin8uf >> 1 ) - + w2 * ( jmin8uf >> 1 ), + + w2 * ( jmin8uf >> 1 ), newref + ( sel8ur ? mpeg2_width : 0 ) + ( imin8ur >> 1 ) - + w2 * ( jmin8ur >> 1 ), + + w2 * ( jmin8ur >> 1 ), mb, w2, imin8uf & 1, jmin8uf & 1, imin8ur & 1, jmin8ur & 1, 8 ); - /* lower half block */ - vmc += - mpeg2_bdist2( + /* 16x8 lower half block */ + dmc8i += + mpeg2_bdist1( oldref + ( sel8lf ? mpeg2_width : 0 ) + ( imin8lf >> 1 ) - + w2 * ( jmin8lf >> 1 ), + + w2 * ( jmin8lf >> 1 ), newref + ( sel8lr ? mpeg2_width : 0 ) + ( imin8lr >> 1 ) - + w2 * ( jmin8lr >> 1 ), + + w2 * ( jmin8lr >> 1 ), mb + 8 * w2, w2, imin8lf & 1, jmin8lf & 1, imin8lr & 1, jmin8lr & 1, 8 ); - } else - - if ( ( dmcfieldf < dmc8f ) && ( dmcfieldf < dmcfieldr ) && - ( dmcfieldf < dmc8r ) ) { - /* field, forward */ - mbi->mb_type = 8; - mbi->motion_type = 1; - vmc = - mpeg2_dist2( - oldref + ( self ? mpeg2_width : 0 ) + ( iminf >> 1 ) - + w2 * ( jminf >> 1 ), - mb, w2, iminf & 1, jminf & 1, 16 ); - } else - - if ( ( dmc8f < dmcfieldr ) && ( dmc8f < dmc8r ) ) { - /* 16x8, forward */ - mbi->mb_type = 8; - mbi->motion_type = 2; - - /* upper half block */ - vmc = - mpeg2_dist2( - oldref + ( sel8uf ? mpeg2_width : 0 ) + ( imin8uf >> 1 ) - + w2 * ( jmin8uf >> 1 ), mb, w2, imin8uf & 1, jmin8uf & 1, 8 ); - /* lower half block */ - vmc += - mpeg2_dist2( - oldref + ( sel8lf ? mpeg2_width : 0 ) + ( imin8lf >> 1 ) - + w2 * ( jmin8lf >> 1 ), - mb + 8 * w2, w2, imin8lf & 1, jmin8lf & 1, 8 ); - } else + /* select prediction type of minimum distance */ + if ( ( dmcfieldi < dmc8i ) && ( dmcfieldi < dmcfieldf ) && + ( dmcfieldi < dmc8f ) && ( dmcfieldi < dmcfieldr ) && + ( dmcfieldi < dmc8r ) ) { + /* field, interpolated */ + mbi->mb_type = 8 | 5; + mbi->motion_type = 1; + vmc = + mpeg2_bdist2( + oldref + ( self ? mpeg2_width : 0 ) + ( iminf >> 1 ) + + w2 * ( jminf >> 1 ), + newref + ( selr ? mpeg2_width : 0 ) + ( iminr >> 1 ) + + w2 * ( jminr >> 1 ), + mb, w2, iminf & 1, jminf & 1, iminr & 1, jminr & 1, 16 ); + } else - if ( dmcfieldr < dmc8r ) { - /* field, backward */ - mbi->mb_type = 4; - mbi->motion_type = 1; - vmc = - mpeg2_dist2( - newref + ( selr ? mpeg2_width : 0 ) + ( iminr >> 1 ) - + w2 * ( jminr >> 1 ), - mb, w2, iminr & 1, jminr & 1, 16 ); - } else { - /* 16x8, backward */ - mbi->mb_type = 4; - mbi->motion_type = 2; - - /* upper half block */ - vmc = - mpeg2_dist2( - newref + ( sel8ur ? mpeg2_width : 0 ) + ( imin8ur >> 1 ) - + w2 * ( jmin8ur >> 1 ), - mb, w2, imin8ur & 1, jmin8ur & 1, 8 ); + if ( ( dmc8i < dmcfieldf ) && ( dmc8i < dmc8f ) && ( dmc8i < dmcfieldr ) && + ( dmc8i < dmc8r ) ) { + /* 16x8, interpolated */ + mbi->mb_type = 8 | 4; + mbi->motion_type = 2; + + /* upper half block */ + vmc = + mpeg2_bdist2( + oldref + ( sel8uf ? mpeg2_width : 0 ) + ( imin8uf >> 1 ) + + w2 * ( jmin8uf >> 1 ), + newref + ( sel8ur ? mpeg2_width : 0 ) + ( imin8ur >> 1 ) + + w2 * ( jmin8ur >> 1 ), + mb, w2, imin8uf & 1, jmin8uf & 1, imin8ur & 1, jmin8ur & 1, 8 ); + + /* lower half block */ + vmc += + mpeg2_bdist2( + oldref + ( sel8lf ? mpeg2_width : 0 ) + ( imin8lf >> 1 ) + + w2 * ( jmin8lf >> 1 ), + newref + ( sel8lr ? mpeg2_width : 0 ) + ( imin8lr >> 1 ) + + w2 * ( jmin8lr >> 1 ), + mb + 8 * w2, w2, imin8lf & 1, jmin8lf & 1, imin8lr & 1, jmin8lr & 1, + 8 ); + } else - /* lower half block */ - vmc += - mpeg2_dist2( - newref + ( sel8lr ? mpeg2_width : 0 ) + ( imin8lr >> 1 ) - + w2 * ( jmin8lr >> 1 ), - mb + 8 * w2, w2, imin8lr & 1, jmin8lr & 1, 8 ); - } + if ( ( dmcfieldf < dmc8f ) && ( dmcfieldf < dmcfieldr ) && + ( dmcfieldf < dmc8r ) ) { + /* field, forward */ + mbi->mb_type = 8; + mbi->motion_type = 1; + vmc = + mpeg2_dist2( + oldref + ( self ? mpeg2_width : 0 ) + ( iminf >> 1 ) + + w2 * ( jminf >> 1 ), + mb, w2, iminf & 1, jminf & 1, 16 ); + } else + + if ( ( dmc8f < dmcfieldr ) && ( dmc8f < dmc8r ) ) { + /* 16x8, forward */ + mbi->mb_type = 8; + mbi->motion_type = 2; + + /* upper half block */ + vmc = + mpeg2_dist2( + oldref + ( sel8uf ? mpeg2_width : 0 ) + ( imin8uf >> 1 ) + + w2 * ( jmin8uf >> 1 ), mb, w2, imin8uf & 1, jmin8uf & 1, 8 ); + + /* lower half block */ + vmc += + mpeg2_dist2( + oldref + ( sel8lf ? mpeg2_width : 0 ) + ( imin8lf >> 1 ) + + w2 * ( jmin8lf >> 1 ), + mb + 8 * w2, w2, imin8lf & 1, jmin8lf & 1, 8 ); + } else + + if ( dmcfieldr < dmc8r ) { + /* field, backward */ + mbi->mb_type = 4; + mbi->motion_type = 1; + vmc = + mpeg2_dist2( + newref + ( selr ? mpeg2_width : 0 ) + ( iminr >> 1 ) + + w2 * ( jminr >> 1 ), + mb, w2, iminr & 1, jminr & 1, 16 ); + } else { + /* 16x8, backward */ + mbi->mb_type = 4; + mbi->motion_type = 2; + + /* upper half block */ + vmc = + mpeg2_dist2( + newref + ( sel8ur ? mpeg2_width : 0 ) + ( imin8ur >> 1 ) + + w2 * ( jmin8ur >> 1 ), + mb, w2, imin8ur & 1, jmin8ur & 1, 8 ); + + /* lower half block */ + vmc += + mpeg2_dist2( + newref + ( sel8lr ? mpeg2_width : 0 ) + ( imin8lr >> 1 ) + + w2 * ( jmin8lr >> 1 ), + mb + 8 * w2, w2, imin8lr & 1, jmin8lr & 1, 8 ); + } - /* select between intra and non-intra coding */ - if ( ( vmc > var ) && ( vmc >= 9 * 256 ) ) - mbi->mb_type = 1; - else { - var = vmc; + /* select between intra and non-intra coding */ + if ( ( vmc > var ) && ( vmc >= 9 * 256 ) ) + mbi->mb_type = 1; + else { + var = vmc; - if ( mbi->motion_type == 1 ) { - /* forward */ - mbi->MV[ 0 ][ 0 ][ 0 ] = iminf - ( i << 1 ); - mbi->MV[ 0 ][ 0 ][ 1 ] = jminf - ( j << 1 ); - mbi->mv_field_sel[ 0 ][ 0 ] = self; - /* backward */ - mbi->MV[ 0 ][ 1 ][ 0 ] = iminr - ( i << 1 ); - mbi->MV[ 0 ][ 1 ][ 1 ] = jminr - ( j << 1 ); - mbi->mv_field_sel[ 0 ][ 1 ] = selr; - } else { /* MC_16X8 */ - /* forward */ - mbi->MV[ 0 ][ 0 ][ 0 ] = imin8uf - ( i << 1 ); - mbi->MV[ 0 ][ 0 ][ 1 ] = jmin8uf - ( j << 1 ); - mbi->mv_field_sel[ 0 ][ 0 ] = sel8uf; - mbi->MV[ 1 ][ 0 ][ 0 ] = imin8lf - ( i << 1 ); - mbi->MV[ 1 ][ 0 ][ 1 ] = jmin8lf - ( ( j + 8 ) << 1 ); - mbi->mv_field_sel[ 1 ][ 0 ] = sel8lf; - /* backward */ - mbi->MV[ 0 ][ 1 ][ 0 ] = imin8ur - ( i << 1 ); - mbi->MV[ 0 ][ 1 ][ 1 ] = jmin8ur - ( j << 1 ); - mbi->mv_field_sel[ 0 ][ 1 ] = sel8ur; - mbi->MV[ 1 ][ 1 ][ 0 ] = imin8lr - ( i << 1 ); - mbi->MV[ 1 ][ 1 ][ 1 ] = jmin8lr - ( ( j + 8 ) << 1 ); - mbi->mv_field_sel[ 1 ][ 1 ] = sel8lr; + if ( mbi->motion_type == 1 ) { + /* forward */ + mbi->MV[ 0 ][ 0 ][ 0 ] = iminf - ( i << 1 ); + mbi->MV[ 0 ][ 0 ][ 1 ] = jminf - ( j << 1 ); + mbi->mv_field_sel[ 0 ][ 0 ] = self; + /* backward */ + mbi->MV[ 0 ][ 1 ][ 0 ] = iminr - ( i << 1 ); + mbi->MV[ 0 ][ 1 ][ 1 ] = jminr - ( j << 1 ); + mbi->mv_field_sel[ 0 ][ 1 ] = selr; + } else { /* MC_16X8 */ + /* forward */ + mbi->MV[ 0 ][ 0 ][ 0 ] = imin8uf - ( i << 1 ); + mbi->MV[ 0 ][ 0 ][ 1 ] = jmin8uf - ( j << 1 ); + mbi->mv_field_sel[ 0 ][ 0 ] = sel8uf; + mbi->MV[ 1 ][ 0 ][ 0 ] = imin8lf - ( i << 1 ); + mbi->MV[ 1 ][ 0 ][ 1 ] = jmin8lf - ( ( j + 8 ) << 1 ); + mbi->mv_field_sel[ 1 ][ 0 ] = sel8lf; + /* backward */ + mbi->MV[ 0 ][ 1 ][ 0 ] = imin8ur - ( i << 1 ); + mbi->MV[ 0 ][ 1 ][ 1 ] = jmin8ur - ( j << 1 ); + mbi->mv_field_sel[ 0 ][ 1 ] = sel8ur; + mbi->MV[ 1 ][ 1 ][ 0 ] = imin8lr - ( i << 1 ); + mbi->MV[ 1 ][ 1 ][ 1 ] = jmin8lr - ( ( j + 8 ) << 1 ); + mbi->mv_field_sel[ 1 ][ 1 ] = sel8lr; + } } } - } mbi->var = var; } @@ -12539,7 +12539,7 @@ void mpeg2_dpframe_estimate( unsigned char *ref, unsigned char *mb, int i, mpeg2_bdist2( ref + ( is >> 1 ) + ( mpeg2_width << 1 ) * ( js >> 1 ), ref + mpeg2_width + ( it >> 1 ) - + ( mpeg2_width << 1 ) * ( jt >> 1 ), + + ( mpeg2_width << 1 ) * ( jt >> 1 ), mb, /* current mb location */ mpeg2_width << 1, /* adjacent line distance */ is & 1, js & 1, it & 1, jt & 1, /* half-pel flags */ @@ -12547,7 +12547,7 @@ void mpeg2_dpframe_estimate( unsigned char *ref, unsigned char *mb, int i, local_dist += mpeg2_bdist2( ref + mpeg2_width + ( is >> 1 ) - + ( mpeg2_width << 1 ) * ( js >> 1 ), + + ( mpeg2_width << 1 ) * ( js >> 1 ), ref + ( ib >> 1 ) + ( mpeg2_width << 1 ) * ( jb >> 1 ), mb + mpeg2_width, /* current mb location */ mpeg2_width << 1, /* adjacent line distance */ @@ -12578,12 +12578,12 @@ void mpeg2_dpframe_estimate( unsigned char *ref, unsigned char *mb, int i, mpeg2_bdist1( ref + ( imins >> 1 ) + ( mpeg2_width << 1 ) * ( jmins >> 1 ), ref + mpeg2_width + ( imint >> 1 ) - + ( mpeg2_width << 1 ) * ( jmint >> 1 ), + + ( mpeg2_width << 1 ) * ( jmint >> 1 ), mb, mpeg2_width << 1, imins & 1, jmins & 1, imint & 1, jmint & 1, 8 ); local_dist += mpeg2_bdist1( ref + mpeg2_width + ( imins >> 1 ) - + ( mpeg2_width << 1 ) * ( jmins >> 1 ), + + ( mpeg2_width << 1 ) * ( jmins >> 1 ), ref + ( iminb >> 1 ) + ( mpeg2_width << 1 ) * ( jminb >> 1 ), mb + mpeg2_width, mpeg2_width << 1, imins & 1, jmins & 1, iminb & 1, jminb & 1, 8 ); @@ -12764,14 +12764,14 @@ int mpeg2_fullsearch( unsigned char *org, unsigned char *ref, i++; else - if ( k < 4 * l ) - j++; - else + if ( k < 4 * l ) + j++; + else - if ( k < 6 * l ) - i--; - else - j--; + if ( k < 6 * l ) + i--; + else + j--; } } @@ -12804,7 +12804,7 @@ int mpeg2_fullsearch( unsigned char *org, unsigned char *ref, *iminp = imin; *jminp = jmin; - return( dmin ); + return ( dmin ); } @@ -12830,7 +12830,7 @@ int mpeg2_dist1( unsigned char *blk1, unsigned char *blk2, int lx, int hx, p2 = blk2; if ( !hx && !hy ) { - _Pragma( "loopbound min 1 max 16" ) + _Pragma( "loopbound min 0 max 16" ) for ( j = 0; j < h; j++ ) { if ( ( v = p1[ 0 ] - p2[ 0 ] ) < 0 ) v = -v; @@ -12904,63 +12904,63 @@ int mpeg2_dist1( unsigned char *blk1, unsigned char *blk2, int lx, int hx, } } else - if ( hx && !hy ) { - _Pragma( "loopbound min 8 max 16" ) - for ( j = 0; j < h; j++ ) { - i = 0; - _Pragma( "loopbound min 16 max 16" ) - for ( ; i < 16; i++ ) { - v = ( ( unsigned int )( p1[ i ] + p1[ i + 1 ] + 1 ) >> 1 ) - p2[ i ]; - if ( v >= 0 ) - s += v; - else - s -= v; + if ( hx && !hy ) { + _Pragma( "loopbound min 8 max 16" ) + for ( j = 0; j < h; j++ ) { + i = 0; + _Pragma( "loopbound min 16 max 16" ) + for ( ; i < 16; i++ ) { + v = ( ( unsigned int )( p1[ i ] + p1[ i + 1 ] + 1 ) >> 1 ) - p2[ i ]; + if ( v >= 0 ) + s += v; + else + s -= v; + } + p1 += lx; + p2 += lx; } - p1 += lx; - p2 += lx; - } - } else + } else - if ( !hx && hy ) { - p1a = p1 + lx; - _Pragma( "loopbound min 8 max 16" ) - for ( j = 0; j < h; j++ ) { - i = 0; - _Pragma( "loopbound min 16 max 16" ) - for ( ; i < 16; i++ ) { - v = ( ( unsigned int )( p1[ i ] + p1a[ i ] + 1 ) >> 1 ) - p2[ i ]; - if ( v >= 0 ) - s += v; - else - s -= v; - } - p1 = p1a; - p1a += lx; - p2 += lx; - } - } else { /* if (hx && hy) */ - p1a = p1 + lx; - _Pragma( "loopbound min 8 max 16" ) - for ( j = 0; j < h; j++ ) { - i = 0; - _Pragma( "loopbound min 16 max 16" ) - for ( ; i < 16; i++ ) { - v = - ( ( unsigned int ) - ( p1[ i ] + p1[ i + 1 ] + p1a[ i ] + p1a[ i + 1 ] + 2 ) >> 2 ) - - p2[ i ]; - if ( v >= 0 ) - s += v; - else - s -= v; + if ( !hx && hy ) { + p1a = p1 + lx; + _Pragma( "loopbound min 8 max 16" ) + for ( j = 0; j < h; j++ ) { + i = 0; + _Pragma( "loopbound min 16 max 16" ) + for ( ; i < 16; i++ ) { + v = ( ( unsigned int )( p1[ i ] + p1a[ i ] + 1 ) >> 1 ) - p2[ i ]; + if ( v >= 0 ) + s += v; + else + s -= v; + } + p1 = p1a; + p1a += lx; + p2 += lx; + } + } else { /* if (hx && hy) */ + p1a = p1 + lx; + _Pragma( "loopbound min 8 max 16" ) + for ( j = 0; j < h; j++ ) { + i = 0; + _Pragma( "loopbound min 16 max 16" ) + for ( ; i < 16; i++ ) { + v = + ( ( unsigned int ) + ( p1[ i ] + p1[ i + 1 ] + p1a[ i ] + p1a[ i + 1 ] + 2 ) >> 2 ) - + p2[ i ]; + if ( v >= 0 ) + s += v; + else + s -= v; + } + p1 = p1a; + p1a += lx; + p2 += lx; + } } - p1 = p1a; - p1a += lx; - p2 += lx; - } - } - return( s ); + return ( s ); } @@ -12998,54 +12998,54 @@ int mpeg2_dist2( unsigned char *blk1, unsigned char *blk2, int lx, int hx, } } else - if ( hx && !hy ) { - _Pragma( "loopbound min 8 max 16" ) - for ( j = 0; j < h; j++ ) { - i = 0; - _Pragma( "loopbound min 16 max 16" ) - for ( ; i < 16; i++ ) { - v = ( ( unsigned int )( p1[ i ] + p1[ i + 1 ] + 1 ) >> 1 ) - p2[ i ]; - s += v * v; + if ( hx && !hy ) { + _Pragma( "loopbound min 8 max 16" ) + for ( j = 0; j < h; j++ ) { + i = 0; + _Pragma( "loopbound min 16 max 16" ) + for ( ; i < 16; i++ ) { + v = ( ( unsigned int )( p1[ i ] + p1[ i + 1 ] + 1 ) >> 1 ) - p2[ i ]; + s += v * v; + } + p1 += lx; + p2 += lx; } - p1 += lx; - p2 += lx; - } - } else + } else - if ( !hx && hy ) { - p1a = p1 + lx; - _Pragma( "loopbound min 8 max 16" ) - for ( j = 0; j < h; j++ ) { - i = 0; - _Pragma( "loopbound min 16 max 16" ) - for ( ; i < 16; i++ ) { - v = ( ( unsigned int )( p1[ i ] + p1a[ i ] + 1 ) >> 1 ) - p2[ i ]; - s += v * v; - } - p1 = p1a; - p1a += lx; - p2 += lx; - } - } else { /* if (hx && hy) */ - p1a = p1 + lx; - _Pragma( "loopbound min 8 max 16" ) - for ( j = 0; j < h; j++ ) { - i = 0; - _Pragma( "loopbound min 16 max 16" ) - for ( ; i < 16; i++ ) { - v = - ( ( unsigned int ) - ( p1[ i ] + p1[ i + 1 ] + p1a[ i ] + p1a[ i + 1 ] + 2 ) >> 2 ) - - p2[ i ]; - s += v * v; + if ( !hx && hy ) { + p1a = p1 + lx; + _Pragma( "loopbound min 8 max 16" ) + for ( j = 0; j < h; j++ ) { + i = 0; + _Pragma( "loopbound min 16 max 16" ) + for ( ; i < 16; i++ ) { + v = ( ( unsigned int )( p1[ i ] + p1a[ i ] + 1 ) >> 1 ) - p2[ i ]; + s += v * v; + } + p1 = p1a; + p1a += lx; + p2 += lx; + } + } else { /* if (hx && hy) */ + p1a = p1 + lx; + _Pragma( "loopbound min 8 max 16" ) + for ( j = 0; j < h; j++ ) { + i = 0; + _Pragma( "loopbound min 16 max 16" ) + for ( ; i < 16; i++ ) { + v = + ( ( unsigned int ) + ( p1[ i ] + p1[ i + 1 ] + p1a[ i ] + p1a[ i + 1 ] + 2 ) >> 2 ) - + p2[ i ]; + s += v * v; + } + p1 = p1a; + p1a += lx; + p2 += lx; + } } - p1 = p1a; - p1a += lx; - p2 += lx; - } - } - return( s ); + return ( s ); } @@ -13103,7 +13103,7 @@ int mpeg2_bdist1( unsigned char *pf, unsigned char *pb, unsigned char *p2, pbc += lx - 16; } - return( s ); + return ( s ); } @@ -13158,7 +13158,7 @@ int mpeg2_bdist2( unsigned char *pf, unsigned char *pb, unsigned char *p2, pbc += lx - 16; } - return( s ); + return ( s ); } @@ -13187,7 +13187,7 @@ int mpeg2_variance( unsigned char *p, int lx ) p += lx - 16; } - return( s2 - ( s * s ) / 256 ); + return ( s2 - ( s * s ) / 256 ); } @@ -13208,5 +13208,5 @@ int main( void ) mpeg2_init(); mpeg2_main(); - return( mpeg2_return() - (-116) != 0 ); + return ( mpeg2_return() - ( -116 ) != 0 ); } diff --git a/bench/sequential/ndes/ChangeLog.txt b/bench/sequential/ndes/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/ndes/ndes.c b/bench/sequential/ndes/ndes.c old mode 100644 new mode 100755 index b379e91f41e64a454a51922f07372465e5a7f4a1..ba82e53c3d65c39638b5a8107c037293b5fff0fd --- a/bench/sequential/ndes/ndes.c +++ b/bench/sequential/ndes/ndes.c @@ -30,13 +30,13 @@ typedef struct NDES_GREAT { unsigned long l, c, r; } ndes_great; -unsigned long ndes_bit[33]; +unsigned long ndes_bit[ 33 ]; ndes_immense ndes_inp, ndes_key, ndes_out; int ndes_newkey, ndes_isw; static ndes_immense ndes_icd; -static char ndes_ipc1[57]; -static char ndes_ipc2[49]; +static char ndes_ipc1[ 57 ]; +static char ndes_ipc2[ 49 ]; #ifdef NDES_WORSTCASE @@ -63,22 +63,24 @@ int main( void ); void ndes_init() { unsigned int i; - volatile char ndes_ipc1_tmp[57] = { + volatile char ndes_ipc1_tmp[ 57 ] = { 0, 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4 }; - volatile char ndes_ipc2_tmp[49] = { + volatile char ndes_ipc2_tmp[ 49 ] = { 0, 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32 }; + _Pragma( "loopbound min 57 max 57" ) for ( i = 0; i < 57; i++ ) - ndes_ipc1[i] = ndes_ipc1_tmp[i]; + ndes_ipc1[ i ] = ndes_ipc1_tmp[ i ]; + _Pragma( "loopbound min 49 max 49" ) for ( i = 0; i < 49; i++ ) - ndes_ipc2[i] = ndes_ipc2_tmp[i]; + ndes_ipc2[ i ] = ndes_ipc2_tmp[ i ]; ndes_inp.l = KNOWN_VALUE * 35; ndes_inp.r = KNOWN_VALUE * 26; @@ -94,7 +96,7 @@ void ndes_init() void ndes_des( ndes_immense inp, ndes_immense key, int *newkey, int isw, ndes_immense *out ) { - volatile char ip[65] = { + volatile char ip[ 65 ] = { 0, 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, @@ -102,14 +104,14 @@ void ndes_des( ndes_immense inp, ndes_immense key, int *newkey, int isw, 31, 23, 15, 7 }; - volatile char ipm[65] = { + volatile char ipm[ 65 ] = { 0, 40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25 }; - static ndes_great kns[17]; + static ndes_great kns[ 17 ]; #ifdef NDES_WORSTCASE static int initflag = 1; @@ -124,11 +126,11 @@ void ndes_des( ndes_immense inp, ndes_immense key, int *newkey, int isw, if ( initflag ) { initflag = 0; - ndes_bit[1] = shifter = 1L; + ndes_bit[ 1 ] = shifter = 1L; _Pragma( "loopbound min 31 max 31" ) for ( j = 2; j <= 32; j++ ) - ndes_bit[j] = ( shifter <<= 1 ); + ndes_bit[ j ] = ( shifter <<= 1 ); } if ( *newkey ) { @@ -137,16 +139,16 @@ void ndes_des( ndes_immense inp, ndes_immense key, int *newkey, int isw, _Pragma( "loopbound min 28 max 28" ) for ( j = 28, k = 56; j >= 1; j--, k-- ) { - ndes_icd.r = ( ndes_icd.r << 1 ) | ndes_getbit( key, ndes_ipc1[j], 32 ); + ndes_icd.r = ( ndes_icd.r << 1 ) | ndes_getbit( key, ndes_ipc1[ j ], 32 ); ndes_icd.l = ndes_icd.l << 1; - ndes_icd.l = ( ndes_icd.l ) | ndes_getbit( key, ndes_ipc1[k], 32 ); + ndes_icd.l = ( ndes_icd.l ) | ndes_getbit( key, ndes_ipc1[ k ], 32 ); } _Pragma( "loopbound min 16 max 16" ) for ( i = 1; i <= 16; i++ ) { - pg = kns[i]; + pg = kns[ i ]; ndes_ks( /* key,*/ i, &pg ); - kns[i] = pg; + kns[ i ] = pg; } } @@ -154,15 +156,15 @@ void ndes_des( ndes_immense inp, ndes_immense key, int *newkey, int isw, _Pragma( "loopbound min 32 max 32" ) for ( j = 32, k = 64; j >= 1; j--, k-- ) { - itmp.r = itmp.r << 1; - itmp.r = ( itmp.r ) | ndes_getbit( inp, ip[j], 32 ); - itmp.l = itmp.l << 1; - itmp.l = ( itmp.l ) | ndes_getbit( inp, ip[k], 32 ); + itmp.r = itmp.r << 1; + itmp.r = ( itmp.r ) | ndes_getbit( inp, ip[ j ], 32 ); + itmp.l = itmp.l << 1; + itmp.l = ( itmp.l ) | ndes_getbit( inp, ip[ k ], 32 ); } _Pragma( "loopbound min 16 max 16" ) for ( i = 1; i <= 16; i++ ) { ii = ( isw == 1 ? 17 - i : i ); - ndes_cyfun( itmp.l, kns[ii], &ic ); + ndes_cyfun( itmp.l, kns[ ii ], &ic ); ic ^= itmp.r; itmp.r = itmp.l; itmp.l = ic; @@ -175,94 +177,111 @@ void ndes_des( ndes_immense inp, ndes_immense key, int *newkey, int isw, _Pragma( "loopbound min 32 max 32" ) for ( j = 32, k = 64; j >= 1; j--, k-- ) { - ( *out ).r = ( *out ).r << 1; - ( *out ).r = ( ( *out ).r ) | ndes_getbit( itmp, ipm[j], 32 ); - ( *out ).l = ( *out ).l << 1; - ( *out ).l = ( ( *out ).l ) | ndes_getbit( itmp, ipm[k], 32 ); + ( *out ).r = ( *out ).r << 1; + ( *out ).r = ( ( *out ).r ) | ndes_getbit( itmp, ipm[ j ], 32 ); + ( *out ).l = ( *out ).l << 1; + ( *out ).l = ( ( *out ).l ) | ndes_getbit( itmp, ipm[ k ], 32 ); } } void ndes_cyfun( unsigned long ir, ndes_great k, unsigned long *iout ) { - volatile long iet[49] = {0, 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, - 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, - 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, - 28, 29, 30, 31, 32, 1 - }; - volatile long ipp[33] = {0, 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, - 23, 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, - 30, 6, 22, 11, 4, 25 - }; - volatile long is[16][4][9] = {{{ 0 , 14 , 15 , 10 , 7 , 2 , 12 , 4 , 13 }, - { 0 , 0 , 3 , 13 , 13 , 14 , 10 , 13 , 1 }, - { 0 , 4 , 0 , 13 , 10 , 4 , 9 , 1 , 7 }, - { 0 , 15 , 13 , 1 , 3 , 11 , 4 , 6 , 2 }}, - {{ 0 , 4 , 1 , 0 , 13 , 12 , 1 , 11 , 2 }, - { 0 , 15 , 13 , 7 , 8 , 11 , 15 , 0 , 15 }, - { 0 , 1 , 14 , 6 , 6 , 2 , 14 , 4 , 11 }, - { 0 , 12 , 8 , 10 , 15 , 8 , 3 , 11 , 1 }}, - {{ 0 , 13 , 8 , 9 , 14 , 4 , 10 , 2 , 8 }, - { 0 , 7 , 4 , 0 , 11 , 2 , 4 , 11 , 13 }, - { 0 , 14 , 7 , 4 , 9 , 1 , 15 , 11 , 4 }, - { 0 , 8 , 10 , 13 , 0 , 12 , 2 , 13 , 14 }}, - {{ 0 , 1 , 14 , 14 , 3 , 1 , 15 , 14 , 4 }, - { 0 , 4 , 7 , 9 , 5 , 12 , 2 , 7 , 8 }, - { 0 , 8 , 11 , 9 , 0 , 11 , 5 , 13 , 1 }, - { 0 , 2 , 1 , 0 , 6 , 7 , 12 , 8 , 7 }}, - {{ 0 , 2 , 6 , 6 , 0 , 7 , 9 , 15 , 6 }, - { 0 , 14 , 15 , 3 , 6 , 4 , 7 , 4 , 10 }, - { 0 , 13 , 10 , 8 , 12 , 10 , 2 , 12 , 9 }, - { 0 , 4 , 3 , 6 , 10 , 1 , 9 , 1 , 4 }}, - {{ 0 , 15 , 11 , 3 , 6 , 10 , 2 , 0 , 15 }, - { 0 , 2 , 2 , 4 , 15 , 7 , 12 , 9 , 3 }, - { 0 , 6 , 4 , 15 , 11 , 13 , 8 , 3 , 12 }, - { 0 , 9 , 15 , 9 , 1 , 14 , 5 , 4 , 10 }}, - {{ 0 , 11 , 3 , 15 , 9 , 11 , 6 , 8 , 11 }, - { 0 , 13 , 8 , 6 , 0 , 13 , 9 , 1 , 7 }, - { 0 , 2 , 13 , 3 , 7 , 7 , 12 , 7 , 14 }, - { 0 , 1 , 4 , 8 , 13 , 2 , 15 , 10 , 8 }}, - {{ 0 , 8 , 4 , 5 , 10 , 6 , 8 , 13 , 1 }, - { 0 , 1 , 14 , 10 , 3 , 1 , 5 , 10 , 4 }, - { 0 , 11 , 1 , 0 , 13 , 8 , 3 , 14 , 2 }, - { 0 , 7 , 2 , 7 , 8 , 13 , 10 , 7 , 13 }}, - {{ 0 , 3 , 9 , 1 , 1 , 8 , 0 , 3 , 10 }, - { 0 , 10 , 12 , 2 , 4 , 5 , 6 , 14 , 12 }, - { 0 , 15 , 5 , 11 , 15 , 15 , 7 , 10 , 0 }, - { 0 , 5 , 11 , 4 , 9 , 6 , 11 , 9 , 15 }}, - {{ 0 , 10 , 7 , 13 , 2 , 5 , 13 , 12 , 9 }, - { 0 , 6 , 0 , 8 , 7 , 0 , 1 , 3 , 5 }, - { 0 , 12 , 8 , 1 , 1 , 9 , 0 , 15 , 6 }, - { 0 , 11 , 6 , 15 , 4 , 15 , 14 , 5 , 12 }}, - {{ 0 , 6 , 2 , 12 , 8 , 3 , 3 , 9 , 3 }, - { 0 , 12 , 1 , 5 , 2 , 15 , 13 , 5 , 6 }, - { 0 , 9 , 12 , 2 , 3 , 12 , 4 , 6 , 10 }, - { 0 , 3 , 7 , 14 , 5 , 0 , 1 , 0 , 9 }}, - {{ 0 , 12 , 13 , 7 , 5 , 15 , 4 , 7 , 14 }, - { 0 , 11 , 10 , 14 , 12 , 10 , 14 , 12 , 11 }, - { 0 , 7 , 6 , 12 , 14 , 5 , 10 , 8 , 13 }, - { 0 , 14 , 12 , 3 , 11 , 9 , 7 , 15 , 0 }}, - {{ 0 , 5 , 12 , 11 , 11 , 13 , 14 , 5 , 5 }, - { 0 , 9 , 6 , 12 , 1 , 3 , 0 , 2 , 0 }, - { 0 , 3 , 9 , 5 , 5 , 6 , 1 , 0 , 15 }, - { 0 , 10 , 0 , 11 , 12 , 10 , 6 , 14 , 3 }}, - {{ 0 , 9 , 0 , 4 , 12 , 0 , 7 , 10 , 0 }, - { 0 , 5 , 9 , 11 , 10 , 9 , 11 , 15 , 14 }, - { 0 , 10 , 3 , 10 , 2 , 3 , 13 , 5 , 3 }, - { 0 , 0 , 5 , 5 , 7 , 4 , 0 , 2 , 5 }}, - {{ 0 , 0 , 5 , 2 , 4 , 14 , 5 , 6 , 12 }, - { 0 , 3 , 11 , 15 , 14 , 8 , 3 , 8 , 9 }, - { 0 , 5 , 2 , 14 , 8 , 0 , 11 , 9 , 5 }, - { 0 , 6 , 14 , 2 , 2 , 5 , 8 , 3 , 6 }}, - {{ 0 , 7 , 10 , 8 , 15 , 9 , 11 , 1 , 7 }, - { 0 , 8 , 5 , 1 , 9 , 6 , 8 , 6 , 2 }, - { 0 , 0 , 15 , 7 , 4 , 14 , 6 , 2 , 8 }, - { 0 , 13 , 9 , 12 , 14 , 3 , 13 , 12 , 11 }}}; - - volatile char ibin[16] = {0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15}; + volatile long iet[ 49 ] = {0, 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, + 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, + 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, + 28, 29, 30, 31, 32, 1 + }; + volatile long ipp[ 33 ] = {0, 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, + 23, 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, + 30, 6, 22, 11, 4, 25 + }; + volatile long is[ 16 ][ 4 ][ 9 ] = {{{ 0, 14, 15, 10, 7, 2, 12, 4, 13 }, + { 0, 0, 3, 13, 13, 14, 10, 13, 1 }, + { 0, 4, 0, 13, 10, 4, 9, 1, 7 }, + { 0, 15, 13, 1, 3, 11, 4, 6, 2 } + }, + { { 0, 4, 1, 0, 13, 12, 1, 11, 2 }, + { 0, 15, 13, 7, 8, 11, 15, 0, 15 }, + { 0, 1, 14, 6, 6, 2, 14, 4, 11 }, + { 0, 12, 8, 10, 15, 8, 3, 11, 1 } + }, + { { 0, 13, 8, 9, 14, 4, 10, 2, 8 }, + { 0, 7, 4, 0, 11, 2, 4, 11, 13 }, + { 0, 14, 7, 4, 9, 1, 15, 11, 4 }, + { 0, 8, 10, 13, 0, 12, 2, 13, 14 } + }, + { { 0, 1, 14, 14, 3, 1, 15, 14, 4 }, + { 0, 4, 7, 9, 5, 12, 2, 7, 8 }, + { 0, 8, 11, 9, 0, 11, 5, 13, 1 }, + { 0, 2, 1, 0, 6, 7, 12, 8, 7 } + }, + { { 0, 2, 6, 6, 0, 7, 9, 15, 6 }, + { 0, 14, 15, 3, 6, 4, 7, 4, 10 }, + { 0, 13, 10, 8, 12, 10, 2, 12, 9 }, + { 0, 4, 3, 6, 10, 1, 9, 1, 4 } + }, + { { 0, 15, 11, 3, 6, 10, 2, 0, 15 }, + { 0, 2, 2, 4, 15, 7, 12, 9, 3 }, + { 0, 6, 4, 15, 11, 13, 8, 3, 12 }, + { 0, 9, 15, 9, 1, 14, 5, 4, 10 } + }, + { { 0, 11, 3, 15, 9, 11, 6, 8, 11 }, + { 0, 13, 8, 6, 0, 13, 9, 1, 7 }, + { 0, 2, 13, 3, 7, 7, 12, 7, 14 }, + { 0, 1, 4, 8, 13, 2, 15, 10, 8 } + }, + { { 0, 8, 4, 5, 10, 6, 8, 13, 1 }, + { 0, 1, 14, 10, 3, 1, 5, 10, 4 }, + { 0, 11, 1, 0, 13, 8, 3, 14, 2 }, + { 0, 7, 2, 7, 8, 13, 10, 7, 13 } + }, + { { 0, 3, 9, 1, 1, 8, 0, 3, 10 }, + { 0, 10, 12, 2, 4, 5, 6, 14, 12 }, + { 0, 15, 5, 11, 15, 15, 7, 10, 0 }, + { 0, 5, 11, 4, 9, 6, 11, 9, 15 } + }, + { { 0, 10, 7, 13, 2, 5, 13, 12, 9 }, + { 0, 6, 0, 8, 7, 0, 1, 3, 5 }, + { 0, 12, 8, 1, 1, 9, 0, 15, 6 }, + { 0, 11, 6, 15, 4, 15, 14, 5, 12 } + }, + { { 0, 6, 2, 12, 8, 3, 3, 9, 3 }, + { 0, 12, 1, 5, 2, 15, 13, 5, 6 }, + { 0, 9, 12, 2, 3, 12, 4, 6, 10 }, + { 0, 3, 7, 14, 5, 0, 1, 0, 9 } + }, + { { 0, 12, 13, 7, 5, 15, 4, 7, 14 }, + { 0, 11, 10, 14, 12, 10, 14, 12, 11 }, + { 0, 7, 6, 12, 14, 5, 10, 8, 13 }, + { 0, 14, 12, 3, 11, 9, 7, 15, 0 } + }, + { { 0, 5, 12, 11, 11, 13, 14, 5, 5 }, + { 0, 9, 6, 12, 1, 3, 0, 2, 0 }, + { 0, 3, 9, 5, 5, 6, 1, 0, 15 }, + { 0, 10, 0, 11, 12, 10, 6, 14, 3 } + }, + { { 0, 9, 0, 4, 12, 0, 7, 10, 0 }, + { 0, 5, 9, 11, 10, 9, 11, 15, 14 }, + { 0, 10, 3, 10, 2, 3, 13, 5, 3 }, + { 0, 0, 5, 5, 7, 4, 0, 2, 5 } + }, + { { 0, 0, 5, 2, 4, 14, 5, 6, 12 }, + { 0, 3, 11, 15, 14, 8, 3, 8, 9 }, + { 0, 5, 2, 14, 8, 0, 11, 9, 5 }, + { 0, 6, 14, 2, 2, 5, 8, 3, 6 } + }, + { { 0, 7, 10, 8, 15, 9, 11, 1, 7 }, + { 0, 8, 5, 1, 9, 6, 8, 6, 2 }, + { 0, 0, 15, 7, 4, 14, 6, 2, 8 }, + { 0, 13, 9, 12, 14, 3, 13, 12, 11 } + } + }; + + volatile char ibin[ 16 ] = {0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15}; ndes_great ie; unsigned long itmp, ietmp1, ietmp2; - char iec[9]; + char iec[ 9 ]; int irow, icol, iss, l, m; int volatile j, jj; unsigned long *p; @@ -272,9 +291,9 @@ void ndes_cyfun( unsigned long ir, ndes_great k, unsigned long *iout ) _Pragma( "loopbound min 16 max 16" ) for ( j = 16, l = 32, m = 48; j >= 1; j--, l--, m-- ) { - ie.r = ( ie.r << 1 ) | ( p[iet[j]] & ir ? 1 : 0 ); - ie.c = ( ie.c << 1 ) | ( p[iet[l]] & ir ? 1 : 0 ); - ie.l = ( ie.l << 1 ) | ( p[iet[m]] & ir ? 1 : 0 ); + ie.r = ( ie.r << 1 ) | ( p[ iet[ j ] ] & ir ? 1 : 0 ); + ie.c = ( ie.c << 1 ) | ( p[ iet[ l ] ] & ir ? 1 : 0 ); + ie.l = ( ie.l << 1 ) | ( p[ iet[ m ] ] & ir ? 1 : 0 ); } ie.r ^= k.r; ie.c ^= k.c; @@ -284,8 +303,8 @@ void ndes_cyfun( unsigned long ir, ndes_great k, unsigned long *iout ) _Pragma( "loopbound min 4 max 4" ) for ( j = 1, m = 5; j <= 4; j++, m++ ) { - iec[j] = ietmp1 & 0x3fL; - iec[m] = ietmp2 & 0x3fL; + iec[ j ] = ietmp1 & 0x3fL; + iec[ m ] = ietmp2 & 0x3fL; ietmp1 >>= 6; ietmp2 >>= 6; } @@ -294,12 +313,12 @@ void ndes_cyfun( unsigned long ir, ndes_great k, unsigned long *iout ) _Pragma( "loopbound min 8 max 8" ) for ( jj = 8; jj >= 1; jj-- ) { - j = iec[jj]; + j = iec[ jj ]; irow = ( ( j & 0x1 ) << 1 ) + ( ( j & 0x20 ) >> 5 ); icol = ( ( j & 0x2 ) << 2 ) + ( j & 0x4 ) + ( ( j & 0x8 ) >> 2 ) + ( ( j & 0x10 ) >> 4 ); - iss = is[icol][irow][jj]; - itmp = ( itmp << 4 ) | ibin[iss]; + iss = is[ icol ][ irow ][ jj ]; + itmp = ( itmp << 4 ) | ibin[ iss ]; } *iout = 0L; @@ -307,16 +326,16 @@ void ndes_cyfun( unsigned long ir, ndes_great k, unsigned long *iout ) _Pragma( "loopbound min 32 max 32" ) for ( j = 32; j >= 1; j-- ) - *iout = ( *iout << 1 ); - *iout |= ( p[ipp[j]] & itmp ? 1 : 0 ); + *iout = ( *iout << 1 ); + *iout |= ( p[ ipp[ j ] ] & itmp ? 1 : 0 ); } unsigned long ndes_getbit( ndes_immense source, int bitno, int nbits ) { if ( bitno <= nbits ) - return ndes_bit[bitno] & source.r ? 1L : 0L; + return ndes_bit[ bitno ] & source.r ? 1L : 0L; else - return ndes_bit[bitno - nbits] & source.l ? 1L : 0L; + return ndes_bit[ bitno - nbits ] & source.l ? 1L : 0L; } void ndes_ks( /*ndes_immense key, */int n, ndes_great *kn ) @@ -338,21 +357,21 @@ void ndes_ks( /*ndes_immense key, */int n, ndes_great *kn ) _Pragma( "loopbound min 16 max 16" ) for ( j = 16, k = 32, l = 48; j >= 1; j--, k--, l-- ) { - ( *kn ).r = ( *kn ).r << 1; + ( *kn ).r = ( *kn ).r << 1; ( *kn ).r = ( ( *kn ).r ) | ( unsigned short ) - ndes_getbit( ndes_icd, ndes_ipc2[j], 28 ); - ( *kn ).c = ( *kn ).c << 1; + ndes_getbit( ndes_icd, ndes_ipc2[ j ], 28 ); + ( *kn ).c = ( *kn ).c << 1; ( *kn ).c = ( ( *kn ).c ) | ( unsigned short ) - ndes_getbit( ndes_icd, ndes_ipc2[k], 28 ); - ( *kn ).l = ( *kn ).l << 1; + ndes_getbit( ndes_icd, ndes_ipc2[ k ], 28 ); + ( *kn ).l = ( *kn ).l << 1; ( *kn ).l = ( ( *kn ).l ) | ( unsigned short ) - ndes_getbit( ndes_icd, ndes_ipc2[l], 28 ); + ndes_getbit( ndes_icd, ndes_ipc2[ l ], 28 ); } } int ndes_return() { - return (ndes_icd.r+ndes_icd.l + (-8390656) ) != 0 ; + return ( ndes_icd.r + ndes_icd.l + ( -8390656 ) ) != 0 ; } void _Pragma( "entrypoint" ) ndes_main() diff --git a/bench/sequential/petrinet/ChangeLog.txt b/bench/sequential/petrinet/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/petrinet/petrinet.c b/bench/sequential/petrinet/petrinet.c old mode 100644 new mode 100755 index 625bd331c1d76a59d4564e04b77d0342b62d71be..99b0cdabb1af6a78939d192575a5896fcdb1f99c --- a/bench/sequential/petrinet/petrinet.c +++ b/bench/sequential/petrinet/petrinet.c @@ -944,9 +944,9 @@ void petrinet_init( void ) in the petrinet_main() function before being written. */ /* - volatile long petrinet_P1_marking_member_0[ 3 ]; - volatile long petrinet_P2_marking_member_0[ 5 ]; - volatile long petrinet_P3_marking_member_0[ 6 ]; + volatile long petrinet_P1_marking_member_0[ 3 ]; + volatile long petrinet_P2_marking_member_0[ 5 ]; + volatile long petrinet_P3_marking_member_0[ 6 ]; */ } @@ -957,12 +957,15 @@ int petrinet_return( void ) int checksum = 0; int i; + _Pragma( "loopbound min 3 max 3" ) for ( i = 0; i < 3; ++i ) checksum += petrinet_P1_marking_member_0[i]; + _Pragma( "loopbound min 5 max 5" ) for ( i = 0; i < 5; ++i ) checksum += petrinet_P2_marking_member_0[i]; + _Pragma( "loopbound min 6 max 6" ) for ( i = 0; i < 6; ++i ) checksum += petrinet_P3_marking_member_0[i]; diff --git a/bench/sequential/rijndael_dec/ChangeLog.txt b/bench/sequential/rijndael_dec/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/rijndael_dec/aes.c b/bench/sequential/rijndael_dec/aes.c old mode 100644 new mode 100755 index f47adfd850d3f1d89a2012e080144dfa55be34cd..f644ee2a7ff97cf7523993cf91280e74ef790f6b --- a/bench/sequential/rijndael_dec/aes.c +++ b/bench/sequential/rijndael_dec/aes.c @@ -30,10 +30,10 @@ #include "aestab.h" -#define four_tables(x,tab,vf,rf,c) ( tab[0][bval(vf(x,0,c),rf(0,c))] ^ \ - tab[1][bval(vf(x,1,c),rf(1,c))] ^ \ - tab[2][bval(vf(x,2,c),rf(2,c))] ^ \ - tab[3][bval(vf(x,3,c),rf(3,c))] ) +#define four_tables(x,tab,vf,rf,c) ( tab[ 0 ][ bval(vf(x,0,c),rf(0,c)) ] ^ \ + tab[ 1 ][ bval(vf(x,1,c),rf(1,c)) ] ^ \ + tab[ 2 ][ bval(vf(x,2,c),rf(2,c)) ] ^ \ + tab[ 3 ][ bval(vf(x,3,c),rf(3,c)) ] ) #define vf1(x,r,c) (x) #define rf1(r,c) (r) @@ -60,10 +60,10 @@ #define mx(t,f) (*t++ = inv_mcol(*f),f++) #define cp(t,f) *t++ = *f++ -#define cpy(d,s) do { cp(d,s); cp(d,s); cp(d,s); cp(d,s); } while (0) -#define mix(d,s) do { mx(d,s); mx(d,s); mx(d,s); mx(d,s); } while (0) +#define cpy(d,s) do { cp(d,s); cp(d,s); cp(d,s); cp(d,s); } while (0) //min 1 max 1 +#define mix(d,s) do { mx(d,s); mx(d,s); mx(d,s); mx(d,s); } while (0) //min 1 max 1 -aes_ret rijndael_dec_set_key( byte in_key[], const word n_bytes, +aes_ret rijndael_dec_set_key( byte in_key[ ], const word n_bytes, const enum aes_key f, struct aes *cx ) { word *kf, *kt, rci; @@ -76,10 +76,10 @@ aes_ret rijndael_dec_set_key( byte in_key[], const word n_bytes, cx->Nkey = n_bytes >> 2; cx->Nrnd = Nr( cx->Nkey, ( word )nc ); - cx->e_key[0] = word_in( in_key ); - cx->e_key[1] = word_in( in_key + 4 ); - cx->e_key[2] = word_in( in_key + 8 ); - cx->e_key[3] = word_in( in_key + 12 ); + cx->e_key[ 0 ] = word_in( in_key ); + cx->e_key[ 1 ] = word_in( in_key + 4 ); + cx->e_key[ 2 ] = word_in( in_key + 8 ); + cx->e_key[ 3 ] = word_in( in_key + 12 ); kf = cx->e_key; kt = kf + nc * ( cx->Nrnd + 1 ) - cx->Nkey; @@ -89,44 +89,44 @@ aes_ret rijndael_dec_set_key( byte in_key[], const word n_bytes, case 4: _Pragma( "loopbound min 0 max 0" ) do { - kf[4] = kf[0] ^ ls_box( kf[3], 3 ) ^ rijndael_dec_rcon_tab[rci++]; - kf[5] = kf[1] ^ kf[4]; - kf[6] = kf[2] ^ kf[5]; - kf[7] = kf[3] ^ kf[6]; + kf[ 4 ] = kf[ 0 ] ^ ls_box( kf[ 3 ], 3 ) ^ rijndael_dec_rcon_tab[ rci++ ]; + kf[ 5 ] = kf[ 1 ] ^ kf[ 4 ]; + kf[ 6 ] = kf[ 2 ] ^ kf[ 5 ]; + kf[ 7 ] = kf[ 3 ] ^ kf[ 6 ]; kf += 4; } while ( kf < kt ); break; case 6: - cx->e_key[4] = word_in( in_key + 16 ); - cx->e_key[5] = word_in( in_key + 20 ); + cx->e_key[ 4 ] = word_in( in_key + 16 ); + cx->e_key[ 5 ] = word_in( in_key + 20 ); _Pragma( "loopbound min 0 max 0" ) do { - kf[ 6] = kf[0] ^ ls_box( kf[5], 3 ) ^ rijndael_dec_rcon_tab[rci++]; - kf[ 7] = kf[1] ^ kf[ 6]; - kf[ 8] = kf[2] ^ kf[ 7]; - kf[ 9] = kf[3] ^ kf[ 8]; - kf[10] = kf[4] ^ kf[ 9]; - kf[11] = kf[5] ^ kf[10]; + kf[ 6 ] = kf[ 0 ] ^ ls_box( kf[ 5 ], 3 ) ^ rijndael_dec_rcon_tab[ rci++ ]; + kf[ 7 ] = kf[ 1 ] ^ kf[ 6 ]; + kf[ 8 ] = kf[ 2 ] ^ kf[ 7 ]; + kf[ 9 ] = kf[ 3 ] ^ kf[ 8 ]; + kf[ 10 ] = kf[ 4 ] ^ kf[ 9 ]; + kf[ 11 ] = kf[ 5 ] ^ kf[ 10 ]; kf += 6; } while ( kf < kt ); break; case 8: - cx->e_key[4] = word_in( in_key + 16 ); - cx->e_key[5] = word_in( in_key + 20 ); - cx->e_key[6] = word_in( in_key + 24 ); - cx->e_key[7] = word_in( in_key + 28 ); + cx->e_key[ 4 ] = word_in( in_key + 16 ); + cx->e_key[ 5 ] = word_in( in_key + 20 ); + cx->e_key[ 6 ] = word_in( in_key + 24 ); + cx->e_key[ 7 ] = word_in( in_key + 28 ); _Pragma( "loopbound min 7 max 7" ) do { - kf[ 8] = kf[0] ^ ls_box( kf[7], 3 ) ^ rijndael_dec_rcon_tab[rci++]; - kf[ 9] = kf[1] ^ kf[ 8]; - kf[10] = kf[2] ^ kf[ 9]; - kf[11] = kf[3] ^ kf[10]; - kf[12] = kf[4] ^ ls_box( kf[11], 0 ); - kf[13] = kf[5] ^ kf[12]; - kf[14] = kf[6] ^ kf[13]; - kf[15] = kf[7] ^ kf[14]; + kf[ 8 ] = kf[ 0 ] ^ ls_box( kf[ 7 ], 3 ) ^ rijndael_dec_rcon_tab[ rci++ ]; + kf[ 9 ] = kf[ 1 ] ^ kf[ 8 ]; + kf[ 10 ] = kf[ 2 ] ^ kf[ 9 ]; + kf[ 11 ] = kf[ 3 ] ^ kf[ 10 ]; + kf[ 12 ] = kf[ 4 ] ^ ls_box( kf[ 11 ], 0 ); + kf[ 13 ] = kf[ 5 ] ^ kf[ 12 ]; + kf[ 14 ] = kf[ 6 ] ^ kf[ 13 ]; + kf[ 15 ] = kf[ 7 ] ^ kf[ 14 ]; kf += 8; } while ( kf < kt ); break; @@ -141,7 +141,7 @@ aes_ret rijndael_dec_set_key( byte in_key[], const word n_bytes, cpy( kt, kf ); kt -= 2 * nc; - _Pragma( "loopbound min 0 max 0" ) + _Pragma( "loopbound min 13 max 13" ) for ( i = 1; i < cx->Nrnd; ++i ) { mix( kt, kf ); kt -= 2 * nc; @@ -153,254 +153,254 @@ aes_ret rijndael_dec_set_key( byte in_key[], const word n_bytes, return aes_good; } -short rijndael_dec_decrypt( const unsigned char in_blk[], - unsigned char out_blk[], const struct aes *cx ) +short rijndael_dec_decrypt( const unsigned char in_blk[ ], + unsigned char out_blk[ ], const struct aes *cx ) { const unsigned long *kp = cx->d_key; if ( !( cx->mode & 2 ) ) return 0; - unsigned long b0[4]; - b0[0] = *( unsigned long * )in_blk ^ kp[0]; - b0[1] = *( unsigned long * )( in_blk + 4 )^kp[1]; - b0[2] = *( unsigned long * )( in_blk + 8 )^kp[2]; - b0[3] = *( unsigned long * )( in_blk + 12 )^kp[3]; + unsigned long b0[ 4 ]; + b0[ 0 ] = *( unsigned long * )in_blk ^ kp[ 0 ]; + b0[ 1 ] = *( unsigned long * )( in_blk + 4 )^kp[ 1 ]; + b0[ 2 ] = *( unsigned long * )( in_blk + 8 )^kp[ 2 ]; + b0[ 3 ] = *( unsigned long * )( in_blk + 12 )^kp[ 3 ]; kp += 4; - unsigned long b1[4]; + unsigned long b1[ 4 ]; switch ( cx->Nrnd ) { case 14: - b1[0] = kp[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] ); - b1[1] = kp[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] ); - b1[2] = kp[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] ); - b1[3] = kp[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] ); - b0[0] = ( kp + 4 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] ); - b0[1] = ( kp + 4 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] ); - b0[2] = ( kp + 4 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] ); - b0[3] = ( kp + 4 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] ); + b1[ 0 ] = kp[ 0 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 0 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 3 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 2 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 1 ] >> 24 ) ) ] ); + b1[ 1 ] = kp[ 1 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 1 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 0 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 3 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 2 ] >> 24 ) ) ] ); + b1[ 2 ] = kp[ 2 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 2 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 1 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 0 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 3 ] >> 24 ) ) ] ); + b1[ 3 ] = kp[ 3 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 3 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 2 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 1 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 0 ] >> 24 ) ) ] ); + b0[ 0 ] = ( kp + 4 )[ 0 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 0 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 3 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 2 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 1 ] >> 24 ) ) ] ); + b0[ 1 ] = ( kp + 4 )[ 1 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 1 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 0 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 3 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 2 ] >> 24 ) ) ] ); + b0[ 2 ] = ( kp + 4 )[ 2 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 2 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 1 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 0 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 3 ] >> 24 ) ) ] ); + b0[ 3 ] = ( kp + 4 )[ 3 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 3 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 2 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 1 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 0 ] >> 24 ) ) ] ); kp += 8; case 12: - b1[0] = kp[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] ); - b1[1] = kp[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] ); - b1[2] = kp[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] ); - b1[3] = kp[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] ); - b0[0] = ( kp + 4 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] ); - b0[1] = ( kp + 4 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] ); - b0[2] = ( kp + 4 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] ); - b0[3] = ( kp + 4 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] ); + b1[ 0 ] = kp[ 0 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 0 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 3 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 2 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 1 ] >> 24 ) ) ] ); + b1[ 1 ] = kp[ 1 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 1 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 0 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 3 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 2 ] >> 24 ) ) ] ); + b1[ 2 ] = kp[ 2 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 2 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 1 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 0 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 3 ] >> 24 ) ) ] ); + b1[ 3 ] = kp[ 3 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 3 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 2 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 1 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 0 ] >> 24 ) ) ] ); + b0[ 0 ] = ( kp + 4 )[ 0 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 0 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 3 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 2 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 1 ] >> 24 ) ) ] ); + b0[ 1 ] = ( kp + 4 )[ 1 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 1 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 0 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 3 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 2 ] >> 24 ) ) ] ); + b0[ 2 ] = ( kp + 4 )[ 2 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 2 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 1 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 0 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 3 ] >> 24 ) ) ] ); + b0[ 3 ] = ( kp + 4 )[ 3 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 3 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 2 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 1 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 0 ] >> 24 ) ) ] ); kp += 8; case 10: - b1[0] = kp[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] ); - b1[1] = kp[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] ); - b1[2] = kp[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] ); - b1[3] = kp[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] ); - b0[0] = ( kp + 4 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] ); - b0[1] = ( kp + 4 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] ); - b0[2] = ( kp + 4 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] ); - b0[3] = ( kp + 4 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] ); - b1[0] = ( kp + 8 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] ); - b1[1] = ( kp + 8 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] ); - b1[2] = ( kp + 8 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] ); - b1[3] = ( kp + 8 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] ); - b0[0] = ( kp + 12 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] ); - b0[1] = ( kp + 12 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] ); - b0[2] = ( kp + 12 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] ); - b0[3] = ( kp + 12 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] ); - b1[0] = ( kp + 16 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] ); - b1[1] = ( kp + 16 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] ); - b1[2] = ( kp + 16 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] ); - b1[3] = ( kp + 16 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] ); - b0[0] = ( kp + 20 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] ); - b0[1] = ( kp + 20 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] ); - b0[2] = ( kp + 20 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] ); - b0[3] = ( kp + 20 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] ); - b1[0] = ( kp + 24 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] ); - b1[1] = ( kp + 24 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] ); - b1[2] = ( kp + 24 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] ); - b1[3] = ( kp + 24 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] ); - b0[0] = ( kp + 28 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[0] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] ); - b0[1] = ( kp + 28 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[1] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] ); - b0[2] = ( kp + 28 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[2] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] ); - b0[3] = ( kp + 28 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b1[3] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] ); - b1[0] = ( kp + 32 )[0] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[0] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] ); - b1[1] = ( kp + 32 )[1] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[1] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] ); - b1[2] = ( kp + 32 )[2] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[2] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] ); - b1[3] = ( kp + 32 )[3] ^ ( rijndael_dec_it_tab[0][( ( unsigned char )b0[3] )] ^ - rijndael_dec_it_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^ - rijndael_dec_it_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^ - rijndael_dec_it_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] ); - b0[0] = ( kp + 36 )[0] ^ ( rijndael_dec_il_tab[0][( ( unsigned char )b1[0] )] ^ - rijndael_dec_il_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^ - rijndael_dec_il_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^ - rijndael_dec_il_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] ); - b0[1] = ( kp + 36 )[1] ^ ( rijndael_dec_il_tab[0][( ( unsigned char )b1[1] )] ^ - rijndael_dec_il_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^ - rijndael_dec_il_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^ - rijndael_dec_il_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] ); - b0[2] = ( kp + 36 )[2] ^ ( rijndael_dec_il_tab[0][( ( unsigned char )b1[2] )] ^ - rijndael_dec_il_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^ - rijndael_dec_il_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^ - rijndael_dec_il_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] ); - b0[3] = ( kp + 36 )[3] ^ ( rijndael_dec_il_tab[0][( ( unsigned char )b1[3] )] ^ - rijndael_dec_il_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^ - rijndael_dec_il_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^ - rijndael_dec_il_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] ); + b1[ 0 ] = kp[ 0 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 0 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 3 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 2 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 1 ] >> 24 ) ) ] ); + b1[ 1 ] = kp[ 1 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 1 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 0 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 3 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 2 ] >> 24 ) ) ] ); + b1[ 2 ] = kp[ 2 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 2 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 1 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 0 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 3 ] >> 24 ) ) ] ); + b1[ 3 ] = kp[ 3 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 3 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 2 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 1 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 0 ] >> 24 ) ) ] ); + b0[ 0 ] = ( kp + 4 )[ 0 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 0 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 3 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 2 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 1 ] >> 24 ) ) ] ); + b0[ 1 ] = ( kp + 4 )[ 1 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 1 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 0 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 3 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 2 ] >> 24 ) ) ] ); + b0[ 2 ] = ( kp + 4 )[ 2 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 2 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 1 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 0 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 3 ] >> 24 ) ) ] ); + b0[ 3 ] = ( kp + 4 )[ 3 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 3 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 2 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 1 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 0 ] >> 24 ) ) ] ); + b1[ 0 ] = ( kp + 8 )[ 0 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 0 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 3 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 2 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 1 ] >> 24 ) ) ] ); + b1[ 1 ] = ( kp + 8 )[ 1 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 1 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 0 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 3 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 2 ] >> 24 ) ) ] ); + b1[ 2 ] = ( kp + 8 )[ 2 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 2 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 1 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 0 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 3 ] >> 24 ) ) ] ); + b1[ 3 ] = ( kp + 8 )[ 3 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 3 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 2 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 1 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 0 ] >> 24 ) ) ] ); + b0[ 0 ] = ( kp + 12 )[ 0 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 0 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 3 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 2 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 1 ] >> 24 ) ) ] ); + b0[ 1 ] = ( kp + 12 )[ 1 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 1 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 0 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 3 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 2 ] >> 24 ) ) ] ); + b0[ 2 ] = ( kp + 12 )[ 2 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 2 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 1 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 0 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 3 ] >> 24 ) ) ] ); + b0[ 3 ] = ( kp + 12 )[ 3 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 3 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 2 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 1 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 0 ] >> 24 ) ) ] ); + b1[ 0 ] = ( kp + 16 )[ 0 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 0 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 3 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 2 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 1 ] >> 24 ) ) ] ); + b1[ 1 ] = ( kp + 16 )[ 1 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 1 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 0 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 3 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 2 ] >> 24 ) ) ] ); + b1[ 2 ] = ( kp + 16 )[ 2 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 2 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 1 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 0 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 3 ] >> 24 ) ) ] ); + b1[ 3 ] = ( kp + 16 )[ 3 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 3 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 2 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 1 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 0 ] >> 24 ) ) ] ); + b0[ 0 ] = ( kp + 20 )[ 0 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 0 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 3 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 2 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 1 ] >> 24 ) ) ] ); + b0[ 1 ] = ( kp + 20 )[ 1 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 1 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 0 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 3 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 2 ] >> 24 ) ) ] ); + b0[ 2 ] = ( kp + 20 )[ 2 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 2 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 1 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 0 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 3 ] >> 24 ) ) ] ); + b0[ 3 ] = ( kp + 20 )[ 3 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 3 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 2 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 1 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 0 ] >> 24 ) ) ] ); + b1[ 0 ] = ( kp + 24 )[ 0 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 0 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 3 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 2 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 1 ] >> 24 ) ) ] ); + b1[ 1 ] = ( kp + 24 )[ 1 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 1 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 0 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 3 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 2 ] >> 24 ) ) ] ); + b1[ 2 ] = ( kp + 24 )[ 2 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 2 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 1 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 0 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 3 ] >> 24 ) ) ] ); + b1[ 3 ] = ( kp + 24 )[ 3 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 3 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 2 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 1 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 0 ] >> 24 ) ) ] ); + b0[ 0 ] = ( kp + 28 )[ 0 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 0 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 3 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 2 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 1 ] >> 24 ) ) ] ); + b0[ 1 ] = ( kp + 28 )[ 1 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 1 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 0 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 3 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 2 ] >> 24 ) ) ] ); + b0[ 2 ] = ( kp + 28 )[ 2 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 2 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 1 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 0 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 3 ] >> 24 ) ) ] ); + b0[ 3 ] = ( kp + 28 )[ 3 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b1[ 3 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b1[ 2 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b1[ 1 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b1[ 0 ] >> 24 ) ) ] ); + b1[ 0 ] = ( kp + 32 )[ 0 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 0 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 3 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 2 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 1 ] >> 24 ) ) ] ); + b1[ 1 ] = ( kp + 32 )[ 1 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 1 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 0 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 3 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 2 ] >> 24 ) ) ] ); + b1[ 2 ] = ( kp + 32 )[ 2 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 2 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 1 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 0 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 3 ] >> 24 ) ) ] ); + b1[ 3 ] = ( kp + 32 )[ 3 ] ^ ( rijndael_dec_it_tab[ 0 ][ ( ( unsigned char )b0[ 3 ] ) ] ^ + rijndael_dec_it_tab[ 1 ][ ( ( unsigned char )( b0[ 2 ] >> 8 ) ) ] ^ + rijndael_dec_it_tab[ 2 ][ ( ( unsigned char )( b0[ 1 ] >> 16 ) ) ] ^ + rijndael_dec_it_tab[ 3 ][ ( ( unsigned char )( b0[ 0 ] >> 24 ) ) ] ); + b0[ 0 ] = ( kp + 36 )[ 0 ] ^ ( rijndael_dec_il_tab[ 0 ][ ( ( unsigned char )b1[ 0 ] ) ] ^ + rijndael_dec_il_tab[ 1 ][ ( ( unsigned char )( b1[ 3 ] >> 8 ) ) ] ^ + rijndael_dec_il_tab[ 2 ][ ( ( unsigned char )( b1[ 2 ] >> 16 ) ) ] ^ + rijndael_dec_il_tab[ 3 ][ ( ( unsigned char )( b1[ 1 ] >> 24 ) ) ] ); + b0[ 1 ] = ( kp + 36 )[ 1 ] ^ ( rijndael_dec_il_tab[ 0 ][ ( ( unsigned char )b1[ 1 ] ) ] ^ + rijndael_dec_il_tab[ 1 ][ ( ( unsigned char )( b1[ 0 ] >> 8 ) ) ] ^ + rijndael_dec_il_tab[ 2 ][ ( ( unsigned char )( b1[ 3 ] >> 16 ) ) ] ^ + rijndael_dec_il_tab[ 3 ][ ( ( unsigned char )( b1[ 2 ] >> 24 ) ) ] ); + b0[ 2 ] = ( kp + 36 )[ 2 ] ^ ( rijndael_dec_il_tab[ 0 ][ ( ( unsigned char )b1[ 2 ] ) ] ^ + rijndael_dec_il_tab[ 1 ][ ( ( unsigned char )( b1[ 1 ] >> 8 ) ) ] ^ + rijndael_dec_il_tab[ 2 ][ ( ( unsigned char )( b1[ 0 ] >> 16 ) ) ] ^ + rijndael_dec_il_tab[ 3 ][ ( ( unsigned char )( b1[ 3 ] >> 24 ) ) ] ); + b0[ 3 ] = ( kp + 36 )[ 3 ] ^ ( rijndael_dec_il_tab[ 0 ][ ( ( unsigned char )b1[ 3 ] ) ] ^ + rijndael_dec_il_tab[ 1 ][ ( ( unsigned char )( b1[ 2 ] >> 8 ) ) ] ^ + rijndael_dec_il_tab[ 2 ][ ( ( unsigned char )( b1[ 1 ] >> 16 ) ) ] ^ + rijndael_dec_il_tab[ 3 ][ ( ( unsigned char )( b1[ 0 ] >> 24 ) ) ] ); } - *( unsigned long * )out_blk = ( b0[0] ); - *( unsigned long * )( out_blk + 4 ) = ( b0[1] ); - *( unsigned long * )( out_blk + 8 ) = ( b0[2] ); - *( unsigned long * )( out_blk + 12 ) = ( b0[3] ); + *( unsigned long * )out_blk = ( b0[ 0 ] ); + *( unsigned long * )( out_blk + 4 ) = ( b0[ 1 ] ); + *( unsigned long * )( out_blk + 8 ) = ( b0[ 2 ] ); + *( unsigned long * )( out_blk + 12 ) = ( b0[ 3 ] ); return aes_good; } diff --git a/bench/sequential/rijndael_dec/aes.h b/bench/sequential/rijndael_dec/aes.h old mode 100644 new mode 100755 index 69bf3d387cb7e0417b92f4cff45eeb6e5b665662..9477191a6af4b213e4c8b94d2522e2f9430f6a29 --- a/bench/sequential/rijndael_dec/aes.h +++ b/bench/sequential/rijndael_dec/aes.h @@ -41,10 +41,10 @@ C subroutine calls: aes_ret set_blk(const word block_length, aes *cx) (variable block size) - aes_ret set_key(const byte key[], const word key_length, + aes_ret set_key(const byte key[ ], const word key_length, const enum aes_key direction, aes *cx) - aes_ret encrypt(const byte input_blk[], byte output_blk[], const aes *cx) - aes_ret decrypt(const byte input_blk[], byte output_blk[], const aes *cx) + aes_ret encrypt(const byte input_blk[ ], byte output_blk[ ], const aes *cx) + aes_ret decrypt(const byte input_blk[ ], byte output_blk[ ], const aes *cx) IMPORTANT NOTE: If you are using this C interface and your compiler does not set the memory used for objects to zero before use, you will need to @@ -152,14 +152,14 @@ enum aes_key { enc = 1, /* set if encryption is needed */ struct aes { word Nkey; /* the number of words in the key input block */ word Nrnd; /* the number of cipher rounds */ - word e_key[KS_LENGTH]; /* the encryption key schedule */ - word d_key[KS_LENGTH]; /* the decryption key schedule */ + word e_key[ KS_LENGTH ]; /* the encryption key schedule */ + word d_key[ KS_LENGTH ]; /* the decryption key schedule */ byte mode; /* encrypt, decrypt or both */ }; -aes_ret rijndael_dec_set_key( byte key[], const word n_bytes, +aes_ret rijndael_dec_set_key( byte key[ ], const word n_bytes, const enum aes_key f, struct aes *cx ); -aes_ret rijndael_dec_decrypt( const byte in_blk[], byte out_blk[], +aes_ret rijndael_dec_decrypt( const byte in_blk[ ], byte out_blk[ ], const struct aes *cx ); #endif diff --git a/bench/sequential/rijndael_dec/aestab.h b/bench/sequential/rijndael_dec/aestab.h old mode 100644 new mode 100755 index c42702b17d691bb72e5e3a85bd51081d915263dc..bc3cca128e153b4b44f4b4185b20ba591ce6fce7 --- a/bench/sequential/rijndael_dec/aestab.h +++ b/bench/sequential/rijndael_dec/aestab.h @@ -43,7 +43,7 @@ code is adjusted accordingly */ -const word rijndael_dec_rcon_tab[29] = { +const word rijndael_dec_rcon_tab[ 29 ] = { w0( 01 ), w0( 02 ), w0( 04 ), w0( 08 ), w0( 10 ), w0( 20 ), w0( 40 ), w0( 80 ), w0( 1b ), w0( 36 ), w0( 6c ), w0( d8 ), @@ -215,7 +215,7 @@ const word rijndael_dec_rcon_tab[29] = { #undef r #define r r0 -const word rijndael_dec_it_tab[4][256] = { +const word rijndael_dec_it_tab[ 4 ][ 256 ] = { { i_table }, #undef r #define r r1 @@ -268,7 +268,7 @@ const word rijndael_dec_it_tab[4][256] = { #undef r #define r(p,q,r,s) w0(q) -const word rijndael_dec_fl_tab[4][256] = { +const word rijndael_dec_fl_tab[ 4 ][ 256 ] = { { f_table }, #undef r #define r(p,q,r,s) w1(q) @@ -283,7 +283,7 @@ const word rijndael_dec_fl_tab[4][256] = { #undef w #define w w0 -const word rijndael_dec_il_tab[4][256] = { +const word rijndael_dec_il_tab[ 4 ][ 256 ] = { { li_table }, #undef w #define w w1 @@ -365,7 +365,7 @@ const word rijndael_dec_il_tab[4][256] = { #undef r #define r r0 -const word rijndael_dec_im_tab[4][256] = { +const word rijndael_dec_im_tab[ 4 ][ 256 ] = { { m_table }, #undef r #define r r1 diff --git a/bench/sequential/rijndael_dec/input_small_enc.c b/bench/sequential/rijndael_dec/input_small_enc.c old mode 100644 new mode 100755 index 2a881a9560ab4bb254fab0b00305810fb773d019..431ff7cec52ce0f41e8edb8d958bed8e8593fa01 --- a/bench/sequential/rijndael_dec/input_small_enc.c +++ b/bench/sequential/rijndael_dec/input_small_enc.c @@ -1,2051 +1,2051 @@ -unsigned char rijndael_dec_data[] = { +unsigned char rijndael_dec_data[ ] = { 96, 83, 127, 28, 212, 92, 146, 102, 38, 17, 193, 142, 95, 217, 184, 105, 79, 112, 144, 112, 44, 202, 141, 48, 181, 177, 82, 92, 208, 250, 216, 152, 41, 208, 7, 232, 238, 116, 134, 238, 230, 190, 239, 195, 235, 80, 125, 51, - 251, 39, 7, 100, 213, 190, 189, 81, 241, 49, 215, 254, 253, 203, 13, 164, - 175, 244, 25, 111, 226, 225, 176, 96, 58, 165, 32, 243, 68, 205, 209, 242, - 186, 229, 167, 155, 238, 105, 120, 173, 246, 72, 29, 96, 71, 169, 83, 154, - 226, 129, 236, 52, 243, 159, 61, 71, 20, 119, 245, 196, 25, 203, 11, 10, + 251, 39, 7, 100, 213, 190, 189, 81, 241, 49, 215, 254, 253, 203, 13, 164, + 175, 244, 25, 111, 226, 225, 176, 96, 58, 165, 32, 243, 68, 205, 209, 242, + 186, 229, 167, 155, 238, 105, 120, 173, 246, 72, 29, 96, 71, 169, 83, 154, + 226, 129, 236, 52, 243, 159, 61, 71, 20, 119, 245, 196, 25, 203, 11, 10, 37, 163, 139, 180, 250, 191, 138, 99, 78, 192, 73, 186, 22, 12, 119, 151, - 185, 155, 195, 54, 73, 207, 108, 170, 112, 237, 100, 165, 219, 223, 23, 179, - 124, 172, 52, 22, 143, 57, 132, 60, 176, 218, 11, 86, 89, 59, 254, 84, - 180, 76, 120, 174, 17, 214, 88, 48, 240, 12, 56, 93, 136, 156, 75, 176, + 185, 155, 195, 54, 73, 207, 108, 170, 112, 237, 100, 165, 219, 223, 23, 179, + 124, 172, 52, 22, 143, 57, 132, 60, 176, 218, 11, 86, 89, 59, 254, 84, + 180, 76, 120, 174, 17, 214, 88, 48, 240, 12, 56, 93, 136, 156, 75, 176, 30, 43, 4, 107, 30, 210, 26, 183, 235, 39, 35, 205, 139, 80, 249, 182, 15, 91, 210, 234, 47, 67, 64, 234, 148, 108, 240, 242, 32, 11, 48, 199, - 117, 31, 149, 30, 97, 149, 241, 50, 177, 166, 127, 31, 135, 115, 240, 77, - 198, 88, 108, 246, 108, 148, 158, 89, 173, 233, 252, 95, 51, 42, 218, 54, + 117, 31, 149, 30, 97, 149, 241, 50, 177, 166, 127, 31, 135, 115, 240, 77, + 198, 88, 108, 246, 108, 148, 158, 89, 173, 233, 252, 95, 51, 42, 218, 54, 28, 143, 203, 164, 74, 147, 55, 108, 225, 222, 87, 161, 243, 35, 179, 130, 29, 70, 225, 178, 148, 152, 247, 167, 21, 245, 84, 139, 3, 228, 221, 25, 53, 36, 121, 29, 204, 35, 1, 46, 26, 8, 237, 102, 231, 252, 176, 88, 24, 110, 255, 163, 86, 64, 117, 68, 178, 73, 219, 201, 24, 155, 76, 255, - 253, 199, 165, 95, 246, 179, 15, 47, 203, 81, 92, 231, 246, 247, 111, 58, + 253, 199, 165, 95, 246, 179, 15, 47, 203, 81, 92, 231, 246, 247, 111, 58, 82, 222, 193, 24, 37, 164, 161, 8, 169, 172, 223, 111, 186, 72, 160, 116, - 242, 8, 192, 178, 224, 177, 228, 42, 102, 206, 237, 52, 143, 16, 150, 143, - 108, 3, 88, 81, 199, 49, 110, 220, 5, 89, 244, 227, 27, 226, 101, 9, - 238, 0, 206, 228, 254, 19, 189, 240, 159, 29, 46, 2, 206, 184, 205, 228, - 144, 241, 88, 78, 156, 23, 44, 200, 99, 146, 179, 96, 1, 143, 87, 57, + 242, 8, 192, 178, 224, 177, 228, 42, 102, 206, 237, 52, 143, 16, 150, 143, + 108, 3, 88, 81, 199, 49, 110, 220, 5, 89, 244, 227, 27, 226, 101, 9, + 238, 0, 206, 228, 254, 19, 189, 240, 159, 29, 46, 2, 206, 184, 205, 228, + 144, 241, 88, 78, 156, 23, 44, 200, 99, 146, 179, 96, 1, 143, 87, 57, 39, 75, 174, 32, 190, 125, 152, 183, 46, 39, 136, 88, 240, 110, 104, 70, - 253, 29, 110, 113, 235, 123, 56, 60, 243, 238, 246, 113, 11, 18, 246, 108, + 253, 29, 110, 113, 235, 123, 56, 60, 243, 238, 246, 113, 11, 18, 246, 108, 95, 238, 177, 43, 3, 112, 121, 161, 196, 204, 211, 171, 197, 41, 249, 71, - 194, 153, 82, 28, 10, 28, 12, 241, 212, 90, 124, 236, 171, 54, 35, 226, - 152, 246, 241, 74, 139, 133, 241, 76, 183, 197, 232, 250, 54, 202, 11, 10, - 203, 30, 169, 138, 110, 252, 62, 172, 6, 241, 81, 181, 87, 177, 128, 221, - 111, 133, 94, 251, 184, 54, 92, 242, 28, 112, 138, 116, 32, 164, 158, 59, + 194, 153, 82, 28, 10, 28, 12, 241, 212, 90, 124, 236, 171, 54, 35, 226, + 152, 246, 241, 74, 139, 133, 241, 76, 183, 197, 232, 250, 54, 202, 11, 10, + 203, 30, 169, 138, 110, 252, 62, 172, 6, 241, 81, 181, 87, 177, 128, 221, + 111, 133, 94, 251, 184, 54, 92, 242, 28, 112, 138, 116, 32, 164, 158, 59, 51, 30, 155, 126, 196, 117, 233, 117, 92, 74, 4, 72, 19, 237, 248, 142, - 184, 175, 126, 203, 4, 210, 70, 40, 105, 16, 36, 42, 118, 110, 4, 180, - 208, 52, 232, 230, 107, 154, 233, 61, 176, 170, 32, 59, 60, 47, 43, 70, + 184, 175, 126, 203, 4, 210, 70, 40, 105, 16, 36, 42, 118, 110, 4, 180, + 208, 52, 232, 230, 107, 154, 233, 61, 176, 170, 32, 59, 60, 47, 43, 70, 71, 3, 58, 24, 166, 22, 165, 154, 255, 166, 12, 81, 63, 116, 146, 12, - 5, 6, 133, 240, 110, 253, 209, 15, 71, 179, 93, 203, 58, 138, 5, 90, - 111, 140, 19, 186, 191, 68, 230, 121, 95, 166, 219, 107, 233, 156, 18, 145, - 239, 150, 234, 191, 91, 233, 114, 5, 215, 85, 30, 66, 33, 152, 117, 128, - 236, 189, 201, 203, 10, 184, 198, 249, 61, 27, 144, 102, 246, 191, 54, 129, + 5, 6, 133, 240, 110, 253, 209, 15, 71, 179, 93, 203, 58, 138, 5, 90, + 111, 140, 19, 186, 191, 68, 230, 121, 95, 166, 219, 107, 233, 156, 18, 145, + 239, 150, 234, 191, 91, 233, 114, 5, 215, 85, 30, 66, 33, 152, 117, 128, + 236, 189, 201, 203, 10, 184, 198, 249, 61, 27, 144, 102, 246, 191, 54, 129, 86, 8, 197, 98, 231, 234, 222, 164, 161, 40, 150, 253, 208, 82, 92, 225, 85, 206, 59, 1, 170, 5, 255, 219, 89, 204, 122, 169, 78, 8, 5, 70, 75, 128, 80, 176, 16, 214, 253, 176, 255, 191, 91, 89, 126, 155, 128, 195, 56, 150, 101, 131, 255, 234, 241, 250, 61, 210, 85, 19, 21, 23, 122, 180, 34, 100, 102, 166, 128, 21, 177, 11, 86, 110, 112, 179, 126, 36, 152, 196, 62, 185, 186, 20, 91, 35, 85, 148, 168, 68, 145, 245, 170, 25, 190, 237, - 192, 125, 186, 182, 22, 188, 161, 122, 194, 21, 14, 102, 206, 60, 129, 156, - 173, 176, 37, 112, 129, 145, 177, 101, 206, 179, 35, 221, 107, 228, 181, 212, + 192, 125, 186, 182, 22, 188, 161, 122, 194, 21, 14, 102, 206, 60, 129, 156, + 173, 176, 37, 112, 129, 145, 177, 101, 206, 179, 35, 221, 107, 228, 181, 212, 52, 253, 241, 145, 121, 128, 68, 118, 78, 66, 166, 78, 176, 62, 217, 243, - 193, 1, 254, 200, 35, 67, 226, 77, 55, 72, 6, 144, 22, 85, 252, 209, - 142, 65, 226, 158, 126, 168, 175, 179, 219, 116, 235, 227, 42, 49, 126, 126, - 215, 200, 126, 0, 39, 247, 161, 217, 26, 228, 232, 113, 53, 151, 34, 223, + 193, 1, 254, 200, 35, 67, 226, 77, 55, 72, 6, 144, 22, 85, 252, 209, + 142, 65, 226, 158, 126, 168, 175, 179, 219, 116, 235, 227, 42, 49, 126, 126, + 215, 200, 126, 0, 39, 247, 161, 217, 26, 228, 232, 113, 53, 151, 34, 223, 91, 242, 155, 156, 144, 229, 237, 127, 227, 49, 239, 71, 102, 115, 74, 135, - 103, 13, 3, 108, 101, 211, 36, 59, 146, 143, 230, 44, 212, 145, 229, 53, - 108, 175, 42, 131, 113, 123, 30, 28, 149, 153, 117, 233, 76, 33, 148, 110, + 103, 13, 3, 108, 101, 211, 36, 59, 146, 143, 230, 44, 212, 145, 229, 53, + 108, 175, 42, 131, 113, 123, 30, 28, 149, 153, 117, 233, 76, 33, 148, 110, 19, 83, 125, 135, 44, 202, 2, 155, 4, 240, 167, 7, 13, 115, 243, 216, 73, 248, 216, 82, 230, 153, 48, 234, 157, 2, 130, 99, 147, 2, 244, 19, - 125, 30, 39, 148, 49, 134, 140, 240, 128, 230, 171, 24, 53, 245, 54, 72, - 111, 230, 192, 165, 199, 47, 186, 238, 121, 95, 220, 76, 229, 253, 157, 47, + 125, 30, 39, 148, 49, 134, 140, 240, 128, 230, 171, 24, 53, 245, 54, 72, + 111, 230, 192, 165, 199, 47, 186, 238, 121, 95, 220, 76, 229, 253, 157, 47, 34, 47, 39, 77, 199, 203, 163, 148, 172, 56, 204, 96, 69, 235, 215, 96, 92, 139, 92, 49, 73, 228, 70, 221, 18, 84, 167, 179, 201, 239, 71, 64, 29, 247, 84, 56, 148, 36, 169, 144, 192, 60, 153, 171, 89, 125, 48, 98, - 201, 56, 230, 154, 146, 46, 184, 202, 3, 39, 113, 90, 249, 163, 0, 188, - 233, 10, 216, 17, 159, 42, 134, 57, 70, 24, 33, 63, 8, 67, 85, 7, - 133, 180, 127, 12, 234, 121, 183, 38, 131, 154, 241, 236, 69, 67, 116, 54, + 201, 56, 230, 154, 146, 46, 184, 202, 3, 39, 113, 90, 249, 163, 0, 188, + 233, 10, 216, 17, 159, 42, 134, 57, 70, 24, 33, 63, 8, 67, 85, 7, + 133, 180, 127, 12, 234, 121, 183, 38, 131, 154, 241, 236, 69, 67, 116, 54, 40, 225, 6, 220, 22, 251, 1, 100, 110, 165, 114, 12, 170, 21, 190, 103, - 242, 171, 216, 66, 30, 3, 214, 137, 231, 172, 61, 8, 249, 198, 113, 181, - 171, 13, 159, 21, 147, 67, 249, 94, 189, 174, 15, 2, 62, 254, 29, 32, - 209, 169, 184, 119, 220, 98, 248, 163, 171, 22, 62, 125, 155, 100, 186, 97, - 163, 245, 70, 216, 246, 1, 11, 83, 41, 100, 64, 52, 99, 184, 151, 99, + 242, 171, 216, 66, 30, 3, 214, 137, 231, 172, 61, 8, 249, 198, 113, 181, + 171, 13, 159, 21, 147, 67, 249, 94, 189, 174, 15, 2, 62, 254, 29, 32, + 209, 169, 184, 119, 220, 98, 248, 163, 171, 22, 62, 125, 155, 100, 186, 97, + 163, 245, 70, 216, 246, 1, 11, 83, 41, 100, 64, 52, 99, 184, 151, 99, 46, 100, 168, 158, 210, 150, 38, 231, 27, 255, 59, 141, 232, 127, 56, 39, - 194, 104, 178, 151, 15, 25, 219, 221, 81, 119, 178, 153, 94, 173, 64, 215, - 128, 132, 163, 159, 214, 254, 181, 194, 113, 144, 141, 103, 17, 108, 178, 59, + 194, 104, 178, 151, 15, 25, 219, 221, 81, 119, 178, 153, 94, 173, 64, 215, + 128, 132, 163, 159, 214, 254, 181, 194, 113, 144, 141, 103, 17, 108, 178, 59, 62, 205, 117, 57, 183, 97, 18, 210, 87, 163, 231, 213, 233, 251, 94, 136, - 217, 168, 69, 48, 55, 68, 144, 203, 187, 51, 211, 151, 1, 194, 118, 181, - 154, 103, 186, 87, 43, 128, 215, 79, 101, 175, 60, 221, 158, 189, 94, 194, + 217, 168, 69, 48, 55, 68, 144, 203, 187, 51, 211, 151, 1, 194, 118, 181, + 154, 103, 186, 87, 43, 128, 215, 79, 101, 175, 60, 221, 158, 189, 94, 194, 87, 73, 72, 162, 252, 26, 40, 142, 86, 228, 82, 255, 122, 192, 167, 78, - 177, 40, 249, 195, 100, 188, 31, 208, 124, 123, 31, 121, 244, 4, 82, 3, - 132, 15, 2, 29, 186, 76, 106, 109, 158, 114, 25, 212, 74, 64, 255, 43, + 177, 40, 249, 195, 100, 188, 31, 208, 124, 123, 31, 121, 244, 4, 82, 3, + 132, 15, 2, 29, 186, 76, 106, 109, 158, 114, 25, 212, 74, 64, 255, 43, 40, 146, 159, 225, 39, 65, 85, 37, 60, 160, 123, 116, 127, 134, 45, 177, - 191, 49, 136, 211, 167, 218, 197, 15, 96, 45, 55, 11, 237, 103, 118, 207, - 0, 211, 25, 143, 19, 93, 114, 90, 105, 253, 88, 140, 207, 56, 150, 0, - 136, 159, 134, 63, 75, 142, 177, 0, 107, 105, 78, 148, 214, 248, 70, 72, - 125, 220, 156, 220, 222, 102, 202, 176, 12, 58, 24, 39, 254, 170, 130, 77, - 203, 193, 162, 56, 162, 57, 76, 153, 170, 112, 94, 0, 220, 58, 58, 40, - 173, 2, 193, 164, 168, 127, 225, 238, 10, 194, 112, 213, 181, 126, 222, 152, + 191, 49, 136, 211, 167, 218, 197, 15, 96, 45, 55, 11, 237, 103, 118, 207, + 0, 211, 25, 143, 19, 93, 114, 90, 105, 253, 88, 140, 207, 56, 150, 0, + 136, 159, 134, 63, 75, 142, 177, 0, 107, 105, 78, 148, 214, 248, 70, 72, + 125, 220, 156, 220, 222, 102, 202, 176, 12, 58, 24, 39, 254, 170, 130, 77, + 203, 193, 162, 56, 162, 57, 76, 153, 170, 112, 94, 0, 220, 58, 58, 40, + 173, 2, 193, 164, 168, 127, 225, 238, 10, 194, 112, 213, 181, 126, 222, 152, 12, 57, 14, 146, 137, 154, 203, 179, 45, 133, 70, 204, 66, 249, 32, 136, - 145, 0, 221, 224, 10, 1, 202, 139, 145, 247, 72, 254, 32, 169, 121, 167, - 114, 198, 244, 251, 243, 8, 114, 188, 178, 173, 25, 243, 122, 220, 45, 98, - 7, 168, 66, 58, 225, 217, 152, 81, 89, 39, 167, 146, 181, 138, 253, 196, - 145, 4, 72, 9, 14, 137, 155, 32, 217, 64, 4, 173, 220, 66, 114, 21, - 137, 118, 87, 163, 217, 204, 74, 236, 45, 170, 60, 141, 216, 234, 182, 79, + 145, 0, 221, 224, 10, 1, 202, 139, 145, 247, 72, 254, 32, 169, 121, 167, + 114, 198, 244, 251, 243, 8, 114, 188, 178, 173, 25, 243, 122, 220, 45, 98, + 7, 168, 66, 58, 225, 217, 152, 81, 89, 39, 167, 146, 181, 138, 253, 196, + 145, 4, 72, 9, 14, 137, 155, 32, 217, 64, 4, 173, 220, 66, 114, 21, + 137, 118, 87, 163, 217, 204, 74, 236, 45, 170, 60, 141, 216, 234, 182, 79, 74, 73, 94, 63, 89, 134, 88, 64, 32, 241, 9, 114, 253, 164, 108, 31, 27, 42, 172, 7, 102, 213, 153, 83, 1, 152, 136, 224, 248, 70, 112, 15, - 211, 194, 216, 16, 255, 62, 83, 147, 173, 192, 239, 55, 18, 223, 34, 152, + 211, 194, 216, 16, 255, 62, 83, 147, 173, 192, 239, 55, 18, 223, 34, 152, 25, 163, 229, 4, 55, 219, 235, 187, 51, 116, 12, 202, 198, 116, 188, 217, 91, 30, 11, 9, 13, 222, 120, 16, 93, 99, 56, 129, 27, 133, 155, 120, - 124, 112, 101, 42, 222, 122, 124, 59, 84, 228, 202, 189, 13, 11, 10, 44, - 220, 97, 67, 53, 246, 47, 230, 131, 192, 1, 247, 137, 90, 77, 243, 131, - 2, 130, 93, 183, 117, 102, 69, 191, 27, 87, 103, 218, 157, 124, 17, 209, - 135, 92, 78, 211, 141, 25, 157, 53, 17, 249, 209, 206, 84, 19, 135, 253, + 124, 112, 101, 42, 222, 122, 124, 59, 84, 228, 202, 189, 13, 11, 10, 44, + 220, 97, 67, 53, 246, 47, 230, 131, 192, 1, 247, 137, 90, 77, 243, 131, + 2, 130, 93, 183, 117, 102, 69, 191, 27, 87, 103, 218, 157, 124, 17, 209, + 135, 92, 78, 211, 141, 25, 157, 53, 17, 249, 209, 206, 84, 19, 135, 253, 57, 36, 38, 112, 184, 61, 76, 5, 203, 155, 7, 9, 179, 167, 38, 136, - 189, 40, 19, 183, 132, 81, 135, 167, 48, 74, 186, 249, 144, 193, 150, 73, + 189, 40, 19, 183, 132, 81, 135, 167, 48, 74, 186, 249, 144, 193, 150, 73, 10, 192, 191, 160, 74, 246, 12, 38, 107, 3, 66, 122, 184, 168, 218, 233, 78, 216, 11, 57, 124, 104, 167, 0, 187, 2, 214, 136, 252, 60, 85, 128, - 128, 31, 70, 197, 211, 180, 216, 75, 212, 163, 168, 15, 174, 44, 194, 231, + 128, 31, 70, 197, 211, 180, 216, 75, 212, 163, 168, 15, 174, 44, 194, 231, 24, 181, 154, 161, 241, 95, 197, 227, 146, 195, 187, 69, 127, 154, 145, 176, - 180, 157, 13, 225, 107, 60, 29, 14, 223, 93, 214, 248, 107, 65, 168, 251, - 231, 46, 34, 203, 76, 20, 206, 125, 80, 25, 196, 60, 213, 51, 238, 73, + 180, 157, 13, 225, 107, 60, 29, 14, 223, 93, 214, 248, 107, 65, 168, 251, + 231, 46, 34, 203, 76, 20, 206, 125, 80, 25, 196, 60, 213, 51, 238, 73, 17, 223, 151, 44, 60, 213, 164, 117, 188, 66, 195, 170, 190, 117, 110, 21, 27, 78, 244, 124, 224, 142, 182, 10, 122, 135, 121, 143, 240, 124, 6, 8, 22, 15, 3, 137, 12, 19, 11, 62, 212, 205, 3, 202, 189, 157, 141, 68, - 171, 142, 106, 69, 207, 8, 116, 194, 6, 200, 96, 220, 248, 132, 46, 171, + 171, 142, 106, 69, 207, 8, 116, 194, 6, 200, 96, 220, 248, 132, 46, 171, 57, 234, 31, 3, 112, 108, 15, 139, 243, 34, 181, 250, 10, 86, 71, 162, - 167, 85, 177, 57, 166, 80, 41, 253, 128, 28, 127, 220, 149, 27, 29, 41, - 201, 116, 211, 236, 34, 200, 100, 157, 130, 223, 4, 162, 108, 181, 40, 255, + 167, 85, 177, 57, 166, 80, 41, 253, 128, 28, 127, 220, 149, 27, 29, 41, + 201, 116, 211, 236, 34, 200, 100, 157, 130, 223, 4, 162, 108, 181, 40, 255, 96, 18, 77, 36, 217, 17, 225, 142, 124, 17, 91, 227, 13, 224, 213, 37, - 115, 216, 93, 149, 103, 105, 152, 190, 207, 54, 74, 226, 78, 133, 200, 252, - 157, 152, 39, 0, 173, 168, 132, 142, 17, 66, 241, 137, 12, 106, 42, 81, - 239, 78, 31, 131, 49, 243, 122, 178, 212, 137, 160, 104, 15, 145, 15, 116, - 103, 141, 94, 40, 127, 180, 174, 96, 222, 182, 226, 168, 174, 113, 228, 156, + 115, 216, 93, 149, 103, 105, 152, 190, 207, 54, 74, 226, 78, 133, 200, 252, + 157, 152, 39, 0, 173, 168, 132, 142, 17, 66, 241, 137, 12, 106, 42, 81, + 239, 78, 31, 131, 49, 243, 122, 178, 212, 137, 160, 104, 15, 145, 15, 116, + 103, 141, 94, 40, 127, 180, 174, 96, 222, 182, 226, 168, 174, 113, 228, 156, 10, 18, 231, 122, 150, 178, 17, 200, 254, 96, 42, 243, 225, 58, 235, 64, - 159, 73, 162, 72, 46, 160, 33, 191, 99, 73, 130, 32, 135, 84, 29, 100, - 232, 75, 110, 180, 226, 11, 143, 127, 79, 246, 48, 148, 229, 211, 204, 72, + 159, 73, 162, 72, 46, 160, 33, 191, 99, 73, 130, 32, 135, 84, 29, 100, + 232, 75, 110, 180, 226, 11, 143, 127, 79, 246, 48, 148, 229, 211, 204, 72, 18, 89, 22, 251, 202, 8, 10, 2, 130, 230, 219, 71, 66, 142, 149, 47, 12, 117, 202, 224, 248, 35, 75, 242, 87, 125, 230, 66, 38, 160, 62, 248, - 213, 32, 166, 83, 220, 230, 0, 1, 147, 51, 128, 110, 20, 16, 43, 142, + 213, 32, 166, 83, 220, 230, 0, 1, 147, 51, 128, 110, 20, 16, 43, 142, 90, 0, 2, 104, 111, 232, 38, 29, 181, 243, 130, 121, 105, 177, 168, 113, - 126, 191, 59, 205, 27, 180, 49, 128, 160, 225, 23, 173, 193, 155, 123, 12, - 173, 72, 139, 63, 23, 232, 138, 235, 39, 179, 158, 95, 103, 192, 13, 242, + 126, 191, 59, 205, 27, 180, 49, 128, 160, 225, 23, 173, 193, 155, 123, 12, + 173, 72, 139, 63, 23, 232, 138, 235, 39, 179, 158, 95, 103, 192, 13, 242, 11, 127, 239, 91, 13, 119, 19, 185, 105, 87, 195, 168, 145, 15, 53, 146, 35, 227, 101, 234, 198, 247, 19, 29, 134, 126, 211, 133, 78, 186, 127, 129, - 181, 115, 133, 62, 166, 133, 128, 225, 101, 98, 146, 175, 110, 113, 171, 117, - 4, 130, 190, 186, 216, 17, 201, 29, 62, 77, 74, 189, 50, 155, 188, 93, - 237, 26, 100, 225, 91, 120, 229, 163, 16, 210, 167, 138, 241, 147, 36, 56, + 181, 115, 133, 62, 166, 133, 128, 225, 101, 98, 146, 175, 110, 113, 171, 117, + 4, 130, 190, 186, 216, 17, 201, 29, 62, 77, 74, 189, 50, 155, 188, 93, + 237, 26, 100, 225, 91, 120, 229, 163, 16, 210, 167, 138, 241, 147, 36, 56, 12, 100, 33, 55, 232, 200, 118, 3, 222, 31, 72, 167, 91, 45, 133, 62, - 184, 64, 120, 116, 249, 12, 15, 243, 98, 145, 234, 253, 71, 194, 61, 4, - 102, 112, 35, 27, 75, 13, 1, 4, 128, 238, 170, 187, 80, 147, 216, 165, - 147, 248, 250, 241, 69, 106, 233, 227, 22, 153, 120, 138, 113, 83, 104, 154, + 184, 64, 120, 116, 249, 12, 15, 243, 98, 145, 234, 253, 71, 194, 61, 4, + 102, 112, 35, 27, 75, 13, 1, 4, 128, 238, 170, 187, 80, 147, 216, 165, + 147, 248, 250, 241, 69, 106, 233, 227, 22, 153, 120, 138, 113, 83, 104, 154, 50, 99, 153, 188, 69, 252, 171, 177, 49, 74, 134, 219, 247, 255, 191, 202, - 165, 239, 179, 147, 91, 215, 195, 157, 68, 21, 180, 112, 187, 51, 66, 80, - 205, 100, 35, 78, 59, 92, 175, 87, 224, 170, 237, 223, 224, 83, 182, 199, + 165, 239, 179, 147, 91, 215, 195, 157, 68, 21, 180, 112, 187, 51, 66, 80, + 205, 100, 35, 78, 59, 92, 175, 87, 224, 170, 237, 223, 224, 83, 182, 199, 47, 95, 111, 42, 197, 22, 21, 143, 123, 173, 69, 247, 31, 205, 69, 136, - 137, 136, 241, 233, 67, 7, 225, 112, 102, 92, 180, 211, 254, 29, 129, 29, + 137, 136, 241, 233, 67, 7, 225, 112, 102, 92, 180, 211, 254, 29, 129, 29, 21, 188, 44, 95, 57, 122, 17, 196, 213, 33, 56, 23, 88, 236, 185, 35, 17, 156, 165, 93, 108, 157, 198, 5, 124, 225, 150, 156, 146, 116, 88, 116, - 181, 207, 90, 85, 145, 228, 231, 91, 116, 79, 6, 119, 6, 207, 190, 102, + 181, 207, 90, 85, 145, 228, 231, 91, 116, 79, 6, 119, 6, 207, 190, 102, 72, 242, 2, 253, 79, 92, 88, 189, 28, 57, 28, 101, 199, 134, 124, 215, 59, 37, 222, 54, 194, 151, 252, 185, 74, 101, 193, 43, 186, 184, 255, 158, - 129, 183, 83, 176, 249, 134, 58, 15, 49, 213, 127, 162, 179, 56, 53, 4, - 114, 112, 29, 84, 246, 109, 46, 153, 97, 30, 208, 98, 234, 155, 104, 158, + 129, 183, 83, 176, 249, 134, 58, 15, 49, 213, 127, 162, 179, 56, 53, 4, + 114, 112, 29, 84, 246, 109, 46, 153, 97, 30, 208, 98, 234, 155, 104, 158, 93, 9, 53, 175, 49, 54, 160, 238, 150, 117, 145, 202, 210, 37, 15, 3, - 100, 20, 116, 153, 90, 23, 2, 146, 58, 182, 199, 197, 122, 89, 30, 152, - 241, 105, 97, 115, 131, 111, 4, 235, 217, 213, 144, 218, 217, 201, 141, 113, + 100, 20, 116, 153, 90, 23, 2, 146, 58, 182, 199, 197, 122, 89, 30, 152, + 241, 105, 97, 115, 131, 111, 4, 235, 217, 213, 144, 218, 217, 201, 141, 113, 21, 237, 254, 184, 181, 135, 177, 86, 215, 248, 169, 55, 231, 229, 60, 133, 12, 194, 206, 112, 206, 175, 216, 131, 181, 41, 154, 235, 76, 152, 58, 118, - 111, 32, 220, 219, 253, 198, 18, 227, 71, 129, 197, 227, 96, 155, 66, 0, + 111, 32, 220, 219, 253, 198, 18, 227, 71, 129, 197, 227, 96, 155, 66, 0, 51, 132, 150, 208, 177, 188, 149, 100, 236, 23, 49, 45, 236, 131, 225, 206, 77, 77, 94, 12, 244, 159, 85, 247, 189, 109, 141, 217, 80, 115, 44, 171, - 138, 68, 128, 147, 244, 213, 43, 187, 135, 126, 156, 158, 199, 61, 180, 112, - 130, 230, 146, 100, 106, 56, 70, 71, 234, 3, 202, 1, 45, 20, 136, 149, - 112, 178, 25, 110, 160, 221, 57, 191, 78, 9, 250, 233, 4, 144, 28, 219, - 200, 203, 227, 218, 229, 108, 59, 221, 141, 0, 122, 121, 65, 156, 204, 19, - 152, 215, 64, 164, 15, 77, 26, 113, 82, 229, 23, 103, 204, 151, 118, 104, - 171, 115, 72, 191, 5, 159, 133, 83, 221, 228, 120, 127, 46, 233, 14, 27, - 216, 31, 63, 179, 224, 226, 121, 29, 62, 47, 199, 67, 60, 240, 85, 175, - 242, 113, 168, 160, 93, 147, 205, 103, 67, 110, 237, 143, 148, 65, 209, 31, - 100, 252, 166, 254, 170, 52, 203, 222, 75, 219, 77, 217, 202, 18, 117, 253, + 138, 68, 128, 147, 244, 213, 43, 187, 135, 126, 156, 158, 199, 61, 180, 112, + 130, 230, 146, 100, 106, 56, 70, 71, 234, 3, 202, 1, 45, 20, 136, 149, + 112, 178, 25, 110, 160, 221, 57, 191, 78, 9, 250, 233, 4, 144, 28, 219, + 200, 203, 227, 218, 229, 108, 59, 221, 141, 0, 122, 121, 65, 156, 204, 19, + 152, 215, 64, 164, 15, 77, 26, 113, 82, 229, 23, 103, 204, 151, 118, 104, + 171, 115, 72, 191, 5, 159, 133, 83, 221, 228, 120, 127, 46, 233, 14, 27, + 216, 31, 63, 179, 224, 226, 121, 29, 62, 47, 199, 67, 60, 240, 85, 175, + 242, 113, 168, 160, 93, 147, 205, 103, 67, 110, 237, 143, 148, 65, 209, 31, + 100, 252, 166, 254, 170, 52, 203, 222, 75, 219, 77, 217, 202, 18, 117, 253, 92, 29, 205, 115, 53, 255, 251, 150, 164, 72, 146, 6, 101, 161, 127, 50, 73, 152, 194, 180, 11, 121, 11, 229, 147, 151, 143, 226, 196, 238, 131, 141, - 173, 153, 189, 114, 16, 82, 1, 70, 239, 22, 85, 108, 113, 21, 231, 43, - 6, 228, 54, 94, 200, 186, 190, 143, 117, 156, 22, 30, 9, 64, 25, 8, - 116, 27, 240, 24, 150, 146, 224, 73, 97, 95, 183, 151, 185, 178, 16, 82, - 243, 208, 160, 186, 246, 234, 223, 35, 6, 166, 7, 105, 224, 246, 14, 208, - 1, 70, 244, 221, 238, 235, 86, 81, 136, 40, 99, 104, 89, 22, 194, 40, + 173, 153, 189, 114, 16, 82, 1, 70, 239, 22, 85, 108, 113, 21, 231, 43, + 6, 228, 54, 94, 200, 186, 190, 143, 117, 156, 22, 30, 9, 64, 25, 8, + 116, 27, 240, 24, 150, 146, 224, 73, 97, 95, 183, 151, 185, 178, 16, 82, + 243, 208, 160, 186, 246, 234, 223, 35, 6, 166, 7, 105, 224, 246, 14, 208, + 1, 70, 244, 221, 238, 235, 86, 81, 136, 40, 99, 104, 89, 22, 194, 40, 36, 45, 126, 138, 174, 22, 206, 228, 146, 114, 162, 4, 211, 213, 163, 224, 91, 3, 85, 140, 140, 202, 204, 23, 194, 108, 166, 123, 1, 36, 191, 161, 38, 228, 65, 249, 235, 26, 156, 83, 68, 199, 239, 109, 1, 203, 198, 25, 22, 128, 165, 15, 125, 139, 190, 100, 184, 159, 16, 194, 244, 228, 18, 215, - 103, 169, 32, 208, 12, 104, 94, 71, 209, 193, 160, 161, 73, 38, 35, 49, - 202, 29, 193, 120, 100, 98, 219, 44, 27, 224, 222, 226, 105, 153, 17, 252, - 120, 143, 190, 173, 176, 89, 205, 149, 11, 99, 31, 107, 102, 187, 100, 107, - 200, 1, 130, 89, 75, 71, 196, 150, 89, 231, 28, 213, 173, 229, 173, 104, - 156, 123, 227, 163, 65, 230, 167, 67, 242, 143, 224, 224, 161, 249, 205, 140, - 149, 156, 2, 138, 177, 193, 136, 225, 177, 34, 246, 27, 179, 108, 116, 169, - 0, 183, 169, 12, 239, 230, 127, 169, 170, 144, 151, 36, 111, 52, 132, 2, + 103, 169, 32, 208, 12, 104, 94, 71, 209, 193, 160, 161, 73, 38, 35, 49, + 202, 29, 193, 120, 100, 98, 219, 44, 27, 224, 222, 226, 105, 153, 17, 252, + 120, 143, 190, 173, 176, 89, 205, 149, 11, 99, 31, 107, 102, 187, 100, 107, + 200, 1, 130, 89, 75, 71, 196, 150, 89, 231, 28, 213, 173, 229, 173, 104, + 156, 123, 227, 163, 65, 230, 167, 67, 242, 143, 224, 224, 161, 249, 205, 140, + 149, 156, 2, 138, 177, 193, 136, 225, 177, 34, 246, 27, 179, 108, 116, 169, + 0, 183, 169, 12, 239, 230, 127, 169, 170, 144, 151, 36, 111, 52, 132, 2, 15, 237, 209, 133, 254, 241, 184, 232, 116, 11, 221, 210, 64, 96, 18, 30, - 245, 95, 142, 84, 218, 92, 151, 20, 155, 101, 201, 153, 82, 163, 43, 168, - 152, 90, 224, 18, 112, 161, 123, 115, 129, 136, 198, 50, 186, 239, 28, 80, + 245, 95, 142, 84, 218, 92, 151, 20, 155, 101, 201, 153, 82, 163, 43, 168, + 152, 90, 224, 18, 112, 161, 123, 115, 129, 136, 198, 50, 186, 239, 28, 80, 91, 20, 73, 6, 150, 187, 56, 54, 200, 67, 26, 62, 0, 229, 42, 210, - 107, 245, 83, 172, 233, 195, 140, 31, 24, 205, 202, 128, 145, 242, 73, 113, + 107, 245, 83, 172, 233, 195, 140, 31, 24, 205, 202, 128, 145, 242, 73, 113, 92, 176, 3, 146, 170, 21, 106, 67, 53, 254, 192, 212, 194, 6, 52, 81, - 163, 236, 63, 95, 164, 91, 60, 20, 9, 201, 74, 143, 55, 110, 76, 61, - 115, 177, 84, 105, 191, 199, 248, 51, 89, 35, 91, 44, 199, 13, 254, 130, - 142, 136, 64, 111, 128, 229, 171, 208, 183, 242, 195, 251, 72, 168, 31, 76, + 163, 236, 63, 95, 164, 91, 60, 20, 9, 201, 74, 143, 55, 110, 76, 61, + 115, 177, 84, 105, 191, 199, 248, 51, 89, 35, 91, 44, 199, 13, 254, 130, + 142, 136, 64, 111, 128, 229, 171, 208, 183, 242, 195, 251, 72, 168, 31, 76, 89, 102, 122, 181, 57, 110, 17, 196, 31, 136, 185, 196, 118, 100, 188, 100, 21, 239, 206, 77, 97, 238, 78, 215, 224, 113, 210, 122, 141, 190, 103, 135, 12, 41, 206, 157, 154, 10, 167, 133, 183, 60, 230, 235, 109, 33, 95, 121, 34, 206, 1, 149, 114, 4, 252, 42, 17, 93, 191, 144, 133, 226, 101, 215, - 124, 88, 163, 27, 29, 189, 35, 51, 182, 112, 242, 94, 56, 196, 99, 242, + 124, 88, 163, 27, 29, 189, 35, 51, 182, 112, 242, 94, 56, 196, 99, 242, 77, 95, 123, 219, 81, 71, 229, 138, 101, 8, 77, 79, 2, 166, 195, 239, - 148, 221, 188, 20, 170, 26, 215, 139, 42, 171, 153, 219, 107, 191, 90, 185, - 241, 37, 84, 41, 232, 27, 123, 36, 86, 113, 255, 25, 245, 187, 21, 110, + 148, 221, 188, 20, 170, 26, 215, 139, 42, 171, 153, 219, 107, 191, 90, 185, + 241, 37, 84, 41, 232, 27, 123, 36, 86, 113, 255, 25, 245, 187, 21, 110, 13, 17, 43, 99, 91, 182, 243, 239, 194, 150, 187, 111, 30, 83, 28, 111, - 249, 159, 212, 187, 184, 177, 12, 234, 107, 211, 32, 118, 132, 10, 145, 19, - 150, 206, 230, 158, 80, 101, 41, 67, 38, 79, 57, 164, 80, 147, 64, 207, - 231, 229, 162, 5, 185, 40, 164, 17, 84, 156, 1, 52, 181, 67, 63, 182, + 249, 159, 212, 187, 184, 177, 12, 234, 107, 211, 32, 118, 132, 10, 145, 19, + 150, 206, 230, 158, 80, 101, 41, 67, 38, 79, 57, 164, 80, 147, 64, 207, + 231, 229, 162, 5, 185, 40, 164, 17, 84, 156, 1, 52, 181, 67, 63, 182, 25, 68, 55, 167, 230, 125, 225, 234, 125, 79, 102, 35, 54, 2, 12, 145, 67, 6, 252, 218, 231, 14, 58, 221, 248, 171, 23, 93, 14, 51, 76, 155, 97, 239, 11, 95, 245, 154, 209, 127, 208, 19, 209, 158, 67, 164, 1, 123, - 230, 90, 236, 148, 77, 210, 240, 27, 154, 16, 146, 19, 107, 106, 141, 94, - 144, 28, 24, 130, 111, 164, 46, 108, 89, 171, 52, 192, 121, 188, 166, 207, - 164, 98, 57, 189, 54, 190, 18, 4, 120, 181, 18, 216, 162, 19, 111, 254, + 230, 90, 236, 148, 77, 210, 240, 27, 154, 16, 146, 19, 107, 106, 141, 94, + 144, 28, 24, 130, 111, 164, 46, 108, 89, 171, 52, 192, 121, 188, 166, 207, + 164, 98, 57, 189, 54, 190, 18, 4, 120, 181, 18, 216, 162, 19, 111, 254, 71, 171, 194, 79, 73, 122, 9, 115, 63, 61, 88, 117, 234, 203, 250, 167, - 102, 98, 101, 177, 5, 13, 228, 205, 115, 107, 219, 215, 33, 150, 13, 242, - 180, 71, 27, 0, 250, 228, 50, 129, 215, 93, 174, 169, 167, 125, 14, 89, - 130, 195, 127, 158, 250, 249, 142, 213, 5, 1, 250, 31, 122, 171, 62, 142, + 102, 98, 101, 177, 5, 13, 228, 205, 115, 107, 219, 215, 33, 150, 13, 242, + 180, 71, 27, 0, 250, 228, 50, 129, 215, 93, 174, 169, 167, 125, 14, 89, + 130, 195, 127, 158, 250, 249, 142, 213, 5, 1, 250, 31, 122, 171, 62, 142, 38, 84, 165, 95, 237, 144, 145, 189, 193, 248, 121, 112, 22, 11, 26, 192, 90, 76, 117, 89, 160, 228, 152, 24, 129, 235, 37, 24, 66, 68, 161, 126, - 147, 44, 172, 137, 134, 203, 162, 152, 255, 161, 135, 6, 31, 72, 69, 9, - 228, 3, 80, 28, 50, 240, 176, 66, 255, 231, 21, 233, 149, 55, 211, 15, - 182, 116, 165, 211, 190, 28, 69, 40, 3, 164, 172, 212, 150, 181, 213, 32, - 174, 216, 8, 243, 29, 152, 124, 7, 111, 140, 53, 157, 158, 233, 175, 60, - 191, 179, 131, 248, 252, 50, 171, 165, 5, 51, 69, 215, 168, 222, 57, 221, - 164, 56, 193, 114, 18, 89, 219, 222, 198, 163, 200, 233, 28, 51, 190, 25, - 206, 243, 63, 51, 44, 10, 57, 71, 252, 230, 161, 141, 79, 31, 30, 150, - 101, 168, 23, 70, 216, 216, 160, 241, 192, 106, 92, 194, 141, 81, 100, 222, - 165, 180, 27, 70, 201, 219, 31, 177, 189, 114, 30, 74, 6, 184, 114, 208, - 189, 246, 83, 107, 229, 153, 69, 66, 201, 253, 183, 5, 134, 156, 200, 132, - 187, 73, 175, 213, 178, 14, 66, 101, 13, 224, 49, 205, 244, 124, 231, 18, + 147, 44, 172, 137, 134, 203, 162, 152, 255, 161, 135, 6, 31, 72, 69, 9, + 228, 3, 80, 28, 50, 240, 176, 66, 255, 231, 21, 233, 149, 55, 211, 15, + 182, 116, 165, 211, 190, 28, 69, 40, 3, 164, 172, 212, 150, 181, 213, 32, + 174, 216, 8, 243, 29, 152, 124, 7, 111, 140, 53, 157, 158, 233, 175, 60, + 191, 179, 131, 248, 252, 50, 171, 165, 5, 51, 69, 215, 168, 222, 57, 221, + 164, 56, 193, 114, 18, 89, 219, 222, 198, 163, 200, 233, 28, 51, 190, 25, + 206, 243, 63, 51, 44, 10, 57, 71, 252, 230, 161, 141, 79, 31, 30, 150, + 101, 168, 23, 70, 216, 216, 160, 241, 192, 106, 92, 194, 141, 81, 100, 222, + 165, 180, 27, 70, 201, 219, 31, 177, 189, 114, 30, 74, 6, 184, 114, 208, + 189, 246, 83, 107, 229, 153, 69, 66, 201, 253, 183, 5, 134, 156, 200, 132, + 187, 73, 175, 213, 178, 14, 66, 101, 13, 224, 49, 205, 244, 124, 231, 18, 71, 94, 246, 29, 78, 201, 138, 60, 97, 54, 156, 123, 144, 143, 6, 191, - 113, 140, 251, 203, 125, 196, 135, 169, 197, 34, 215, 77, 138, 218, 63, 56, - 145, 74, 225, 15, 227, 112, 113, 160, 165, 122, 85, 179, 97, 146, 5, 221, - 133, 236, 170, 2, 236, 128, 19, 252, 238, 120, 0, 192, 55, 5, 138, 161, - 222, 148, 189, 130, 53, 250, 36, 153, 248, 210, 197, 167, 236, 128, 191, 37, - 251, 151, 163, 190, 155, 38, 27, 164, 166, 238, 185, 11, 214, 212, 122, 206, - 212, 255, 103, 255, 69, 146, 54, 182, 52, 54, 169, 121, 244, 205, 244, 168, + 113, 140, 251, 203, 125, 196, 135, 169, 197, 34, 215, 77, 138, 218, 63, 56, + 145, 74, 225, 15, 227, 112, 113, 160, 165, 122, 85, 179, 97, 146, 5, 221, + 133, 236, 170, 2, 236, 128, 19, 252, 238, 120, 0, 192, 55, 5, 138, 161, + 222, 148, 189, 130, 53, 250, 36, 153, 248, 210, 197, 167, 236, 128, 191, 37, + 251, 151, 163, 190, 155, 38, 27, 164, 166, 238, 185, 11, 214, 212, 122, 206, + 212, 255, 103, 255, 69, 146, 54, 182, 52, 54, 169, 121, 244, 205, 244, 168, 96, 163, 220, 75, 194, 10, 133, 204, 105, 10, 228, 139, 62, 39, 254, 131, - 5, 243, 54, 14, 158, 107, 118, 143, 81, 55, 251, 151, 226, 29, 54, 218, + 5, 243, 54, 14, 158, 107, 118, 143, 81, 55, 251, 151, 226, 29, 54, 218, 99, 187, 76, 178, 61, 206, 20, 170, 229, 190, 77, 215, 47, 104, 244, 87, - 101, 82, 50, 41, 255, 56, 6, 226, 22, 153, 19, 72, 227, 63, 224, 79, - 3, 130, 220, 135, 116, 39, 25, 98, 107, 50, 214, 183, 120, 215, 26, 160, - 247, 26, 190, 119, 146, 181, 147, 36, 15, 75, 109, 71, 72, 44, 14, 9, + 101, 82, 50, 41, 255, 56, 6, 226, 22, 153, 19, 72, 227, 63, 224, 79, + 3, 130, 220, 135, 116, 39, 25, 98, 107, 50, 214, 183, 120, 215, 26, 160, + 247, 26, 190, 119, 146, 181, 147, 36, 15, 75, 109, 71, 72, 44, 14, 9, 61, 201, 200, 222, 53, 246, 57, 69, 63, 108, 133, 140, 150, 33, 233, 46, 84, 102, 150, 204, 129, 195, 97, 4, 69, 176, 166, 182, 10, 237, 141, 33, 70, 200, 98, 101, 157, 9, 70, 227, 108, 195, 241, 72, 105, 86, 67, 5, - 242, 199, 149, 33, 43, 105, 206, 122, 20, 13, 28, 158, 131, 47, 202, 70, - 9, 92, 32, 10, 251, 103, 49, 185, 35, 242, 168, 151, 234, 237, 212, 91, + 242, 199, 149, 33, 43, 105, 206, 122, 20, 13, 28, 158, 131, 47, 202, 70, + 9, 92, 32, 10, 251, 103, 49, 185, 35, 242, 168, 151, 234, 237, 212, 91, 81, 113, 133, 247, 204, 23, 4, 9, 226, 14, 29, 117, 236, 101, 250, 46, - 161, 149, 131, 98, 141, 228, 72, 18, 164, 252, 56, 7, 160, 217, 183, 125, - 121, 154, 169, 152, 211, 114, 24, 190, 141, 135, 41, 173, 250, 50, 54, 197, + 161, 149, 131, 98, 141, 228, 72, 18, 164, 252, 56, 7, 160, 217, 183, 125, + 121, 154, 169, 152, 211, 114, 24, 190, 141, 135, 41, 173, 250, 50, 54, 197, 65, 67, 117, 246, 235, 130, 142, 138, 62, 216, 51, 193, 247, 30, 164, 235, - 209, 157, 138, 4, 147, 6, 253, 187, 34, 124, 1, 143, 60, 95, 168, 72, - 167, 72, 72, 13, 142, 35, 185, 107, 29, 51, 189, 48, 141, 194, 33, 77, - 118, 17, 80, 88, 204, 147, 148, 143, 103, 246, 97, 180, 153, 160, 112, 81, - 196, 2, 222, 148, 126, 240, 27, 61, 128, 155, 184, 106, 89, 36, 136, 230, - 128, 84, 217, 130, 139, 104, 115, 225, 73, 77, 7, 49, 183, 4, 250, 124, - 196, 34, 183, 209, 17, 136, 92, 16, 94, 51, 78, 174, 185, 117, 243, 69, + 209, 157, 138, 4, 147, 6, 253, 187, 34, 124, 1, 143, 60, 95, 168, 72, + 167, 72, 72, 13, 142, 35, 185, 107, 29, 51, 189, 48, 141, 194, 33, 77, + 118, 17, 80, 88, 204, 147, 148, 143, 103, 246, 97, 180, 153, 160, 112, 81, + 196, 2, 222, 148, 126, 240, 27, 61, 128, 155, 184, 106, 89, 36, 136, 230, + 128, 84, 217, 130, 139, 104, 115, 225, 73, 77, 7, 49, 183, 4, 250, 124, + 196, 34, 183, 209, 17, 136, 92, 16, 94, 51, 78, 174, 185, 117, 243, 69, 11, 214, 132, 72, 86, 212, 4, 193, 253, 125, 45, 148, 97, 87, 6, 101, - 195, 169, 86, 115, 218, 254, 40, 59, 255, 137, 135, 183, 253, 117, 170, 29, - 191, 138, 247, 117, 125, 234, 30, 40, 92, 8, 180, 240, 136, 142, 111, 239, + 195, 169, 86, 115, 218, 254, 40, 59, 255, 137, 135, 183, 253, 117, 170, 29, + 191, 138, 247, 117, 125, 234, 30, 40, 92, 8, 180, 240, 136, 142, 111, 239, 66, 225, 196, 151, 93, 130, 126, 255, 195, 34, 252, 17, 101, 179, 120, 76, - 4, 227, 13, 12, 66, 205, 235, 177, 29, 187, 25, 114, 68, 119, 114, 158, - 213, 149, 210, 5, 104, 71, 181, 126, 211, 32, 99, 60, 51, 75, 85, 138, - 138, 68, 115, 81, 37, 17, 101, 36, 117, 236, 182, 77, 98, 113, 198, 195, + 4, 227, 13, 12, 66, 205, 235, 177, 29, 187, 25, 114, 68, 119, 114, 158, + 213, 149, 210, 5, 104, 71, 181, 126, 211, 32, 99, 60, 51, 75, 85, 138, + 138, 68, 115, 81, 37, 17, 101, 36, 117, 236, 182, 77, 98, 113, 198, 195, 73, 79, 215, 116, 248, 45, 244, 60, 205, 35, 95, 228, 38, 180, 250, 246, 63, 211, 44, 197, 162, 24, 195, 61, 136, 142, 91, 141, 62, 34, 139, 60, - 142, 238, 67, 148, 54, 132, 41, 115, 241, 219, 192, 121, 9, 45, 75, 183, - 223, 213, 165, 161, 219, 181, 161, 27, 36, 158, 163, 12, 12, 141, 83, 105, - 157, 118, 168, 244, 204, 32, 52, 131, 88, 246, 230, 121, 21, 58, 91, 217, - 138, 27, 251, 174, 150, 51, 240, 201, 30, 66, 19, 148, 185, 122, 53, 15, - 176, 144, 148, 3, 238, 59, 211, 155, 77, 83, 81, 245, 186, 169, 217, 201, - 103, 109, 137, 119, 146, 100, 18, 200, 185, 212, 202, 17, 88, 146, 234, 49, - 190, 19, 139, 43, 1, 48, 21, 64, 235, 89, 191, 74, 89, 85, 16, 64, - 203, 99, 152, 255, 61, 159, 36, 5, 199, 49, 94, 229, 163, 192, 41, 165, + 142, 238, 67, 148, 54, 132, 41, 115, 241, 219, 192, 121, 9, 45, 75, 183, + 223, 213, 165, 161, 219, 181, 161, 27, 36, 158, 163, 12, 12, 141, 83, 105, + 157, 118, 168, 244, 204, 32, 52, 131, 88, 246, 230, 121, 21, 58, 91, 217, + 138, 27, 251, 174, 150, 51, 240, 201, 30, 66, 19, 148, 185, 122, 53, 15, + 176, 144, 148, 3, 238, 59, 211, 155, 77, 83, 81, 245, 186, 169, 217, 201, + 103, 109, 137, 119, 146, 100, 18, 200, 185, 212, 202, 17, 88, 146, 234, 49, + 190, 19, 139, 43, 1, 48, 21, 64, 235, 89, 191, 74, 89, 85, 16, 64, + 203, 99, 152, 255, 61, 159, 36, 5, 199, 49, 94, 229, 163, 192, 41, 165, 20, 203, 176, 149, 18, 152, 61, 216, 188, 203, 180, 103, 202, 176, 177, 210, - 255, 26, 254, 70, 43, 214, 95, 208, 73, 148, 124, 19, 215, 68, 123, 10, - 179, 88, 167, 224, 23, 246, 150, 201, 51, 157, 139, 187, 103, 187, 198, 189, - 204, 126, 74, 124, 23, 150, 108, 116, 196, 130, 92, 0, 211, 151, 19, 58, - 249, 50, 186, 54, 102, 164, 122, 228, 71, 163, 163, 117, 78, 234, 197, 70, + 255, 26, 254, 70, 43, 214, 95, 208, 73, 148, 124, 19, 215, 68, 123, 10, + 179, 88, 167, 224, 23, 246, 150, 201, 51, 157, 139, 187, 103, 187, 198, 189, + 204, 126, 74, 124, 23, 150, 108, 116, 196, 130, 92, 0, 211, 151, 19, 58, + 249, 50, 186, 54, 102, 164, 122, 228, 71, 163, 163, 117, 78, 234, 197, 70, 96, 79, 4, 88, 242, 219, 120, 28, 178, 165, 136, 178, 129, 125, 79, 140, 65, 62, 78, 237, 104, 11, 45, 191, 163, 145, 174, 23, 34, 240, 43, 137, - 102, 189, 140, 137, 4, 222, 55, 6, 84, 194, 51, 164, 107, 234, 39, 216, + 102, 189, 140, 137, 4, 222, 55, 6, 84, 194, 51, 164, 107, 234, 39, 216, 15, 12, 44, 86, 170, 121, 46, 4, 220, 200, 42, 53, 11, 228, 110, 187, - 116, 182, 242, 42, 93, 109, 47, 109, 180, 155, 31, 99, 60, 107, 114, 82, - 196, 146, 45, 224, 90, 205, 34, 200, 42, 173, 113, 37, 26, 154, 74, 18, - 165, 45, 22, 141, 1, 244, 64, 159, 164, 162, 100, 6, 67, 145, 199, 205, - 254, 149, 56, 138, 15, 172, 205, 203, 191, 253, 126, 238, 167, 210, 103, 33, - 143, 85, 161, 150, 99, 12, 207, 238, 110, 157, 190, 52, 249, 121, 139, 188, - 0, 74, 92, 106, 101, 254, 190, 251, 213, 167, 78, 36, 224, 24, 6, 195, - 128, 24, 21, 35, 66, 223, 204, 84, 177, 109, 226, 215, 79, 19, 236, 73, + 116, 182, 242, 42, 93, 109, 47, 109, 180, 155, 31, 99, 60, 107, 114, 82, + 196, 146, 45, 224, 90, 205, 34, 200, 42, 173, 113, 37, 26, 154, 74, 18, + 165, 45, 22, 141, 1, 244, 64, 159, 164, 162, 100, 6, 67, 145, 199, 205, + 254, 149, 56, 138, 15, 172, 205, 203, 191, 253, 126, 238, 167, 210, 103, 33, + 143, 85, 161, 150, 99, 12, 207, 238, 110, 157, 190, 52, 249, 121, 139, 188, + 0, 74, 92, 106, 101, 254, 190, 251, 213, 167, 78, 36, 224, 24, 6, 195, + 128, 24, 21, 35, 66, 223, 204, 84, 177, 109, 226, 215, 79, 19, 236, 73, 74, 244, 146, 57, 228, 254, 223, 158, 42, 83, 29, 181, 14, 147, 60, 4, - 147, 107, 95, 220, 180, 130, 140, 28, 118, 179, 39, 179, 250, 184, 27, 209, - 199, 151, 154, 121, 105, 81, 215, 143, 46, 91, 217, 94, 230, 250, 165, 21, - 240, 234, 93, 0, 176, 20, 127, 181, 36, 127, 49, 36, 79, 233, 229, 57, - 241, 56, 119, 151, 222, 239, 203, 217, 74, 164, 88, 47, 25, 43, 58, 136, + 147, 107, 95, 220, 180, 130, 140, 28, 118, 179, 39, 179, 250, 184, 27, 209, + 199, 151, 154, 121, 105, 81, 215, 143, 46, 91, 217, 94, 230, 250, 165, 21, + 240, 234, 93, 0, 176, 20, 127, 181, 36, 127, 49, 36, 79, 233, 229, 57, + 241, 56, 119, 151, 222, 239, 203, 217, 74, 164, 88, 47, 25, 43, 58, 136, 61, 233, 70, 133, 181, 122, 250, 169, 249, 38, 36, 40, 182, 201, 40, 64, - 218, 145, 63, 209, 126, 248, 65, 23, 142, 147, 3, 241, 200, 87, 132, 93, + 218, 145, 63, 209, 126, 248, 65, 23, 142, 147, 3, 241, 200, 87, 132, 93, 31, 22, 90, 86, 244, 47, 235, 53, 187, 96, 165, 221, 185, 118, 134, 129, 94, 64, 188, 132, 216, 198, 131, 74, 193, 32, 41, 194, 69, 201, 64, 31, - 6, 235, 95, 181, 207, 187, 60, 250, 24, 233, 127, 4, 5, 190, 242, 168, - 239, 185, 172, 78, 136, 121, 180, 191, 84, 54, 252, 83, 202, 111, 32, 100, - 213, 7, 178, 225, 71, 68, 244, 36, 141, 242, 199, 185, 71, 55, 244, 166, - 113, 41, 66, 177, 55, 251, 179, 251, 194, 2, 54, 20, 100, 241, 82, 213, - 236, 45, 196, 119, 134, 167, 163, 134, 61, 218, 207, 200, 118, 143, 249, 165, - 105, 78, 208, 213, 206, 72, 76, 123, 47, 31, 9, 234, 18, 125, 95, 170, - 199, 123, 139, 158, 244, 171, 6, 202, 240, 214, 94, 46, 60, 109, 185, 175, - 204, 176, 229, 110, 139, 249, 234, 3, 202, 231, 25, 195, 150, 136, 186, 246, + 6, 235, 95, 181, 207, 187, 60, 250, 24, 233, 127, 4, 5, 190, 242, 168, + 239, 185, 172, 78, 136, 121, 180, 191, 84, 54, 252, 83, 202, 111, 32, 100, + 213, 7, 178, 225, 71, 68, 244, 36, 141, 242, 199, 185, 71, 55, 244, 166, + 113, 41, 66, 177, 55, 251, 179, 251, 194, 2, 54, 20, 100, 241, 82, 213, + 236, 45, 196, 119, 134, 167, 163, 134, 61, 218, 207, 200, 118, 143, 249, 165, + 105, 78, 208, 213, 206, 72, 76, 123, 47, 31, 9, 234, 18, 125, 95, 170, + 199, 123, 139, 158, 244, 171, 6, 202, 240, 214, 94, 46, 60, 109, 185, 175, + 204, 176, 229, 110, 139, 249, 234, 3, 202, 231, 25, 195, 150, 136, 186, 246, 72, 242, 133, 249, 229, 58, 112, 28, 228, 121, 85, 115, 90, 95, 32, 141, - 135, 217, 12, 187, 50, 229, 66, 103, 204, 0, 93, 86, 245, 59, 173, 28, + 135, 217, 12, 187, 50, 229, 66, 103, 204, 0, 93, 86, 245, 59, 173, 28, 71, 131, 135, 118, 125, 113, 12, 13, 202, 242, 205, 255, 152, 243, 160, 243, - 148, 10, 28, 106, 56, 17, 93, 234, 204, 102, 53, 22, 48, 188, 15, 255, + 148, 10, 28, 106, 56, 17, 93, 234, 204, 102, 53, 22, 48, 188, 15, 255, 14, 3, 117, 190, 211, 116, 55, 77, 205, 171, 228, 120, 244, 1, 169, 51, - 241, 150, 206, 99, 20, 68, 119, 137, 180, 44, 113, 85, 242, 143, 148, 97, - 149, 75, 20, 228, 89, 226, 122, 102, 13, 195, 58, 111, 178, 82, 226, 144, + 241, 150, 206, 99, 20, 68, 119, 137, 180, 44, 113, 85, 242, 143, 148, 97, + 149, 75, 20, 228, 89, 226, 122, 102, 13, 195, 58, 111, 178, 82, 226, 144, 82, 237, 27, 94, 244, 29, 102, 32, 162, 80, 228, 66, 203, 107, 211, 171, - 4, 56, 62, 184, 63, 137, 5, 179, 231, 185, 172, 102, 190, 42, 80, 164, - 123, 68, 20, 36, 135, 97, 102, 156, 133, 165, 202, 240, 84, 168, 30, 95, + 4, 56, 62, 184, 63, 137, 5, 179, 231, 185, 172, 102, 190, 42, 80, 164, + 123, 68, 20, 36, 135, 97, 102, 156, 133, 165, 202, 240, 84, 168, 30, 95, 57, 3, 182, 224, 10, 84, 60, 88, 191, 0, 126, 190, 240, 202, 141, 89, - 238, 212, 101, 213, 129, 15, 245, 94, 24, 49, 72, 59, 237, 121, 241, 199, + 238, 212, 101, 213, 129, 15, 245, 94, 24, 49, 72, 59, 237, 121, 241, 199, 28, 106, 113, 237, 82, 144, 150, 112, 79, 90, 255, 166, 230, 71, 132, 24, - 6, 82, 143, 150, 194, 236, 253, 46, 158, 143, 5, 31, 243, 156, 4, 19, + 6, 82, 143, 150, 194, 236, 253, 46, 158, 143, 5, 31, 243, 156, 4, 19, 89, 81, 94, 94, 39, 9, 199, 6, 44, 35, 4, 143, 18, 62, 27, 165, - 177, 162, 53, 121, 146, 74, 181, 252, 27, 207, 17, 102, 196, 172, 75, 4, + 177, 162, 53, 121, 146, 74, 181, 252, 27, 207, 17, 102, 196, 172, 75, 4, 17, 215, 20, 96, 9, 42, 199, 99, 206, 94, 78, 121, 37, 11, 152, 125, - 249, 107, 153, 180, 85, 155, 220, 68, 223, 87, 204, 175, 117, 147, 217, 71, - 6, 190, 132, 99, 227, 5, 180, 168, 249, 126, 202, 102, 42, 26, 175, 198, - 185, 211, 206, 154, 60, 24, 183, 24, 203, 46, 21, 176, 194, 116, 116, 210, - 162, 214, 215, 79, 87, 159, 16, 55, 12, 248, 51, 17, 79, 183, 145, 23, - 209, 58, 225, 84, 21, 237, 102, 250, 93, 222, 87, 87, 203, 4, 138, 196, - 6, 28, 143, 45, 68, 77, 211, 180, 47, 198, 5, 170, 166, 221, 107, 202, + 249, 107, 153, 180, 85, 155, 220, 68, 223, 87, 204, 175, 117, 147, 217, 71, + 6, 190, 132, 99, 227, 5, 180, 168, 249, 126, 202, 102, 42, 26, 175, 198, + 185, 211, 206, 154, 60, 24, 183, 24, 203, 46, 21, 176, 194, 116, 116, 210, + 162, 214, 215, 79, 87, 159, 16, 55, 12, 248, 51, 17, 79, 183, 145, 23, + 209, 58, 225, 84, 21, 237, 102, 250, 93, 222, 87, 87, 203, 4, 138, 196, + 6, 28, 143, 45, 68, 77, 211, 180, 47, 198, 5, 170, 166, 221, 107, 202, 67, 220, 178, 156, 39, 2, 87, 147, 234, 85, 199, 97, 10, 151, 240, 121, - 229, 132, 230, 249, 244, 57, 77, 29, 123, 149, 121, 81, 245, 37, 106, 157, + 229, 132, 230, 249, 244, 57, 77, 29, 123, 149, 121, 81, 245, 37, 106, 157, 39, 185, 31, 175, 102, 187, 37, 149, 27, 215, 151, 155, 94, 160, 180, 59, 95, 200, 149, 42, 178, 85, 171, 41, 31, 20, 16, 199, 14, 202, 230, 42, 59, 83, 239, 155, 65, 63, 237, 89, 133, 62, 23, 112, 236, 226, 34, 250, - 134, 14, 234, 2, 212, 41, 135, 189, 114, 60, 147, 49, 19, 193, 169, 157, + 134, 14, 234, 2, 212, 41, 135, 189, 114, 60, 147, 49, 19, 193, 169, 157, 41, 62, 36, 42, 2, 172, 237, 250, 86, 252, 199, 80, 194, 195, 182, 136, - 209, 90, 80, 9, 121, 164, 168, 99, 235, 131, 129, 59, 26, 41, 124, 194, - 110, 143, 183, 126, 91, 50, 168, 211, 43, 177, 95, 196, 94, 206, 214, 173, + 209, 90, 80, 9, 121, 164, 168, 99, 235, 131, 129, 59, 26, 41, 124, 194, + 110, 143, 183, 126, 91, 50, 168, 211, 43, 177, 95, 196, 94, 206, 214, 173, 89, 152, 173, 39, 53, 190, 186, 193, 75, 23, 181, 65, 153, 57, 142, 215, - 155, 147, 241, 110, 230, 102, 176, 152, 227, 83, 87, 110, 243, 143, 254, 127, - 254, 117, 117, 173, 106, 80, 127, 231, 39, 220, 178, 44, 95, 30, 60, 222, - 212, 72, 169, 84, 194, 40, 164, 156, 145, 182, 127, 51, 64, 108, 144, 124, - 136, 238, 4, 113, 14, 68, 106, 158, 20, 231, 109, 99, 70, 214, 68, 29, - 240, 154, 95, 206, 188, 136, 180, 41, 220, 228, 198, 82, 51, 118, 65, 20, - 198, 187, 22, 8, 134, 252, 86, 227, 110, 105, 198, 242, 48, 8, 192, 165, + 155, 147, 241, 110, 230, 102, 176, 152, 227, 83, 87, 110, 243, 143, 254, 127, + 254, 117, 117, 173, 106, 80, 127, 231, 39, 220, 178, 44, 95, 30, 60, 222, + 212, 72, 169, 84, 194, 40, 164, 156, 145, 182, 127, 51, 64, 108, 144, 124, + 136, 238, 4, 113, 14, 68, 106, 158, 20, 231, 109, 99, 70, 214, 68, 29, + 240, 154, 95, 206, 188, 136, 180, 41, 220, 228, 198, 82, 51, 118, 65, 20, + 198, 187, 22, 8, 134, 252, 86, 227, 110, 105, 198, 242, 48, 8, 192, 165, 80, 210, 1, 175, 188, 99, 252, 178, 7, 70, 27, 249, 175, 145, 131, 228, 86, 229, 81, 93, 203, 194, 226, 110, 250, 134, 235, 195, 170, 107, 131, 185, 81, 99, 168, 124, 215, 108, 40, 198, 193, 117, 88, 136, 134, 114, 145, 239, - 9, 0, 184, 106, 111, 63, 6, 92, 30, 3, 116, 7, 232, 182, 184, 60, + 9, 0, 184, 106, 111, 63, 6, 92, 30, 3, 116, 7, 232, 182, 184, 60, 32, 161, 183, 167, 163, 185, 114, 43, 77, 134, 29, 164, 135, 3, 155, 255, 83, 254, 203, 1, 243, 167, 236, 162, 77, 140, 250, 224, 25, 246, 81, 147, - 207, 0, 127, 115, 127, 151, 191, 179, 128, 77, 142, 203, 171, 153, 47, 244, - 165, 235, 20, 64, 36, 99, 201, 190, 83, 244, 125, 112, 49, 26, 95, 125, - 254, 140, 85, 142, 112, 170, 225, 4, 126, 243, 224, 180, 137, 152, 102, 9, + 207, 0, 127, 115, 127, 151, 191, 179, 128, 77, 142, 203, 171, 153, 47, 244, + 165, 235, 20, 64, 36, 99, 201, 190, 83, 244, 125, 112, 49, 26, 95, 125, + 254, 140, 85, 142, 112, 170, 225, 4, 126, 243, 224, 180, 137, 152, 102, 9, 92, 67, 247, 20, 189, 58, 88, 74, 183, 201, 43, 1, 2, 123, 228, 211, 79, 91, 20, 64, 111, 238, 60, 76, 207, 91, 90, 130, 169, 238, 254, 208, - 125, 140, 7, 94, 63, 18, 46, 124, 16, 253, 228, 238, 179, 99, 129, 40, + 125, 140, 7, 94, 63, 18, 46, 124, 16, 253, 228, 238, 179, 99, 129, 40, 89, 12, 40, 42, 94, 237, 111, 112, 22, 162, 64, 25, 89, 102, 56, 25, - 245, 128, 221, 86, 146, 138, 242, 67, 166, 114, 204, 38, 89, 77, 127, 64, + 245, 128, 221, 86, 146, 138, 242, 67, 166, 114, 204, 38, 89, 77, 127, 64, 36, 183, 161, 254, 185, 76, 91, 10, 28, 146, 154, 254, 118, 200, 206, 95, - 6, 182, 35, 178, 179, 114, 87, 60, 208, 88, 180, 161, 171, 39, 156, 131, - 2, 83, 124, 11, 223, 57, 190, 18, 79, 245, 198, 11, 55, 131, 197, 28, + 6, 182, 35, 178, 179, 114, 87, 60, 208, 88, 180, 161, 171, 39, 156, 131, + 2, 83, 124, 11, 223, 57, 190, 18, 79, 245, 198, 11, 55, 131, 197, 28, 74, 32, 223, 144, 231, 227, 25, 237, 243, 145, 64, 183, 62, 163, 33, 93, - 155, 82, 228, 206, 69, 77, 101, 8, 240, 3, 135, 0, 181, 153, 174, 82, + 155, 82, 228, 206, 69, 77, 101, 8, 240, 3, 135, 0, 181, 153, 174, 82, 29, 129, 40, 83, 235, 83, 98, 105, 235, 210, 121, 239, 78, 240, 217, 144, - 230, 225, 3, 157, 14, 118, 64, 228, 29, 110, 230, 247, 153, 117, 3, 81, + 230, 225, 3, 157, 14, 118, 64, 228, 29, 110, 230, 247, 153, 117, 3, 81, 24, 23, 169, 2, 247, 238, 144, 137, 241, 140, 192, 185, 165, 13, 122, 48, - 180, 254, 54, 128, 134, 247, 87, 42, 219, 166, 7, 248, 91, 39, 226, 245, + 180, 254, 54, 128, 134, 247, 87, 42, 219, 166, 7, 248, 91, 39, 226, 245, 44, 152, 30, 71, 125, 129, 102, 72, 16, 66, 119, 15, 189, 250, 70, 112, - 168, 7, 5, 181, 15, 114, 73, 112, 16, 184, 65, 192, 54, 51, 31, 202, + 168, 7, 5, 181, 15, 114, 73, 112, 16, 184, 65, 192, 54, 51, 31, 202, 38, 11, 170, 149, 37, 107, 44, 241, 30, 35, 23, 176, 99, 82, 230, 60, - 206, 39, 249, 227, 114, 152, 133, 233, 60, 188, 79, 52, 241, 191, 208, 160, - 213, 159, 219, 188, 222, 47, 235, 187, 9, 186, 112, 78, 101, 229, 115, 152, - 216, 196, 88, 228, 189, 226, 214, 40, 163, 155, 193, 238, 224, 72, 64, 199, - 4, 182, 248, 143, 219, 170, 227, 55, 215, 135, 92, 117, 56, 225, 220, 129, + 206, 39, 249, 227, 114, 152, 133, 233, 60, 188, 79, 52, 241, 191, 208, 160, + 213, 159, 219, 188, 222, 47, 235, 187, 9, 186, 112, 78, 101, 229, 115, 152, + 216, 196, 88, 228, 189, 226, 214, 40, 163, 155, 193, 238, 224, 72, 64, 199, + 4, 182, 248, 143, 219, 170, 227, 55, 215, 135, 92, 117, 56, 225, 220, 129, 74, 226, 55, 132, 73, 213, 81, 93, 107, 49, 29, 155, 62, 141, 48, 190, - 242, 221, 95, 61, 179, 165, 213, 49, 125, 245, 106, 35, 24, 57, 103, 140, + 242, 221, 95, 61, 179, 165, 213, 49, 125, 245, 106, 35, 24, 57, 103, 140, 79, 172, 38, 29, 170, 145, 151, 204, 114, 161, 117, 2, 199, 145, 210, 184, 71, 80, 251, 182, 67, 220, 3, 2, 210, 28, 17, 104, 68, 150, 255, 174, 34, 206, 245, 97, 173, 8, 92, 160, 144, 149, 54, 57, 114, 145, 215, 115, - 186, 145, 165, 186, 207, 107, 14, 255, 88, 145, 225, 110, 190, 78, 93, 147, - 225, 247, 122, 52, 135, 147, 89, 3, 10, 119, 43, 154, 29, 186, 68, 50, - 125, 152, 205, 242, 113, 106, 80, 68, 21, 45, 147, 212, 5, 1, 27, 39, + 186, 145, 165, 186, 207, 107, 14, 255, 88, 145, 225, 110, 190, 78, 93, 147, + 225, 247, 122, 52, 135, 147, 89, 3, 10, 119, 43, 154, 29, 186, 68, 50, + 125, 152, 205, 242, 113, 106, 80, 68, 21, 45, 147, 212, 5, 1, 27, 39, 51, 221, 25, 38, 102, 67, 194, 250, 121, 51, 66, 76, 155, 205, 199, 54, - 177, 202, 0, 249, 225, 231, 179, 69, 52, 22, 87, 77, 193, 35, 88, 3, - 238, 62, 12, 159, 221, 203, 230, 122, 92, 71, 26, 218, 41, 218, 75, 21, - 201, 166, 224, 173, 110, 185, 97, 161, 227, 9, 43, 108, 162, 62, 228, 201, + 177, 202, 0, 249, 225, 231, 179, 69, 52, 22, 87, 77, 193, 35, 88, 3, + 238, 62, 12, 159, 221, 203, 230, 122, 92, 71, 26, 218, 41, 218, 75, 21, + 201, 166, 224, 173, 110, 185, 97, 161, 227, 9, 43, 108, 162, 62, 228, 201, 32, 178, 191, 115, 35, 118, 59, 165, 223, 135, 132, 230, 110, 213, 96, 68, - 190, 237, 213, 146, 85, 179, 242, 155, 122, 217, 7, 105, 70, 123, 10, 5, - 122, 153, 202, 218, 195, 207, 73, 175, 161, 31, 200, 47, 237, 64, 34, 227, + 190, 237, 213, 146, 85, 179, 242, 155, 122, 217, 7, 105, 70, 123, 10, 5, + 122, 153, 202, 218, 195, 207, 73, 175, 161, 31, 200, 47, 237, 64, 34, 227, 34, 66, 58, 29, 28, 166, 242, 128, 33, 79, 32, 125, 60, 207, 222, 195, - 180, 137, 78, 177, 132, 249, 147, 38, 64, 247, 181, 81, 96, 155, 167, 113, + 180, 137, 78, 177, 132, 249, 147, 38, 64, 247, 181, 81, 96, 155, 167, 113, 95, 197, 30, 83, 18, 128, 93, 131, 242, 197, 50, 146, 106, 143, 56, 216, 80, 80, 159, 164, 154, 220, 248, 193, 58, 253, 63, 219, 91, 140, 170, 71, - 152, 8, 69, 37, 138, 179, 223, 54, 98, 229, 181, 107, 50, 174, 6, 20, + 152, 8, 69, 37, 138, 179, 223, 54, 98, 229, 181, 107, 50, 174, 6, 20, 69, 101, 50, 57, 102, 61, 123, 218, 226, 77, 25, 129, 188, 103, 22, 81, 66, 232, 19, 88, 103, 184, 87, 252, 109, 31, 242, 40, 37, 238, 237, 20, - 232, 170, 115, 36, 83, 127, 65, 208, 85, 56, 192, 120, 116, 153, 200, 116, - 108, 243, 110, 8, 9, 162, 206, 172, 25, 0, 103, 79, 239, 8, 184, 142, + 232, 170, 115, 36, 83, 127, 65, 208, 85, 56, 192, 120, 116, 153, 200, 116, + 108, 243, 110, 8, 9, 162, 206, 172, 25, 0, 103, 79, 239, 8, 184, 142, 87, 86, 95, 139, 223, 180, 6, 205, 39, 76, 25, 62, 32, 244, 171, 152, - 146, 48, 224, 20, 23, 219, 250, 115, 159, 131, 14, 91, 5, 27, 26, 60, - 239, 5, 41, 159, 226, 103, 177, 43, 224, 51, 123, 129, 148, 18, 241, 66, - 192, 199, 151, 94, 207, 238, 120, 34, 234, 75, 193, 65, 66, 243, 125, 21, + 146, 48, 224, 20, 23, 219, 250, 115, 159, 131, 14, 91, 5, 27, 26, 60, + 239, 5, 41, 159, 226, 103, 177, 43, 224, 51, 123, 129, 148, 18, 241, 66, + 192, 199, 151, 94, 207, 238, 120, 34, 234, 75, 193, 65, 66, 243, 125, 21, 57, 113, 143, 44, 49, 153, 168, 129, 102, 21, 17, 101, 182, 217, 216, 17, - 7, 70, 99, 194, 34, 47, 49, 241, 25, 242, 163, 251, 28, 172, 167, 4, + 7, 70, 99, 194, 34, 47, 49, 241, 25, 242, 163, 251, 28, 172, 167, 4, 96, 213, 236, 60, 223, 52, 150, 216, 168, 157, 5, 56, 126, 50, 228, 130, - 166, 54, 196, 85, 86, 162, 154, 82, 84, 34, 228, 235, 157, 230, 47, 77, - 151, 127, 226, 82, 145, 205, 201, 40, 49, 178, 228, 77, 132, 208, 93, 4, - 2, 73, 46, 69, 188, 60, 130, 217, 1, 97, 177, 240, 18, 26, 141, 97, - 5, 170, 82, 56, 218, 83, 3, 29, 228, 13, 179, 232, 154, 50, 152, 40, + 166, 54, 196, 85, 86, 162, 154, 82, 84, 34, 228, 235, 157, 230, 47, 77, + 151, 127, 226, 82, 145, 205, 201, 40, 49, 178, 228, 77, 132, 208, 93, 4, + 2, 73, 46, 69, 188, 60, 130, 217, 1, 97, 177, 240, 18, 26, 141, 97, + 5, 170, 82, 56, 218, 83, 3, 29, 228, 13, 179, 232, 154, 50, 152, 40, 58, 0, 202, 195, 36, 91, 104, 37, 10, 89, 0, 250, 146, 45, 248, 68, 37, 180, 129, 46, 138, 43, 98, 40, 122, 174, 147, 85, 94, 255, 76, 129, - 245, 135, 198, 206, 144, 189, 190, 207, 253, 191, 104, 163, 141, 116, 1, 192, - 200, 193, 205, 196, 151, 231, 254, 190, 17, 172, 254, 196, 243, 72, 234, 236, + 245, 135, 198, 206, 144, 189, 190, 207, 253, 191, 104, 163, 141, 116, 1, 192, + 200, 193, 205, 196, 151, 231, 254, 190, 17, 172, 254, 196, 243, 72, 234, 236, 92, 108, 153, 184, 39, 201, 109, 233, 38, 178, 163, 46, 150, 153, 170, 238, 84, 196, 155, 171, 31, 3, 186, 55, 87, 100, 179, 61, 163, 119, 82, 75, - 107, 173, 8, 145, 135, 226, 243, 8, 38, 102, 123, 120, 169, 215, 177, 132, - 111, 26, 242, 205, 150, 143, 197, 152, 137, 193, 174, 171, 234, 183, 221, 189, + 107, 173, 8, 145, 135, 226, 243, 8, 38, 102, 123, 120, 169, 215, 177, 132, + 111, 26, 242, 205, 150, 143, 197, 152, 137, 193, 174, 171, 234, 183, 221, 189, 40, 212, 191, 137, 47, 153, 85, 76, 59, 255, 16, 51, 186, 105, 224, 14, 73, 41, 84, 42, 12, 186, 198, 133, 82, 8, 161, 173, 130, 25, 26, 22, - 152, 132, 221, 182, 68, 126, 160, 248, 183, 112, 129, 83, 181, 55, 17, 145, + 152, 132, 221, 182, 68, 126, 160, 248, 183, 112, 129, 83, 181, 55, 17, 145, 18, 220, 143, 17, 49, 18, 15, 191, 104, 40, 67, 139, 127, 106, 56, 65, - 4, 120, 100, 5, 88, 44, 82, 240, 138, 64, 42, 158, 24, 130, 133, 237, - 235, 112, 115, 164, 249, 247, 233, 173, 116, 245, 23, 37, 216, 180, 118, 183, + 4, 120, 100, 5, 88, 44, 82, 240, 138, 64, 42, 158, 24, 130, 133, 237, + 235, 112, 115, 164, 249, 247, 233, 173, 116, 245, 23, 37, 216, 180, 118, 183, 58, 246, 254, 103, 93, 55, 36, 213, 76, 134, 122, 116, 164, 15, 11, 115, - 168, 185, 226, 79, 250, 236, 172, 24, 226, 48, 150, 67, 128, 63, 211, 235, - 219, 120, 216, 18, 31, 82, 136, 105, 151, 118, 193, 43, 33, 155, 55, 8, + 168, 185, 226, 79, 250, 236, 172, 24, 226, 48, 150, 67, 128, 63, 211, 235, + 219, 120, 216, 18, 31, 82, 136, 105, 151, 118, 193, 43, 33, 155, 55, 8, 17, 3, 211, 110, 115, 27, 122, 3, 195, 97, 1, 227, 22, 124, 213, 59, 89, 13, 253, 221, 207, 229, 25, 72, 200, 144, 209, 147, 185, 68, 132, 104, - 7, 34, 237, 45, 2, 17, 209, 87, 170, 227, 60, 230, 53, 186, 59, 39, - 254, 57, 191, 201, 59, 202, 119, 144, 163, 255, 78, 199, 9, 59, 129, 64, - 232, 31, 20, 110, 63, 172, 85, 239, 97, 216, 252, 158, 76, 64, 55, 133, + 7, 34, 237, 45, 2, 17, 209, 87, 170, 227, 60, 230, 53, 186, 59, 39, + 254, 57, 191, 201, 59, 202, 119, 144, 163, 255, 78, 199, 9, 59, 129, 64, + 232, 31, 20, 110, 63, 172, 85, 239, 97, 216, 252, 158, 76, 64, 55, 133, 43, 101, 22, 4, 27, 134, 210, 9, 120, 44, 255, 105, 142, 83, 6, 238, 61, 226, 118, 111, 217, 234, 153, 48, 9, 193, 133, 172, 20, 121, 210, 40, - 243, 49, 13, 184, 152, 126, 248, 100, 37, 187, 216, 15, 250, 86, 178, 24, + 243, 49, 13, 184, 152, 126, 248, 100, 37, 187, 216, 15, 250, 86, 178, 24, 30, 174, 216, 151, 139, 27, 166, 190, 200, 228, 25, 152, 212, 70, 7, 45, - 141, 54, 143, 106, 206, 49, 170, 195, 61, 24, 81, 20, 116, 147, 95, 49, - 245, 179, 223, 237, 184, 110, 49, 158, 190, 211, 132, 30, 22, 195, 234, 167, - 143, 4, 26, 9, 215, 48, 100, 53, 221, 177, 172, 132, 184, 229, 165, 207, - 213, 192, 26, 58, 211, 227, 65, 148, 198, 5, 248, 169, 32, 121, 24, 164, - 193, 137, 218, 218, 105, 42, 136, 146, 91, 72, 238, 231, 24, 17, 108, 194, - 206, 5, 180, 101, 199, 161, 172, 130, 78, 110, 255, 62, 158, 111, 204, 223, + 141, 54, 143, 106, 206, 49, 170, 195, 61, 24, 81, 20, 116, 147, 95, 49, + 245, 179, 223, 237, 184, 110, 49, 158, 190, 211, 132, 30, 22, 195, 234, 167, + 143, 4, 26, 9, 215, 48, 100, 53, 221, 177, 172, 132, 184, 229, 165, 207, + 213, 192, 26, 58, 211, 227, 65, 148, 198, 5, 248, 169, 32, 121, 24, 164, + 193, 137, 218, 218, 105, 42, 136, 146, 91, 72, 238, 231, 24, 17, 108, 194, + 206, 5, 180, 101, 199, 161, 172, 130, 78, 110, 255, 62, 158, 111, 204, 223, 33, 183, 43, 10, 93, 253, 249, 193, 149, 89, 21, 51, 198, 186, 91, 142, - 121, 157, 35, 254, 21, 55, 2, 7, 119, 32, 175, 107, 199, 86, 174, 37, - 144, 192, 13, 234, 244, 152, 150, 77, 69, 91, 174, 141, 211, 71, 85, 190, - 231, 124, 80, 80, 137, 195, 5, 196, 21, 239, 110, 92, 99, 158, 247, 229, - 178, 99, 156, 222, 135, 119, 197, 242, 98, 58, 0, 134, 97, 197, 30, 113, - 164, 183, 9, 1, 97, 166, 94, 117, 183, 103, 45, 147, 215, 137, 8, 64, - 9, 149, 66, 130, 166, 94, 72, 48, 181, 156, 233, 167, 116, 59, 10, 117, - 203, 53, 110, 133, 3, 97, 84, 60, 179, 90, 47, 45, 78, 41, 89, 191, - 234, 81, 129, 69, 179, 76, 221, 176, 171, 58, 158, 151, 251, 79, 189, 124, - 159, 40, 189, 229, 126, 168, 24, 141, 209, 215, 105, 170, 166, 181, 113, 36, - 4, 172, 90, 123, 232, 154, 150, 224, 87, 249, 134, 136, 14, 28, 23, 67, + 121, 157, 35, 254, 21, 55, 2, 7, 119, 32, 175, 107, 199, 86, 174, 37, + 144, 192, 13, 234, 244, 152, 150, 77, 69, 91, 174, 141, 211, 71, 85, 190, + 231, 124, 80, 80, 137, 195, 5, 196, 21, 239, 110, 92, 99, 158, 247, 229, + 178, 99, 156, 222, 135, 119, 197, 242, 98, 58, 0, 134, 97, 197, 30, 113, + 164, 183, 9, 1, 97, 166, 94, 117, 183, 103, 45, 147, 215, 137, 8, 64, + 9, 149, 66, 130, 166, 94, 72, 48, 181, 156, 233, 167, 116, 59, 10, 117, + 203, 53, 110, 133, 3, 97, 84, 60, 179, 90, 47, 45, 78, 41, 89, 191, + 234, 81, 129, 69, 179, 76, 221, 176, 171, 58, 158, 151, 251, 79, 189, 124, + 159, 40, 189, 229, 126, 168, 24, 141, 209, 215, 105, 170, 166, 181, 113, 36, + 4, 172, 90, 123, 232, 154, 150, 224, 87, 249, 134, 136, 14, 28, 23, 67, 78, 187, 209, 55, 157, 95, 36, 136, 83, 103, 54, 236, 62, 81, 66, 44, 85, 120, 219, 178, 62, 126, 203, 193, 229, 146, 25, 187, 254, 141, 147, 185, - 158, 103, 216, 216, 38, 34, 245, 43, 169, 200, 129, 130, 7, 239, 207, 155, - 250, 89, 209, 238, 20, 74, 133, 100, 67, 149, 41, 187, 72, 9, 135, 165, - 140, 14, 90, 51, 241, 216, 7, 176, 238, 254, 84, 53, 231, 87, 12, 51, - 222, 54, 70, 163, 101, 130, 63, 37, 120, 180, 219, 161, 69, 213, 233, 130, - 199, 124, 2, 36, 224, 140, 95, 201, 23, 72, 219, 222, 181, 237, 134, 11, - 103, 94, 246, 251, 215, 218, 228, 90, 36, 54, 237, 49, 204, 13, 194, 221, + 158, 103, 216, 216, 38, 34, 245, 43, 169, 200, 129, 130, 7, 239, 207, 155, + 250, 89, 209, 238, 20, 74, 133, 100, 67, 149, 41, 187, 72, 9, 135, 165, + 140, 14, 90, 51, 241, 216, 7, 176, 238, 254, 84, 53, 231, 87, 12, 51, + 222, 54, 70, 163, 101, 130, 63, 37, 120, 180, 219, 161, 69, 213, 233, 130, + 199, 124, 2, 36, 224, 140, 95, 201, 23, 72, 219, 222, 181, 237, 134, 11, + 103, 94, 246, 251, 215, 218, 228, 90, 36, 54, 237, 49, 204, 13, 194, 221, 18, 186, 35, 144, 179, 2, 98, 90, 110, 165, 66, 38, 152, 206, 0, 121, 90, 25, 94, 145, 133, 58, 143, 138, 175, 80, 233, 110, 78, 84, 0, 207, 87, 78, 27, 243, 160, 231, 241, 83, 173, 163, 191, 205, 184, 216, 232, 36, - 194, 52, 5, 72, 249, 42, 103, 254, 213, 41, 159, 209, 56, 222, 40, 224, - 177, 195, 214, 11, 84, 221, 245, 137, 131, 23, 220, 251, 167, 17, 34, 214, + 194, 52, 5, 72, 249, 42, 103, 254, 213, 41, 159, 209, 56, 222, 40, 224, + 177, 195, 214, 11, 84, 221, 245, 137, 131, 23, 220, 251, 167, 17, 34, 214, 41, 102, 226, 223, 79, 53, 119, 84, 17, 219, 19, 80, 90, 132, 19, 176, 73, 145, 38, 28, 198, 176, 141, 92, 242, 69, 174, 63, 244, 44, 152, 102, - 120, 151, 167, 115, 67, 110, 119, 159, 56, 63, 29, 70, 253, 118, 119, 220, - 181, 71, 193, 167, 77, 178, 236, 187, 193, 236, 147, 231, 209, 56, 168, 202, - 7, 198, 208, 17, 20, 31, 42, 70, 237, 148, 162, 161, 128, 135, 88, 37, - 219, 56, 83, 248, 116, 20, 44, 17, 231, 156, 187, 251, 237, 165, 123, 165, - 181, 166, 212, 99, 132, 26, 122, 240, 223, 130, 235, 248, 239, 11, 161, 32, - 109, 210, 97, 173, 12, 251, 94, 118, 7, 107, 206, 105, 158, 16, 4, 245, - 159, 67, 150, 226, 53, 42, 241, 249, 146, 107, 111, 75, 147, 136, 141, 97, + 120, 151, 167, 115, 67, 110, 119, 159, 56, 63, 29, 70, 253, 118, 119, 220, + 181, 71, 193, 167, 77, 178, 236, 187, 193, 236, 147, 231, 209, 56, 168, 202, + 7, 198, 208, 17, 20, 31, 42, 70, 237, 148, 162, 161, 128, 135, 88, 37, + 219, 56, 83, 248, 116, 20, 44, 17, 231, 156, 187, 251, 237, 165, 123, 165, + 181, 166, 212, 99, 132, 26, 122, 240, 223, 130, 235, 248, 239, 11, 161, 32, + 109, 210, 97, 173, 12, 251, 94, 118, 7, 107, 206, 105, 158, 16, 4, 245, + 159, 67, 150, 226, 53, 42, 241, 249, 146, 107, 111, 75, 147, 136, 141, 97, 49, 101, 233, 168, 197, 72, 95, 138, 162, 103, 154, 162, 192, 78, 41, 102, 52, 207, 165, 48, 93, 41, 104, 136, 91, 169, 167, 51, 217, 197, 25, 238, - 3, 4, 35, 64, 146, 153, 32, 107, 66, 225, 249, 148, 225, 130, 197, 194, + 3, 4, 35, 64, 146, 153, 32, 107, 66, 225, 249, 148, 225, 130, 197, 194, 34, 100, 235, 200, 204, 39, 230, 37, 103, 219, 139, 8, 232, 63, 95, 154, 76, 195, 226, 187, 206, 116, 21, 40, 98, 177, 244, 9, 114, 148, 22, 185, - 243, 93, 8, 84, 137, 114, 217, 240, 69, 185, 123, 1, 225, 160, 221, 183, + 243, 93, 8, 84, 137, 114, 217, 240, 69, 185, 123, 1, 225, 160, 221, 183, 81, 159, 31, 66, 221, 201, 197, 113, 137, 181, 249, 211, 211, 226, 62, 12, - 116, 111, 130, 197, 99, 85, 29, 191, 94, 14, 166, 137, 147, 14, 133, 58, - 230, 148, 144, 87, 48, 117, 252, 64, 114, 18, 185, 63, 164, 159, 26, 79, - 188, 242, 126, 223, 213, 245, 195, 144, 19, 68, 175, 73, 15, 90, 45, 245, - 111, 212, 15, 108, 108, 199, 180, 231, 92, 251, 69, 251, 100, 179, 160, 125, - 250, 42, 79, 118, 101, 195, 108, 15, 243, 124, 76, 248, 137, 80, 49, 16, - 233, 89, 247, 188, 102, 212, 82, 111, 184, 67, 70, 110, 79, 241, 15, 157, - 225, 66, 87, 81, 35, 200, 210, 21, 243, 196, 86, 48, 46, 152, 150, 236, + 116, 111, 130, 197, 99, 85, 29, 191, 94, 14, 166, 137, 147, 14, 133, 58, + 230, 148, 144, 87, 48, 117, 252, 64, 114, 18, 185, 63, 164, 159, 26, 79, + 188, 242, 126, 223, 213, 245, 195, 144, 19, 68, 175, 73, 15, 90, 45, 245, + 111, 212, 15, 108, 108, 199, 180, 231, 92, 251, 69, 251, 100, 179, 160, 125, + 250, 42, 79, 118, 101, 195, 108, 15, 243, 124, 76, 248, 137, 80, 49, 16, + 233, 89, 247, 188, 102, 212, 82, 111, 184, 67, 70, 110, 79, 241, 15, 157, + 225, 66, 87, 81, 35, 200, 210, 21, 243, 196, 86, 48, 46, 152, 150, 236, 76, 45, 178, 131, 90, 85, 147, 107, 25, 194, 182, 106, 191, 161, 71, 94, - 211, 172, 93, 128, 17, 188, 240, 127, 4, 18, 124, 199, 122, 163, 140, 228, + 211, 172, 93, 128, 17, 188, 240, 127, 4, 18, 124, 199, 122, 163, 140, 228, 91, 163, 59, 197, 191, 231, 162, 77, 248, 24, 168, 119, 182, 169, 140, 55, - 207, 105, 70, 81, 32, 79, 212, 1, 59, 11, 55, 145, 61, 90, 134, 202, + 207, 105, 70, 81, 32, 79, 212, 1, 59, 11, 55, 145, 61, 90, 134, 202, 49, 105, 117, 158, 91, 86, 139, 55, 90, 171, 167, 237, 141, 1, 184, 49, 63, 7, 226, 53, 153, 200, 188, 224, 234, 104, 101, 118, 238, 93, 34, 252, - 120, 251, 177, 103, 213, 173, 184, 231, 225, 111, 186, 210, 40, 111, 65, 4, + 120, 251, 177, 103, 213, 173, 184, 231, 225, 111, 186, 210, 40, 111, 65, 4, 60, 124, 221, 67, 201, 210, 65, 90, 74, 36, 39, 88, 233, 64, 172, 179, 18, 59, 182, 82, 152, 192, 154, 220, 209, 184, 218, 210, 172, 250, 155, 199, - 175, 246, 218, 45, 211, 204, 131, 204, 73, 107, 246, 52, 133, 102, 103, 135, - 5, 46, 175, 63, 204, 92, 108, 126, 126, 194, 208, 178, 166, 198, 191, 240, - 128, 5, 203, 189, 102, 148, 65, 29, 146, 2, 24, 21, 201, 147, 145, 248, + 175, 246, 218, 45, 211, 204, 131, 204, 73, 107, 246, 52, 133, 102, 103, 135, + 5, 46, 175, 63, 204, 92, 108, 126, 126, 194, 208, 178, 166, 198, 191, 240, + 128, 5, 203, 189, 102, 148, 65, 29, 146, 2, 24, 21, 201, 147, 145, 248, 85, 77, 63, 245, 176, 199, 198, 237, 34, 101, 159, 144, 166, 29, 102, 175, - 121, 78, 75, 196, 204, 80, 156, 236, 198, 232, 117, 112, 135, 61, 63, 63, + 121, 78, 75, 196, 204, 80, 156, 236, 198, 232, 117, 112, 135, 61, 63, 63, 82, 2, 65, 139, 70, 69, 78, 64, 48, 154, 15, 250, 79, 190, 251, 94, - 205, 252, 236, 241, 2, 171, 232, 118, 128, 71, 18, 55, 49, 13, 27, 36, - 149, 220, 149, 150, 55, 200, 192, 151, 47, 218, 134, 205, 93, 7, 206, 44, - 229, 208, 62, 208, 55, 55, 239, 63, 45, 154, 171, 70, 223, 144, 78, 251, - 5, 138, 224, 21, 184, 87, 55, 69, 224, 231, 37, 65, 87, 114, 78, 216, + 205, 252, 236, 241, 2, 171, 232, 118, 128, 71, 18, 55, 49, 13, 27, 36, + 149, 220, 149, 150, 55, 200, 192, 151, 47, 218, 134, 205, 93, 7, 206, 44, + 229, 208, 62, 208, 55, 55, 239, 63, 45, 154, 171, 70, 223, 144, 78, 251, + 5, 138, 224, 21, 184, 87, 55, 69, 224, 231, 37, 65, 87, 114, 78, 216, 41, 49, 143, 233, 182, 214, 84, 20, 20, 156, 17, 12, 173, 172, 80, 151, 37, 28, 191, 69, 146, 102, 65, 15, 152, 143, 198, 45, 204, 4, 140, 90, - 149, 45, 157, 190, 119, 196, 121, 199, 176, 122, 198, 141, 161, 31, 24, 149, + 149, 45, 157, 190, 119, 196, 121, 199, 176, 122, 198, 141, 161, 31, 24, 149, 96, 231, 70, 122, 160, 19, 100, 75, 112, 141, 18, 175, 109, 98, 19, 110, - 237, 1, 5, 171, 153, 19, 251, 61, 180, 249, 9, 187, 196, 248, 127, 13, + 237, 1, 5, 171, 153, 19, 251, 61, 180, 249, 9, 187, 196, 248, 127, 13, 21, 244, 224, 42, 97, 40, 236, 190, 18, 123, 133, 26, 235, 9, 150, 90, 21, 189, 189, 101, 226, 190, 82, 18, 45, 3, 172, 187, 72, 74, 244, 211, 76, 2, 70, 168, 41, 195, 165, 178, 139, 5, 155, 100, 199, 0, 227, 72, - 247, 186, 33, 169, 34, 104, 196, 3, 253, 202, 19, 140, 100, 122, 144, 125, - 201, 202, 194, 245, 180, 27, 10, 207, 180, 31, 25, 152, 243, 143, 51, 90, + 247, 186, 33, 169, 34, 104, 196, 3, 253, 202, 19, 140, 100, 122, 144, 125, + 201, 202, 194, 245, 180, 27, 10, 207, 180, 31, 25, 152, 243, 143, 51, 90, 33, 74, 147, 127, 66, 47, 10, 65, 99, 71, 243, 241, 221, 219, 32, 213, 98, 67, 119, 130, 254, 11, 149, 64, 73, 168, 73, 237, 110, 18, 243, 21, - 177, 53, 109, 2, 242, 89, 136, 34, 36, 135, 12, 12, 125, 251, 104, 137, - 128, 152, 41, 70, 163, 184, 237, 137, 249, 63, 56, 133, 39, 0, 243, 248, + 177, 53, 109, 2, 242, 89, 136, 34, 36, 135, 12, 12, 125, 251, 104, 137, + 128, 152, 41, 70, 163, 184, 237, 137, 249, 63, 56, 133, 39, 0, 243, 248, 80, 184, 48, 238, 155, 193, 21, 137, 95, 144, 146, 209, 151, 197, 199, 122, 60, 48, 250, 1, 79, 162, 58, 78, 225, 184, 199, 35, 186, 225, 19, 68, 31, 199, 150, 85, 197, 76, 246, 150, 47, 63, 55, 196, 200, 10, 163, 170, - 246, 34, 196, 87, 0, 45, 18, 6, 168, 248, 130, 184, 5, 197, 97, 56, - 128, 254, 236, 32, 10, 182, 198, 139, 255, 43, 41, 159, 119, 253, 81, 248, - 251, 253, 184, 98, 229, 6, 8, 64, 48, 190, 105, 125, 168, 191, 43, 93, - 156, 39, 244, 220, 138, 197, 117, 27, 152, 145, 254, 233, 211, 33, 234, 5, + 246, 34, 196, 87, 0, 45, 18, 6, 168, 248, 130, 184, 5, 197, 97, 56, + 128, 254, 236, 32, 10, 182, 198, 139, 255, 43, 41, 159, 119, 253, 81, 248, + 251, 253, 184, 98, 229, 6, 8, 64, 48, 190, 105, 125, 168, 191, 43, 93, + 156, 39, 244, 220, 138, 197, 117, 27, 152, 145, 254, 233, 211, 33, 234, 5, 72, 247, 49, 221, 35, 188, 210, 20, 231, 90, 255, 37, 30, 126, 209, 65, - 137, 123, 126, 191, 158, 227, 201, 129, 19, 164, 51, 232, 188, 185, 96, 67, + 137, 123, 126, 191, 158, 227, 201, 129, 19, 164, 51, 232, 188, 185, 96, 67, 24, 190, 56, 16, 229, 34, 219, 150, 137, 226, 59, 58, 3, 147, 232, 35, 99, 207, 101, 173, 217, 18, 139, 1, 94, 123, 4, 232, 147, 243, 13, 193, - 193, 187, 232, 100, 187, 119, 105, 72, 86, 30, 165, 20, 192, 19, 157, 67, - 253, 204, 246, 133, 85, 252, 109, 169, 106, 203, 83, 72, 51, 217, 172, 7, - 212, 104, 170, 166, 21, 181, 11, 14, 145, 33, 175, 235, 169, 66, 203, 78, - 108, 209, 100, 131, 93, 192, 70, 157, 186, 224, 174, 173, 22, 167, 87, 244, - 227, 218, 96, 98, 186, 24, 205, 62, 66, 79, 198, 254, 160, 37, 127, 16, + 193, 187, 232, 100, 187, 119, 105, 72, 86, 30, 165, 20, 192, 19, 157, 67, + 253, 204, 246, 133, 85, 252, 109, 169, 106, 203, 83, 72, 51, 217, 172, 7, + 212, 104, 170, 166, 21, 181, 11, 14, 145, 33, 175, 235, 169, 66, 203, 78, + 108, 209, 100, 131, 93, 192, 70, 157, 186, 224, 174, 173, 22, 167, 87, 244, + 227, 218, 96, 98, 186, 24, 205, 62, 66, 79, 198, 254, 160, 37, 127, 16, 95, 171, 47, 34, 80, 43, 26, 111, 65, 207, 29, 139, 135, 69, 13, 110, - 133, 110, 65, 140, 61, 207, 117, 98, 106, 29, 166, 224, 78, 208, 252, 194, + 133, 110, 65, 140, 61, 207, 117, 98, 106, 29, 166, 224, 78, 208, 252, 194, 91, 4, 38, 0, 61, 133, 180, 168, 149, 211, 7, 80, 227, 135, 51, 11, - 249, 228, 26, 198, 244, 2, 47, 226, 93, 147, 222, 125, 200, 205, 166, 154, - 234, 80, 39, 70, 84, 98, 209, 1, 6, 219, 17, 11, 253, 126, 145, 231, - 131, 14, 163, 107, 200, 195, 167, 64, 6, 101, 209, 255, 116, 179, 69, 164, - 133, 23, 78, 98, 105, 182, 236, 34, 246, 58, 81, 183, 100, 30, 44, 187, - 164, 91, 239, 132, 51, 154, 9, 2, 215, 186, 191, 79, 237, 179, 141, 169, - 237, 206, 190, 201, 64, 223, 143, 60, 173, 108, 96, 216, 183, 70, 110, 5, + 249, 228, 26, 198, 244, 2, 47, 226, 93, 147, 222, 125, 200, 205, 166, 154, + 234, 80, 39, 70, 84, 98, 209, 1, 6, 219, 17, 11, 253, 126, 145, 231, + 131, 14, 163, 107, 200, 195, 167, 64, 6, 101, 209, 255, 116, 179, 69, 164, + 133, 23, 78, 98, 105, 182, 236, 34, 246, 58, 81, 183, 100, 30, 44, 187, + 164, 91, 239, 132, 51, 154, 9, 2, 215, 186, 191, 79, 237, 179, 141, 169, + 237, 206, 190, 201, 64, 223, 143, 60, 173, 108, 96, 216, 183, 70, 110, 5, 59, 230, 206, 194, 40, 211, 109, 146, 1, 102, 194, 212, 90, 214, 43, 111, - 134, 122, 146, 9, 220, 198, 72, 196, 68, 19, 214, 220, 11, 173, 243, 15, - 254, 158, 193, 211, 191, 55, 163, 212, 18, 20, 42, 199, 191, 74, 238, 191, - 113, 173, 125, 203, 48, 1, 119, 32, 224, 8, 178, 179, 0, 67, 153, 62, - 227, 25, 254, 126, 23, 87, 67, 43, 45, 250, 42, 214, 118, 179, 111, 189, - 103, 133, 35, 196, 54, 23, 203, 218, 59, 177, 194, 55, 210, 153, 78, 207, - 145, 157, 229, 119, 218, 173, 20, 104, 251, 48, 204, 245, 166, 251, 123, 82, - 175, 239, 215, 158, 200, 1, 174, 40, 200, 32, 108, 184, 0, 137, 90, 81, - 159, 128, 165, 10, 233, 210, 52, 48, 74, 164, 246, 199, 240, 154, 12, 254, + 134, 122, 146, 9, 220, 198, 72, 196, 68, 19, 214, 220, 11, 173, 243, 15, + 254, 158, 193, 211, 191, 55, 163, 212, 18, 20, 42, 199, 191, 74, 238, 191, + 113, 173, 125, 203, 48, 1, 119, 32, 224, 8, 178, 179, 0, 67, 153, 62, + 227, 25, 254, 126, 23, 87, 67, 43, 45, 250, 42, 214, 118, 179, 111, 189, + 103, 133, 35, 196, 54, 23, 203, 218, 59, 177, 194, 55, 210, 153, 78, 207, + 145, 157, 229, 119, 218, 173, 20, 104, 251, 48, 204, 245, 166, 251, 123, 82, + 175, 239, 215, 158, 200, 1, 174, 40, 200, 32, 108, 184, 0, 137, 90, 81, + 159, 128, 165, 10, 233, 210, 52, 48, 74, 164, 246, 199, 240, 154, 12, 254, 70, 37, 106, 44, 85, 123, 151, 119, 153, 170, 48, 144, 241, 114, 64, 115, - 120, 159, 13, 49, 211, 182, 99, 124, 25, 70, 73, 196, 179, 201, 219, 124, + 120, 159, 13, 49, 211, 182, 99, 124, 25, 70, 73, 196, 179, 201, 219, 124, 22, 137, 229, 160, 155, 10, 158, 234, 132, 203, 208, 76, 81, 98, 30, 142, - 154, 68, 158, 92, 107, 252, 4, 22, 218, 2, 167, 190, 152, 141, 251, 137, - 236, 87, 186, 235, 90, 0, 132, 68, 232, 66, 63, 0, 41, 235, 157, 45, + 154, 68, 158, 92, 107, 252, 4, 22, 218, 2, 167, 190, 152, 141, 251, 137, + 236, 87, 186, 235, 90, 0, 132, 68, 232, 66, 63, 0, 41, 235, 157, 45, 68, 194, 45, 18, 249, 254, 60, 33, 10, 86, 183, 45, 5, 253, 253, 212, 44, 94, 203, 41, 53, 146, 101, 148, 123, 198, 92, 14, 181, 87, 49, 229, - 177, 249, 216, 8, 12, 37, 108, 220, 236, 13, 72, 122, 48, 235, 219, 74, - 220, 187, 130, 66, 249, 41, 184, 140, 101, 1, 203, 110, 22, 62, 23, 118, - 199, 32, 191, 162, 140, 187, 157, 80, 144, 59, 112, 238, 32, 101, 238, 47, - 225, 69, 99, 178, 246, 49, 76, 81, 101, 187, 71, 59, 140, 229, 81, 253, + 177, 249, 216, 8, 12, 37, 108, 220, 236, 13, 72, 122, 48, 235, 219, 74, + 220, 187, 130, 66, 249, 41, 184, 140, 101, 1, 203, 110, 22, 62, 23, 118, + 199, 32, 191, 162, 140, 187, 157, 80, 144, 59, 112, 238, 32, 101, 238, 47, + 225, 69, 99, 178, 246, 49, 76, 81, 101, 187, 71, 59, 140, 229, 81, 253, 42, 204, 158, 74, 184, 237, 197, 14, 91, 81, 34, 115, 123, 224, 167, 15, - 112, 84, 225, 104, 103, 208, 236, 183, 185, 142, 175, 147, 237, 188, 159, 125, - 142, 253, 121, 87, 239, 78, 57, 179, 13, 123, 74, 148, 197, 74, 227, 110, + 112, 84, 225, 104, 103, 208, 236, 183, 185, 142, 175, 147, 237, 188, 159, 125, + 142, 253, 121, 87, 239, 78, 57, 179, 13, 123, 74, 148, 197, 74, 227, 110, 48, 248, 165, 248, 249, 43, 249, 0, 69, 7, 183, 68, 167, 181, 39, 54, - 144, 39, 212, 36, 40, 171, 48, 106, 76, 50, 201, 111, 254, 86, 240, 39, + 144, 39, 212, 36, 40, 171, 48, 106, 76, 50, 201, 111, 254, 86, 240, 39, 14, 59, 58, 110, 54, 155, 2, 6, 205, 190, 237, 126, 58, 204, 112, 159, - 145, 188, 208, 196, 197, 52, 54, 94, 84, 127, 46, 56, 93, 152, 190, 133, - 120, 166, 75, 52, 6, 112, 112, 71, 119, 143, 218, 19, 242, 174, 48, 246, + 145, 188, 208, 196, 197, 52, 54, 94, 84, 127, 46, 56, 93, 152, 190, 133, + 120, 166, 75, 52, 6, 112, 112, 71, 119, 143, 218, 19, 242, 174, 48, 246, 29, 243, 137, 94, 127, 95, 76, 49, 20, 149, 159, 251, 59, 146, 102, 242, - 222, 157, 162, 124, 154, 25, 47, 246, 135, 38, 177, 165, 246, 224, 202, 4, - 177, 255, 203, 245, 58, 172, 164, 33, 155, 179, 56, 41, 202, 39, 145, 176, - 130, 171, 30, 77, 177, 64, 203, 70, 230, 242, 240, 118, 145, 30, 89, 184, + 222, 157, 162, 124, 154, 25, 47, 246, 135, 38, 177, 165, 246, 224, 202, 4, + 177, 255, 203, 245, 58, 172, 164, 33, 155, 179, 56, 41, 202, 39, 145, 176, + 130, 171, 30, 77, 177, 64, 203, 70, 230, 242, 240, 118, 145, 30, 89, 184, 11, 123, 157, 212, 156, 28, 5, 200, 96, 157, 102, 126, 212, 149, 137, 144, - 169, 39, 211, 159, 193, 254, 65, 201, 154, 165, 37, 129, 14, 242, 28, 37, + 169, 39, 211, 159, 193, 254, 65, 201, 154, 165, 37, 129, 14, 242, 28, 37, 17, 130, 202, 227, 241, 49, 191, 213, 179, 72, 243, 118, 52, 133, 149, 8, - 156, 231, 94, 215, 15, 21, 118, 194, 254, 107, 249, 40, 153, 69, 95, 141, + 156, 231, 94, 215, 15, 21, 118, 194, 254, 107, 249, 40, 153, 69, 95, 141, 97, 37, 224, 82, 146, 71, 35, 26, 88, 127, 137, 247, 242, 243, 135, 113, - 189, 155, 56, 98, 99, 90, 108, 186, 118, 178, 253, 50, 44, 30, 43, 223, - 171, 186, 44, 120, 215, 128, 45, 65, 178, 142, 159, 39, 70, 37, 168, 62, - 127, 219, 111, 40, 239, 134, 47, 114, 69, 45, 87, 15, 234, 100, 9, 90, - 220, 203, 241, 40, 150, 239, 164, 39, 164, 196, 117, 156, 132, 143, 87, 146, - 190, 130, 168, 244, 193, 101, 110, 158, 231, 57, 146, 235, 227, 8, 12, 208, - 209, 203, 35, 38, 242, 45, 43, 118, 252, 201, 244, 130, 42, 18, 133, 66, - 129, 209, 77, 208, 69, 236, 138, 254, 255, 245, 112, 236, 86, 171, 1, 111, - 107, 69, 213, 222, 232, 199, 49, 193, 174, 198, 100, 170, 183, 150, 10, 233, + 189, 155, 56, 98, 99, 90, 108, 186, 118, 178, 253, 50, 44, 30, 43, 223, + 171, 186, 44, 120, 215, 128, 45, 65, 178, 142, 159, 39, 70, 37, 168, 62, + 127, 219, 111, 40, 239, 134, 47, 114, 69, 45, 87, 15, 234, 100, 9, 90, + 220, 203, 241, 40, 150, 239, 164, 39, 164, 196, 117, 156, 132, 143, 87, 146, + 190, 130, 168, 244, 193, 101, 110, 158, 231, 57, 146, 235, 227, 8, 12, 208, + 209, 203, 35, 38, 242, 45, 43, 118, 252, 201, 244, 130, 42, 18, 133, 66, + 129, 209, 77, 208, 69, 236, 138, 254, 255, 245, 112, 236, 86, 171, 1, 111, + 107, 69, 213, 222, 232, 199, 49, 193, 174, 198, 100, 170, 183, 150, 10, 233, 28, 210, 219, 123, 233, 126, 105, 75, 222, 231, 13, 137, 242, 177, 41, 137, 60, 202, 92, 16, 131, 226, 193, 152, 79, 95, 235, 105, 227, 172, 7, 160, - 180, 146, 190, 243, 34, 19, 186, 215, 106, 95, 152, 49, 90, 68, 71, 90, - 222, 240, 72, 16, 153, 69, 114, 193, 215, 175, 165, 224, 198, 154, 70, 104, + 180, 146, 190, 243, 34, 19, 186, 215, 106, 95, 152, 49, 90, 68, 71, 90, + 222, 240, 72, 16, 153, 69, 114, 193, 215, 175, 165, 224, 198, 154, 70, 104, 79, 97, 153, 54, 153, 179, 2, 207, 197, 243, 12, 159, 76, 168, 136, 217, - 116, 79, 104, 21, 215, 72, 199, 35, 153, 67, 50, 145, 11, 253, 62, 254, - 121, 1, 8, 147, 39, 20, 94, 155, 80, 41, 135, 135, 45, 85, 61, 140, + 116, 79, 104, 21, 215, 72, 199, 35, 153, 67, 50, 145, 11, 253, 62, 254, + 121, 1, 8, 147, 39, 20, 94, 155, 80, 41, 135, 135, 45, 85, 61, 140, 26, 195, 80, 187, 252, 175, 253, 152, 170, 169, 118, 235, 158, 134, 82, 188, 86, 52, 70, 32, 239, 212, 157, 115, 137, 28, 191, 156, 197, 136, 226, 171, 17, 231, 181, 79, 246, 232, 178, 242, 233, 113, 210, 230, 35, 201, 213, 28, 72, 27, 183, 26, 106, 240, 111, 111, 255, 122, 128, 234, 179, 201, 66, 165, - 245, 198, 201, 138, 20, 212, 139, 159, 200, 91, 150, 175, 209, 203, 255, 81, + 245, 198, 201, 138, 20, 212, 139, 159, 200, 91, 150, 175, 209, 203, 255, 81, 30, 27, 83, 216, 119, 36, 48, 112, 237, 229, 175, 204, 149, 192, 183, 184, - 165, 176, 231, 176, 223, 81, 214, 225, 145, 107, 248, 225, 213, 6, 99, 59, - 197, 183, 125, 208, 26, 19, 178, 146, 154, 242, 71, 189, 11, 246, 48, 8, - 7, 28, 105, 208, 20, 13, 236, 77, 244, 218, 101, 217, 125, 199, 153, 77, - 193, 214, 233, 91, 48, 201, 209, 6, 155, 87, 208, 221, 9, 73, 76, 191, + 165, 176, 231, 176, 223, 81, 214, 225, 145, 107, 248, 225, 213, 6, 99, 59, + 197, 183, 125, 208, 26, 19, 178, 146, 154, 242, 71, 189, 11, 246, 48, 8, + 7, 28, 105, 208, 20, 13, 236, 77, 244, 218, 101, 217, 125, 199, 153, 77, + 193, 214, 233, 91, 48, 201, 209, 6, 155, 87, 208, 221, 9, 73, 76, 191, 23, 249, 237, 146, 189, 177, 55, 8, 68, 192, 111, 204, 19, 164, 189, 223, 83, 220, 156, 79, 12, 82, 178, 149, 102, 94, 120, 229, 198, 77, 136, 244, 84, 33, 90, 66, 193, 45, 252, 160, 151, 66, 240, 135, 232, 147, 235, 107, - 173, 30, 184, 103, 131, 168, 55, 195, 111, 16, 202, 227, 203, 16, 14, 226, - 104, 220, 126, 121, 163, 5, 26, 253, 35, 196, 13, 90, 196, 32, 157, 28, - 152, 70, 205, 236, 101, 142, 207, 126, 230, 67, 194, 143, 67, 77, 91, 97, + 173, 30, 184, 103, 131, 168, 55, 195, 111, 16, 202, 227, 203, 16, 14, 226, + 104, 220, 126, 121, 163, 5, 26, 253, 35, 196, 13, 90, 196, 32, 157, 28, + 152, 70, 205, 236, 101, 142, 207, 126, 230, 67, 194, 143, 67, 77, 91, 97, 71, 135, 244, 40, 104, 120, 39, 169, 91, 124, 162, 111, 121, 9, 118, 146, - 215, 112, 120, 157, 22, 198, 241, 196, 32, 176, 60, 244, 197, 37, 210, 215, - 125, 122, 143, 253, 175, 101, 92, 205, 43, 170, 70, 183, 173, 162, 130, 226, + 215, 112, 120, 157, 22, 198, 241, 196, 32, 176, 60, 244, 197, 37, 210, 215, + 125, 122, 143, 253, 175, 101, 92, 205, 43, 170, 70, 183, 173, 162, 130, 226, 41, 122, 158, 130, 183, 223, 162, 212, 194, 38, 133, 252, 57, 245, 187, 168, - 165, 204, 119, 8, 249, 174, 10, 206, 251, 55, 212, 118, 212, 74, 226, 227, - 141, 138, 122, 204, 83, 14, 175, 248, 18, 159, 79, 79, 100, 56, 37, 229, - 209, 221, 238, 197, 164, 42, 159, 203, 67, 31, 8, 195, 72, 251, 142, 229, + 165, 204, 119, 8, 249, 174, 10, 206, 251, 55, 212, 118, 212, 74, 226, 227, + 141, 138, 122, 204, 83, 14, 175, 248, 18, 159, 79, 79, 100, 56, 37, 229, + 209, 221, 238, 197, 164, 42, 159, 203, 67, 31, 8, 195, 72, 251, 142, 229, 60, 24, 254, 97, 124, 219, 201, 255, 232, 60, 77, 19, 220, 239, 10, 158, 62, 117, 245, 167, 63, 38, 216, 169, 209, 29, 245, 17, 4, 241, 218, 83, 72, 48, 214, 228, 85, 103, 116, 248, 133, 200, 75, 81, 220, 207, 59, 226, - 102, 50, 238, 138, 44, 120, 162, 220, 105, 5, 120, 11, 153, 98, 144, 4, - 197, 217, 39, 235, 141, 148, 123, 51, 213, 255, 144, 17, 189, 144, 214, 246, + 102, 50, 238, 138, 44, 120, 162, 220, 105, 5, 120, 11, 153, 98, 144, 4, + 197, 217, 39, 235, 141, 148, 123, 51, 213, 255, 144, 17, 189, 144, 214, 246, 45, 95, 229, 127, 107, 19, 164, 143, 48, 210, 29, 249, 66, 11, 171, 191, 73, 99, 161, 114, 190, 80, 31, 215, 67, 16, 187, 246, 47, 110, 157, 33, - 208, 151, 122, 2, 228, 161, 51, 9, 215, 33, 246, 67, 44, 19, 41, 29, + 208, 151, 122, 2, 228, 161, 51, 9, 215, 33, 246, 67, 44, 19, 41, 29, 10, 42, 130, 244, 95, 45, 199, 156, 251, 151, 210, 121, 198, 52, 44, 87, - 214, 126, 214, 93, 242, 201, 31, 44, 250, 139, 78, 59, 95, 116, 45, 100, - 187, 97, 206, 143, 158, 54, 98, 113, 30, 101, 151, 56, 187, 116, 199, 157, - 108, 136, 90, 36, 85, 253, 171, 140, 253, 14, 229, 238, 65, 220, 56, 162, - 194, 138, 46, 251, 90, 92, 121, 202, 202, 98, 133, 78, 229, 87, 31, 158, + 214, 126, 214, 93, 242, 201, 31, 44, 250, 139, 78, 59, 95, 116, 45, 100, + 187, 97, 206, 143, 158, 54, 98, 113, 30, 101, 151, 56, 187, 116, 199, 157, + 108, 136, 90, 36, 85, 253, 171, 140, 253, 14, 229, 238, 65, 220, 56, 162, + 194, 138, 46, 251, 90, 92, 121, 202, 202, 98, 133, 78, 229, 87, 31, 158, 12, 175, 122, 17, 65, 10, 163, 51, 163, 95, 143, 208, 9, 192, 58, 29, - 130, 4, 237, 194, 246, 82, 11, 20, 49, 26, 177, 34, 202, 180, 210, 111, - 234, 151, 37, 27, 225, 7, 205, 35, 242, 176, 98, 232, 60, 89, 99, 33, - 233, 106, 236, 96, 248, 71, 101, 133, 44, 190, 241, 76, 113, 146, 181, 106, - 191, 130, 100, 127, 206, 138, 118, 124, 159, 138, 215, 82, 22, 224, 17, 114, - 127, 109, 203, 60, 33, 67, 126, 145, 25, 199, 88, 97, 150, 40, 68, 185, - 144, 218, 230, 81, 203, 223, 45, 209, 250, 22, 234, 12, 153, 49, 19, 107, + 130, 4, 237, 194, 246, 82, 11, 20, 49, 26, 177, 34, 202, 180, 210, 111, + 234, 151, 37, 27, 225, 7, 205, 35, 242, 176, 98, 232, 60, 89, 99, 33, + 233, 106, 236, 96, 248, 71, 101, 133, 44, 190, 241, 76, 113, 146, 181, 106, + 191, 130, 100, 127, 206, 138, 118, 124, 159, 138, 215, 82, 22, 224, 17, 114, + 127, 109, 203, 60, 33, 67, 126, 145, 25, 199, 88, 97, 150, 40, 68, 185, + 144, 218, 230, 81, 203, 223, 45, 209, 250, 22, 234, 12, 153, 49, 19, 107, 97, 79, 126, 100, 128, 16, 12, 83, 74, 94, 23, 159, 192, 193, 74, 153, - 246, 12, 157, 248, 106, 34, 35, 64, 99, 184, 137, 91, 26, 154, 127, 155, - 218, 36, 185, 64, 26, 41, 236, 232, 223, 159, 10, 29, 165, 12, 244, 214, - 231, 231, 212, 154, 169, 66, 39, 153, 129, 38, 40, 46, 140, 140, 172, 0, - 251, 41, 244, 153, 56, 180, 67, 22, 40, 33, 9, 111, 79, 11, 215, 49, + 246, 12, 157, 248, 106, 34, 35, 64, 99, 184, 137, 91, 26, 154, 127, 155, + 218, 36, 185, 64, 26, 41, 236, 232, 223, 159, 10, 29, 165, 12, 244, 214, + 231, 231, 212, 154, 169, 66, 39, 153, 129, 38, 40, 46, 140, 140, 172, 0, + 251, 41, 244, 153, 56, 180, 67, 22, 40, 33, 9, 111, 79, 11, 215, 49, 66, 195, 45, 113, 22, 41, 109, 39, 124, 178, 49, 173, 25, 245, 157, 190, 63, 116, 79, 213, 200, 171, 85, 121, 185, 198, 99, 92, 235, 127, 157, 18, 45, 201, 187, 193, 140, 79, 33, 65, 24, 11, 175, 105, 233, 47, 242, 36, - 139, 254, 195, 48, 31, 146, 32, 0, 150, 237, 52, 165, 4, 174, 230, 81, + 139, 254, 195, 48, 31, 146, 32, 0, 150, 237, 52, 165, 4, 174, 230, 81, 72, 146, 101, 241, 206, 146, 151, 105, 106, 255, 165, 127, 196, 69, 250, 155, - 248, 177, 254, 232, 30, 109, 169, 33, 76, 112, 72, 214, 254, 113, 170, 234, - 191, 76, 20, 132, 209, 243, 152, 241, 107, 12, 107, 31, 16, 149, 129, 8, - 160, 7, 54, 31, 219, 58, 93, 76, 50, 143, 210, 73, 131, 59, 34, 38, + 248, 177, 254, 232, 30, 109, 169, 33, 76, 112, 72, 214, 254, 113, 170, 234, + 191, 76, 20, 132, 209, 243, 152, 241, 107, 12, 107, 31, 16, 149, 129, 8, + 160, 7, 54, 31, 219, 58, 93, 76, 50, 143, 210, 73, 131, 59, 34, 38, 88, 9, 217, 193, 206, 147, 54, 244, 11, 240, 180, 243, 123, 68, 124, 81, - 153, 132, 49, 38, 33, 220, 125, 164, 236, 162, 128, 202, 246, 183, 178, 35, - 242, 109, 76, 7, 215, 92, 149, 32, 117, 34, 174, 122, 34, 101, 5, 67, + 153, 132, 49, 38, 33, 220, 125, 164, 236, 162, 128, 202, 246, 183, 178, 35, + 242, 109, 76, 7, 215, 92, 149, 32, 117, 34, 174, 122, 34, 101, 5, 67, 79, 24, 48, 75, 194, 8, 12, 98, 113, 36, 13, 79, 16, 94, 249, 110, - 147, 212, 105, 205, 39, 31, 127, 182, 213, 97, 28, 226, 105, 217, 245, 84, - 138, 119, 58, 136, 137, 79, 193, 116, 226, 72, 101, 0, 142, 171, 59, 40, - 203, 158, 100, 187, 137, 8, 9, 125, 233, 16, 241, 192, 135, 4, 72, 132, + 147, 212, 105, 205, 39, 31, 127, 182, 213, 97, 28, 226, 105, 217, 245, 84, + 138, 119, 58, 136, 137, 79, 193, 116, 226, 72, 101, 0, 142, 171, 59, 40, + 203, 158, 100, 187, 137, 8, 9, 125, 233, 16, 241, 192, 135, 4, 72, 132, 89, 126, 34, 0, 197, 80, 159, 101, 77, 18, 52, 179, 249, 169, 95, 125, - 120, 18, 56, 177, 106, 6, 100, 99, 197, 197, 111, 104, 120, 211, 163, 86, - 224, 106, 157, 48, 112, 84, 232, 171, 172, 220, 107, 136, 118, 170, 105, 16, - 133, 223, 77, 65, 61, 41, 184, 88, 67, 98, 175, 216, 139, 56, 140, 26, + 120, 18, 56, 177, 106, 6, 100, 99, 197, 197, 111, 104, 120, 211, 163, 86, + 224, 106, 157, 48, 112, 84, 232, 171, 172, 220, 107, 136, 118, 170, 105, 16, + 133, 223, 77, 65, 61, 41, 184, 88, 67, 98, 175, 216, 139, 56, 140, 26, 18, 179, 212, 180, 218, 235, 78, 180, 154, 144, 195, 188, 126, 205, 37, 58, - 203, 223, 248, 156, 87, 139, 176, 77, 244, 117, 77, 148, 85, 187, 142, 119, - 144, 113, 128, 217, 33, 5, 107, 247, 10, 178, 66, 206, 128, 187, 155, 161, - 150, 166, 9, 194, 18, 87, 82, 5, 42, 74, 250, 215, 83, 145, 8, 158, - 182, 156, 82, 161, 19, 87, 92, 77, 14, 7, 208, 23, 8, 13, 59, 57, - 167, 252, 236, 167, 68, 206, 208, 173, 237, 84, 141, 14, 118, 250, 194, 37, - 131, 146, 23, 17, 37, 228, 42, 134, 130, 193, 34, 83, 151, 107, 227, 133, - 189, 157, 96, 73, 176, 115, 205, 111, 159, 89, 182, 43, 180, 27, 36, 57, + 203, 223, 248, 156, 87, 139, 176, 77, 244, 117, 77, 148, 85, 187, 142, 119, + 144, 113, 128, 217, 33, 5, 107, 247, 10, 178, 66, 206, 128, 187, 155, 161, + 150, 166, 9, 194, 18, 87, 82, 5, 42, 74, 250, 215, 83, 145, 8, 158, + 182, 156, 82, 161, 19, 87, 92, 77, 14, 7, 208, 23, 8, 13, 59, 57, + 167, 252, 236, 167, 68, 206, 208, 173, 237, 84, 141, 14, 118, 250, 194, 37, + 131, 146, 23, 17, 37, 228, 42, 134, 130, 193, 34, 83, 151, 107, 227, 133, + 189, 157, 96, 73, 176, 115, 205, 111, 159, 89, 182, 43, 180, 27, 36, 57, 30, 151, 83, 181, 2, 2, 53, 17, 231, 175, 92, 52, 97, 124, 25, 172, 17, 206, 83, 37, 79, 60, 174, 47, 181, 207, 115, 216, 0, 59, 178, 186, - 222, 154, 48, 10, 203, 237, 168, 102, 67, 97, 12, 80, 164, 196, 36, 102, - 249, 198, 223, 40, 139, 247, 238, 100, 167, 179, 209, 170, 131, 198, 166, 105, - 139, 118, 164, 153, 86, 75, 187, 187, 197, 160, 68, 198, 18, 67, 72, 85, - 158, 8, 198, 13, 38, 133, 227, 47, 6, 64, 250, 136, 178, 128, 108, 116, + 222, 154, 48, 10, 203, 237, 168, 102, 67, 97, 12, 80, 164, 196, 36, 102, + 249, 198, 223, 40, 139, 247, 238, 100, 167, 179, 209, 170, 131, 198, 166, 105, + 139, 118, 164, 153, 86, 75, 187, 187, 197, 160, 68, 198, 18, 67, 72, 85, + 158, 8, 198, 13, 38, 133, 227, 47, 6, 64, 250, 136, 178, 128, 108, 116, 81, 186, 206, 233, 159, 179, 60, 114, 136, 222, 26, 198, 221, 9, 223, 32, - 123, 35, 23, 188, 146, 155, 213, 76, 159, 32, 252, 211, 185, 1, 157, 178, - 135, 227, 248, 103, 157, 213, 189, 148, 107, 135, 236, 254, 236, 112, 211, 216, - 133, 146, 65, 193, 156, 12, 68, 129, 130, 145, 203, 140, 174, 99, 164, 145, + 123, 35, 23, 188, 146, 155, 213, 76, 159, 32, 252, 211, 185, 1, 157, 178, + 135, 227, 248, 103, 157, 213, 189, 148, 107, 135, 236, 254, 236, 112, 211, 216, + 133, 146, 65, 193, 156, 12, 68, 129, 130, 145, 203, 140, 174, 99, 164, 145, 36, 252, 41, 175, 206, 147, 115, 196, 4, 174, 108, 17, 122, 230, 134, 147, - 226, 163, 123, 125, 195, 16, 122, 59, 157, 243, 224, 222, 35, 75, 158, 165, - 183, 96, 220, 251, 154, 155, 140, 144, 238, 87, 118, 32, 40, 120, 50, 237, - 231, 139, 167, 105, 32, 225, 232, 86, 220, 154, 75, 196, 71, 65, 93, 220, + 226, 163, 123, 125, 195, 16, 122, 59, 157, 243, 224, 222, 35, 75, 158, 165, + 183, 96, 220, 251, 154, 155, 140, 144, 238, 87, 118, 32, 40, 120, 50, 237, + 231, 139, 167, 105, 32, 225, 232, 86, 220, 154, 75, 196, 71, 65, 93, 220, 61, 119, 51, 177, 246, 221, 145, 96, 123, 19, 25, 236, 101, 58, 161, 73, 84, 176, 133, 105, 196, 134, 172, 27, 162, 226, 224, 55, 16, 137, 168, 193, - 190, 36, 174, 21, 216, 214, 118, 104, 129, 255, 68, 151, 108, 167, 109, 82, + 190, 36, 174, 21, 216, 214, 118, 104, 129, 255, 68, 151, 108, 167, 109, 82, 66, 183, 246, 156, 70, 234, 152, 129, 21, 156, 244, 102, 179, 68, 253, 171, 86, 189, 188, 191, 254, 81, 210, 173, 115, 204, 35, 164, 144, 108, 236, 225, - 100, 49, 60, 210, 38, 90, 187, 49, 180, 192, 94, 27, 241, 255, 99, 158, - 7, 237, 83, 24, 236, 15, 188, 123, 165, 197, 98, 230, 62, 46, 224, 117, - 139, 102, 180, 131, 227, 218, 54, 126, 52, 152, 148, 252, 217, 93, 32, 154, + 100, 49, 60, 210, 38, 90, 187, 49, 180, 192, 94, 27, 241, 255, 99, 158, + 7, 237, 83, 24, 236, 15, 188, 123, 165, 197, 98, 230, 62, 46, 224, 117, + 139, 102, 180, 131, 227, 218, 54, 126, 52, 152, 148, 252, 217, 93, 32, 154, 96, 161, 242, 40, 170, 26, 56, 74, 254, 10, 15, 19, 201, 213, 81, 46, - 158, 233, 148, 163, 223, 116, 67, 170, 168, 17, 52, 115, 222, 60, 24, 251, - 6, 74, 89, 86, 242, 245, 45, 128, 182, 3, 195, 154, 20, 179, 113, 153, + 158, 233, 148, 163, 223, 116, 67, 170, 168, 17, 52, 115, 222, 60, 24, 251, + 6, 74, 89, 86, 242, 245, 45, 128, 182, 3, 195, 154, 20, 179, 113, 153, 44, 242, 180, 83, 26, 92, 220, 87, 99, 40, 234, 36, 47, 104, 5, 216, 15, 75, 28, 250, 13, 84, 199, 155, 151, 61, 58, 214, 142, 173, 215, 72, - 185, 60, 233, 73, 102, 177, 181, 170, 7, 48, 166, 110, 32, 227, 24, 254, + 185, 60, 233, 73, 102, 177, 181, 170, 7, 48, 166, 110, 32, 227, 24, 254, 43, 157, 97, 119, 1, 125, 154, 244, 80, 196, 119, 70, 137, 163, 29, 157, 21, 96, 40, 77, 149, 43, 89, 115, 78, 66, 67, 78, 130, 122, 141, 108, - 245, 94, 13, 91, 233, 28, 99, 104, 150, 29, 104, 122, 221, 186, 150, 126, - 164, 59, 147, 132, 74, 1, 84, 129, 134, 199, 184, 19, 164, 172, 218, 226, + 245, 94, 13, 91, 233, 28, 99, 104, 150, 29, 104, 122, 221, 186, 150, 126, + 164, 59, 147, 132, 74, 1, 84, 129, 134, 199, 184, 19, 164, 172, 218, 226, 69, 96, 187, 3, 219, 55, 20, 36, 43, 220, 131, 166, 139, 173, 189, 7, 95, 213, 220, 66, 112, 32, 44, 231, 163, 42, 23, 106, 253, 98, 142, 233, - 108, 164, 242, 111, 223, 130, 113, 101, 180, 103, 69, 79, 3, 212, 134, 113, + 108, 164, 242, 111, 223, 130, 113, 101, 180, 103, 69, 79, 3, 212, 134, 113, 14, 252, 41, 247, 87, 188, 147, 176, 171, 218, 249, 176, 197, 157, 118, 13, 73, 246, 206, 106, 50, 120, 17, 148, 147, 164, 185, 70, 144, 158, 116, 214, 92, 246, 184, 68, 85, 100, 240, 154, 2, 156, 164, 212, 110, 241, 153, 129, - 7, 222, 203, 157, 48, 94, 103, 89, 110, 197, 102, 10, 76, 234, 22, 12, - 104, 202, 167, 57, 56, 178, 52, 73, 40, 212, 95, 196, 212, 166, 85, 15, + 7, 222, 203, 157, 48, 94, 103, 89, 110, 197, 102, 10, 76, 234, 22, 12, + 104, 202, 167, 57, 56, 178, 52, 73, 40, 212, 95, 196, 212, 166, 85, 15, 41, 81, 141, 124, 130, 100, 79, 100, 175, 126, 225, 151, 102, 116, 43, 17, - 190, 116, 116, 79, 51, 59, 243, 149, 11, 121, 3, 234, 103, 221, 234, 201, - 245, 5, 11, 20, 29, 181, 138, 67, 190, 119, 205, 66, 225, 155, 66, 14, - 205, 68, 114, 207, 7, 180, 117, 185, 176, 204, 9, 9, 126, 205, 58, 142, + 190, 116, 116, 79, 51, 59, 243, 149, 11, 121, 3, 234, 103, 221, 234, 201, + 245, 5, 11, 20, 29, 181, 138, 67, 190, 119, 205, 66, 225, 155, 66, 14, + 205, 68, 114, 207, 7, 180, 117, 185, 176, 204, 9, 9, 126, 205, 58, 142, 28, 136, 232, 53, 149, 237, 169, 44, 185, 78, 143, 99, 153, 143, 187, 157, 87, 106, 201, 63, 2, 205, 96, 226, 4, 28, 208, 81, 197, 98, 126, 168, - 170, 63, 29, 15, 228, 23, 82, 12, 109, 204, 227, 231, 228, 87, 196, 63, - 117, 68, 31, 206, 19, 177, 225, 66, 233, 244, 58, 185, 208, 188, 153, 253, - 0, 60, 122, 11, 36, 193, 235, 90, 21, 89, 103, 232, 187, 68, 214, 232, - 180, 13, 143, 157, 99, 180, 232, 213, 90, 113, 194, 193, 194, 230, 242, 45, - 135, 51, 201, 80, 171, 128, 144, 150, 184, 193, 211, 22, 74, 186, 176, 237, - 133, 181, 83, 216, 250, 76, 28, 144, 255, 76, 29, 64, 27, 25, 54, 88, - 161, 132, 38, 34, 236, 32, 77, 106, 157, 6, 74, 120, 64, 211, 237, 173, - 164, 29, 22, 107, 236, 9, 67, 136, 70, 87, 153, 52, 245, 162, 52, 213, - 109, 66, 123, 116, 19, 54, 210, 216, 16, 72, 192, 249, 183, 108, 193, 60, - 242, 120, 186, 160, 200, 137, 184, 180, 97, 15, 95, 167, 169, 87, 146, 151, + 170, 63, 29, 15, 228, 23, 82, 12, 109, 204, 227, 231, 228, 87, 196, 63, + 117, 68, 31, 206, 19, 177, 225, 66, 233, 244, 58, 185, 208, 188, 153, 253, + 0, 60, 122, 11, 36, 193, 235, 90, 21, 89, 103, 232, 187, 68, 214, 232, + 180, 13, 143, 157, 99, 180, 232, 213, 90, 113, 194, 193, 194, 230, 242, 45, + 135, 51, 201, 80, 171, 128, 144, 150, 184, 193, 211, 22, 74, 186, 176, 237, + 133, 181, 83, 216, 250, 76, 28, 144, 255, 76, 29, 64, 27, 25, 54, 88, + 161, 132, 38, 34, 236, 32, 77, 106, 157, 6, 74, 120, 64, 211, 237, 173, + 164, 29, 22, 107, 236, 9, 67, 136, 70, 87, 153, 52, 245, 162, 52, 213, + 109, 66, 123, 116, 19, 54, 210, 216, 16, 72, 192, 249, 183, 108, 193, 60, + 242, 120, 186, 160, 200, 137, 184, 180, 97, 15, 95, 167, 169, 87, 146, 151, 83, 244, 178, 11, 114, 231, 59, 246, 175, 29, 229, 95, 166, 199, 244, 74, - 6, 79, 7, 15, 150, 53, 55, 148, 10, 214, 117, 214, 214, 18, 111, 23, + 6, 79, 7, 15, 150, 53, 55, 148, 10, 214, 117, 214, 214, 18, 111, 23, 77, 192, 122, 193, 255, 196, 114, 120, 89, 233, 200, 20, 133, 140, 132, 162, - 136, 45, 10, 216, 110, 169, 138, 221, 15, 114, 80, 66, 207, 159, 89, 31, - 183, 6, 112, 209, 114, 85, 57, 171, 99, 14, 83, 218, 19, 240, 133, 147, - 208, 50, 112, 209, 213, 114, 113, 128, 67, 115, 171, 57, 184, 202, 111, 119, - 128, 8, 204, 133, 137, 179, 216, 142, 74, 57, 86, 75, 192, 237, 228, 108, + 136, 45, 10, 216, 110, 169, 138, 221, 15, 114, 80, 66, 207, 159, 89, 31, + 183, 6, 112, 209, 114, 85, 57, 171, 99, 14, 83, 218, 19, 240, 133, 147, + 208, 50, 112, 209, 213, 114, 113, 128, 67, 115, 171, 57, 184, 202, 111, 119, + 128, 8, 204, 133, 137, 179, 216, 142, 74, 57, 86, 75, 192, 237, 228, 108, 69, 105, 193, 141, 250, 76, 204, 128, 155, 26, 66, 172, 237, 250, 179, 186, - 199, 211, 152, 65, 6, 152, 201, 105, 251, 78, 186, 157, 66, 69, 101, 190, + 199, 211, 152, 65, 6, 152, 201, 105, 251, 78, 186, 157, 66, 69, 101, 190, 17, 230, 96, 168, 156, 29, 7, 59, 250, 141, 145, 141, 234, 100, 149, 39, - 172, 205, 57, 39, 61, 6, 218, 254, 181, 184, 94, 155, 251, 236, 8, 17, - 252, 132, 153, 56, 164, 230, 249, 203, 60, 78, 227, 136, 118, 97, 69, 247, - 170, 83, 230, 125, 104, 85, 239, 19, 220, 15, 148, 251, 249, 196, 138, 38, + 172, 205, 57, 39, 61, 6, 218, 254, 181, 184, 94, 155, 251, 236, 8, 17, + 252, 132, 153, 56, 164, 230, 249, 203, 60, 78, 227, 136, 118, 97, 69, 247, + 170, 83, 230, 125, 104, 85, 239, 19, 220, 15, 148, 251, 249, 196, 138, 38, 81, 209, 15, 231, 239, 183, 73, 121, 87, 157, 191, 171, 0, 99, 100, 105, - 105, 223, 226, 113, 198, 179, 200, 75, 136, 55, 190, 194, 166, 94, 142, 224, + 105, 223, 226, 113, 198, 179, 200, 75, 136, 55, 190, 194, 166, 94, 142, 224, 39, 193, 163, 138, 3, 203, 220, 34, 118, 216, 34, 142, 111, 227, 241, 205, - 154, 220, 162, 107, 200, 100, 217, 194, 122, 207, 234, 161, 104, 119, 201, 84, + 154, 220, 162, 107, 200, 100, 217, 194, 122, 207, 234, 161, 104, 119, 201, 84, 46, 37, 159, 130, 76, 136, 147, 250, 29, 209, 151, 145, 92, 189, 105, 79, - 101, 117, 4, 209, 229, 171, 22, 168, 11, 210, 160, 120, 158, 218, 39, 129, + 101, 117, 4, 209, 229, 171, 22, 168, 11, 210, 160, 120, 158, 218, 39, 129, 95, 30, 254, 37, 160, 17, 226, 65, 38, 155, 129, 122, 222, 170, 133, 113, - 134, 168, 135, 212, 57, 200, 248, 226, 62, 62, 200, 159, 127, 42, 51, 90, + 134, 168, 135, 212, 57, 200, 248, 226, 62, 62, 200, 159, 127, 42, 51, 90, 49, 28, 134, 6, 226, 227, 159, 163, 142, 179, 173, 151, 168, 47, 106, 150, 43, 205, 20, 245, 181, 82, 210, 73, 173, 93, 73, 132, 69, 71, 195, 129, - 214, 106, 151, 117, 135, 138, 224, 126, 167, 48, 83, 34, 36, 200, 13, 29, - 239, 80, 11, 224, 146, 30, 165, 79, 231, 209, 119, 168, 138, 217, 100, 202, - 154, 132, 206, 54, 71, 170, 74, 126, 11, 105, 96, 94, 176, 133, 105, 167, + 214, 106, 151, 117, 135, 138, 224, 126, 167, 48, 83, 34, 36, 200, 13, 29, + 239, 80, 11, 224, 146, 30, 165, 79, 231, 209, 119, 168, 138, 217, 100, 202, + 154, 132, 206, 54, 71, 170, 74, 126, 11, 105, 96, 94, 176, 133, 105, 167, 60, 81, 127, 80, 238, 86, 126, 54, 147, 16, 117, 54, 230, 12, 76, 196, - 8, 177, 11, 61, 177, 113, 30, 40, 18, 26, 18, 55, 37, 74, 94, 243, - 222, 250, 144, 1, 67, 236, 61, 94, 204, 49, 44, 63, 128, 123, 253, 163, + 8, 177, 11, 61, 177, 113, 30, 40, 18, 26, 18, 55, 37, 74, 94, 243, + 222, 250, 144, 1, 67, 236, 61, 94, 204, 49, 44, 63, 128, 123, 253, 163, 36, 31, 168, 42, 144, 198, 132, 53, 212, 183, 1, 234, 164, 254, 55, 113, 19, 28, 184, 210, 113, 4, 95, 146, 92, 164, 152, 120, 176, 218, 237, 134, - 193, 243, 109, 2, 35, 253, 94, 25, 192, 246, 118, 186, 220, 218, 81, 217, + 193, 243, 109, 2, 35, 253, 94, 25, 192, 246, 118, 186, 220, 218, 81, 217, 36, 126, 215, 24, 86, 127, 114, 69, 176, 237, 20, 52, 239, 1, 82, 149, 90, 227, 216, 108, 176, 100, 41, 68, 64, 97, 13, 13, 10, 132, 104, 252, - 194, 30, 134, 21, 234, 121, 133, 137, 238, 55, 1, 233, 41, 41, 165, 24, - 135, 243, 206, 15, 65, 184, 175, 222, 34, 216, 2, 143, 84, 207, 136, 195, + 194, 30, 134, 21, 234, 121, 133, 137, 238, 55, 1, 233, 41, 41, 165, 24, + 135, 243, 206, 15, 65, 184, 175, 222, 34, 216, 2, 143, 84, 207, 136, 195, 96, 7, 114, 230, 244, 158, 69, 30, 62, 183, 157, 58, 157, 248, 35, 163, 89, 27, 18, 44, 149, 74, 255, 140, 216, 203, 58, 102, 75, 24, 123, 11, 79, 224, 186, 187, 55, 178, 22, 170, 74, 65, 248, 185, 88, 174, 100, 179, 42, 147, 165, 94, 149, 106, 1, 14, 49, 135, 110, 240, 201, 36, 145, 118, - 151, 62, 220, 245, 246, 188, 254, 207, 98, 231, 47, 67, 38, 225, 110, 86, + 151, 62, 220, 245, 246, 188, 254, 207, 98, 231, 47, 67, 38, 225, 110, 86, 50, 168, 160, 3, 188, 233, 152, 13, 199, 93, 171, 72, 152, 181, 223, 144, - 105, 206, 64, 198, 51, 125, 118, 168, 107, 110, 42, 87, 126, 137, 100, 52, - 139, 187, 84, 78, 109, 68, 157, 242, 105, 42, 192, 199, 227, 229, 167, 149, - 115, 222, 117, 64, 146, 168, 86, 69, 160, 37, 91, 184, 75, 172, 107, 178, - 205, 113, 109, 197, 143, 177, 69, 241, 131, 191, 103, 112, 145, 194, 234, 152, - 191, 196, 121, 189, 118, 85, 248, 218, 129, 113, 247, 58, 112, 168, 212, 15, - 226, 249, 121, 7, 193, 119, 219, 153, 152, 134, 87, 50, 53, 1, 122, 228, - 133, 70, 218, 235, 176, 226, 181, 228, 247, 171, 237, 208, 93, 219, 210, 204, + 105, 206, 64, 198, 51, 125, 118, 168, 107, 110, 42, 87, 126, 137, 100, 52, + 139, 187, 84, 78, 109, 68, 157, 242, 105, 42, 192, 199, 227, 229, 167, 149, + 115, 222, 117, 64, 146, 168, 86, 69, 160, 37, 91, 184, 75, 172, 107, 178, + 205, 113, 109, 197, 143, 177, 69, 241, 131, 191, 103, 112, 145, 194, 234, 152, + 191, 196, 121, 189, 118, 85, 248, 218, 129, 113, 247, 58, 112, 168, 212, 15, + 226, 249, 121, 7, 193, 119, 219, 153, 152, 134, 87, 50, 53, 1, 122, 228, + 133, 70, 218, 235, 176, 226, 181, 228, 247, 171, 237, 208, 93, 219, 210, 204, 99, 81, 35, 94, 213, 244, 214, 133, 87, 38, 157, 220, 76, 241, 250, 9, - 174, 94, 200, 220, 42, 33, 84, 33, 20, 6, 86, 165, 70, 17, 23, 147, + 174, 94, 200, 220, 42, 33, 84, 33, 20, 6, 86, 165, 70, 17, 23, 147, 58, 74, 222, 31, 41, 174, 132, 226, 158, 2, 97, 151, 118, 118, 199, 237, - 251, 181, 137, 122, 134, 180, 206, 25, 127, 6, 28, 88, 227, 99, 230, 21, + 251, 181, 137, 122, 134, 180, 206, 25, 127, 6, 28, 88, 227, 99, 230, 21, 51, 19, 201, 179, 147, 131, 49, 170, 49, 104, 15, 138, 137, 169, 120, 94, - 205, 80, 43, 230, 239, 124, 165, 225, 36, 228, 209, 108, 204, 135, 125, 157, + 205, 80, 43, 230, 239, 124, 165, 225, 36, 228, 209, 108, 204, 135, 125, 157, 94, 203, 116, 141, 29, 156, 97, 146, 225, 80, 43, 254, 51, 120, 58, 221, 11, 176, 165, 179, 174, 53, 216, 195, 110, 24, 177, 125, 101, 171, 86, 108, - 182, 14, 91, 146, 246, 127, 249, 192, 221, 143, 211, 90, 9, 12, 130, 246, - 170, 107, 193, 134, 28, 49, 35, 254, 131, 137, 125, 207, 196, 72, 80, 90, + 182, 14, 91, 146, 246, 127, 249, 192, 221, 143, 211, 90, 9, 12, 130, 246, + 170, 107, 193, 134, 28, 49, 35, 254, 131, 137, 125, 207, 196, 72, 80, 90, 30, 174, 143, 172, 226, 50, 12, 236, 58, 235, 205, 251, 234, 171, 14, 201, - 232, 131, 230, 212, 162, 143, 189, 179, 44, 100, 224, 49, 15, 155, 170, 228, - 158, 151, 239, 19, 0, 232, 204, 216, 76, 21, 149, 130, 142, 63, 146, 152, - 124, 136, 129, 14, 182, 212, 29, 8, 244, 12, 36, 28, 134, 52, 216, 106, - 229, 107, 150, 8, 223, 247, 117, 229, 251, 216, 158, 228, 97, 240, 148, 228, + 232, 131, 230, 212, 162, 143, 189, 179, 44, 100, 224, 49, 15, 155, 170, 228, + 158, 151, 239, 19, 0, 232, 204, 216, 76, 21, 149, 130, 142, 63, 146, 152, + 124, 136, 129, 14, 182, 212, 29, 8, 244, 12, 36, 28, 134, 52, 216, 106, + 229, 107, 150, 8, 223, 247, 117, 229, 251, 216, 158, 228, 97, 240, 148, 228, 49, 138, 80, 34, 204, 52, 237, 43, 105, 142, 231, 20, 32, 70, 44, 180, - 212, 121, 229, 177, 50, 152, 238, 72, 51, 116, 111, 18, 27, 211, 40, 211, + 212, 121, 229, 177, 50, 152, 238, 72, 51, 116, 111, 18, 27, 211, 40, 211, 97, 226, 18, 155, 21, 216, 166, 165, 37, 234, 56, 121, 165, 159, 197, 87, - 203, 146, 69, 137, 25, 148, 143, 246, 247, 131, 100, 91, 45, 25, 127, 103, + 203, 146, 69, 137, 25, 148, 143, 246, 247, 131, 100, 91, 45, 25, 127, 103, 35, 219, 32, 31, 237, 93, 92, 167, 194, 64, 255, 188, 64, 139, 118, 135, - 212, 56, 216, 167, 102, 36, 220, 109, 21, 147, 92, 78, 8, 65, 213, 179, + 212, 56, 216, 167, 102, 36, 220, 109, 21, 147, 92, 78, 8, 65, 213, 179, 11, 40, 227, 83, 207, 175, 56, 75, 193, 105, 239, 145, 193, 107, 234, 101, 50, 97, 123, 246, 137, 30, 180, 149, 18, 62, 162, 163, 16, 192, 79, 61, - 222, 25, 35, 181, 13, 10, 90, 25, 216, 76, 219, 117, 100, 244, 159, 172, - 223, 106, 19, 1, 176, 180, 154, 222, 182, 202, 241, 217, 150, 203, 244, 213, + 222, 25, 35, 181, 13, 10, 90, 25, 216, 76, 219, 117, 100, 244, 159, 172, + 223, 106, 19, 1, 176, 180, 154, 222, 182, 202, 241, 217, 150, 203, 244, 213, 94, 178, 158, 130, 166, 105, 167, 118, 194, 153, 142, 60, 134, 216, 142, 216, - 254, 2, 7, 54, 26, 197, 25, 138, 74, 39, 101, 107, 168, 110, 24, 58, - 191, 136, 25, 40, 26, 79, 96, 4, 25, 32, 134, 180, 69, 19, 198, 208, - 254, 197, 133, 72, 242, 66, 107, 23, 157, 143, 117, 50, 224, 198, 246, 8, + 254, 2, 7, 54, 26, 197, 25, 138, 74, 39, 101, 107, 168, 110, 24, 58, + 191, 136, 25, 40, 26, 79, 96, 4, 25, 32, 134, 180, 69, 19, 198, 208, + 254, 197, 133, 72, 242, 66, 107, 23, 157, 143, 117, 50, 224, 198, 246, 8, 19, 49, 213, 159, 9, 201, 160, 158, 200, 59, 145, 119, 110, 58, 190, 132, - 168, 220, 64, 171, 103, 140, 202, 167, 130, 190, 195, 57, 194, 90, 11, 214, + 168, 220, 64, 171, 103, 140, 202, 167, 130, 190, 195, 57, 194, 90, 11, 214, 19, 53, 68, 88, 89, 14, 235, 20, 50, 249, 248, 100, 241, 10, 149, 35, 93, 4, 84, 62, 75, 41, 223, 81, 56, 18, 14, 101, 224, 40, 118, 53, - 252, 72, 194, 185, 15, 235, 120, 170, 171, 237, 242, 201, 96, 157, 93, 248, - 227, 156, 239, 249, 190, 10, 177, 147, 77, 18, 157, 53, 114, 233, 168, 14, + 252, 72, 194, 185, 15, 235, 120, 170, 171, 237, 242, 201, 96, 157, 93, 248, + 227, 156, 239, 249, 190, 10, 177, 147, 77, 18, 157, 53, 114, 233, 168, 14, 28, 80, 50, 89, 248, 127, 156, 98, 193, 111, 202, 38, 248, 60, 243, 240, - 198, 122, 227, 160, 117, 138, 247, 171, 235, 47, 23, 245, 177, 12, 24, 213, - 214, 117, 210, 86, 85, 55, 153, 25, 16, 53, 195, 81, 247, 217, 104, 109, - 170, 63, 79, 169, 38, 150, 42, 167, 206, 230, 51, 109, 62, 202, 205, 164, + 198, 122, 227, 160, 117, 138, 247, 171, 235, 47, 23, 245, 177, 12, 24, 213, + 214, 117, 210, 86, 85, 55, 153, 25, 16, 53, 195, 81, 247, 217, 104, 109, + 170, 63, 79, 169, 38, 150, 42, 167, 206, 230, 51, 109, 62, 202, 205, 164, 28, 240, 90, 82, 119, 57, 222, 95, 195, 106, 193, 197, 180, 73, 24, 108, - 143, 114, 54, 29, 100, 255, 124, 30, 143, 120, 147, 84, 110, 157, 53, 226, - 104, 117, 65, 60, 187, 173, 94, 59, 132, 121, 145, 188, 220, 105, 4, 48, + 143, 114, 54, 29, 100, 255, 124, 30, 143, 120, 147, 84, 110, 157, 53, 226, + 104, 117, 65, 60, 187, 173, 94, 59, 132, 121, 145, 188, 220, 105, 4, 48, 89, 130, 82, 236, 212, 138, 179, 197, 182, 115, 6, 83, 196, 132, 184, 148, - 183, 101, 141, 92, 84, 153, 147, 133, 212, 8, 250, 226, 167, 209, 22, 95, + 183, 101, 141, 92, 84, 153, 147, 133, 212, 8, 250, 226, 167, 209, 22, 95, 44, 103, 243, 27, 111, 105, 128, 110, 88, 110, 190, 229, 81, 26, 219, 229, 83, 247, 16, 17, 158, 228, 197, 32, 193, 223, 184, 178, 89, 21, 43, 254, - 124, 144, 200, 131, 138, 5, 107, 98, 139, 16, 184, 127, 244, 51, 141, 88, - 178, 132, 205, 239, 123, 14, 34, 2, 244, 238, 154, 230, 146, 87, 15, 20, - 164, 174, 159, 28, 211, 81, 230, 227, 158, 16, 168, 8, 18, 105, 177, 68, + 124, 144, 200, 131, 138, 5, 107, 98, 139, 16, 184, 127, 244, 51, 141, 88, + 178, 132, 205, 239, 123, 14, 34, 2, 244, 238, 154, 230, 146, 87, 15, 20, + 164, 174, 159, 28, 211, 81, 230, 227, 158, 16, 168, 8, 18, 105, 177, 68, 50, 127, 64, 73, 123, 233, 44, 34, 159, 133, 66, 100, 163, 184, 244, 171, - 240, 235, 230, 160, 137, 131, 200, 230, 189, 136, 137, 240, 110, 253, 0, 250, + 240, 235, 230, 160, 137, 131, 200, 230, 189, 136, 137, 240, 110, 253, 0, 250, 52, 126, 123, 209, 83, 189, 61, 243, 153, 60, 36, 157, 156, 141, 175, 212, - 219, 217, 33, 144, 133, 126, 7, 41, 228, 77, 247, 47, 162, 47, 3, 157, + 219, 217, 33, 144, 133, 126, 7, 41, 228, 77, 247, 47, 162, 47, 3, 157, 32, 219, 149, 138, 51, 181, 65, 242, 51, 76, 185, 51, 5, 188, 216, 33, 31, 179, 247, 93, 55, 241, 103, 253, 14, 6, 32, 17, 137, 194, 126, 235, - 132, 115, 93, 167, 187, 190, 147, 190, 255, 120, 166, 38, 118, 241, 129, 163, + 132, 115, 93, 167, 187, 190, 147, 190, 255, 120, 166, 38, 118, 241, 129, 163, 37, 39, 155, 142, 37, 147, 134, 221, 136, 99, 114, 152, 250, 143, 53, 104, - 103, 7, 37, 178, 195, 124, 200, 196, 34, 8, 247, 255, 156, 141, 29, 202, - 239, 70, 189, 144, 0, 167, 182, 105, 57, 205, 218, 54, 151, 29, 7, 76, - 7, 84, 20, 246, 185, 216, 93, 21, 96, 25, 115, 176, 38, 180, 177, 224, - 112, 104, 92, 17, 152, 55, 211, 21, 210, 98, 249, 201, 21, 85, 84, 185, + 103, 7, 37, 178, 195, 124, 200, 196, 34, 8, 247, 255, 156, 141, 29, 202, + 239, 70, 189, 144, 0, 167, 182, 105, 57, 205, 218, 54, 151, 29, 7, 76, + 7, 84, 20, 246, 185, 216, 93, 21, 96, 25, 115, 176, 38, 180, 177, 224, + 112, 104, 92, 17, 152, 55, 211, 21, 210, 98, 249, 201, 21, 85, 84, 185, 53, 59, 147, 198, 1, 251, 185, 235, 132, 73, 67, 194, 220, 120, 191, 206, 73, 53, 158, 237, 102, 41, 23, 133, 14, 81, 47, 204, 9, 142, 124, 180, - 115, 236, 180, 190, 218, 68, 92, 113, 54, 250, 174, 99, 126, 1, 186, 88, - 231, 96, 51, 147, 236, 164, 135, 210, 75, 242, 196, 53, 104, 101, 233, 0, - 129, 173, 53, 118, 42, 188, 139, 187, 251, 143, 37, 222, 198, 168, 194, 103, - 107, 56, 240, 213, 98, 0, 65, 112, 187, 230, 203, 207, 104, 124, 78, 130, + 115, 236, 180, 190, 218, 68, 92, 113, 54, 250, 174, 99, 126, 1, 186, 88, + 231, 96, 51, 147, 236, 164, 135, 210, 75, 242, 196, 53, 104, 101, 233, 0, + 129, 173, 53, 118, 42, 188, 139, 187, 251, 143, 37, 222, 198, 168, 194, 103, + 107, 56, 240, 213, 98, 0, 65, 112, 187, 230, 203, 207, 104, 124, 78, 130, 66, 156, 214, 95, 22, 46, 181, 254, 15, 201, 138, 160, 138, 171, 202, 3, - 169, 187, 110, 58, 43, 218, 62, 112, 49, 206, 186, 161, 31, 140, 183, 84, - 143, 250, 217, 123, 9, 210, 87, 1, 208, 77, 143, 33, 6, 237, 173, 108, - 187, 137, 131, 148, 145, 22, 123, 142, 146, 156, 223, 61, 124, 151, 57, 17, + 169, 187, 110, 58, 43, 218, 62, 112, 49, 206, 186, 161, 31, 140, 183, 84, + 143, 250, 217, 123, 9, 210, 87, 1, 208, 77, 143, 33, 6, 237, 173, 108, + 187, 137, 131, 148, 145, 22, 123, 142, 146, 156, 223, 61, 124, 151, 57, 17, 88, 139, 56, 8, 26, 205, 163, 193, 72, 201, 209, 220, 215, 97, 172, 73, 99, 139, 111, 125, 94, 196, 78, 235, 224, 103, 38, 237, 9, 142, 131, 229, 45, 247, 172, 219, 29, 102, 67, 124, 171, 113, 2, 85, 148, 56, 150, 227, 45, 147, 200, 171, 42, 244, 128, 106, 2, 47, 245, 211, 163, 240, 41, 86, 50, 70, 44, 91, 166, 247, 110, 234, 138, 152, 4, 100, 49, 248, 198, 51, - 124, 253, 126, 122, 30, 165, 0, 183, 248, 65, 30, 156, 161, 52, 164, 76, + 124, 253, 126, 122, 30, 165, 0, 183, 248, 65, 30, 156, 161, 52, 164, 76, 44, 198, 99, 20, 24, 97, 93, 232, 104, 51, 200, 0, 153, 67, 93, 172, 94, 217, 127, 34, 29, 64, 149, 41, 78, 211, 63, 188, 61, 102, 2, 127, - 166, 194, 5, 59, 203, 5, 224, 68, 250, 58, 202, 236, 218, 235, 168, 0, - 205, 82, 53, 99, 51, 144, 0, 140, 45, 46, 213, 207, 17, 221, 47, 85, - 211, 87, 2, 35, 167, 236, 191, 70, 147, 201, 200, 69, 1, 228, 136, 243, - 122, 253, 34, 201, 92, 90, 194, 8, 119, 197, 197, 178, 157, 207, 170, 147, - 232, 5, 200, 241, 6, 27, 120, 242, 232, 163, 26, 234, 230, 50, 214, 194, - 125, 135, 62, 28, 118, 24, 155, 39, 166, 250, 204, 189, 169, 94, 110, 81, - 222, 81, 127, 71, 49, 176, 178, 37, 63, 219, 72, 0, 100, 255, 201, 70, - 177, 208, 81, 101, 177, 31, 130, 187, 196, 119, 161, 217, 207, 216, 59, 106, + 166, 194, 5, 59, 203, 5, 224, 68, 250, 58, 202, 236, 218, 235, 168, 0, + 205, 82, 53, 99, 51, 144, 0, 140, 45, 46, 213, 207, 17, 221, 47, 85, + 211, 87, 2, 35, 167, 236, 191, 70, 147, 201, 200, 69, 1, 228, 136, 243, + 122, 253, 34, 201, 92, 90, 194, 8, 119, 197, 197, 178, 157, 207, 170, 147, + 232, 5, 200, 241, 6, 27, 120, 242, 232, 163, 26, 234, 230, 50, 214, 194, + 125, 135, 62, 28, 118, 24, 155, 39, 166, 250, 204, 189, 169, 94, 110, 81, + 222, 81, 127, 71, 49, 176, 178, 37, 63, 219, 72, 0, 100, 255, 201, 70, + 177, 208, 81, 101, 177, 31, 130, 187, 196, 119, 161, 217, 207, 216, 59, 106, 15, 56, 134, 229, 99, 68, 73, 215, 9, 25, 119, 82, 88, 19, 184, 42, 38, 40, 176, 6, 34, 167, 249, 143, 6, 216, 128, 139, 75, 3, 229, 126, - 121, 187, 68, 219, 187, 99, 154, 175, 240, 86, 75, 40, 133, 146, 223, 105, - 220, 83, 126, 90, 206, 136, 102, 199, 36, 217, 56, 78, 226, 138, 59, 142, - 223, 68, 175, 191, 83, 224, 208, 195, 2, 102, 168, 194, 158, 231, 143, 162, + 121, 187, 68, 219, 187, 99, 154, 175, 240, 86, 75, 40, 133, 146, 223, 105, + 220, 83, 126, 90, 206, 136, 102, 199, 36, 217, 56, 78, 226, 138, 59, 142, + 223, 68, 175, 191, 83, 224, 208, 195, 2, 102, 168, 194, 158, 231, 143, 162, 83, 92, 93, 238, 12, 231, 142, 41, 106, 66, 178, 68, 83, 155, 24, 102, - 150, 112, 1, 27, 175, 239, 85, 175, 61, 75, 157, 245, 121, 62, 171, 217, + 150, 112, 1, 27, 175, 239, 85, 175, 61, 75, 157, 245, 121, 62, 171, 217, 55, 218, 86, 45, 10, 228, 203, 193, 216, 90, 142, 109, 232, 168, 17, 149, - 145, 169, 199, 134, 194, 110, 104, 66, 130, 215, 179, 205, 6, 183, 93, 47, - 131, 8, 104, 12, 169, 92, 69, 43, 193, 77, 223, 238, 36, 15, 59, 136, + 145, 169, 199, 134, 194, 110, 104, 66, 130, 215, 179, 205, 6, 183, 93, 47, + 131, 8, 104, 12, 169, 92, 69, 43, 193, 77, 223, 238, 36, 15, 59, 136, 95, 87, 196, 169, 35, 118, 252, 19, 6, 247, 172, 219, 159, 109, 118, 154, 10, 199, 227, 164, 36, 85, 27, 37, 52, 149, 85, 107, 134, 203, 39, 112, 63, 235, 229, 225, 141, 127, 46, 188, 125, 48, 183, 137, 79, 157, 251, 128, - 214, 29, 60, 192, 43, 20, 22, 77, 62, 5, 229, 201, 61, 217, 181, 68, - 161, 232, 220, 189, 206, 170, 48, 199, 251, 10, 93, 153, 112, 35, 81, 174, + 214, 29, 60, 192, 43, 20, 22, 77, 62, 5, 229, 201, 61, 217, 181, 68, + 161, 232, 220, 189, 206, 170, 48, 199, 251, 10, 93, 153, 112, 35, 81, 174, 17, 220, 54, 183, 4, 229, 14, 231, 33, 14, 63, 121, 125, 205, 101, 110, - 255, 145, 55, 130, 56, 4, 236, 171, 27, 10, 130, 188, 115, 125, 104, 178, + 255, 145, 55, 130, 56, 4, 236, 171, 27, 10, 130, 188, 115, 125, 104, 178, 41, 100, 48, 200, 231, 41, 156, 32, 125, 22, 167, 209, 221, 201, 63, 165, - 210, 15, 14, 83, 162, 45, 176, 131, 195, 34, 145, 120, 155, 67, 82, 254, - 231, 179, 149, 97, 4, 84, 30, 62, 140, 39, 235, 91, 145, 92, 89, 87, + 210, 15, 14, 83, 162, 45, 176, 131, 195, 34, 145, 120, 155, 67, 82, 254, + 231, 179, 149, 97, 4, 84, 30, 62, 140, 39, 235, 91, 145, 92, 89, 87, 96, 144, 96, 223, 153, 0, 28, 117, 238, 168, 40, 11, 140, 197, 162, 172, 72, 23, 120, 153, 147, 195, 6, 39, 36, 54, 174, 202, 182, 74, 232, 30, - 240, 10, 130, 188, 127, 2, 48, 68, 9, 191, 245, 176, 249, 169, 19, 21, - 154, 45, 249, 114, 137, 223, 190, 252, 87, 36, 85, 242, 96, 21, 234, 18, - 157, 108, 86, 179, 103, 87, 149, 121, 231, 19, 111, 157, 154, 171, 158, 128, + 240, 10, 130, 188, 127, 2, 48, 68, 9, 191, 245, 176, 249, 169, 19, 21, + 154, 45, 249, 114, 137, 223, 190, 252, 87, 36, 85, 242, 96, 21, 234, 18, + 157, 108, 86, 179, 103, 87, 149, 121, 231, 19, 111, 157, 154, 171, 158, 128, 68, 253, 157, 146, 9, 11, 82, 101, 218, 181, 37, 73, 31, 19, 122, 211, - 104, 102, 172, 244, 119, 94, 235, 143, 241, 113, 24, 211, 132, 227, 169, 254, + 104, 102, 172, 244, 119, 94, 235, 143, 241, 113, 24, 211, 132, 227, 169, 254, 60, 118, 45, 122, 177, 97, 161, 170, 233, 212, 139, 23, 179, 61, 117, 175, - 126, 18, 119, 242, 14, 67, 254, 147, 62, 61, 58, 54, 42, 75, 134, 163, - 134, 56, 20, 222, 1, 199, 168, 38, 142, 114, 14, 84, 106, 218, 24, 245, - 129, 59, 86, 217, 80, 79, 119, 218, 53, 136, 124, 63, 90, 179, 205, 112, - 192, 116, 186, 223, 65, 52, 109, 169, 196, 209, 73, 239, 124, 224, 15, 78, - 134, 164, 65, 189, 58, 22, 166, 57, 64, 104, 185, 101, 43, 231, 254, 145, - 156, 74, 38, 201, 121, 28, 25, 221, 129, 82, 26, 14, 36, 32, 158, 208, + 126, 18, 119, 242, 14, 67, 254, 147, 62, 61, 58, 54, 42, 75, 134, 163, + 134, 56, 20, 222, 1, 199, 168, 38, 142, 114, 14, 84, 106, 218, 24, 245, + 129, 59, 86, 217, 80, 79, 119, 218, 53, 136, 124, 63, 90, 179, 205, 112, + 192, 116, 186, 223, 65, 52, 109, 169, 196, 209, 73, 239, 124, 224, 15, 78, + 134, 164, 65, 189, 58, 22, 166, 57, 64, 104, 185, 101, 43, 231, 254, 145, + 156, 74, 38, 201, 121, 28, 25, 221, 129, 82, 26, 14, 36, 32, 158, 208, 70, 2, 201, 70, 190, 208, 246, 54, 239, 158, 140, 212, 225, 209, 177, 86, 31, 32, 45, 93, 207, 255, 12, 176, 154, 217, 193, 166, 61, 241, 53, 80, 37, 214, 34, 65, 207, 114, 163, 132, 116, 133, 63, 217, 234, 5, 111, 188, 79, 1, 110, 88, 156, 17, 242, 1, 138, 105, 144, 213, 123, 212, 7, 164, - 200, 175, 161, 145, 108, 104, 174, 202, 202, 35, 153, 88, 138, 105, 58, 143, + 200, 175, 161, 145, 108, 104, 174, 202, 202, 35, 153, 88, 138, 105, 58, 143, 57, 227, 90, 38, 189, 38, 66, 80, 222, 174, 7, 202, 57, 236, 239, 104, 51, 26, 252, 140, 2, 74, 4, 163, 211, 199, 202, 185, 65, 203, 13, 210, 69, 228, 115, 31, 100, 143, 189, 100, 228, 209, 107, 55, 72, 150, 255, 144, - 232, 155, 15, 42, 18, 149, 49, 207, 32, 148, 178, 112, 254, 67, 51, 14, - 217, 41, 203, 217, 205, 101, 223, 161, 148, 33, 92, 164, 250, 91, 80, 251, - 104, 157, 225, 172, 18, 245, 5, 54, 30, 8, 254, 109, 3, 202, 215, 179, - 161, 236, 147, 104, 254, 232, 217, 124, 178, 1, 206, 38, 168, 77, 8, 112, - 234, 154, 162, 94, 3, 90, 94, 114, 137, 115, 42, 98, 202, 0, 214, 202, + 232, 155, 15, 42, 18, 149, 49, 207, 32, 148, 178, 112, 254, 67, 51, 14, + 217, 41, 203, 217, 205, 101, 223, 161, 148, 33, 92, 164, 250, 91, 80, 251, + 104, 157, 225, 172, 18, 245, 5, 54, 30, 8, 254, 109, 3, 202, 215, 179, + 161, 236, 147, 104, 254, 232, 217, 124, 178, 1, 206, 38, 168, 77, 8, 112, + 234, 154, 162, 94, 3, 90, 94, 114, 137, 115, 42, 98, 202, 0, 214, 202, 65, 93, 52, 179, 123, 74, 86, 10, 171, 211, 171, 44, 226, 56, 13, 163, - 7, 146, 57, 253, 115, 93, 156, 132, 119, 146, 107, 98, 218, 19, 195, 5, - 195, 190, 231, 218, 143, 48, 65, 102, 92, 0, 244, 108, 148, 144, 214, 99, - 128, 208, 85, 124, 5, 75, 38, 131, 93, 38, 21, 170, 24, 105, 170, 135, - 152, 21, 38, 191, 251, 88, 178, 62, 84, 177, 239, 61, 156, 63, 47, 195, - 117, 159, 198, 182, 126, 216, 103, 165, 158, 51, 70, 34, 33, 241, 216, 11, + 7, 146, 57, 253, 115, 93, 156, 132, 119, 146, 107, 98, 218, 19, 195, 5, + 195, 190, 231, 218, 143, 48, 65, 102, 92, 0, 244, 108, 148, 144, 214, 99, + 128, 208, 85, 124, 5, 75, 38, 131, 93, 38, 21, 170, 24, 105, 170, 135, + 152, 21, 38, 191, 251, 88, 178, 62, 84, 177, 239, 61, 156, 63, 47, 195, + 117, 159, 198, 182, 126, 216, 103, 165, 158, 51, 70, 34, 33, 241, 216, 11, 50, 152, 157, 100, 30, 66, 147, 88, 38, 17, 251, 19, 182, 71, 65, 199, - 150, 215, 188, 188, 80, 83, 2, 83, 73, 183, 251, 85, 101, 25, 173, 50, - 243, 138, 194, 98, 209, 104, 219, 25, 45, 111, 172, 115, 238, 149, 4, 205, - 123, 112, 218, 192, 247, 102, 191, 30, 225, 230, 36, 188, 219, 220, 19, 213, - 127, 226, 227, 17, 90, 216, 88, 129, 249, 230, 91, 42, 111, 102, 45, 42, - 175, 161, 188, 195, 184, 238, 57, 69, 88, 168, 167, 23, 64, 47, 201, 51, + 150, 215, 188, 188, 80, 83, 2, 83, 73, 183, 251, 85, 101, 25, 173, 50, + 243, 138, 194, 98, 209, 104, 219, 25, 45, 111, 172, 115, 238, 149, 4, 205, + 123, 112, 218, 192, 247, 102, 191, 30, 225, 230, 36, 188, 219, 220, 19, 213, + 127, 226, 227, 17, 90, 216, 88, 129, 249, 230, 91, 42, 111, 102, 45, 42, + 175, 161, 188, 195, 184, 238, 57, 69, 88, 168, 167, 23, 64, 47, 201, 51, 79, 65, 117, 254, 146, 100, 8, 30, 209, 42, 138, 132, 209, 241, 66, 249, - 228, 192, 48, 21, 75, 202, 123, 99, 76, 87, 34, 99, 32, 224, 140, 94, + 228, 192, 48, 21, 75, 202, 123, 99, 76, 87, 34, 99, 32, 224, 140, 94, 90, 178, 47, 165, 23, 227, 92, 218, 45, 44, 104, 9, 23, 94, 254, 195, 16, 12, 105, 135, 48, 225, 7, 139, 148, 199, 157, 139, 243, 71, 254, 15, 64, 143, 140, 3, 221, 218, 117, 118, 34, 177, 156, 50, 220, 99, 219, 4, - 247, 244, 16, 100, 51, 73, 85, 181, 24, 127, 102, 173, 238, 205, 143, 68, + 247, 244, 16, 100, 51, 73, 85, 181, 24, 127, 102, 173, 238, 205, 143, 68, 63, 44, 197, 106, 165, 150, 11, 244, 198, 36, 101, 10, 79, 207, 183, 214, - 228, 226, 226, 235, 77, 11, 175, 80, 90, 197, 35, 99, 7, 121, 208, 236, - 141, 171, 176, 158, 219, 162, 166, 168, 147, 2, 131, 180, 57, 229, 106, 63, - 194, 250, 21, 63, 152, 16, 109, 20, 208, 227, 225, 10, 22, 2, 223, 128, + 228, 226, 226, 235, 77, 11, 175, 80, 90, 197, 35, 99, 7, 121, 208, 236, + 141, 171, 176, 158, 219, 162, 166, 168, 147, 2, 131, 180, 57, 229, 106, 63, + 194, 250, 21, 63, 152, 16, 109, 20, 208, 227, 225, 10, 22, 2, 223, 128, 89, 100, 47, 101, 165, 0, 147, 198, 47, 109, 94, 113, 183, 101, 113, 248, 79, 21, 26, 141, 176, 52, 118, 71, 143, 174, 194, 248, 199, 194, 245, 105, - 112, 92, 180, 22, 184, 218, 78, 192, 41, 17, 171, 143, 203, 2, 81, 178, - 177, 138, 101, 113, 190, 77, 70, 73, 85, 228, 194, 2, 70, 191, 54, 43, - 188, 233, 27, 135, 140, 127, 10, 59, 38, 86, 226, 127, 166, 132, 69, 21, - 200, 107, 33, 89, 24, 152, 88, 90, 75, 144, 236, 44, 10, 121, 139, 169, - 113, 127, 104, 227, 164, 145, 69, 196, 233, 237, 127, 132, 204, 244, 178, 247, - 191, 207, 63, 135, 214, 135, 213, 151, 44, 43, 190, 32, 241, 221, 118, 81, - 145, 43, 29, 244, 239, 78, 245, 115, 229, 178, 255, 147, 16, 149, 255, 154, - 217, 226, 234, 99, 247, 146, 209, 42, 9, 74, 220, 199, 178, 165, 246, 188, + 112, 92, 180, 22, 184, 218, 78, 192, 41, 17, 171, 143, 203, 2, 81, 178, + 177, 138, 101, 113, 190, 77, 70, 73, 85, 228, 194, 2, 70, 191, 54, 43, + 188, 233, 27, 135, 140, 127, 10, 59, 38, 86, 226, 127, 166, 132, 69, 21, + 200, 107, 33, 89, 24, 152, 88, 90, 75, 144, 236, 44, 10, 121, 139, 169, + 113, 127, 104, 227, 164, 145, 69, 196, 233, 237, 127, 132, 204, 244, 178, 247, + 191, 207, 63, 135, 214, 135, 213, 151, 44, 43, 190, 32, 241, 221, 118, 81, + 145, 43, 29, 244, 239, 78, 245, 115, 229, 178, 255, 147, 16, 149, 255, 154, + 217, 226, 234, 99, 247, 146, 209, 42, 9, 74, 220, 199, 178, 165, 246, 188, 22, 51, 136, 38, 63, 125, 45, 108, 190, 111, 72, 248, 57, 16, 107, 120, - 245, 158, 215, 136, 9, 25, 61, 162, 148, 109, 112, 193, 56, 81, 121, 143, - 208, 225, 20, 130, 245, 12, 81, 156, 189, 102, 23, 51, 135, 76, 205, 59, - 197, 152, 35, 80, 127, 168, 223, 48, 20, 104, 57, 69, 132, 53, 72, 220, - 161, 178, 219, 33, 37, 245, 58, 199, 17, 246, 39, 2, 84, 251, 20, 62, + 245, 158, 215, 136, 9, 25, 61, 162, 148, 109, 112, 193, 56, 81, 121, 143, + 208, 225, 20, 130, 245, 12, 81, 156, 189, 102, 23, 51, 135, 76, 205, 59, + 197, 152, 35, 80, 127, 168, 223, 48, 20, 104, 57, 69, 132, 53, 72, 220, + 161, 178, 219, 33, 37, 245, 58, 199, 17, 246, 39, 2, 84, 251, 20, 62, 21, 56, 209, 143, 149, 24, 68, 59, 17, 240, 215, 95, 195, 188, 231, 97, 41, 32, 98, 57, 107, 172, 90, 159, 132, 150, 226, 75, 151, 144, 12, 111, - 6, 253, 112, 213, 28, 179, 232, 233, 73, 139, 84, 232, 204, 0, 148, 77, + 6, 253, 112, 213, 28, 179, 232, 233, 73, 139, 84, 232, 204, 0, 148, 77, 48, 183, 37, 213, 67, 195, 211, 206, 12, 110, 212, 180, 201, 229, 77, 7, 48, 221, 44, 102, 23, 168, 145, 200, 77, 103, 7, 173, 247, 84, 110, 123, 23, 5, 145, 154, 124, 95, 103, 89, 78, 136, 74, 47, 136, 86, 135, 250, 60, 228, 64, 78, 228, 172, 111, 204, 89, 144, 119, 8, 248, 81, 70, 113, 89, 113, 50, 70, 124, 182, 58, 179, 77, 197, 160, 136, 41, 195, 19, 163, - 222, 23, 34, 70, 203, 156, 137, 209, 146, 213, 112, 210, 203, 138, 236, 36, + 222, 23, 34, 70, 203, 156, 137, 209, 146, 213, 112, 210, 203, 138, 236, 36, 24, 57, 106, 75, 115, 112, 43, 229, 239, 154, 133, 160, 211, 36, 241, 229, 94, 110, 224, 182, 162, 85, 189, 20, 125, 9, 26, 137, 185, 177, 14, 138, - 5, 225, 132, 174, 244, 209, 187, 92, 140, 29, 158, 111, 150, 8, 32, 99, + 5, 225, 132, 174, 244, 209, 187, 92, 140, 29, 158, 111, 150, 8, 32, 99, 99, 142, 213, 19, 101, 164, 64, 190, 61, 219, 198, 118, 246, 217, 110, 173, - 248, 24, 100, 216, 190, 118, 198, 209, 64, 238, 205, 176, 46, 116, 131, 103, - 243, 148, 123, 69, 136, 144, 46, 112, 112, 162, 219, 21, 205, 136, 193, 152, + 248, 24, 100, 216, 190, 118, 198, 209, 64, 238, 205, 176, 46, 116, 131, 103, + 243, 148, 123, 69, 136, 144, 46, 112, 112, 162, 219, 21, 205, 136, 193, 152, 96, 134, 16, 22, 146, 190, 194, 19, 119, 47, 44, 67, 131, 166, 109, 215, - 159, 90, 88, 212, 11, 71, 235, 55, 31, 4, 113, 172, 187, 169, 10, 144, - 169, 108, 79, 145, 7, 29, 24, 221, 230, 28, 113, 32, 190, 160, 67, 40, + 159, 90, 88, 212, 11, 71, 235, 55, 31, 4, 113, 172, 187, 169, 10, 144, + 169, 108, 79, 145, 7, 29, 24, 221, 230, 28, 113, 32, 190, 160, 67, 40, 43, 107, 222, 221, 175, 180, 200, 217, 15, 128, 253, 206, 203, 106, 167, 163, 89, 29, 28, 247, 240, 14, 121, 133, 218, 154, 167, 77, 98, 149, 151, 145, - 4, 78, 232, 135, 195, 121, 157, 216, 178, 211, 243, 201, 71, 220, 150, 119, + 4, 78, 232, 135, 195, 121, 157, 216, 178, 211, 243, 201, 71, 220, 150, 119, 74, 71, 110, 200, 234, 100, 105, 248, 47, 25, 35, 1, 241, 166, 6, 88, 41, 246, 176, 181, 21, 75, 150, 20, 227, 19, 64, 226, 209, 194, 121, 174, - 240, 219, 133, 253, 161, 146, 230, 69, 122, 42, 165, 82, 78, 45, 185, 61, + 240, 219, 133, 253, 161, 146, 230, 69, 122, 42, 165, 82, 78, 45, 185, 61, 12, 14, 148, 13, 119, 155, 157, 28, 90, 226, 119, 9, 201, 199, 64, 93, - 120, 115, 138, 156, 235, 123, 52, 111, 149, 48, 73, 181, 204, 181, 10, 157, + 120, 115, 138, 156, 235, 123, 52, 111, 149, 48, 73, 181, 204, 181, 10, 157, 16, 55, 100, 243, 10, 29, 159, 139, 88, 16, 1, 31, 201, 242, 2, 237, - 186, 181, 217, 139, 102, 205, 119, 197, 201, 221, 108, 205, 171, 54, 109, 31, + 186, 181, 217, 139, 102, 205, 119, 197, 201, 221, 108, 205, 171, 54, 109, 31, 76, 199, 28, 160, 214, 14, 201, 25, 211, 189, 144, 44, 69, 70, 205, 79, - 150, 149, 108, 23, 8, 171, 60, 18, 127, 161, 41, 71, 239, 168, 89, 140, + 150, 149, 108, 23, 8, 171, 60, 18, 127, 161, 41, 71, 239, 168, 89, 140, 49, 149, 157, 109, 232, 141, 227, 239, 247, 114, 174, 129, 19, 252, 130, 74, - 202, 224, 73, 122, 246, 47, 147, 8, 37, 60, 253, 101, 11, 171, 160, 39, + 202, 224, 73, 122, 246, 47, 147, 8, 37, 60, 253, 101, 11, 171, 160, 39, 92, 180, 183, 40, 254, 233, 117, 200, 139, 37, 140, 28, 35, 8, 10, 40, - 167, 247, 248, 84, 215, 58, 170, 2, 7, 1, 69, 214, 10, 7, 233, 209, - 181, 212, 34, 68, 46, 141, 198, 137, 248, 45, 130, 97, 123, 104, 141, 17, - 126, 7, 199, 55, 194, 160, 69, 39, 13, 70, 41, 63, 205, 99, 1, 69, + 167, 247, 248, 84, 215, 58, 170, 2, 7, 1, 69, 214, 10, 7, 233, 209, + 181, 212, 34, 68, 46, 141, 198, 137, 248, 45, 130, 97, 123, 104, 141, 17, + 126, 7, 199, 55, 194, 160, 69, 39, 13, 70, 41, 63, 205, 99, 1, 69, 46, 92, 77, 56, 20, 247, 224, 226, 60, 153, 81, 180, 91, 159, 156, 27, - 119, 114, 126, 210, 26, 123, 165, 204, 237, 81, 75, 130, 45, 60, 0, 155, + 119, 114, 126, 210, 26, 123, 165, 204, 237, 81, 75, 130, 45, 60, 0, 155, 11, 125, 27, 202, 35, 230, 101, 164, 86, 117, 226, 23, 171, 253, 222, 223, 38, 104, 224, 124, 92, 251, 110, 145, 247, 198, 158, 25, 172, 84, 49, 87, - 1, 168, 95, 124, 146, 5, 46, 179, 198, 235, 69, 200, 63, 212, 59, 110, + 1, 168, 95, 124, 146, 5, 46, 179, 198, 235, 69, 200, 63, 212, 59, 110, 52, 195, 54, 71, 169, 234, 189, 58, 180, 149, 194, 10, 118, 99, 66, 66, - 123, 192, 248, 51, 237, 129, 10, 143, 94, 55, 135, 247, 56, 163, 40, 139, - 150, 192, 142, 64, 169, 90, 42, 116, 228, 62, 67, 130, 212, 212, 23, 210, - 182, 95, 109, 224, 185, 255, 156, 102, 184, 171, 42, 98, 217, 218, 27, 80, - 171, 125, 49, 233, 16, 238, 42, 102, 61, 95, 180, 49, 192, 67, 112, 143, - 106, 145, 185, 239, 180, 181, 120, 24, 127, 215, 233, 123, 235, 104, 228, 248, - 223, 90, 211, 211, 76, 179, 198, 253, 220, 171, 247, 171, 11, 237, 17, 249, + 123, 192, 248, 51, 237, 129, 10, 143, 94, 55, 135, 247, 56, 163, 40, 139, + 150, 192, 142, 64, 169, 90, 42, 116, 228, 62, 67, 130, 212, 212, 23, 210, + 182, 95, 109, 224, 185, 255, 156, 102, 184, 171, 42, 98, 217, 218, 27, 80, + 171, 125, 49, 233, 16, 238, 42, 102, 61, 95, 180, 49, 192, 67, 112, 143, + 106, 145, 185, 239, 180, 181, 120, 24, 127, 215, 233, 123, 235, 104, 228, 248, + 223, 90, 211, 211, 76, 179, 198, 253, 220, 171, 247, 171, 11, 237, 17, 249, 81, 122, 111, 255, 213, 120, 167, 192, 149, 102, 7, 204, 86, 107, 156, 83, - 174, 18, 237, 143, 85, 76, 245, 189, 86, 90, 118, 69, 100, 140, 121, 17, - 255, 17, 209, 144, 90, 3, 191, 201, 134, 108, 0, 196, 133, 153, 39, 248, - 138, 215, 73, 18, 21, 140, 172, 178, 154, 194, 170, 45, 112, 113, 213, 36, - 155, 0, 30, 213, 186, 39, 6, 241, 92, 111, 139, 52, 84, 58, 218, 187, + 174, 18, 237, 143, 85, 76, 245, 189, 86, 90, 118, 69, 100, 140, 121, 17, + 255, 17, 209, 144, 90, 3, 191, 201, 134, 108, 0, 196, 133, 153, 39, 248, + 138, 215, 73, 18, 21, 140, 172, 178, 154, 194, 170, 45, 112, 113, 213, 36, + 155, 0, 30, 213, 186, 39, 6, 241, 92, 111, 139, 52, 84, 58, 218, 187, 60, 123, 113, 190, 185, 89, 242, 248, 221, 238, 173, 145, 214, 237, 133, 101, - 6, 143, 188, 116, 13, 189, 205, 203, 147, 140, 215, 175, 38, 99, 77, 54, + 6, 143, 188, 116, 13, 189, 205, 203, 147, 140, 215, 175, 38, 99, 77, 54, 98, 146, 54, 101, 40, 206, 175, 26, 195, 33, 63, 20, 210, 96, 227, 125, - 108, 230, 179, 123, 81, 135, 183, 132, 216, 56, 223, 197, 141, 158, 114, 228, + 108, 230, 179, 123, 81, 135, 183, 132, 216, 56, 223, 197, 141, 158, 114, 228, 67, 172, 95, 76, 69, 212, 188, 244, 12, 16, 158, 119, 106, 44, 39, 36, 38, 164, 173, 182, 172, 210, 176, 19, 125, 6, 36, 138, 77, 65, 219, 30, 45, 167, 21, 125, 49, 69, 173, 23, 242, 246, 25, 155, 194, 161, 140, 125, 97, 153, 68, 120, 114, 23, 243, 242, 192, 129, 68, 88, 43, 161, 33, 152, - 130, 232, 179, 70, 156, 219, 198, 1, 135, 3, 178, 49, 92, 30, 125, 185, + 130, 232, 179, 70, 156, 219, 198, 1, 135, 3, 178, 49, 92, 30, 125, 185, 39, 185, 69, 143, 30, 180, 113, 109, 233, 156, 101, 82, 239, 142, 58, 234, - 151, 67, 2, 140, 198, 7, 180, 167, 33, 168, 131, 213, 157, 139, 43, 208, + 151, 67, 2, 140, 198, 7, 180, 167, 33, 168, 131, 213, 157, 139, 43, 208, 27, 217, 245, 115, 0, 59, 155, 69, 236, 209, 101, 139, 211, 247, 2, 41, - 113, 222, 7, 2, 109, 61, 232, 215, 145, 18, 202, 158, 187, 136, 54, 190, - 169, 13, 59, 204, 117, 37, 160, 6, 121, 200, 9, 189, 31, 0, 251, 78, - 223, 43, 122, 5, 42, 24, 74, 247, 241, 68, 42, 49, 28, 153, 3, 40, - 166, 47, 55, 83, 186, 236, 69, 132, 91, 115, 132, 26, 214, 160, 51, 161, - 232, 147, 172, 175, 144, 53, 58, 241, 1, 245, 53, 126, 211, 121, 98, 228, + 113, 222, 7, 2, 109, 61, 232, 215, 145, 18, 202, 158, 187, 136, 54, 190, + 169, 13, 59, 204, 117, 37, 160, 6, 121, 200, 9, 189, 31, 0, 251, 78, + 223, 43, 122, 5, 42, 24, 74, 247, 241, 68, 42, 49, 28, 153, 3, 40, + 166, 47, 55, 83, 186, 236, 69, 132, 91, 115, 132, 26, 214, 160, 51, 161, + 232, 147, 172, 175, 144, 53, 58, 241, 1, 245, 53, 126, 211, 121, 98, 228, 65, 166, 9, 186, 93, 111, 249, 87, 109, 85, 218, 177, 160, 225, 99, 131, - 167, 173, 36, 10, 121, 121, 98, 249, 99, 68, 128, 159, 217, 207, 65, 52, - 247, 53, 58, 135, 11, 76, 238, 101, 162, 166, 100, 126, 136, 157, 43, 172, - 186, 157, 138, 2, 132, 141, 165, 152, 92, 234, 3, 92, 81, 111, 83, 239, - 234, 204, 152, 240, 74, 198, 42, 56, 131, 104, 96, 83, 207, 109, 30, 185, + 167, 173, 36, 10, 121, 121, 98, 249, 99, 68, 128, 159, 217, 207, 65, 52, + 247, 53, 58, 135, 11, 76, 238, 101, 162, 166, 100, 126, 136, 157, 43, 172, + 186, 157, 138, 2, 132, 141, 165, 152, 92, 234, 3, 92, 81, 111, 83, 239, + 234, 204, 152, 240, 74, 198, 42, 56, 131, 104, 96, 83, 207, 109, 30, 185, 45, 242, 2, 155, 47, 18, 111, 119, 57, 239, 7, 88, 45, 86, 239, 10, - 178, 146, 58, 248, 96, 166, 234, 253, 202, 224, 111, 120, 216, 70, 205, 29, - 154, 232, 216, 165, 222, 76, 153, 46, 5, 143, 71, 197, 175, 198, 127, 231, - 119, 110, 47, 128, 61, 134, 41, 115, 101, 3, 35, 127, 201, 12, 152, 1, - 163, 41, 91, 233, 10, 230, 150, 44, 140, 234, 164, 184, 214, 218, 114, 23, - 221, 163, 57, 2, 5, 147, 66, 223, 90, 238, 136, 95, 138, 116, 27, 91, - 223, 52, 243, 246, 183, 215, 166, 170, 169, 8, 140, 91, 173, 160, 160, 105, + 178, 146, 58, 248, 96, 166, 234, 253, 202, 224, 111, 120, 216, 70, 205, 29, + 154, 232, 216, 165, 222, 76, 153, 46, 5, 143, 71, 197, 175, 198, 127, 231, + 119, 110, 47, 128, 61, 134, 41, 115, 101, 3, 35, 127, 201, 12, 152, 1, + 163, 41, 91, 233, 10, 230, 150, 44, 140, 234, 164, 184, 214, 218, 114, 23, + 221, 163, 57, 2, 5, 147, 66, 223, 90, 238, 136, 95, 138, 116, 27, 91, + 223, 52, 243, 246, 183, 215, 166, 170, 169, 8, 140, 91, 173, 160, 160, 105, 69, 241, 31, 33, 33, 148, 215, 67, 130, 181, 1, 114, 104, 206, 192, 195, - 247, 229, 99, 84, 29, 2, 132, 146, 191, 243, 37, 36, 46, 176, 164, 68, + 247, 229, 99, 84, 29, 2, 132, 146, 191, 243, 37, 36, 46, 176, 164, 68, 84, 121, 159, 6, 160, 195, 170, 43, 128, 130, 165, 44, 157, 83, 173, 182, 93, 90, 202, 227, 133, 140, 39, 203, 202, 2, 49, 96, 178, 190, 147, 15, 99, 71, 216, 166, 97, 130, 87, 4, 149, 23, 107, 246, 216, 213, 222, 64, 41, 215, 37, 211, 21, 53, 90, 130, 165, 181, 188, 87, 70, 8, 53, 114, - 227, 18, 192, 19, 200, 195, 83, 228, 1, 171, 202, 229, 92, 92, 227, 48, - 251, 31, 198, 59, 162, 119, 9, 75, 115, 30, 127, 8, 89, 99, 249, 86, - 152, 198, 53, 207, 82, 251, 68, 82, 247, 21, 214, 18, 246, 118, 81, 94, - 240, 34, 174, 233, 205, 204, 71, 0, 254, 24, 178, 166, 248, 12, 70, 187, - 163, 168, 95, 23, 108, 156, 210, 244, 198, 216, 54, 32, 83, 158, 121, 26, - 116, 252, 122, 73, 188, 134, 154, 180, 229, 139, 102, 2, 8, 171, 201, 5, - 187, 57, 35, 254, 35, 19, 161, 16, 88, 215, 158, 148, 249, 201, 65, 177, - 144, 69, 138, 161, 220, 255, 190, 223, 43, 181, 11, 158, 103, 193, 14, 21, + 227, 18, 192, 19, 200, 195, 83, 228, 1, 171, 202, 229, 92, 92, 227, 48, + 251, 31, 198, 59, 162, 119, 9, 75, 115, 30, 127, 8, 89, 99, 249, 86, + 152, 198, 53, 207, 82, 251, 68, 82, 247, 21, 214, 18, 246, 118, 81, 94, + 240, 34, 174, 233, 205, 204, 71, 0, 254, 24, 178, 166, 248, 12, 70, 187, + 163, 168, 95, 23, 108, 156, 210, 244, 198, 216, 54, 32, 83, 158, 121, 26, + 116, 252, 122, 73, 188, 134, 154, 180, 229, 139, 102, 2, 8, 171, 201, 5, + 187, 57, 35, 254, 35, 19, 161, 16, 88, 215, 158, 148, 249, 201, 65, 177, + 144, 69, 138, 161, 220, 255, 190, 223, 43, 181, 11, 158, 103, 193, 14, 21, 49, 16, 40, 223, 155, 12, 164, 23, 31, 15, 20, 238, 131, 85, 181, 80, - 149, 128, 196, 123, 155, 236, 9, 94, 252, 182, 54, 62, 215, 115, 115, 224, - 242, 141, 137, 238, 115, 101, 107, 65, 202, 79, 79, 27, 239, 29, 154, 19, + 149, 128, 196, 123, 155, 236, 9, 94, 252, 182, 54, 62, 215, 115, 115, 224, + 242, 141, 137, 238, 115, 101, 107, 65, 202, 79, 79, 27, 239, 29, 154, 19, 18, 4, 185, 144, 191, 107, 92, 29, 38, 248, 142, 81, 109, 64, 161, 23, 73, 93, 31, 114, 51, 81, 98, 209, 69, 27, 43, 22, 4, 168, 88, 60, - 149, 89, 100, 82, 122, 95, 21, 38, 97, 185, 87, 66, 82, 16, 242, 109, - 100, 94, 164, 6, 73, 130, 76, 137, 218, 226, 166, 35, 21, 156, 72, 253, - 148, 228, 142, 134, 41, 145, 15, 144, 215, 187, 120, 239, 195, 203, 44, 250, + 149, 89, 100, 82, 122, 95, 21, 38, 97, 185, 87, 66, 82, 16, 242, 109, + 100, 94, 164, 6, 73, 130, 76, 137, 218, 226, 166, 35, 21, 156, 72, 253, + 148, 228, 142, 134, 41, 145, 15, 144, 215, 187, 120, 239, 195, 203, 44, 250, 46, 72, 181, 43, 255, 81, 247, 100, 195, 248, 208, 115, 141, 32, 190, 131, 77, 230, 220, 54, 197, 60, 22, 115, 177, 116, 250, 0, 60, 144, 128, 68, - 245, 231, 199, 216, 17, 216, 227, 120, 221, 68, 233, 236, 202, 121, 189, 237, - 149, 60, 244, 130, 250, 169, 70, 101, 147, 8, 49, 248, 61, 207, 202, 148, - 228, 87, 234, 117, 238, 52, 92, 118, 148, 203, 206, 175, 75, 64, 215, 57, + 245, 231, 199, 216, 17, 216, 227, 120, 221, 68, 233, 236, 202, 121, 189, 237, + 149, 60, 244, 130, 250, 169, 70, 101, 147, 8, 49, 248, 61, 207, 202, 148, + 228, 87, 234, 117, 238, 52, 92, 118, 148, 203, 206, 175, 75, 64, 215, 57, 70, 196, 52, 62, 29, 116, 241, 185, 96, 131, 201, 219, 16, 3, 188, 159, - 129, 134, 11, 138, 13, 3, 72, 193, 183, 236, 91, 171, 161, 52, 166, 23, - 254, 118, 238, 180, 55, 215, 165, 163, 154, 202, 27, 61, 150, 31, 12, 1, - 249, 0, 12, 29, 132, 213, 168, 105, 53, 112, 54, 2, 236, 131, 230, 3, - 211, 69, 243, 233, 173, 145, 105, 27, 18, 252, 224, 5, 46, 18, 233, 96, - 237, 143, 52, 67, 158, 30, 242, 151, 98, 148, 208, 60, 143, 14, 245, 250, - 185, 151, 111, 147, 145, 197, 165, 233, 18, 178, 240, 83, 228, 213, 237, 58, + 129, 134, 11, 138, 13, 3, 72, 193, 183, 236, 91, 171, 161, 52, 166, 23, + 254, 118, 238, 180, 55, 215, 165, 163, 154, 202, 27, 61, 150, 31, 12, 1, + 249, 0, 12, 29, 132, 213, 168, 105, 53, 112, 54, 2, 236, 131, 230, 3, + 211, 69, 243, 233, 173, 145, 105, 27, 18, 252, 224, 5, 46, 18, 233, 96, + 237, 143, 52, 67, 158, 30, 242, 151, 98, 148, 208, 60, 143, 14, 245, 250, + 185, 151, 111, 147, 145, 197, 165, 233, 18, 178, 240, 83, 228, 213, 237, 58, 20, 152, 249, 241, 250, 204, 15, 167, 97, 242, 6, 228, 117, 133, 2, 199, - 220, 212, 239, 206, 104, 231, 145, 33, 17, 150, 223, 126, 173, 223, 148, 21, - 228, 41, 63, 37, 19, 102, 73, 95, 196, 40, 151, 2, 19, 239, 182, 22, - 178, 165, 242, 159, 208, 226, 72, 179, 201, 109, 157, 18, 230, 130, 221, 89, - 173, 242, 170, 11, 146, 20, 135, 112, 2, 202, 30, 25, 106, 151, 52, 223, - 1, 3, 18, 151, 74, 113, 49, 186, 112, 160, 121, 38, 233, 155, 188, 237, - 251, 178, 8, 200, 120, 134, 152, 22, 232, 250, 219, 237, 157, 23, 134, 158, - 122, 202, 120, 89, 248, 68, 46, 184, 180, 93, 84, 85, 177, 236, 62, 50, - 103, 62, 81, 105, 33, 15, 97, 203, 192, 132, 219, 70, 203, 104, 162, 98, - 179, 224, 44, 101, 221, 84, 176, 97, 77, 84, 45, 255, 227, 80, 107, 45, + 220, 212, 239, 206, 104, 231, 145, 33, 17, 150, 223, 126, 173, 223, 148, 21, + 228, 41, 63, 37, 19, 102, 73, 95, 196, 40, 151, 2, 19, 239, 182, 22, + 178, 165, 242, 159, 208, 226, 72, 179, 201, 109, 157, 18, 230, 130, 221, 89, + 173, 242, 170, 11, 146, 20, 135, 112, 2, 202, 30, 25, 106, 151, 52, 223, + 1, 3, 18, 151, 74, 113, 49, 186, 112, 160, 121, 38, 233, 155, 188, 237, + 251, 178, 8, 200, 120, 134, 152, 22, 232, 250, 219, 237, 157, 23, 134, 158, + 122, 202, 120, 89, 248, 68, 46, 184, 180, 93, 84, 85, 177, 236, 62, 50, + 103, 62, 81, 105, 33, 15, 97, 203, 192, 132, 219, 70, 203, 104, 162, 98, + 179, 224, 44, 101, 221, 84, 176, 97, 77, 84, 45, 255, 227, 80, 107, 45, 70, 106, 68, 206, 134, 182, 205, 255, 235, 44, 131, 81, 126, 142, 30, 130, 87, 133, 227, 15, 200, 194, 5, 230, 230, 169, 65, 116, 104, 193, 196, 214, 18, 199, 56, 114, 5, 7, 189, 158, 32, 119, 53, 93, 169, 172, 141, 223, 71, 194, 204, 221, 237, 118, 16, 198, 169, 10, 38, 156, 152, 76, 185, 73, 15, 227, 118, 57, 149, 160, 14, 158, 18, 139, 117, 249, 142, 12, 175, 252, - 9, 202, 65, 196, 23, 211, 174, 169, 85, 244, 154, 239, 28, 199, 196, 171, - 241, 27, 140, 222, 54, 25, 229, 69, 102, 134, 125, 235, 246, 156, 41, 75, - 212, 225, 169, 207, 88, 246, 136, 176, 27, 40, 205, 228, 239, 24, 217, 42, - 212, 63, 187, 75, 60, 197, 97, 245, 3, 35, 243, 128, 36, 129, 145, 31, + 9, 202, 65, 196, 23, 211, 174, 169, 85, 244, 154, 239, 28, 199, 196, 171, + 241, 27, 140, 222, 54, 25, 229, 69, 102, 134, 125, 235, 246, 156, 41, 75, + 212, 225, 169, 207, 88, 246, 136, 176, 27, 40, 205, 228, 239, 24, 217, 42, + 212, 63, 187, 75, 60, 197, 97, 245, 3, 35, 243, 128, 36, 129, 145, 31, 27, 193, 20, 122, 116, 143, 130, 159, 80, 203, 253, 233, 66, 118, 92, 177, 83, 55, 141, 189, 115, 240, 125, 107, 8, 221, 237, 171, 24, 183, 220, 174, - 149, 51, 81, 221, 187, 233, 21, 116, 37, 88, 123, 20, 208, 201, 141, 155, - 136, 148, 64, 14, 102, 204, 248, 173, 249, 61, 75, 253, 199, 46, 192, 138, + 149, 51, 81, 221, 187, 233, 21, 116, 37, 88, 123, 20, 208, 201, 141, 155, + 136, 148, 64, 14, 102, 204, 248, 173, 249, 61, 75, 253, 199, 46, 192, 138, 79, 83, 161, 127, 235, 140, 173, 158, 127, 232, 77, 17, 45, 207, 154, 51, 79, 57, 184, 22, 220, 225, 61, 233, 188, 119, 221, 254, 87, 105, 151, 29, - 156, 162, 18, 202, 244, 36, 105, 24, 240, 195, 198, 39, 31, 155, 135, 62, - 220, 180, 53, 70, 121, 254, 234, 194, 79, 177, 181, 75, 23, 20, 217, 209, - 107, 100, 175, 83, 25, 212, 62, 11, 108, 33, 144, 17, 150, 176, 225, 86, + 156, 162, 18, 202, 244, 36, 105, 24, 240, 195, 198, 39, 31, 155, 135, 62, + 220, 180, 53, 70, 121, 254, 234, 194, 79, 177, 181, 75, 23, 20, 217, 209, + 107, 100, 175, 83, 25, 212, 62, 11, 108, 33, 144, 17, 150, 176, 225, 86, 54, 190, 8, 82, 150, 219, 80, 72, 75, 100, 197, 72, 95, 174, 189, 158, - 109, 146, 103, 67, 101, 165, 191, 178, 148, 32, 173, 147, 195, 145, 27, 119, - 126, 46, 186, 120, 226, 41, 209, 51, 171, 29, 4, 244, 184, 209, 92, 159, - 221, 122, 163, 30, 246, 68, 8, 190, 146, 143, 159, 116, 211, 83, 247, 90, - 241, 193, 10, 58, 250, 60, 69, 182, 204, 181, 207, 107, 37, 104, 150, 14, + 109, 146, 103, 67, 101, 165, 191, 178, 148, 32, 173, 147, 195, 145, 27, 119, + 126, 46, 186, 120, 226, 41, 209, 51, 171, 29, 4, 244, 184, 209, 92, 159, + 221, 122, 163, 30, 246, 68, 8, 190, 146, 143, 159, 116, 211, 83, 247, 90, + 241, 193, 10, 58, 250, 60, 69, 182, 204, 181, 207, 107, 37, 104, 150, 14, 69, 55, 20, 7, 158, 96, 202, 248, 68, 220, 209, 132, 133, 164, 58, 175, - 103, 166, 1, 174, 0, 32, 182, 13, 199, 83, 48, 148, 52, 198, 19, 135, + 103, 166, 1, 174, 0, 32, 182, 13, 199, 83, 48, 148, 52, 198, 19, 135, 58, 46, 109, 164, 49, 199, 26, 109, 132, 19, 46, 118, 59, 27, 202, 73, - 4, 1, 22, 183, 163, 247, 45, 96, 206, 43, 239, 186, 131, 5, 61, 198, + 4, 1, 22, 183, 163, 247, 45, 96, 206, 43, 239, 186, 131, 5, 61, 198, 46, 99, 31, 89, 194, 241, 207, 170, 80, 250, 72, 225, 89, 154, 151, 165, - 171, 42, 59, 58, 68, 73, 178, 88, 153, 111, 247, 233, 19, 130, 51, 194, + 171, 42, 59, 58, 68, 73, 178, 88, 153, 111, 247, 233, 19, 130, 51, 194, 18, 142, 129, 52, 252, 167, 183, 238, 99, 198, 85, 134, 20, 114, 94, 90, - 7, 223, 147, 178, 135, 156, 216, 69, 14, 42, 181, 232, 203, 63, 239, 213, + 7, 223, 147, 178, 135, 156, 216, 69, 14, 42, 181, 232, 203, 63, 239, 213, 42, 225, 189, 223, 15, 238, 219, 62, 218, 15, 210, 141, 184, 226, 11, 228, - 9, 40, 37, 118, 26, 194, 213, 220, 99, 247, 7, 137, 187, 61, 64, 56, + 9, 40, 37, 118, 26, 194, 213, 220, 99, 247, 7, 137, 187, 61, 64, 56, 86, 169, 143, 224, 135, 166, 4, 28, 55, 87, 216, 45, 56, 39, 37, 181, - 234, 38, 4, 241, 184, 43, 134, 108, 245, 247, 230, 99, 162, 95, 214, 92, - 191, 83, 38, 152, 241, 38, 33, 32, 38, 92, 222, 228, 138, 11, 143, 135, + 234, 38, 4, 241, 184, 43, 134, 108, 245, 247, 230, 99, 162, 95, 214, 92, + 191, 83, 38, 152, 241, 38, 33, 32, 38, 92, 222, 228, 138, 11, 143, 135, 83, 181, 140, 99, 9, 252, 123, 215, 212, 81, 108, 71, 2, 159, 246, 82, - 118, 186, 48, 69, 212, 147, 218, 61, 183, 170, 130, 233, 227, 145, 101, 156, + 118, 186, 48, 69, 212, 147, 218, 61, 183, 170, 130, 233, 227, 145, 101, 156, 20, 106, 128, 214, 238, 12, 163, 59, 152, 250, 112, 173, 42, 5, 1, 68, 35, 52, 13, 198, 121, 11, 117, 16, 126, 143, 54, 184, 205, 44, 238, 47, - 218, 75, 112, 228, 183, 55, 22, 189, 35, 146, 27, 44, 229, 190, 241, 110, + 218, 75, 112, 228, 183, 55, 22, 189, 35, 146, 27, 44, 229, 190, 241, 110, 42, 152, 12, 141, 131, 183, 84, 31, 40, 185, 108, 176, 173, 247, 217, 214, - 155, 108, 176, 152, 201, 201, 185, 7, 227, 187, 87, 71, 45, 98, 224, 159, - 125, 230, 132, 19, 233, 98, 174, 93, 80, 245, 32, 94, 253, 35, 150, 68, - 176, 83, 50, 127, 196, 149, 176, 191, 136, 194, 84, 228, 106, 238, 47, 206, - 110, 204, 9, 116, 136, 230, 249, 90, 215, 160, 51, 151, 61, 92, 187, 82, - 129, 101, 75, 238, 22, 166, 132, 86, 183, 113, 149, 215, 39, 242, 214, 148, + 155, 108, 176, 152, 201, 201, 185, 7, 227, 187, 87, 71, 45, 98, 224, 159, + 125, 230, 132, 19, 233, 98, 174, 93, 80, 245, 32, 94, 253, 35, 150, 68, + 176, 83, 50, 127, 196, 149, 176, 191, 136, 194, 84, 228, 106, 238, 47, 206, + 110, 204, 9, 116, 136, 230, 249, 90, 215, 160, 51, 151, 61, 92, 187, 82, + 129, 101, 75, 238, 22, 166, 132, 86, 183, 113, 149, 215, 39, 242, 214, 148, 71, 168, 236, 20, 105, 249, 219, 23, 101, 63, 92, 173, 40, 126, 253, 145, - 161, 9, 72, 60, 215, 59, 155, 228, 255, 201, 193, 60, 129, 51, 29, 207, - 237, 43, 145, 161, 41, 115, 98, 19, 138, 253, 66, 232, 233, 186, 79, 114, - 1, 164, 184, 14, 61, 151, 198, 60, 247, 115, 5, 176, 132, 201, 245, 60, + 161, 9, 72, 60, 215, 59, 155, 228, 255, 201, 193, 60, 129, 51, 29, 207, + 237, 43, 145, 161, 41, 115, 98, 19, 138, 253, 66, 232, 233, 186, 79, 114, + 1, 164, 184, 14, 61, 151, 198, 60, 247, 115, 5, 176, 132, 201, 245, 60, 21, 238, 60, 133, 186, 18, 154, 89, 170, 23, 102, 2, 111, 147, 25, 208, - 152, 173, 13, 58, 125, 181, 115, 218, 196, 107, 173, 192, 60, 94, 140, 254, + 152, 173, 13, 58, 125, 181, 115, 218, 196, 107, 173, 192, 60, 94, 140, 254, 83, 80, 214, 220, 245, 254, 250, 39, 202, 132, 142, 84, 16, 199, 20, 129, - 159, 24, 18, 123, 143, 157, 176, 199, 173, 56, 169, 222, 252, 63, 27, 242, - 137, 138, 253, 143, 4, 209, 124, 86, 243, 170, 152, 121, 231, 24, 238, 35, - 113, 27, 205, 59, 153, 161, 234, 65, 153, 237, 97, 197, 98, 216, 129, 30, - 174, 211, 193, 167, 102, 229, 240, 198, 85, 193, 253, 73, 118, 185, 63, 3, - 227, 165, 139, 38, 109, 214, 108, 253, 48, 227, 253, 219, 1, 226, 89, 47, - 145, 86, 8, 234, 146, 159, 230, 108, 212, 111, 112, 129, 121, 28, 164, 105, - 138, 143, 106, 132, 254, 202, 177, 171, 123, 38, 162, 112, 97, 88, 221, 95, - 5, 161, 222, 76, 234, 253, 239, 231, 13, 62, 243, 80, 164, 204, 67, 229, + 159, 24, 18, 123, 143, 157, 176, 199, 173, 56, 169, 222, 252, 63, 27, 242, + 137, 138, 253, 143, 4, 209, 124, 86, 243, 170, 152, 121, 231, 24, 238, 35, + 113, 27, 205, 59, 153, 161, 234, 65, 153, 237, 97, 197, 98, 216, 129, 30, + 174, 211, 193, 167, 102, 229, 240, 198, 85, 193, 253, 73, 118, 185, 63, 3, + 227, 165, 139, 38, 109, 214, 108, 253, 48, 227, 253, 219, 1, 226, 89, 47, + 145, 86, 8, 234, 146, 159, 230, 108, 212, 111, 112, 129, 121, 28, 164, 105, + 138, 143, 106, 132, 254, 202, 177, 171, 123, 38, 162, 112, 97, 88, 221, 95, + 5, 161, 222, 76, 234, 253, 239, 231, 13, 62, 243, 80, 164, 204, 67, 229, 43, 103, 152, 30, 131, 240, 218, 184, 149, 161, 234, 124, 238, 126, 33, 234, - 133, 1, 201, 113, 176, 190, 231, 215, 99, 64, 219, 224, 29, 217, 23, 232, - 185, 215, 56, 14, 128, 31, 227, 227, 80, 213, 239, 224, 36, 144, 26, 243, + 133, 1, 201, 113, 176, 190, 231, 215, 99, 64, 219, 224, 29, 217, 23, 232, + 185, 215, 56, 14, 128, 31, 227, 227, 80, 213, 239, 224, 36, 144, 26, 243, 36, 181, 129, 69, 104, 55, 42, 212, 27, 252, 74, 173, 196, 255, 96, 153, 53, 3, 99, 13, 167, 244, 183, 92, 231, 140, 210, 116, 98, 36, 187, 126, 84, 77, 144, 109, 126, 138, 53, 237, 100, 96, 209, 68, 204, 61, 104, 246, 64, 35, 98, 99, 82, 152, 68, 118, 51, 82, 101, 136, 76, 149, 234, 135, - 110, 37, 167, 154, 17, 145, 150, 148, 89, 184, 123, 108, 255, 2, 49, 98, - 101, 125, 88, 110, 2, 146, 130, 120, 212, 249, 21, 164, 164, 161, 47, 201, + 110, 37, 167, 154, 17, 145, 150, 148, 89, 184, 123, 108, 255, 2, 49, 98, + 101, 125, 88, 110, 2, 146, 130, 120, 212, 249, 21, 164, 164, 161, 47, 201, 70, 114, 46, 149, 0, 88, 142, 60, 228, 58, 181, 175, 207, 222, 199, 81, - 135, 121, 200, 205, 143, 132, 31, 93, 179, 202, 132, 84, 3, 19, 40, 190, + 135, 121, 200, 205, 143, 132, 31, 93, 179, 202, 132, 84, 3, 19, 40, 190, 99, 120, 38, 42, 165, 159, 18, 153, 99, 212, 120, 4, 237, 237, 8, 57, 69, 228, 186, 220, 183, 121, 139, 113, 179, 200, 21, 166, 75, 19, 149, 135, - 138, 170, 149, 14, 166, 110, 94, 129, 233, 66, 187, 163, 213, 96, 172, 4, - 145, 205, 41, 25, 97, 26, 66, 99, 104, 172, 227, 73, 193, 35, 142, 228, - 202, 85, 209, 10, 77, 47, 21, 8, 14, 215, 104, 211, 62, 186, 19, 226, - 180, 187, 81, 140, 101, 188, 252, 173, 1, 242, 9, 66, 177, 73, 5, 79, - 230, 53, 67, 28, 207, 98, 199, 52, 27, 66, 153, 200, 135, 247, 246, 210, - 128, 156, 173, 249, 92, 165, 93, 112, 247, 110, 0, 133, 56, 64, 199, 71, - 135, 104, 242, 50, 218, 28, 242, 216, 223, 229, 92, 19, 39, 36, 161, 233, - 104, 205, 56, 92, 20, 44, 81, 244, 215, 85, 116, 79, 44, 104, 236, 197, + 138, 170, 149, 14, 166, 110, 94, 129, 233, 66, 187, 163, 213, 96, 172, 4, + 145, 205, 41, 25, 97, 26, 66, 99, 104, 172, 227, 73, 193, 35, 142, 228, + 202, 85, 209, 10, 77, 47, 21, 8, 14, 215, 104, 211, 62, 186, 19, 226, + 180, 187, 81, 140, 101, 188, 252, 173, 1, 242, 9, 66, 177, 73, 5, 79, + 230, 53, 67, 28, 207, 98, 199, 52, 27, 66, 153, 200, 135, 247, 246, 210, + 128, 156, 173, 249, 92, 165, 93, 112, 247, 110, 0, 133, 56, 64, 199, 71, + 135, 104, 242, 50, 218, 28, 242, 216, 223, 229, 92, 19, 39, 36, 161, 233, + 104, 205, 56, 92, 20, 44, 81, 244, 215, 85, 116, 79, 44, 104, 236, 197, 72, 17, 157, 105, 213, 76, 90, 85, 9, 54, 76, 248, 27, 39, 175, 107, 79, 142, 31, 140, 48, 194, 73, 214, 79, 131, 65, 191, 175, 211, 154, 225, - 182, 226, 90, 169, 178, 95, 71, 89, 3, 4, 83, 27, 152, 218, 67, 67, - 225, 90, 159, 244, 215, 227, 41, 53, 214, 40, 178, 86, 46, 92, 27, 200, - 104, 126, 203, 185, 150, 90, 220, 210, 140, 33, 238, 113, 54, 31, 121, 4, + 182, 226, 90, 169, 178, 95, 71, 89, 3, 4, 83, 27, 152, 218, 67, 67, + 225, 90, 159, 244, 215, 227, 41, 53, 214, 40, 178, 86, 46, 92, 27, 200, + 104, 126, 203, 185, 150, 90, 220, 210, 140, 33, 238, 113, 54, 31, 121, 4, 49, 132, 62, 250, 9, 180, 120, 241, 248, 86, 67, 254, 57, 166, 141, 34, - 165, 218, 73, 167, 166, 85, 50, 191, 136, 177, 212, 175, 133, 8, 30, 106, - 201, 100, 208, 40, 119, 107, 182, 231, 27, 237, 58, 22, 225, 63, 21, 160, - 176, 7, 223, 124, 229, 53, 246, 170, 155, 70, 75, 68, 204, 221, 146, 48, - 109, 153, 25, 0, 157, 54, 208, 220, 240, 216, 113, 30, 230, 30, 46, 139, - 116, 215, 222, 10, 247, 103, 24, 86, 125, 8, 77, 202, 39, 152, 10, 225, - 131, 18, 117, 227, 249, 127, 160, 143, 86, 128, 207, 99, 207, 224, 42, 110, - 232, 36, 86, 179, 249, 138, 84, 121, 50, 5, 149, 93, 7, 200, 115, 209, - 110, 152, 124, 77, 52, 79, 221, 157, 195, 140, 54, 19, 60, 205, 158, 199, - 127, 207, 7, 117, 11, 227, 197, 72, 199, 187, 184, 43, 95, 0, 61, 143, - 176, 207, 65, 130, 87, 82, 140, 181, 182, 184, 223, 238, 244, 209, 170, 7, + 165, 218, 73, 167, 166, 85, 50, 191, 136, 177, 212, 175, 133, 8, 30, 106, + 201, 100, 208, 40, 119, 107, 182, 231, 27, 237, 58, 22, 225, 63, 21, 160, + 176, 7, 223, 124, 229, 53, 246, 170, 155, 70, 75, 68, 204, 221, 146, 48, + 109, 153, 25, 0, 157, 54, 208, 220, 240, 216, 113, 30, 230, 30, 46, 139, + 116, 215, 222, 10, 247, 103, 24, 86, 125, 8, 77, 202, 39, 152, 10, 225, + 131, 18, 117, 227, 249, 127, 160, 143, 86, 128, 207, 99, 207, 224, 42, 110, + 232, 36, 86, 179, 249, 138, 84, 121, 50, 5, 149, 93, 7, 200, 115, 209, + 110, 152, 124, 77, 52, 79, 221, 157, 195, 140, 54, 19, 60, 205, 158, 199, + 127, 207, 7, 117, 11, 227, 197, 72, 199, 187, 184, 43, 95, 0, 61, 143, + 176, 207, 65, 130, 87, 82, 140, 181, 182, 184, 223, 238, 244, 209, 170, 7, 11, 100, 83, 5, 98, 125, 26, 188, 40, 137, 242, 22, 249, 227, 184, 80, 44, 145, 32, 143, 254, 218, 115, 107, 76, 139, 212, 87, 253, 12, 11, 121, - 216, 159, 121, 87, 182, 101, 205, 151, 5, 0, 126, 150, 6, 166, 115, 36, + 216, 159, 121, 87, 182, 101, 205, 151, 5, 0, 126, 150, 6, 166, 115, 36, 14, 128, 159, 126, 200, 42, 189, 146, 192, 223, 186, 35, 71, 224, 63, 33, - 211, 207, 93, 66, 201, 31, 66, 220, 66, 97, 107, 95, 157, 213, 92, 81, - 217, 125, 242, 101, 243, 184, 255, 155, 2, 165, 9, 143, 103, 243, 133, 173, - 202, 202, 40, 221, 73, 177, 248, 57, 243, 125, 130, 127, 102, 47, 3, 227, + 211, 207, 93, 66, 201, 31, 66, 220, 66, 97, 107, 95, 157, 213, 92, 81, + 217, 125, 242, 101, 243, 184, 255, 155, 2, 165, 9, 143, 103, 243, 133, 173, + 202, 202, 40, 221, 73, 177, 248, 57, 243, 125, 130, 127, 102, 47, 3, 227, 27, 203, 33, 179, 249, 117, 28, 112, 157, 0, 210, 139, 43, 15, 192, 47, - 202, 45, 132, 10, 26, 163, 47, 220, 65, 169, 225, 235, 120, 57, 25, 176, - 206, 16, 38, 110, 84, 145, 28, 43, 63, 35, 144, 234, 249, 59, 22, 152, + 202, 45, 132, 10, 26, 163, 47, 220, 65, 169, 225, 235, 120, 57, 25, 176, + 206, 16, 38, 110, 84, 145, 28, 43, 63, 35, 144, 234, 249, 59, 22, 152, 16, 175, 248, 2, 6, 109, 55, 92, 124, 77, 237, 166, 207, 82, 238, 140, 22, 30, 214, 144, 177, 182, 229, 27, 180, 150, 186, 187, 231, 184, 242, 23, - 178, 119, 36, 24, 165, 82, 15, 195, 55, 147, 107, 45, 198, 133, 194, 95, + 178, 119, 36, 24, 165, 82, 15, 195, 55, 147, 107, 45, 198, 133, 194, 95, 20, 146, 8, 222, 235, 67, 80, 119, 234, 48, 223, 163, 51, 60, 217, 228, - 171, 195, 231, 250, 46, 111, 138, 143, 1, 48, 174, 116, 197, 186, 40, 61, - 177, 53, 65, 225, 171, 95, 186, 209, 199, 254, 152, 98, 179, 71, 140, 127, - 193, 177, 171, 61, 227, 117, 130, 92, 148, 43, 199, 156, 176, 219, 52, 218, - 133, 160, 123, 11, 221, 104, 254, 253, 144, 156, 245, 5, 156, 246, 226, 198, - 222, 172, 246, 13, 35, 210, 51, 99, 203, 213, 159, 248, 139, 71, 77, 120, + 171, 195, 231, 250, 46, 111, 138, 143, 1, 48, 174, 116, 197, 186, 40, 61, + 177, 53, 65, 225, 171, 95, 186, 209, 199, 254, 152, 98, 179, 71, 140, 127, + 193, 177, 171, 61, 227, 117, 130, 92, 148, 43, 199, 156, 176, 219, 52, 218, + 133, 160, 123, 11, 221, 104, 254, 253, 144, 156, 245, 5, 156, 246, 226, 198, + 222, 172, 246, 13, 35, 210, 51, 99, 203, 213, 159, 248, 139, 71, 77, 120, 75, 195, 89, 11, 122, 125, 43, 57, 30, 233, 45, 10, 87, 102, 171, 47, 21, 167, 175, 143, 207, 121, 98, 48, 220, 247, 72, 184, 97, 83, 152, 72, 51, 136, 17, 52, 249, 169, 8, 140, 219, 152, 5, 221, 132, 225, 17, 117, 28, 72, 220, 69, 199, 108, 140, 175, 206, 165, 41, 39, 77, 194, 249, 154, - 121, 23, 85, 205, 128, 34, 118, 49, 220, 85, 5, 240, 181, 26, 210, 29, - 177, 24, 132, 91, 57, 218, 74, 217, 135, 225, 148, 82, 95, 98, 54, 127, + 121, 23, 85, 205, 128, 34, 118, 49, 220, 85, 5, 240, 181, 26, 210, 29, + 177, 24, 132, 91, 57, 218, 74, 217, 135, 225, 148, 82, 95, 98, 54, 127, 58, 1, 85, 12, 122, 2, 58, 81, 16, 32, 168, 153, 186, 97, 214, 81, - 176, 244, 134, 168, 111, 127, 21, 251, 227, 215, 141, 191, 141, 90, 21, 177, - 142, 172, 29, 212, 128, 163, 54, 172, 20, 35, 174, 1, 225, 232, 74, 73, - 226, 154, 236, 45, 211, 64, 28, 142, 90, 175, 147, 230, 243, 66, 160, 207, - 186, 212, 201, 34, 58, 202, 236, 9, 218, 10, 226, 189, 74, 106, 75, 43, + 176, 244, 134, 168, 111, 127, 21, 251, 227, 215, 141, 191, 141, 90, 21, 177, + 142, 172, 29, 212, 128, 163, 54, 172, 20, 35, 174, 1, 225, 232, 74, 73, + 226, 154, 236, 45, 211, 64, 28, 142, 90, 175, 147, 230, 243, 66, 160, 207, + 186, 212, 201, 34, 58, 202, 236, 9, 218, 10, 226, 189, 74, 106, 75, 43, 93, 1, 5, 162, 36, 42, 54, 86, 83, 35, 242, 114, 165, 93, 76, 8, 94, 21, 110, 101, 241, 119, 219, 78, 115, 182, 5, 105, 116, 73, 50, 193, - 102, 254, 43, 197, 64, 236, 6, 105, 84, 206, 79, 127, 195, 151, 106, 76, - 122, 173, 234, 203, 34, 20, 204, 34, 195, 244, 209, 60, 32, 112, 157, 150, - 185, 49, 35, 11, 41, 230, 21, 63, 137, 1, 127, 147, 193, 77, 136, 174, - 109, 122, 243, 119, 160, 26, 5, 187, 191, 90, 83, 26, 214, 237, 162, 198, - 184, 179, 204, 246, 113, 43, 145, 228, 4, 250, 28, 187, 22, 149, 121, 67, + 102, 254, 43, 197, 64, 236, 6, 105, 84, 206, 79, 127, 195, 151, 106, 76, + 122, 173, 234, 203, 34, 20, 204, 34, 195, 244, 209, 60, 32, 112, 157, 150, + 185, 49, 35, 11, 41, 230, 21, 63, 137, 1, 127, 147, 193, 77, 136, 174, + 109, 122, 243, 119, 160, 26, 5, 187, 191, 90, 83, 26, 214, 237, 162, 198, + 184, 179, 204, 246, 113, 43, 145, 228, 4, 250, 28, 187, 22, 149, 121, 67, 94, 202, 229, 64, 35, 204, 174, 106, 180, 40, 224, 146, 117, 146, 217, 9, 29, 22, 202, 177, 96, 25, 165, 0, 97, 146, 120, 15, 29, 230, 203, 30, - 181, 73, 37, 59, 38, 156, 8, 123, 215, 252, 229, 157, 240, 58, 91, 78, - 3, 189, 39, 232, 28, 175, 195, 69, 94, 127, 176, 218, 32, 40, 236, 113, - 175, 110, 241, 181, 238, 15, 46, 106, 58, 170, 48, 58, 254, 253, 190, 204, - 172, 214, 31, 202, 150, 134, 97, 230, 224, 255, 121, 206, 110, 102, 224, 49, + 181, 73, 37, 59, 38, 156, 8, 123, 215, 252, 229, 157, 240, 58, 91, 78, + 3, 189, 39, 232, 28, 175, 195, 69, 94, 127, 176, 218, 32, 40, 236, 113, + 175, 110, 241, 181, 238, 15, 46, 106, 58, 170, 48, 58, 254, 253, 190, 204, + 172, 214, 31, 202, 150, 134, 97, 230, 224, 255, 121, 206, 110, 102, 224, 49, 94, 248, 23, 109, 243, 23, 208, 50, 120, 155, 166, 16, 193, 8, 111, 212, 88, 114, 163, 247, 255, 144, 18, 87, 92, 47, 60, 250, 35, 102, 101, 150, - 228, 34, 28, 18, 59, 175, 136, 120, 186, 193, 15, 151, 143, 76, 54, 96, - 157, 183, 62, 4, 245, 231, 132, 94, 131, 139, 192, 253, 72, 194, 242, 7, - 202, 19, 20, 245, 122, 114, 177, 101, 133, 107, 109, 109, 112, 151, 71, 239, - 115, 43, 157, 185, 57, 149, 27, 82, 191, 118, 114, 80, 96, 115, 166, 79, - 166, 59, 23, 91, 223, 159, 217, 68, 63, 155, 173, 200, 73, 32, 199, 233, - 241, 206, 133, 125, 89, 87, 71, 172, 91, 56, 219, 233, 115, 26, 63, 53, + 228, 34, 28, 18, 59, 175, 136, 120, 186, 193, 15, 151, 143, 76, 54, 96, + 157, 183, 62, 4, 245, 231, 132, 94, 131, 139, 192, 253, 72, 194, 242, 7, + 202, 19, 20, 245, 122, 114, 177, 101, 133, 107, 109, 109, 112, 151, 71, 239, + 115, 43, 157, 185, 57, 149, 27, 82, 191, 118, 114, 80, 96, 115, 166, 79, + 166, 59, 23, 91, 223, 159, 217, 68, 63, 155, 173, 200, 73, 32, 199, 233, + 241, 206, 133, 125, 89, 87, 71, 172, 91, 56, 219, 233, 115, 26, 63, 53, 98, 209, 57, 151, 243, 141, 54, 139, 107, 120, 252, 89, 249, 133, 67, 85, - 144, 135, 86, 238, 9, 133, 115, 95, 92, 97, 212, 81, 117, 70, 225, 199, - 123, 49, 84, 16, 84, 19, 134, 156, 33, 78, 195, 79, 191, 112, 44, 206, + 144, 135, 86, 238, 9, 133, 115, 95, 92, 97, 212, 81, 117, 70, 225, 199, + 123, 49, 84, 16, 84, 19, 134, 156, 33, 78, 195, 79, 191, 112, 44, 206, 81, 249, 191, 4, 106, 159, 152, 246, 185, 246, 125, 7, 186, 106, 239, 25, - 144, 121, 78, 194, 199, 195, 218, 118, 189, 66, 2, 220, 105, 0, 77, 65, - 137, 55, 169, 82, 156, 126, 146, 139, 71, 44, 247, 210, 45, 171, 110, 252, - 221, 51, 80, 157, 164, 99, 10, 241, 175, 65, 32, 180, 254, 187, 89, 223, - 231, 227, 216, 197, 99, 217, 65, 187, 235, 152, 63, 74, 176, 36, 170, 236, - 134, 46, 98, 13, 108, 160, 126, 185, 245, 100, 96, 40, 240, 69, 171, 10, - 2, 141, 57, 105, 56, 82, 168, 46, 126, 161, 5, 219, 126, 1, 1, 165, + 144, 121, 78, 194, 199, 195, 218, 118, 189, 66, 2, 220, 105, 0, 77, 65, + 137, 55, 169, 82, 156, 126, 146, 139, 71, 44, 247, 210, 45, 171, 110, 252, + 221, 51, 80, 157, 164, 99, 10, 241, 175, 65, 32, 180, 254, 187, 89, 223, + 231, 227, 216, 197, 99, 217, 65, 187, 235, 152, 63, 74, 176, 36, 170, 236, + 134, 46, 98, 13, 108, 160, 126, 185, 245, 100, 96, 40, 240, 69, 171, 10, + 2, 141, 57, 105, 56, 82, 168, 46, 126, 161, 5, 219, 126, 1, 1, 165, 92, 219, 81, 202, 86, 78, 174, 209, 195, 7, 142, 244, 119, 255, 115, 242, - 220, 11, 168, 135, 5, 71, 145, 137, 108, 10, 17, 30, 178, 142, 202, 147, + 220, 11, 168, 135, 5, 71, 145, 137, 108, 10, 17, 30, 178, 142, 202, 147, 24, 141, 161, 192, 79, 54, 62, 142, 239, 66, 209, 248, 101, 134, 83, 10, - 119, 121, 22, 240, 25, 227, 60, 180, 18, 46, 164, 105, 89, 30, 196, 167, - 206, 32, 32, 76, 54, 35, 10, 210, 170, 114, 127, 0, 216, 28, 71, 6, - 216, 15, 56, 201, 194, 246, 115, 182, 231, 202, 62, 218, 93, 252, 151, 125, + 119, 121, 22, 240, 25, 227, 60, 180, 18, 46, 164, 105, 89, 30, 196, 167, + 206, 32, 32, 76, 54, 35, 10, 210, 170, 114, 127, 0, 216, 28, 71, 6, + 216, 15, 56, 201, 194, 246, 115, 182, 231, 202, 62, 218, 93, 252, 151, 125, 48, 231, 133, 89, 67, 175, 88, 80, 25, 208, 80, 251, 226, 12, 4, 225, - 125, 37, 78, 202, 227, 212, 179, 219, 234, 223, 207, 188, 126, 214, 22, 59, - 134, 161, 108, 10, 115, 65, 40, 68, 211, 192, 129, 64, 163, 178, 183, 164, + 125, 37, 78, 202, 227, 212, 179, 219, 234, 223, 207, 188, 126, 214, 22, 59, + 134, 161, 108, 10, 115, 65, 40, 68, 211, 192, 129, 64, 163, 178, 183, 164, 98, 212, 20, 146, 25, 16, 154, 29, 176, 107, 3, 15, 62, 226, 67, 119, - 189, 45, 123, 187, 83, 222, 206, 56, 135, 242, 121, 61, 220, 133, 171, 150, - 139, 221, 69, 112, 13, 183, 180, 76, 97, 122, 168, 79, 203, 136, 62, 161, - 138, 40, 253, 182, 3, 51, 229, 58, 195, 79, 191, 203, 248, 191, 180, 101, + 189, 45, 123, 187, 83, 222, 206, 56, 135, 242, 121, 61, 220, 133, 171, 150, + 139, 221, 69, 112, 13, 183, 180, 76, 97, 122, 168, 79, 203, 136, 62, 161, + 138, 40, 253, 182, 3, 51, 229, 58, 195, 79, 191, 203, 248, 191, 180, 101, 40, 189, 22, 127, 67, 139, 219, 213, 78, 11, 67, 215, 82, 41, 107, 54, - 143, 72, 223, 89, 246, 156, 91, 11, 157, 16, 225, 237, 213, 148, 187, 201, - 233, 101, 70, 211, 201, 113, 164, 185, 140, 169, 130, 42, 1, 222, 92, 59, + 143, 72, 223, 89, 246, 156, 91, 11, 157, 16, 225, 237, 213, 148, 187, 201, + 233, 101, 70, 211, 201, 113, 164, 185, 140, 169, 130, 42, 1, 222, 92, 59, 66, 17, 108, 67, 197, 192, 251, 55, 203, 109, 189, 230, 131, 237, 215, 241, 65, 148, 253, 241, 39, 141, 155, 148, 156, 244, 12, 68, 71, 109, 235, 241, - 4, 161, 177, 218, 114, 173, 113, 146, 11, 3, 219, 33, 141, 215, 62, 45, - 215, 184, 196, 97, 162, 250, 218, 110, 1, 190, 8, 67, 241, 94, 82, 196, + 4, 161, 177, 218, 114, 173, 113, 146, 11, 3, 219, 33, 141, 215, 62, 45, + 215, 184, 196, 97, 162, 250, 218, 110, 1, 190, 8, 67, 241, 94, 82, 196, 64, 85, 118, 139, 240, 71, 67, 49, 241, 49, 129, 247, 44, 211, 46, 227, - 115, 140, 123, 192, 63, 82, 9, 155, 83, 167, 250, 70, 61, 66, 186, 217, + 115, 140, 123, 192, 63, 82, 9, 155, 83, 167, 250, 70, 61, 66, 186, 217, 46, 155, 128, 255, 232, 56, 224, 32, 254, 12, 204, 2, 85, 173, 20, 75, - 214, 73, 229, 18, 247, 145, 83, 241, 20, 245, 155, 15, 92, 111, 180, 101, - 179, 246, 5, 243, 112, 196, 44, 146, 16, 128, 155, 80, 106, 147, 110, 87, + 214, 73, 229, 18, 247, 145, 83, 241, 20, 245, 155, 15, 92, 111, 180, 101, + 179, 246, 5, 243, 112, 196, 44, 146, 16, 128, 155, 80, 106, 147, 110, 87, 96, 17, 243, 247, 21, 87, 149, 78, 248, 20, 153, 249, 196, 11, 177, 96, - 227, 185, 136, 7, 244, 54, 177, 91, 192, 193, 111, 21, 159, 105, 143, 236, - 167, 215, 244, 121, 207, 245, 202, 161, 215, 45, 233, 32, 123, 220, 57, 34, - 171, 115, 37, 163, 75, 253, 140, 232, 51, 143, 204, 252, 146, 168, 85, 148, - 201, 161, 181, 231, 125, 44, 172, 79, 210, 12, 147, 82, 38, 254, 157, 225, - 167, 230, 182, 123, 63, 141, 146, 152, 136, 190, 80, 156, 163, 231, 33, 184, + 227, 185, 136, 7, 244, 54, 177, 91, 192, 193, 111, 21, 159, 105, 143, 236, + 167, 215, 244, 121, 207, 245, 202, 161, 215, 45, 233, 32, 123, 220, 57, 34, + 171, 115, 37, 163, 75, 253, 140, 232, 51, 143, 204, 252, 146, 168, 85, 148, + 201, 161, 181, 231, 125, 44, 172, 79, 210, 12, 147, 82, 38, 254, 157, 225, + 167, 230, 182, 123, 63, 141, 146, 152, 136, 190, 80, 156, 163, 231, 33, 184, 58, 200, 134, 28, 70, 202, 88, 195, 39, 224, 159, 154, 206, 183, 11, 96, - 102, 136, 26, 238, 179, 189, 226, 18, 30, 188, 148, 25, 3, 252, 154, 142, - 147, 145, 126, 11, 55, 1, 3, 108, 144, 55, 251, 167, 54, 127, 180, 216, + 102, 136, 26, 238, 179, 189, 226, 18, 30, 188, 148, 25, 3, 252, 154, 142, + 147, 145, 126, 11, 55, 1, 3, 108, 144, 55, 251, 167, 54, 127, 180, 216, 77, 70, 138, 95, 166, 90, 48, 2, 211, 236, 235, 131, 107, 251, 91, 238, - 255, 0, 113, 41, 243, 14, 241, 252, 163, 99, 74, 25, 172, 87, 125, 36, - 203, 96, 189, 125, 222, 165, 138, 25, 76, 136, 67, 137, 161, 22, 232, 31, - 5, 96, 146, 214, 146, 21, 181, 198, 199, 34, 190, 63, 191, 201, 104, 116, - 123, 201, 64, 128, 84, 139, 86, 102, 244, 241, 162, 126, 4, 9, 132, 2, + 255, 0, 113, 41, 243, 14, 241, 252, 163, 99, 74, 25, 172, 87, 125, 36, + 203, 96, 189, 125, 222, 165, 138, 25, 76, 136, 67, 137, 161, 22, 232, 31, + 5, 96, 146, 214, 146, 21, 181, 198, 199, 34, 190, 63, 191, 201, 104, 116, + 123, 201, 64, 128, 84, 139, 86, 102, 244, 241, 162, 126, 4, 9, 132, 2, 53, 113, 21, 1, 95, 7, 212, 123, 252, 100, 87, 78, 71, 28, 131, 135, - 183, 72, 196, 33, 66, 237, 12, 135, 58, 102, 69, 234, 214, 244, 57, 44, - 181, 120, 156, 218, 99, 146, 97, 15, 77, 113, 179, 142, 113, 226, 38, 72, - 128, 211, 160, 95, 52, 181, 30, 200, 64, 234, 8, 229, 150, 219, 225, 30, - 162, 223, 52, 242, 29, 31, 226, 91, 102, 235, 127, 213, 105, 123, 11, 172, - 190, 152, 59, 69, 1, 253, 126, 19, 145, 99, 33, 26, 198, 80, 74, 47, + 183, 72, 196, 33, 66, 237, 12, 135, 58, 102, 69, 234, 214, 244, 57, 44, + 181, 120, 156, 218, 99, 146, 97, 15, 77, 113, 179, 142, 113, 226, 38, 72, + 128, 211, 160, 95, 52, 181, 30, 200, 64, 234, 8, 229, 150, 219, 225, 30, + 162, 223, 52, 242, 29, 31, 226, 91, 102, 235, 127, 213, 105, 123, 11, 172, + 190, 152, 59, 69, 1, 253, 126, 19, 145, 99, 33, 26, 198, 80, 74, 47, 59, 77, 158, 60, 231, 51, 65, 145, 210, 232, 71, 100, 73, 71, 176, 239, 42, 124, 176, 31, 254, 64, 223, 51, 195, 108, 165, 78, 202, 174, 212, 32, - 157, 58, 145, 133, 84, 230, 17, 206, 107, 72, 89, 129, 240, 179, 56, 231, - 218, 55, 236, 231, 122, 137, 50, 245, 171, 107, 223, 86, 17, 155, 68, 241, - 220, 120, 38, 95, 74, 110, 214, 202, 223, 60, 35, 120, 33, 79, 32, 58, + 157, 58, 145, 133, 84, 230, 17, 206, 107, 72, 89, 129, 240, 179, 56, 231, + 218, 55, 236, 231, 122, 137, 50, 245, 171, 107, 223, 86, 17, 155, 68, 241, + 220, 120, 38, 95, 74, 110, 214, 202, 223, 60, 35, 120, 33, 79, 32, 58, 77, 28, 121, 180, 99, 64, 201, 81, 156, 37, 28, 254, 219, 153, 74, 200, - 178, 70, 252, 140, 137, 127, 195, 238, 103, 228, 44, 96, 216, 12, 198, 246, - 206, 130, 67, 71, 129, 114, 145, 168, 64, 145, 128, 169, 169, 11, 28, 145, + 178, 70, 252, 140, 137, 127, 195, 238, 103, 228, 44, 96, 216, 12, 198, 246, + 206, 130, 67, 71, 129, 114, 145, 168, 64, 145, 128, 169, 169, 11, 28, 145, 64, 144, 92, 206, 171, 135, 128, 121, 84, 142, 75, 37, 199, 208, 97, 243, - 114, 58, 152, 244, 201, 119, 76, 178, 3, 128, 185, 252, 146, 38, 165, 53, - 186, 175, 102, 81, 233, 115, 190, 227, 19, 31, 134, 132, 114, 24, 2, 21, - 249, 228, 128, 74, 119, 144, 74, 43, 168, 201, 131, 175, 254, 42, 103, 23, + 114, 58, 152, 244, 201, 119, 76, 178, 3, 128, 185, 252, 146, 38, 165, 53, + 186, 175, 102, 81, 233, 115, 190, 227, 19, 31, 134, 132, 114, 24, 2, 21, + 249, 228, 128, 74, 119, 144, 74, 43, 168, 201, 131, 175, 254, 42, 103, 23, 94, 138, 61, 40, 129, 252, 51, 80, 150, 135, 133, 55, 54, 122, 187, 93, 42, 9, 154, 50, 93, 143, 241, 26, 80, 108, 7, 51, 144, 218, 129, 48, - 168, 66, 150, 108, 86, 127, 156, 232, 5, 54, 7, 182, 73, 210, 46, 115, + 168, 66, 150, 108, 86, 127, 156, 232, 5, 54, 7, 182, 73, 210, 46, 115, 84, 145, 113, 254, 195, 166, 106, 119, 116, 233, 154, 170, 185, 255, 99, 223, - 133, 115, 122, 10, 210, 76, 123, 92, 28, 159, 138, 133, 70, 126, 240, 215, + 133, 115, 122, 10, 210, 76, 123, 92, 28, 159, 138, 133, 70, 126, 240, 215, 36, 119, 180, 221, 156, 46, 89, 71, 1, 175, 247, 102, 107, 67, 136, 62, - 142, 197, 212, 50, 159, 107, 254, 44, 30, 59, 234, 51, 55, 35, 103, 170, - 231, 41, 111, 178, 14, 27, 77, 40, 43, 88, 199, 148, 211, 140, 17, 59, + 142, 197, 212, 50, 159, 107, 254, 44, 30, 59, 234, 51, 55, 35, 103, 170, + 231, 41, 111, 178, 14, 27, 77, 40, 43, 88, 199, 148, 211, 140, 17, 59, 84, 182, 195, 92, 230, 109, 218, 165, 117, 39, 234, 195, 94, 70, 151, 202, - 167, 17, 179, 205, 213, 68, 102, 11, 120, 210, 150, 47, 150, 115, 186, 81, - 137, 53, 132, 36, 224, 107, 115, 100, 143, 118, 212, 239, 176, 139, 243, 36, - 235, 189, 48, 43, 25, 130, 143, 2, 165, 117, 173, 63, 189, 86, 180, 83, + 167, 17, 179, 205, 213, 68, 102, 11, 120, 210, 150, 47, 150, 115, 186, 81, + 137, 53, 132, 36, 224, 107, 115, 100, 143, 118, 212, 239, 176, 139, 243, 36, + 235, 189, 48, 43, 25, 130, 143, 2, 165, 117, 173, 63, 189, 86, 180, 83, 22, 204, 226, 141, 78, 199, 226, 195, 94, 183, 88, 103, 180, 205, 96, 254, - 235, 65, 144, 231, 11, 193, 111, 52, 129, 110, 125, 68, 42, 234, 138, 118, - 112, 69, 178, 191, 213, 115, 230, 221, 222, 97, 60, 187, 154, 161, 24, 25, - 147, 205, 69, 47, 45, 241, 84, 238, 249, 129, 6, 107, 126, 245, 187, 62, - 247, 159, 178, 6, 100, 80, 244, 229, 53, 83, 186, 208, 116, 164, 83, 217, + 235, 65, 144, 231, 11, 193, 111, 52, 129, 110, 125, 68, 42, 234, 138, 118, + 112, 69, 178, 191, 213, 115, 230, 221, 222, 97, 60, 187, 154, 161, 24, 25, + 147, 205, 69, 47, 45, 241, 84, 238, 249, 129, 6, 107, 126, 245, 187, 62, + 247, 159, 178, 6, 100, 80, 244, 229, 53, 83, 186, 208, 116, 164, 83, 217, 76, 21, 191, 207, 44, 19, 21, 253, 153, 84, 92, 96, 41, 9, 10, 187, 82, 155, 222, 146, 71, 130, 217, 44, 75, 51, 56, 119, 4, 77, 141, 46, - 0, 97, 157, 176, 42, 30, 102, 41, 39, 48, 191, 201, 226, 156, 80, 24, + 0, 97, 157, 176, 42, 30, 102, 41, 39, 48, 191, 201, 226, 156, 80, 24, 28, 109, 150, 215, 254, 211, 17, 87, 114, 111, 250, 7, 60, 233, 55, 121, - 139, 121, 167, 213, 0, 106, 85, 183, 122, 254, 65, 52, 95, 129, 197, 156, - 125, 235, 47, 46, 191, 44, 139, 244, 217, 239, 216, 228, 14, 234, 216, 19, + 139, 121, 167, 213, 0, 106, 85, 183, 122, 254, 65, 52, 95, 129, 197, 156, + 125, 235, 47, 46, 191, 44, 139, 244, 217, 239, 216, 228, 14, 234, 216, 19, 13, 124, 221, 166, 60, 124, 187, 83, 242, 154, 57, 182, 125, 172, 123, 100, - 165, 156, 196, 254, 19, 73, 234, 83, 209, 242, 17, 54, 12, 115, 163, 148, + 165, 156, 196, 254, 19, 73, 234, 83, 209, 242, 17, 54, 12, 115, 163, 148, 32, 146, 41, 86, 171, 11, 77, 71, 162, 203, 42, 153, 71, 217, 254, 31, - 214, 184, 58, 41, 245, 132, 249, 54, 172, 163, 225, 203, 205, 52, 64, 105, - 110, 128, 162, 176, 118, 243, 173, 173, 69, 11, 98, 19, 183, 83, 247, 5, - 137, 91, 192, 122, 15, 151, 125, 192, 220, 207, 6, 118, 84, 8, 86, 196, + 214, 184, 58, 41, 245, 132, 249, 54, 172, 163, 225, 203, 205, 52, 64, 105, + 110, 128, 162, 176, 118, 243, 173, 173, 69, 11, 98, 19, 183, 83, 247, 5, + 137, 91, 192, 122, 15, 151, 125, 192, 220, 207, 6, 118, 84, 8, 86, 196, 88, 59, 246, 8, 250, 10, 27, 7, 233, 225, 220, 213, 222, 239, 138, 177, - 173, 63, 58, 16, 68, 113, 218, 216, 24, 25, 147, 176, 232, 249, 135, 194, - 5, 26, 37, 110, 251, 13, 178, 55, 28, 116, 84, 162, 145, 153, 117, 194, + 173, 63, 58, 16, 68, 113, 218, 216, 24, 25, 147, 176, 232, 249, 135, 194, + 5, 26, 37, 110, 251, 13, 178, 55, 28, 116, 84, 162, 145, 153, 117, 194, 41, 16, 179, 64, 121, 52, 127, 232, 232, 53, 135, 212, 72, 122, 32, 112, - 152, 10, 241, 217, 107, 3, 99, 91, 115, 88, 107, 146, 120, 22, 156, 153, + 152, 10, 241, 217, 107, 3, 99, 91, 115, 88, 107, 146, 120, 22, 156, 153, 68, 104, 212, 39, 76, 144, 54, 58, 61, 91, 212, 96, 139, 35, 184, 37, 17, 55, 223, 15, 75, 18, 55, 124, 232, 21, 10, 147, 24, 221, 23, 87, - 186, 27, 152, 51, 247, 112, 63, 56, 89, 180, 195, 67, 89, 105, 236, 102, - 235, 57, 17, 45, 151, 91, 186, 224, 171, 11, 149, 111, 102, 149, 50, 144, - 250, 243, 179, 20, 251, 203, 229, 228, 190, 33, 209, 254, 237, 112, 60, 222, - 179, 19, 224, 4, 78, 246, 239, 248, 80, 169, 180, 71, 190, 29, 178, 253, - 130, 207, 77, 202, 16, 108, 142, 201, 238, 135, 247, 155, 237, 187, 243, 139, - 247, 21, 141, 125, 213, 34, 106, 183, 4, 125, 40, 8, 104, 128, 73, 121, - 163, 122, 190, 121, 152, 45, 174, 52, 181, 139, 254, 242, 146, 36, 163, 183, - 147, 27, 234, 160, 222, 93, 232, 251, 153, 185, 158, 215, 9, 86, 49, 72, + 186, 27, 152, 51, 247, 112, 63, 56, 89, 180, 195, 67, 89, 105, 236, 102, + 235, 57, 17, 45, 151, 91, 186, 224, 171, 11, 149, 111, 102, 149, 50, 144, + 250, 243, 179, 20, 251, 203, 229, 228, 190, 33, 209, 254, 237, 112, 60, 222, + 179, 19, 224, 4, 78, 246, 239, 248, 80, 169, 180, 71, 190, 29, 178, 253, + 130, 207, 77, 202, 16, 108, 142, 201, 238, 135, 247, 155, 237, 187, 243, 139, + 247, 21, 141, 125, 213, 34, 106, 183, 4, 125, 40, 8, 104, 128, 73, 121, + 163, 122, 190, 121, 152, 45, 174, 52, 181, 139, 254, 242, 146, 36, 163, 183, + 147, 27, 234, 160, 222, 93, 232, 251, 153, 185, 158, 215, 9, 86, 49, 72, 87, 154, 88, 169, 82, 186, 198, 240, 104, 92, 129, 217, 12, 124, 113, 206, - 117, 116, 149, 159, 149, 124, 219, 138, 96, 50, 177, 145, 244, 8, 232, 218, - 158, 22, 70, 31, 52, 226, 90, 7, 187, 135, 66, 35, 193, 62, 122, 72, - 201, 100, 66, 137, 236, 158, 187, 195, 107, 234, 27, 155, 187, 221, 131, 2, - 167, 165, 18, 225, 67, 72, 190, 63, 136, 69, 32, 185, 181, 234, 159, 57, - 4, 101, 127, 121, 3, 2, 235, 220, 44, 245, 160, 71, 64, 175, 55, 135, + 117, 116, 149, 159, 149, 124, 219, 138, 96, 50, 177, 145, 244, 8, 232, 218, + 158, 22, 70, 31, 52, 226, 90, 7, 187, 135, 66, 35, 193, 62, 122, 72, + 201, 100, 66, 137, 236, 158, 187, 195, 107, 234, 27, 155, 187, 221, 131, 2, + 167, 165, 18, 225, 67, 72, 190, 63, 136, 69, 32, 185, 181, 234, 159, 57, + 4, 101, 127, 121, 3, 2, 235, 220, 44, 245, 160, 71, 64, 175, 55, 135, 83, 250, 217, 239, 121, 81, 181, 160, 151, 70, 56, 101, 74, 169, 142, 167, 10, 179, 233, 140, 156, 203, 110, 15, 95, 15, 8, 169, 164, 40, 43, 50, - 148, 216, 167, 161, 36, 142, 145, 126, 236, 167, 154, 120, 110, 239, 138, 53, - 152, 233, 115, 33, 203, 253, 249, 174, 176, 43, 0, 178, 120, 133, 211, 252, + 148, 216, 167, 161, 36, 142, 145, 126, 236, 167, 154, 120, 110, 239, 138, 53, + 152, 233, 115, 33, 203, 253, 249, 174, 176, 43, 0, 178, 120, 133, 211, 252, 95, 221, 221, 185, 36, 145, 53, 15, 125, 26, 232, 42, 249, 86, 8, 205, - 183, 114, 81, 62, 187, 162, 4, 251, 26, 79, 159, 156, 42, 7, 83, 97, + 183, 114, 81, 62, 187, 162, 4, 251, 26, 79, 159, 156, 42, 7, 83, 97, 14, 124, 38, 252, 215, 34, 141, 252, 226, 61, 237, 252, 114, 117, 187, 21, 53, 236, 151, 9, 147, 40, 68, 63, 10, 166, 84, 236, 0, 169, 196, 239, - 107, 214, 32, 53, 142, 172, 22, 245, 22, 154, 150, 105, 223, 5, 178, 48, - 151, 191, 251, 63, 50, 255, 54, 206, 221, 49, 249, 35, 133, 197, 248, 47, - 155, 185, 108, 172, 179, 104, 121, 72, 25, 83, 78, 205, 136, 136, 250, 47, + 107, 214, 32, 53, 142, 172, 22, 245, 22, 154, 150, 105, 223, 5, 178, 48, + 151, 191, 251, 63, 50, 255, 54, 206, 221, 49, 249, 35, 133, 197, 248, 47, + 155, 185, 108, 172, 179, 104, 121, 72, 25, 83, 78, 205, 136, 136, 250, 47, 68, 179, 166, 229, 237, 212, 214, 104, 191, 88, 159, 43, 30, 168, 89, 25, - 137, 79, 142, 7, 237, 19, 230, 87, 255, 20, 182, 27, 217, 197, 80, 45, - 119, 115, 241, 181, 96, 155, 160, 62, 57, 162, 103, 171, 196, 214, 243, 194, + 137, 79, 142, 7, 237, 19, 230, 87, 255, 20, 182, 27, 217, 197, 80, 45, + 119, 115, 241, 181, 96, 155, 160, 62, 57, 162, 103, 171, 196, 214, 243, 194, 41, 223, 187, 22, 4, 157, 139, 4, 98, 193, 171, 27, 217, 8, 27, 100, - 222, 30, 235, 4, 127, 97, 243, 231, 102, 37, 47, 237, 58, 79, 189, 143, - 193, 144, 0, 150, 183, 0, 100, 29, 130, 166, 233, 150, 241, 61, 175, 23, + 222, 30, 235, 4, 127, 97, 243, 231, 102, 37, 47, 237, 58, 79, 189, 143, + 193, 144, 0, 150, 183, 0, 100, 29, 130, 166, 233, 150, 241, 61, 175, 23, 56, 239, 24, 59, 143, 79, 27, 23, 124, 4, 9, 207, 73, 21, 181, 227, 80, 149, 79, 226, 85, 110, 255, 126, 11, 66, 167, 203, 91, 50, 255, 189, 91, 50, 79, 115, 160, 201, 112, 13, 25, 100, 68, 8, 218, 253, 185, 90, 85, 79, 74, 27, 123, 23, 229, 57, 97, 91, 127, 106, 189, 186, 213, 74, - 233, 11, 137, 181, 51, 79, 108, 16, 145, 67, 82, 93, 245, 199, 182, 112, - 114, 208, 100, 151, 117, 222, 34, 187, 232, 137, 114, 251, 117, 217, 153, 37, - 215, 22, 113, 249, 198, 21, 184, 245, 107, 107, 27, 224, 2, 158, 165, 155, - 155, 104, 108, 215, 105, 154, 76, 171, 175, 245, 245, 206, 227, 85, 231, 208, - 127, 196, 191, 48, 150, 44, 38, 194, 191, 59, 10, 10, 175, 148, 162, 163, - 122, 167, 207, 145, 105, 234, 57, 199, 40, 112, 205, 98, 242, 238, 38, 68, - 192, 158, 91, 141, 80, 54, 12, 193, 215, 8, 201, 136, 185, 229, 109, 175, + 233, 11, 137, 181, 51, 79, 108, 16, 145, 67, 82, 93, 245, 199, 182, 112, + 114, 208, 100, 151, 117, 222, 34, 187, 232, 137, 114, 251, 117, 217, 153, 37, + 215, 22, 113, 249, 198, 21, 184, 245, 107, 107, 27, 224, 2, 158, 165, 155, + 155, 104, 108, 215, 105, 154, 76, 171, 175, 245, 245, 206, 227, 85, 231, 208, + 127, 196, 191, 48, 150, 44, 38, 194, 191, 59, 10, 10, 175, 148, 162, 163, + 122, 167, 207, 145, 105, 234, 57, 199, 40, 112, 205, 98, 242, 238, 38, 68, + 192, 158, 91, 141, 80, 54, 12, 193, 215, 8, 201, 136, 185, 229, 109, 175, 25, 245, 209, 147, 197, 233, 17, 80, 189, 150, 49, 218, 246, 78, 30, 112, 64, 212, 109, 75, 232, 228, 171, 102, 239, 219, 152, 158, 217, 121, 43, 174, 99, 82, 7, 113, 222, 107, 164, 30, 205, 236, 152, 19, 157, 60, 82, 165, 34, 117, 23, 166, 185, 209, 212, 7, 250, 32, 167, 172, 234, 117, 139, 110, - 191, 14, 44, 158, 95, 115, 126, 115, 234, 209, 174, 95, 163, 117, 243, 203, - 182, 113, 182, 4, 33, 100, 143, 45, 225, 128, 69, 73, 183, 246, 91, 28, + 191, 14, 44, 158, 95, 115, 126, 115, 234, 209, 174, 95, 163, 117, 243, 203, + 182, 113, 182, 4, 33, 100, 143, 45, 225, 128, 69, 73, 183, 246, 91, 28, 57, 20, 1, 175, 125, 128, 38, 4, 54, 93, 255, 28, 106, 122, 42, 104, 35, 79, 242, 117, 75, 237, 149, 28, 178, 84, 224, 183, 116, 254, 120, 3, 70, 154, 8, 57, 132, 86, 14, 119, 4, 130, 3, 155, 233, 177, 27, 28, - 233, 148, 205, 109, 29, 39, 33, 0, 160, 214, 129, 207, 180, 227, 131, 109, + 233, 148, 205, 109, 29, 39, 33, 0, 160, 214, 129, 207, 180, 227, 131, 109, 29, 136, 60, 47, 234, 99, 52, 57, 228, 87, 114, 138, 185, 19, 148, 152, - 114, 48, 12, 231, 182, 67, 228, 94, 253, 199, 34, 171, 238, 77, 59, 83, - 128, 137, 52, 74, 35, 236, 38, 181, 165, 106, 161, 12, 100, 76, 100, 237, + 114, 48, 12, 231, 182, 67, 228, 94, 253, 199, 34, 171, 238, 77, 59, 83, + 128, 137, 52, 74, 35, 236, 38, 181, 165, 106, 161, 12, 100, 76, 100, 237, 69, 13, 211, 210, 117, 185, 178, 17, 231, 85, 134, 101, 66, 9, 71, 42, 88, 125, 183, 106, 217, 38, 175, 131, 139, 75, 163, 134, 149, 70, 120, 146, - 156, 196, 151, 154, 242, 232, 163, 33, 206, 179, 123, 102, 249, 28, 11, 115, + 156, 196, 151, 154, 242, 232, 163, 33, 206, 179, 123, 102, 249, 28, 11, 115, 88, 20, 192, 244, 74, 33, 165, 176, 215, 142, 87, 229, 188, 139, 225, 192, - 111, 203, 55, 25, 241, 218, 22, 119, 121, 89, 69, 116, 214, 254, 94, 137, - 253, 168, 156, 155, 34, 150, 56, 126, 229, 79, 49, 150, 109, 99, 194, 179, + 111, 203, 55, 25, 241, 218, 22, 119, 121, 89, 69, 116, 214, 254, 94, 137, + 253, 168, 156, 155, 34, 150, 56, 126, 229, 79, 49, 150, 109, 99, 194, 179, 40, 114, 63, 220, 161, 254, 73, 154, 211, 245, 21, 255, 63, 209, 45, 135, 86, 234, 184, 213, 95, 28, 28, 244, 42, 66, 200, 83, 190, 81, 247, 24, - 153, 129, 180, 45, 159, 132, 4, 187, 171, 88, 178, 140, 143, 60, 212, 187, - 102, 125, 212, 66, 85, 133, 248, 58, 240, 126, 196, 7, 68, 71, 137, 202, - 116, 79, 137, 229, 156, 122, 69, 94, 146, 226, 198, 191, 116, 96, 33, 50, - 189, 32, 4, 5, 92, 116, 29, 122, 137, 140, 42, 199, 138, 59, 38, 48, - 178, 115, 216, 201, 225, 170, 183, 55, 248, 151, 58, 187, 184, 152, 106, 130, - 176, 52, 36, 73, 99, 77, 12, 166, 238, 52, 231, 86, 144, 91, 2, 248, - 246, 127, 5, 182, 201, 149, 205, 246, 73, 158, 98, 4, 20, 138, 51, 176, + 153, 129, 180, 45, 159, 132, 4, 187, 171, 88, 178, 140, 143, 60, 212, 187, + 102, 125, 212, 66, 85, 133, 248, 58, 240, 126, 196, 7, 68, 71, 137, 202, + 116, 79, 137, 229, 156, 122, 69, 94, 146, 226, 198, 191, 116, 96, 33, 50, + 189, 32, 4, 5, 92, 116, 29, 122, 137, 140, 42, 199, 138, 59, 38, 48, + 178, 115, 216, 201, 225, 170, 183, 55, 248, 151, 58, 187, 184, 152, 106, 130, + 176, 52, 36, 73, 99, 77, 12, 166, 238, 52, 231, 86, 144, 91, 2, 248, + 246, 127, 5, 182, 201, 149, 205, 246, 73, 158, 98, 4, 20, 138, 51, 176, 71, 169, 209, 237, 230, 100, 244, 243, 107, 80, 113, 246, 233, 115, 26, 175, 72, 11, 38, 165, 68, 108, 163, 27, 38, 43, 246, 18, 153, 208, 118, 235, - 201, 225, 235, 17, 65, 53, 173, 72, 230, 232, 105, 215, 41, 180, 191, 61, + 201, 225, 235, 17, 65, 53, 173, 72, 230, 232, 105, 215, 41, 180, 191, 61, 31, 28, 214, 219, 29, 209, 90, 206, 232, 80, 22, 101, 237, 61, 105, 128, - 249, 224, 23, 242, 8, 250, 190, 130, 207, 148, 102, 166, 241, 67, 58, 8, + 249, 224, 23, 242, 8, 250, 190, 130, 207, 148, 102, 166, 241, 67, 58, 8, 61, 43, 58, 21, 148, 188, 40, 139, 116, 11, 79, 186, 85, 9, 240, 164, - 117, 238, 157, 59, 244, 184, 250, 69, 143, 88, 147, 126, 237, 37, 6, 159, - 130, 18, 72, 138, 251, 58, 136, 155, 92, 42, 173, 253, 171, 166, 57, 160, - 162, 211, 173, 241, 66, 121, 37, 176, 180, 140, 117, 240, 132, 181, 16, 234, - 173, 59, 98, 9, 123, 31, 18, 165, 45, 182, 89, 112, 130, 79, 53, 10, - 120, 252, 52, 114, 58, 57, 146, 87, 222, 154, 231, 215, 219, 84, 246, 85, + 117, 238, 157, 59, 244, 184, 250, 69, 143, 88, 147, 126, 237, 37, 6, 159, + 130, 18, 72, 138, 251, 58, 136, 155, 92, 42, 173, 253, 171, 166, 57, 160, + 162, 211, 173, 241, 66, 121, 37, 176, 180, 140, 117, 240, 132, 181, 16, 234, + 173, 59, 98, 9, 123, 31, 18, 165, 45, 182, 89, 112, 130, 79, 53, 10, + 120, 252, 52, 114, 58, 57, 146, 87, 222, 154, 231, 215, 219, 84, 246, 85, 57, 206, 180, 66, 125, 212, 226, 45, 212, 74, 132, 27, 185, 34, 150, 235, - 119, 218, 77, 70, 235, 171, 112, 123, 174, 87, 160, 89, 86, 219, 3, 47, + 119, 218, 77, 70, 235, 171, 112, 123, 174, 87, 160, 89, 86, 219, 3, 47, 39, 240, 116, 102, 70, 107, 31, 55, 102, 167, 4, 101, 119, 146, 176, 237, - 168, 123, 84, 118, 218, 112, 118, 52, 18, 56, 120, 216, 66, 187, 31, 12, - 205, 53, 119, 26, 225, 215, 195, 226, 2, 201, 75, 105, 65, 81, 45, 239, - 114, 182, 155, 135, 95, 153, 240, 143, 109, 109, 219, 218, 224, 26, 175, 35, + 168, 123, 84, 118, 218, 112, 118, 52, 18, 56, 120, 216, 66, 187, 31, 12, + 205, 53, 119, 26, 225, 215, 195, 226, 2, 201, 75, 105, 65, 81, 45, 239, + 114, 182, 155, 135, 95, 153, 240, 143, 109, 109, 219, 218, 224, 26, 175, 35, 86, 128, 209, 255, 71, 26, 86, 115, 22, 70, 167, 3, 105, 128, 160, 142, - 163, 149, 168, 112, 8, 12, 14, 119, 65, 43, 183, 105, 197, 156, 207, 226, - 231, 239, 48, 62, 4, 49, 169, 234, 123, 26, 164, 98, 119, 33, 170, 43, + 163, 149, 168, 112, 8, 12, 14, 119, 65, 43, 183, 105, 197, 156, 207, 226, + 231, 239, 48, 62, 4, 49, 169, 234, 123, 26, 164, 98, 119, 33, 170, 43, 39, 6, 128, 15, 217, 209, 229, 109, 240, 180, 150, 169, 252, 118, 242, 240, - 108, 204, 24, 107, 199, 108, 184, 110, 208, 52, 175, 245, 241, 123, 90, 123, - 150, 211, 56, 75, 247, 140, 187, 53, 172, 174, 90, 223, 117, 128, 254, 97, - 235, 170, 193, 190, 34, 215, 109, 18, 109, 13, 118, 134, 45, 22, 100, 73, - 141, 199, 203, 124, 169, 191, 102, 108, 250, 201, 188, 39, 236, 74, 154, 159, - 170, 137, 69, 63, 82, 44, 177, 240, 178, 157, 53, 89, 6, 99, 5, 13, - 134, 169, 195, 121, 229, 179, 212, 123, 198, 131, 96, 250, 187, 94, 106, 51, - 219, 16, 147, 227, 108, 124, 240, 237, 172, 43, 83, 157, 124, 246, 118, 249, - 175, 43, 235, 221, 18, 24, 166, 127, 255, 210, 199, 57, 134, 73, 141, 254, - 219, 209, 19, 217, 36, 25, 104, 225, 133, 24, 3, 130, 62, 103, 148, 212, - 243, 122, 52, 213, 102, 26, 144, 227, 189, 143, 151, 230, 98, 87, 214, 147, - 110, 31, 43, 248, 142, 126, 199, 95, 170, 186, 67, 225, 208, 49, 50, 159, - 108, 174, 152, 118, 43, 193, 187, 13, 63, 141, 94, 118, 113, 200, 75, 165, - 117, 247, 53, 209, 151, 163, 241, 24, 23, 252, 149, 18, 16, 77, 69, 208, - 219, 254, 159, 220, 62, 99, 26, 31, 231, 88, 150, 219, 168, 151, 178, 181, - 234, 141, 124, 130, 37, 1, 21, 195, 96, 139, 179, 136, 145, 29, 159, 213, - 248, 10, 174, 213, 22, 180, 250, 251, 30, 42, 228, 139, 178, 90, 19, 228, - 100, 120, 205, 54, 6, 189, 213, 203, 193, 43, 218, 211, 27, 93, 76, 181, - 127, 159, 43, 96, 233, 249, 118, 252, 127, 59, 67, 82, 65, 48, 100, 170, - 227, 197, 141, 49, 153, 31, 189, 176, 102, 14, 101, 152, 242, 25, 251, 47, - 242, 67, 114, 61, 184, 29, 60, 163, 186, 19, 17, 36, 42, 76, 31, 246, - 195, 224, 206, 221, 89, 69, 218, 112, 148, 98, 60, 154, 28, 199, 206, 59, - 157, 199, 18, 214, 53, 217, 211, 254, 128, 220, 189, 96, 134, 57, 73, 152, + 108, 204, 24, 107, 199, 108, 184, 110, 208, 52, 175, 245, 241, 123, 90, 123, + 150, 211, 56, 75, 247, 140, 187, 53, 172, 174, 90, 223, 117, 128, 254, 97, + 235, 170, 193, 190, 34, 215, 109, 18, 109, 13, 118, 134, 45, 22, 100, 73, + 141, 199, 203, 124, 169, 191, 102, 108, 250, 201, 188, 39, 236, 74, 154, 159, + 170, 137, 69, 63, 82, 44, 177, 240, 178, 157, 53, 89, 6, 99, 5, 13, + 134, 169, 195, 121, 229, 179, 212, 123, 198, 131, 96, 250, 187, 94, 106, 51, + 219, 16, 147, 227, 108, 124, 240, 237, 172, 43, 83, 157, 124, 246, 118, 249, + 175, 43, 235, 221, 18, 24, 166, 127, 255, 210, 199, 57, 134, 73, 141, 254, + 219, 209, 19, 217, 36, 25, 104, 225, 133, 24, 3, 130, 62, 103, 148, 212, + 243, 122, 52, 213, 102, 26, 144, 227, 189, 143, 151, 230, 98, 87, 214, 147, + 110, 31, 43, 248, 142, 126, 199, 95, 170, 186, 67, 225, 208, 49, 50, 159, + 108, 174, 152, 118, 43, 193, 187, 13, 63, 141, 94, 118, 113, 200, 75, 165, + 117, 247, 53, 209, 151, 163, 241, 24, 23, 252, 149, 18, 16, 77, 69, 208, + 219, 254, 159, 220, 62, 99, 26, 31, 231, 88, 150, 219, 168, 151, 178, 181, + 234, 141, 124, 130, 37, 1, 21, 195, 96, 139, 179, 136, 145, 29, 159, 213, + 248, 10, 174, 213, 22, 180, 250, 251, 30, 42, 228, 139, 178, 90, 19, 228, + 100, 120, 205, 54, 6, 189, 213, 203, 193, 43, 218, 211, 27, 93, 76, 181, + 127, 159, 43, 96, 233, 249, 118, 252, 127, 59, 67, 82, 65, 48, 100, 170, + 227, 197, 141, 49, 153, 31, 189, 176, 102, 14, 101, 152, 242, 25, 251, 47, + 242, 67, 114, 61, 184, 29, 60, 163, 186, 19, 17, 36, 42, 76, 31, 246, + 195, 224, 206, 221, 89, 69, 218, 112, 148, 98, 60, 154, 28, 199, 206, 59, + 157, 199, 18, 214, 53, 217, 211, 254, 128, 220, 189, 96, 134, 57, 73, 152, 41, 52, 0, 93, 23, 215, 124, 209, 63, 252, 134, 64, 224, 183, 197, 94, 46, 214, 214, 233, 202, 211, 155, 236, 31, 238, 220, 132, 54, 88, 122, 140, - 146, 11, 88, 164, 238, 156, 72, 239, 225, 82, 157, 144, 27, 240, 5, 231, + 146, 11, 88, 164, 238, 156, 72, 239, 225, 82, 157, 144, 27, 240, 5, 231, 89, 25, 63, 50, 227, 219, 3, 5, 218, 125, 13, 151, 59, 40, 162, 211, 79, 33, 157, 76, 245, 55, 229, 140, 88, 50, 221, 42, 52, 162, 106, 212, - 125, 187, 254, 0, 126, 156, 98, 149, 35, 94, 247, 215, 131, 86, 116, 176, - 3, 56, 30, 26, 138, 113, 71, 255, 77, 143, 52, 111, 20, 113, 47, 88, - 104, 110, 225, 164, 226, 8, 74, 180, 182, 183, 206, 215, 84, 12, 46, 61, - 177, 168, 102, 244, 93, 199, 243, 247, 214, 227, 131, 185, 103, 131, 49, 3, + 125, 187, 254, 0, 126, 156, 98, 149, 35, 94, 247, 215, 131, 86, 116, 176, + 3, 56, 30, 26, 138, 113, 71, 255, 77, 143, 52, 111, 20, 113, 47, 88, + 104, 110, 225, 164, 226, 8, 74, 180, 182, 183, 206, 215, 84, 12, 46, 61, + 177, 168, 102, 244, 93, 199, 243, 247, 214, 227, 131, 185, 103, 131, 49, 3, 49, 18, 74, 111, 249, 150, 2, 113, 165, 221, 7, 93, 110, 59, 242, 246, - 243, 168, 45, 182, 45, 140, 19, 41, 72, 10, 164, 190, 17, 174, 216, 36, - 216, 3, 1, 198, 230, 150, 19, 0, 114, 10, 75, 166, 138, 161, 0, 113, - 132, 128, 116, 201, 147, 42, 63, 211, 56, 195, 45, 125, 69, 55, 177, 149, - 228, 7, 78, 217, 133, 35, 108, 182, 210, 185, 124, 187, 167, 95, 246, 202, - 121, 167, 61, 61, 239, 37, 153, 143, 109, 126, 42, 69, 174, 253, 132, 161, - 118, 14, 10, 7, 141, 92, 188, 60, 81, 174, 93, 28, 58, 223, 217, 119, + 243, 168, 45, 182, 45, 140, 19, 41, 72, 10, 164, 190, 17, 174, 216, 36, + 216, 3, 1, 198, 230, 150, 19, 0, 114, 10, 75, 166, 138, 161, 0, 113, + 132, 128, 116, 201, 147, 42, 63, 211, 56, 195, 45, 125, 69, 55, 177, 149, + 228, 7, 78, 217, 133, 35, 108, 182, 210, 185, 124, 187, 167, 95, 246, 202, + 121, 167, 61, 61, 239, 37, 153, 143, 109, 126, 42, 69, 174, 253, 132, 161, + 118, 14, 10, 7, 141, 92, 188, 60, 81, 174, 93, 28, 58, 223, 217, 119, 84, 213, 230, 132, 248, 31, 47, 141, 88, 249, 28, 205, 19, 5, 183, 167, 88, 177, 66, 242, 50, 66, 255, 31, 218, 182, 209, 12, 246, 151, 87, 252, - 211, 231, 32, 120, 95, 76, 180, 20, 124, 238, 190, 60, 165, 239, 207, 37, - 221, 115, 145, 126, 61, 51, 141, 54, 64, 219, 247, 164, 74, 19, 7, 93, + 211, 231, 32, 120, 95, 76, 180, 20, 124, 238, 190, 60, 165, 239, 207, 37, + 221, 115, 145, 126, 61, 51, 141, 54, 64, 219, 247, 164, 74, 19, 7, 93, 27, 150, 115, 224, 228, 172, 232, 113, 6, 148, 40, 229, 228, 32, 17, 92, - 215, 75, 64, 50, 235, 127, 109, 127, 152, 99, 73, 55, 210, 245, 55, 37, - 236, 244, 136, 154, 177, 231, 119, 30, 187, 225, 83, 240, 237, 183, 80, 245, + 215, 75, 64, 50, 235, 127, 109, 127, 152, 99, 73, 55, 210, 245, 55, 37, + 236, 244, 136, 154, 177, 231, 119, 30, 187, 225, 83, 240, 237, 183, 80, 245, 10, 129, 181, 156, 137, 27, 79, 97, 145, 78, 100, 127, 79, 224, 218, 244, 49, 70, 225, 131, 138, 102, 32, 110, 123, 110, 49, 161, 246, 27, 99, 115, - 171, 159, 45, 44, 15, 108, 51, 173, 24, 4, 170, 76, 255, 41, 27, 0, + 171, 159, 45, 44, 15, 108, 51, 173, 24, 4, 170, 76, 255, 41, 27, 0, 27, 35, 61, 145, 246, 241, 138, 152, 47, 51, 2, 153, 171, 79, 81, 176, - 123, 63, 192, 74, 27, 243, 22, 51, 86, 243, 48, 24, 129, 162, 69, 218, - 102, 143, 135, 107, 52, 182, 189, 25, 142, 206, 227, 144, 140, 57, 124, 252, + 123, 63, 192, 74, 27, 243, 22, 51, 86, 243, 48, 24, 129, 162, 69, 218, + 102, 143, 135, 107, 52, 182, 189, 25, 142, 206, 227, 144, 140, 57, 124, 252, 97, 157, 61, 55, 43, 76, 52, 197, 146, 154, 83, 0, 150, 16, 85, 76, - 230, 32, 23, 86, 31, 241, 251, 88, 183, 195, 242, 192, 181, 160, 229, 185, - 229, 186, 72, 219, 249, 142, 111, 178, 42, 163, 117, 93, 31, 171, 161, 227, - 194, 51, 36, 53, 116, 0, 233, 37, 150, 128, 144, 8, 168, 198, 68, 35, + 230, 32, 23, 86, 31, 241, 251, 88, 183, 195, 242, 192, 181, 160, 229, 185, + 229, 186, 72, 219, 249, 142, 111, 178, 42, 163, 117, 93, 31, 171, 161, 227, + 194, 51, 36, 53, 116, 0, 233, 37, 150, 128, 144, 8, 168, 198, 68, 35, 57, 148, 64, 207, 148, 64, 213, 174, 223, 174, 129, 171, 81, 132, 1, 90, - 208, 100, 105, 209, 10, 209, 228, 138, 169, 82, 197, 37, 172, 32, 222, 70, - 180, 78, 59, 234, 106, 250, 76, 237, 59, 173, 178, 212, 151, 107, 131, 245, + 208, 100, 105, 209, 10, 209, 228, 138, 169, 82, 197, 37, 172, 32, 222, 70, + 180, 78, 59, 234, 106, 250, 76, 237, 59, 173, 178, 212, 151, 107, 131, 245, 14, 218, 71, 56, 187, 138, 74, 101, 15, 32, 18, 131, 21, 57, 6, 32, - 115, 75, 244, 119, 168, 158, 154, 147, 72, 143, 232, 51, 49, 181, 115, 27, + 115, 75, 244, 119, 168, 158, 154, 147, 72, 143, 232, 51, 49, 181, 115, 27, 96, 141, 93, 202, 36, 38, 23, 61, 150, 171, 239, 66, 13, 183, 126, 24, 99, 175, 110, 189, 88, 170, 252, 139, 127, 179, 106, 243, 140, 208, 243, 110, - 145, 64, 161, 4, 191, 209, 211, 72, 135, 24, 121, 210, 109, 42, 134, 9, - 160, 241, 186, 161, 203, 85, 212, 3, 23, 228, 75, 147, 133, 9, 100, 65, - 195, 165, 252, 229, 177, 199, 170, 63, 194, 247, 76, 171, 66, 203, 193, 3, + 145, 64, 161, 4, 191, 209, 211, 72, 135, 24, 121, 210, 109, 42, 134, 9, + 160, 241, 186, 161, 203, 85, 212, 3, 23, 228, 75, 147, 133, 9, 100, 65, + 195, 165, 252, 229, 177, 199, 170, 63, 194, 247, 76, 171, 66, 203, 193, 3, 74, 91, 86, 31, 85, 185, 52, 27, 175, 175, 84, 137, 51, 233, 26, 52, 16, 75, 185, 95, 35, 167, 251, 67, 83, 217, 9, 241, 43, 252, 76, 242, - 101, 115, 133, 173, 154, 251, 33, 116, 118, 243, 152, 63, 173, 153, 63, 75, + 101, 115, 133, 173, 154, 251, 33, 116, 118, 243, 152, 63, 173, 153, 63, 75, 90, 106, 203, 197, 141, 149, 127, 9, 133, 218, 223, 193, 62, 19, 48, 231, 45, 146, 21, 164, 1, 42, 43, 187, 75, 88, 20, 39, 233, 165, 20, 76, 26, 145, 226, 155, 106, 187, 26, 195, 23, 212, 49, 60, 145, 149, 37, 167, 73, 106, 203, 228, 185, 223, 108, 12, 187, 239, 88, 126, 27, 154, 235, 203, - 207, 187, 1, 114, 12, 112, 238, 17, 185, 120, 227, 177, 242, 191, 10, 18, - 241, 143, 21, 239, 31, 150, 102, 60, 15, 167, 209, 64, 117, 237, 45, 45, - 217, 147, 32, 28, 98, 221, 12, 20, 2, 176, 213, 147, 95, 31, 176, 64, - 237, 55, 53, 44, 105, 249, 43, 111, 73, 162, 180, 4, 62, 66, 118, 36, - 215, 254, 183, 249, 170, 39, 21, 69, 147, 65, 105, 136, 232, 160, 174, 141, + 207, 187, 1, 114, 12, 112, 238, 17, 185, 120, 227, 177, 242, 191, 10, 18, + 241, 143, 21, 239, 31, 150, 102, 60, 15, 167, 209, 64, 117, 237, 45, 45, + 217, 147, 32, 28, 98, 221, 12, 20, 2, 176, 213, 147, 95, 31, 176, 64, + 237, 55, 53, 44, 105, 249, 43, 111, 73, 162, 180, 4, 62, 66, 118, 36, + 215, 254, 183, 249, 170, 39, 21, 69, 147, 65, 105, 136, 232, 160, 174, 141, 84, 222, 189, 33, 250, 197, 226, 170, 246, 127, 87, 25, 10, 181, 46, 151, - 216, 250, 227, 131, 115, 64, 217, 11, 190, 199, 122, 148, 242, 221, 46, 169, + 216, 250, 227, 131, 115, 64, 217, 11, 190, 199, 122, 148, 242, 221, 46, 169, 45, 54, 9, 90, 251, 94, 61, 211, 30, 67, 199, 115, 204, 4, 199, 203, - 109, 137, 60, 223, 206, 3, 144, 170, 215, 224, 72, 247, 128, 64, 147, 140, - 223, 125, 20, 67, 248, 253, 206, 5, 44, 72, 160, 33, 20, 166, 80, 123, - 194, 220, 16, 134, 206, 24, 66, 217, 177, 231, 223, 66, 251, 253, 235, 180, + 109, 137, 60, 223, 206, 3, 144, 170, 215, 224, 72, 247, 128, 64, 147, 140, + 223, 125, 20, 67, 248, 253, 206, 5, 44, 72, 160, 33, 20, 166, 80, 123, + 194, 220, 16, 134, 206, 24, 66, 217, 177, 231, 223, 66, 251, 253, 235, 180, 36, 205, 107, 173, 198, 108, 83, 120, 82, 128, 120, 245, 67, 23, 248, 203, 28, 14, 75, 235, 117, 111, 34, 127, 39, 52, 169, 101, 28, 144, 123, 20, - 197, 116, 96, 141, 201, 246, 61, 101, 132, 127, 98, 178, 186, 139, 226, 132, + 197, 116, 96, 141, 201, 246, 61, 101, 132, 127, 98, 178, 186, 139, 226, 132, 55, 229, 116, 75, 43, 241, 119, 139, 104, 169, 215, 199, 226, 113, 178, 214, - 153, 159, 139, 208, 106, 136, 77, 149, 72, 248, 49, 179, 98, 110, 192, 105, - 128, 27, 245, 36, 215, 210, 187, 98, 45, 92, 51, 238, 57, 153, 113, 21, + 153, 159, 139, 208, 106, 136, 77, 149, 72, 248, 49, 179, 98, 110, 192, 105, + 128, 27, 245, 36, 215, 210, 187, 98, 45, 92, 51, 238, 57, 153, 113, 21, 86, 147, 122, 138, 3, 70, 66, 84, 135, 96, 199, 23, 123, 105, 226, 81, - 171, 23, 228, 73, 234, 240, 50, 135, 108, 143, 140, 247, 26, 245, 43, 94, - 183, 180, 240, 235, 159, 127, 57, 119, 6, 34, 58, 112, 170, 62, 37, 57, - 171, 56, 223, 147, 98, 204, 183, 146, 154, 85, 172, 49, 76, 84, 231, 138, - 117, 46, 81, 57, 240, 43, 102, 130, 234, 208, 237, 88, 164, 124, 128, 104, - 167, 38, 88, 73, 7, 131, 234, 67, 4, 213, 8, 211, 84, 81, 197, 133, - 123, 247, 254, 101, 230, 68, 245, 220, 193, 152, 208, 91, 63, 109, 228, 184, - 117, 28, 114, 146, 98, 142, 195, 4, 139, 48, 186, 242, 211, 124, 175, 224, + 171, 23, 228, 73, 234, 240, 50, 135, 108, 143, 140, 247, 26, 245, 43, 94, + 183, 180, 240, 235, 159, 127, 57, 119, 6, 34, 58, 112, 170, 62, 37, 57, + 171, 56, 223, 147, 98, 204, 183, 146, 154, 85, 172, 49, 76, 84, 231, 138, + 117, 46, 81, 57, 240, 43, 102, 130, 234, 208, 237, 88, 164, 124, 128, 104, + 167, 38, 88, 73, 7, 131, 234, 67, 4, 213, 8, 211, 84, 81, 197, 133, + 123, 247, 254, 101, 230, 68, 245, 220, 193, 152, 208, 91, 63, 109, 228, 184, + 117, 28, 114, 146, 98, 142, 195, 4, 139, 48, 186, 242, 211, 124, 175, 224, 69, 38, 35, 14, 253, 245, 242, 184, 138, 4, 206, 221, 15, 125, 189, 97, - 127, 46, 212, 10, 55, 1, 69, 56, 31, 180, 245, 93, 175, 58, 220, 3, - 164, 88, 22, 74, 157, 113, 246, 189, 65, 97, 235, 189, 126, 106, 50, 120, - 180, 71, 120, 11, 200, 48, 19, 57, 236, 64, 234, 180, 243, 32, 228, 127, - 228, 253, 42, 20, 238, 109, 161, 67, 73, 52, 35, 126, 197, 5, 117, 12, + 127, 46, 212, 10, 55, 1, 69, 56, 31, 180, 245, 93, 175, 58, 220, 3, + 164, 88, 22, 74, 157, 113, 246, 189, 65, 97, 235, 189, 126, 106, 50, 120, + 180, 71, 120, 11, 200, 48, 19, 57, 236, 64, 234, 180, 243, 32, 228, 127, + 228, 253, 42, 20, 238, 109, 161, 67, 73, 52, 35, 126, 197, 5, 117, 12, 86, 215, 168, 60, 159, 4, 74, 193, 92, 104, 190, 30, 185, 187, 153, 208, 87, 245, 62, 200, 16, 204, 189, 141, 188, 226, 187, 144, 101, 51, 86, 204, 26, 22, 246, 230, 176, 81, 195, 19, 126, 58, 91, 30, 204, 178, 248, 217, 81, 155, 68, 145, 42, 9, 22, 68, 22, 107, 25, 86, 153, 225, 224, 143, - 128, 94, 164, 65, 168, 173, 178, 181, 97, 100, 159, 212, 164, 213, 75, 25, + 128, 94, 164, 65, 168, 173, 178, 181, 97, 100, 159, 212, 164, 213, 75, 25, 35, 225, 133, 5, 243, 65, 39, 158, 155, 153, 3, 81, 53, 165, 153, 52, - 237, 226, 122, 245, 248, 255, 60, 13, 2, 41, 202, 232, 184, 57, 152, 133, - 105, 159, 33, 220, 49, 135, 76, 198, 212, 70, 168, 43, 233, 168, 180, 88, - 139, 246, 219, 120, 12, 161, 238, 88, 228, 9, 77, 236, 129, 227, 73, 91, - 104, 222, 104, 205, 28, 140, 205, 167, 178, 222, 150, 197, 139, 205, 66, 245, + 237, 226, 122, 245, 248, 255, 60, 13, 2, 41, 202, 232, 184, 57, 152, 133, + 105, 159, 33, 220, 49, 135, 76, 198, 212, 70, 168, 43, 233, 168, 180, 88, + 139, 246, 219, 120, 12, 161, 238, 88, 228, 9, 77, 236, 129, 227, 73, 91, + 104, 222, 104, 205, 28, 140, 205, 167, 178, 222, 150, 197, 139, 205, 66, 245, 48, 241, 80, 225, 218, 27, 159, 205, 64, 148, 107, 54, 46, 190, 61, 0, - 161, 228, 124, 123, 18, 170, 35, 46, 53, 61, 171, 154, 121, 253, 187, 158, - 102, 194, 132, 94, 49, 239, 86, 57, 205, 129, 185, 234, 50, 56, 219, 36, + 161, 228, 124, 123, 18, 170, 35, 46, 53, 61, 171, 154, 121, 253, 187, 158, + 102, 194, 132, 94, 49, 239, 86, 57, 205, 129, 185, 234, 50, 56, 219, 36, 56, 77, 247, 160, 75, 239, 154, 122, 34, 34, 143, 66, 53, 20, 212, 246, - 3, 79, 229, 119, 50, 132, 221, 187, 208, 82, 149, 183, 151, 200, 181, 97, + 3, 79, 229, 119, 50, 132, 221, 187, 208, 82, 149, 183, 151, 200, 181, 97, 12, 4, 136, 233, 171, 247, 128, 211, 234, 122, 152, 140, 221, 82, 83, 98, - 185, 95, 122, 23, 120, 124, 112, 240, 39, 16, 49, 140, 225, 135, 88, 69, + 185, 95, 122, 23, 120, 124, 112, 240, 39, 16, 49, 140, 225, 135, 88, 69, 96, 125, 246, 99, 224, 165, 148, 178, 35, 63, 192, 217, 39, 153, 63, 32, - 109, 142, 224, 12, 132, 10, 55, 49, 140, 217, 141, 113, 10, 72, 92, 37, - 121, 96, 72, 35, 184, 70, 156, 225, 140, 110, 150, 24, 95, 209, 172, 140, - 187, 10, 154, 58, 113, 215, 254, 36, 101, 155, 5, 46, 249, 59, 238, 164, + 109, 142, 224, 12, 132, 10, 55, 49, 140, 217, 141, 113, 10, 72, 92, 37, + 121, 96, 72, 35, 184, 70, 156, 225, 140, 110, 150, 24, 95, 209, 172, 140, + 187, 10, 154, 58, 113, 215, 254, 36, 101, 155, 5, 46, 249, 59, 238, 164, 25, 212, 35, 5, 87, 45, 183, 124, 174, 6, 182, 241, 206, 128, 118, 190, - 239, 160, 140, 2, 149, 90, 185, 125, 192, 8, 75, 105, 184, 51, 2, 11, - 198, 85, 249, 100, 88, 73, 229, 189, 80, 81, 244, 167, 62, 110, 52, 13, - 254, 122, 144, 170, 206, 64, 239, 191, 0, 73, 235, 143, 120, 81, 33, 87, + 239, 160, 140, 2, 149, 90, 185, 125, 192, 8, 75, 105, 184, 51, 2, 11, + 198, 85, 249, 100, 88, 73, 229, 189, 80, 81, 244, 167, 62, 110, 52, 13, + 254, 122, 144, 170, 206, 64, 239, 191, 0, 73, 235, 143, 120, 81, 33, 87, 83, 154, 156, 163, 31, 172, 104, 196, 78, 144, 100, 3, 54, 202, 67, 177, - 217, 80, 207, 235, 48, 12, 127, 78, 116, 96, 238, 226, 97, 154, 97, 120, + 217, 80, 207, 235, 48, 12, 127, 78, 116, 96, 238, 226, 97, 154, 97, 120, 19, 33, 89, 14, 160, 149, 243, 246, 196, 219, 74, 113, 225, 92, 32, 216, 10, 50, 176, 127, 113, 63, 157, 143, 190, 245, 94, 244, 103, 85, 143, 162, 61, 177, 203, 240, 204, 55, 183, 226, 251, 205, 53, 25, 19, 197, 160, 34, 42, 128, 169, 80, 11, 210, 133, 105, 128, 175, 107, 72, 222, 130, 95, 209, 93, 161, 16, 35, 244, 178, 236, 100, 20, 129, 190, 118, 246, 108, 68, 206, - 105, 58, 91, 90, 149, 0, 168, 95, 115, 63, 54, 240, 7, 164, 186, 100, + 105, 58, 91, 90, 149, 0, 168, 95, 115, 63, 54, 240, 7, 164, 186, 100, 76, 81, 225, 58, 178, 14, 46, 79, 31, 226, 180, 34, 164, 191, 84, 22, - 244, 90, 105, 13, 83, 133, 230, 81, 45, 49, 157, 84, 22, 168, 167, 205, - 219, 123, 209, 80, 87, 205, 180, 152, 162, 225, 229, 142, 72, 250, 240, 134, - 185, 145, 112, 149, 25, 185, 198, 174, 213, 83, 145, 151, 228, 138, 96, 152, - 242, 251, 227, 53, 229, 136, 37, 147, 184, 141, 104, 221, 51, 219, 21, 93, + 244, 90, 105, 13, 83, 133, 230, 81, 45, 49, 157, 84, 22, 168, 167, 205, + 219, 123, 209, 80, 87, 205, 180, 152, 162, 225, 229, 142, 72, 250, 240, 134, + 185, 145, 112, 149, 25, 185, 198, 174, 213, 83, 145, 151, 228, 138, 96, 152, + 242, 251, 227, 53, 229, 136, 37, 147, 184, 141, 104, 221, 51, 219, 21, 93, 42, 253, 183, 57, 203, 92, 7, 240, 82, 171, 103, 167, 115, 233, 175, 142, - 8, 112, 10, 56, 44, 192, 231, 79, 18, 8, 68, 128, 106, 121, 225, 149, + 8, 112, 10, 56, 44, 192, 231, 79, 18, 8, 68, 128, 106, 121, 225, 149, 30, 210, 173, 86, 240, 30, 138, 197, 89, 213, 63, 161, 106, 65, 141, 57, 96, 102, 191, 28, 56, 9, 201, 3, 248, 113, 118, 51, 121, 247, 83, 135, 51, 54, 14, 19, 49, 175, 59, 206, 112, 172, 155, 243, 75, 19, 154, 102, - 188, 11, 76, 198, 136, 11, 44, 154, 139, 48, 34, 194, 116, 170, 198, 127, - 132, 231, 200, 44, 61, 210, 93, 20, 159, 201, 183, 39, 78, 178, 225, 112, + 188, 11, 76, 198, 136, 11, 44, 154, 139, 48, 34, 194, 116, 170, 198, 127, + 132, 231, 200, 44, 61, 210, 93, 20, 159, 201, 183, 39, 78, 178, 225, 112, 50, 254, 198, 200, 207, 18, 196, 209, 222, 252, 67, 56, 186, 71, 24, 210, 30, 105, 32, 102, 99, 239, 195, 191, 131, 246, 65, 121, 91, 66, 112, 28, - 170, 67, 28, 144, 187, 46, 117, 97, 187, 240, 250, 118, 249, 68, 151, 248, - 219, 208, 103, 242, 166, 122, 220, 59, 50, 215, 90, 160, 15, 15, 96, 89, - 167, 87, 22, 253, 137, 202, 126, 145, 162, 171, 97, 181, 102, 50, 107, 230, + 170, 67, 28, 144, 187, 46, 117, 97, 187, 240, 250, 118, 249, 68, 151, 248, + 219, 208, 103, 242, 166, 122, 220, 59, 50, 215, 90, 160, 15, 15, 96, 89, + 167, 87, 22, 253, 137, 202, 126, 145, 162, 171, 97, 181, 102, 50, 107, 230, 31, 183, 133, 105, 23, 233, 228, 13, 247, 169, 79, 53, 76, 138, 29, 51, 53, 221, 126, 199, 47, 153, 184, 183, 198, 109, 192, 203, 178, 26, 115, 177, - 118, 158, 181, 43, 48, 174, 195, 253, 43, 18, 172, 171, 101, 129, 255, 63, + 118, 158, 181, 43, 48, 174, 195, 253, 43, 18, 172, 171, 101, 129, 255, 63, 41, 49, 160, 15, 86, 108, 235, 87, 115, 36, 93, 46, 164, 152, 49, 31, - 137, 125, 174, 115, 196, 240, 117, 226, 183, 151, 73, 30, 75, 59, 61, 160, + 137, 125, 174, 115, 196, 240, 117, 226, 183, 151, 73, 30, 75, 59, 61, 160, 96, 157, 215, 246, 160, 136, 82, 95, 181, 13, 207, 158, 106, 81, 18, 27, - 182, 35, 249, 72, 148, 128, 15, 82, 68, 197, 0, 159, 149, 239, 34, 250, - 171, 70, 200, 219, 214, 18, 134, 14, 71, 69, 219, 145, 208, 125, 65, 232, - 201, 212, 148, 39, 208, 142, 54, 38, 32, 154, 124, 35, 76, 173, 240, 232, + 182, 35, 249, 72, 148, 128, 15, 82, 68, 197, 0, 159, 149, 239, 34, 250, + 171, 70, 200, 219, 214, 18, 134, 14, 71, 69, 219, 145, 208, 125, 65, 232, + 201, 212, 148, 39, 208, 142, 54, 38, 32, 154, 124, 35, 76, 173, 240, 232, 23, 74, 183, 118, 137, 244, 180, 149, 195, 198, 105, 25, 246, 236, 155, 88, - 230, 134, 32, 126, 183, 72, 127, 129, 139, 161, 224, 222, 127, 107, 201, 78, - 227, 207, 10, 48, 9, 199, 240, 176, 49, 165, 95, 200, 101, 89, 40, 229, + 230, 134, 32, 126, 183, 72, 127, 129, 139, 161, 224, 222, 127, 107, 201, 78, + 227, 207, 10, 48, 9, 199, 240, 176, 49, 165, 95, 200, 101, 89, 40, 229, 28, 8, 41, 193, 173, 218, 63, 229, 216, 170, 82, 90, 162, 243, 0, 125, - 248, 79, 186, 228, 44, 197, 178, 58, 196, 251, 85, 19, 254, 130, 110, 78, + 248, 79, 186, 228, 44, 197, 178, 58, 196, 251, 85, 19, 254, 130, 110, 78, 91, 217, 146, 16, 90, 221, 6, 129, 173, 73, 56, 77, 72, 19, 8, 14, - 129, 84, 19, 88, 146, 252, 137, 165, 222, 7, 199, 107, 135, 13, 253, 137, - 180, 184, 240, 37, 238, 133, 135, 80, 170, 172, 60, 80, 94, 130, 246, 166, + 129, 84, 19, 88, 146, 252, 137, 165, 222, 7, 199, 107, 135, 13, 253, 137, + 180, 184, 240, 37, 238, 133, 135, 80, 170, 172, 60, 80, 94, 130, 246, 166, 63, 181, 30, 103, 97, 138, 193, 148, 96, 82, 61, 47, 188, 230, 118, 65, 74, 28, 123, 50, 73, 12, 187, 123, 129, 19, 95, 213, 61, 153, 85, 243, 44, 195, 249, 250, 121, 175, 42, 187, 154, 233, 91, 217, 49, 130, 129, 172, - 250, 182, 203, 30, 93, 213, 217, 24, 28, 198, 4, 208, 61, 207, 108, 120, + 250, 182, 203, 30, 93, 213, 217, 24, 28, 198, 4, 208, 61, 207, 108, 120, 22, 39, 136, 252, 123, 15, 188, 34, 35, 177, 35, 134, 178, 221, 217, 22, 51, 18, 22, 215, 47, 68, 120, 130, 0, 192, 242, 170, 170, 202, 220, 179, - 185, 81, 204, 10, 115, 181, 231, 246, 172, 38, 43, 145, 56, 171, 219, 34, + 185, 81, 204, 10, 115, 181, 231, 246, 172, 38, 43, 145, 56, 171, 219, 34, 17, 96, 165, 209, 53, 44, 68, 74, 236, 249, 192, 35, 204, 123, 56, 118, - 174, 172, 151, 249, 36, 21, 133, 119, 237, 232, 61, 125, 6, 124, 200, 62, + 174, 172, 151, 249, 36, 21, 133, 119, 237, 232, 61, 125, 6, 124, 200, 62, 68, 67, 40, 196, 202, 84, 213, 160, 237, 85, 249, 125, 41, 187, 126, 48, - 152, 124, 104, 211, 127, 96, 167, 184, 23, 161, 68, 106, 119, 224, 226, 148, - 234, 54, 155, 168, 186, 193, 167, 15, 242, 100, 82, 15, 205, 247, 34, 24, - 134, 152, 115, 132, 114, 196, 0, 136, 242, 73, 91, 35, 90, 4, 161, 138, - 163, 21, 16, 244, 60, 158, 199, 246, 233, 150, 10, 142, 248, 196, 224, 129, - 8, 158, 81, 11, 92, 96, 197, 23, 45, 104, 235, 250, 9, 31, 47, 153, - 116, 22, 170, 186, 150, 46, 214, 246, 75, 116, 4, 242, 147, 168, 177, 134, - 143, 149, 36, 139, 224, 127, 143, 167, 208, 115, 158, 250, 132, 4, 124, 204, + 152, 124, 104, 211, 127, 96, 167, 184, 23, 161, 68, 106, 119, 224, 226, 148, + 234, 54, 155, 168, 186, 193, 167, 15, 242, 100, 82, 15, 205, 247, 34, 24, + 134, 152, 115, 132, 114, 196, 0, 136, 242, 73, 91, 35, 90, 4, 161, 138, + 163, 21, 16, 244, 60, 158, 199, 246, 233, 150, 10, 142, 248, 196, 224, 129, + 8, 158, 81, 11, 92, 96, 197, 23, 45, 104, 235, 250, 9, 31, 47, 153, + 116, 22, 170, 186, 150, 46, 214, 246, 75, 116, 4, 242, 147, 168, 177, 134, + 143, 149, 36, 139, 224, 127, 143, 167, 208, 115, 158, 250, 132, 4, 124, 204, 99, 217, 239, 97, 5, 38, 50, 17, 176, 171, 96, 92, 88, 219, 195, 184, - 160, 158, 175, 10, 175, 33, 245, 28, 55, 56, 207, 47, 46, 114, 108, 196, - 101, 93, 39, 227, 183, 40, 40, 109, 121, 123, 90, 85, 162, 165, 227, 200, - 238, 136, 223, 36, 77, 179, 45, 156, 51, 95, 33, 15, 219, 71, 37, 98, - 141, 150, 179, 78, 217, 221, 130, 186, 155, 84, 146, 217, 210, 202, 91, 212, + 160, 158, 175, 10, 175, 33, 245, 28, 55, 56, 207, 47, 46, 114, 108, 196, + 101, 93, 39, 227, 183, 40, 40, 109, 121, 123, 90, 85, 162, 165, 227, 200, + 238, 136, 223, 36, 77, 179, 45, 156, 51, 95, 33, 15, 219, 71, 37, 98, + 141, 150, 179, 78, 217, 221, 130, 186, 155, 84, 146, 217, 210, 202, 91, 212, 50, 129, 188, 203, 28, 213, 10, 230, 40, 47, 215, 77, 161, 88, 71, 56, 82, 124, 130, 249, 70, 139, 142, 23, 78, 139, 252, 32, 223, 90, 214, 27, 94, 23, 12, 240, 77, 145, 71, 172, 75, 235, 141, 83, 145, 50, 101, 166, 87, 154, 179, 203, 27, 233, 169, 45, 28, 41, 211, 46, 144, 123, 62, 62, - 205, 178, 180, 89, 32, 194, 238, 151, 217, 164, 214, 241, 164, 96, 215, 46, - 141, 189, 86, 97, 143, 4, 227, 73, 20, 221, 238, 66, 3, 132, 135, 229, + 205, 178, 180, 89, 32, 194, 238, 151, 217, 164, 214, 241, 164, 96, 215, 46, + 141, 189, 86, 97, 143, 4, 227, 73, 20, 221, 238, 66, 3, 132, 135, 229, 22, 60, 152, 102, 211, 20, 250, 225, 36, 212, 131, 182, 212, 216, 84, 141, - 133, 86, 163, 136, 107, 219, 8, 100, 189, 138, 217, 60, 131, 237, 64, 37, - 241, 85, 140, 47, 54, 75, 58, 76, 66, 104, 245, 201, 199, 236, 188, 71, + 133, 86, 163, 136, 107, 219, 8, 100, 189, 138, 217, 60, 131, 237, 64, 37, + 241, 85, 140, 47, 54, 75, 58, 76, 66, 104, 245, 201, 199, 236, 188, 71, 30, 171, 233, 190, 81, 120, 166, 63, 237, 249, 233, 192, 5, 24, 231, 193, 39, 99, 101, 108, 92, 109, 156, 211, 111, 87, 157, 130, 16, 58, 113, 47, - 101, 152, 60, 183, 37, 227, 52, 255, 213, 16, 112, 234, 223, 197, 101, 73, - 120, 94, 60, 158, 82, 227, 131, 13, 4, 167, 78, 126, 120, 154, 26, 246, + 101, 152, 60, 183, 37, 227, 52, 255, 213, 16, 112, 234, 223, 197, 101, 73, + 120, 94, 60, 158, 82, 227, 131, 13, 4, 167, 78, 126, 120, 154, 26, 246, 35, 145, 40, 150, 7, 208, 243, 100, 68, 89, 200, 139, 138, 121, 37, 28, 35, 197, 227, 79, 19, 130, 171, 91, 116, 57, 153, 140, 217, 236, 7, 180, - 221, 226, 163, 199, 158, 131, 200, 37, 48, 41, 157, 175, 139, 71, 53, 172, - 113, 159, 133, 47, 139, 113, 157, 40, 88, 44, 115, 105, 104, 219, 211, 18, - 164, 170, 127, 5, 178, 115, 181, 143, 30, 173, 6, 186, 183, 45, 56, 94, - 252, 210, 171, 154, 10, 17, 34, 153, 4, 11, 176, 85, 144, 114, 36, 247, + 221, 226, 163, 199, 158, 131, 200, 37, 48, 41, 157, 175, 139, 71, 53, 172, + 113, 159, 133, 47, 139, 113, 157, 40, 88, 44, 115, 105, 104, 219, 211, 18, + 164, 170, 127, 5, 178, 115, 181, 143, 30, 173, 6, 186, 183, 45, 56, 94, + 252, 210, 171, 154, 10, 17, 34, 153, 4, 11, 176, 85, 144, 114, 36, 247, 34, 67, 187, 69, 164, 168, 120, 82, 186, 46, 15, 147, 105, 48, 76, 235, 15, 218, 86, 160, 19, 220, 119, 241, 103, 252, 196, 58, 74, 131, 214, 109, 17, 175, 75, 203, 167, 17, 60, 52, 251, 130, 55, 184, 165, 83, 225, 231, - 184, 208, 196, 88, 70, 8, 3, 43, 78, 107, 158, 180, 130, 248, 194, 16, + 184, 208, 196, 88, 70, 8, 3, 43, 78, 107, 158, 180, 130, 248, 194, 16, 46, 54, 100, 98, 121, 67, 185, 17, 181, 210, 5, 15, 178, 196, 80, 220, 28, 103, 220, 231, 167, 10, 122, 225, 194, 118, 157, 192, 195, 205, 130, 253, 94, 246, 177, 74, 149, 90, 120, 188, 230, 48, 77, 168, 50, 76, 130, 136, - 200, 219, 209, 192, 20, 10, 193, 97, 205, 136, 98, 117, 128, 170, 198, 220, - 218, 180, 178, 186, 150, 227, 196, 161, 4, 244, 124, 31, 85, 243, 34, 78, - 187, 226, 164, 167, 122, 56, 114, 232, 140, 189, 160, 19, 184, 223, 165, 202, + 200, 219, 209, 192, 20, 10, 193, 97, 205, 136, 98, 117, 128, 170, 198, 220, + 218, 180, 178, 186, 150, 227, 196, 161, 4, 244, 124, 31, 85, 243, 34, 78, + 187, 226, 164, 167, 122, 56, 114, 232, 140, 189, 160, 19, 184, 223, 165, 202, 86, 210, 102, 183, 50, 30, 109, 134, 23, 102, 171, 130, 93, 106, 2, 117, 80, 82, 197, 193, 247, 137, 255, 255, 127, 38, 13, 82, 103, 51, 179, 220, - 133, 247, 104, 152, 160, 229, 160, 214, 152, 157, 87, 183, 82, 43, 36, 19, + 133, 247, 104, 152, 160, 229, 160, 214, 152, 157, 87, 183, 82, 43, 36, 19, 80, 192, 122, 186, 201, 116, 190, 220, 131, 228, 153, 197, 212, 112, 233, 124, - 114, 212, 106, 195, 129, 141, 204, 238, 98, 247, 90, 244, 23, 118, 2, 168, + 114, 212, 106, 195, 129, 141, 204, 238, 98, 247, 90, 244, 23, 118, 2, 168, 71, 48, 223, 253, 187, 16, 204, 230, 46, 221, 30, 243, 27, 129, 155, 210, - 159, 84, 56, 212, 197, 131, 174, 59, 85, 108, 80, 36, 31, 210, 71, 228, - 254, 171, 67, 129, 154, 175, 245, 140, 11, 167, 43, 69, 231, 227, 91, 183, - 133, 108, 4, 151, 128, 64, 243, 215, 74, 160, 186, 217, 38, 28, 186, 75, - 178, 151, 214, 5, 49, 158, 242, 126, 91, 249, 88, 156, 110, 124, 205, 125, - 227, 19, 235, 172, 103, 200, 190, 121, 169, 140, 118, 156, 21, 152, 34, 31, - 235, 46, 191, 107, 37, 109, 135, 112, 195, 9, 245, 43, 96, 232, 74, 8, - 193, 131, 70, 140, 180, 204, 219, 243, 72, 70, 16, 11, 227, 0, 27, 252, - 142, 183, 199, 103, 114, 149, 221, 235, 69, 92, 245, 9, 227, 43, 173, 139, - 119, 85, 104, 214, 84, 126, 244, 243, 122, 14, 164, 185, 104, 176, 55, 133, + 159, 84, 56, 212, 197, 131, 174, 59, 85, 108, 80, 36, 31, 210, 71, 228, + 254, 171, 67, 129, 154, 175, 245, 140, 11, 167, 43, 69, 231, 227, 91, 183, + 133, 108, 4, 151, 128, 64, 243, 215, 74, 160, 186, 217, 38, 28, 186, 75, + 178, 151, 214, 5, 49, 158, 242, 126, 91, 249, 88, 156, 110, 124, 205, 125, + 227, 19, 235, 172, 103, 200, 190, 121, 169, 140, 118, 156, 21, 152, 34, 31, + 235, 46, 191, 107, 37, 109, 135, 112, 195, 9, 245, 43, 96, 232, 74, 8, + 193, 131, 70, 140, 180, 204, 219, 243, 72, 70, 16, 11, 227, 0, 27, 252, + 142, 183, 199, 103, 114, 149, 221, 235, 69, 92, 245, 9, 227, 43, 173, 139, + 119, 85, 104, 214, 84, 126, 244, 243, 122, 14, 164, 185, 104, 176, 55, 133, 44, 28, 208, 232, 50, 71, 32, 78, 200, 95, 153, 70, 82, 243, 91, 164, 64, 159, 173, 244, 103, 78, 29, 218, 209, 124, 118, 153, 42, 69, 240, 237, - 228, 33, 155, 17, 61, 27, 233, 171, 6, 240, 48, 113, 243, 134, 207, 120, - 216, 61, 188, 247, 231, 185, 163, 43, 140, 138, 235, 132, 219, 47, 38, 93, - 205, 6, 247, 195, 200, 79, 87, 111, 210, 54, 222, 179, 108, 163, 253, 22, + 228, 33, 155, 17, 61, 27, 233, 171, 6, 240, 48, 113, 243, 134, 207, 120, + 216, 61, 188, 247, 231, 185, 163, 43, 140, 138, 235, 132, 219, 47, 38, 93, + 205, 6, 247, 195, 200, 79, 87, 111, 210, 54, 222, 179, 108, 163, 253, 22, 22, 101, 180, 6, 61, 41, 91, 95, 237, 186, 166, 110, 225, 139, 205, 146, 41, 133, 153, 114, 63, 48, 110, 208, 168, 38, 233, 141, 23, 136, 236, 22, - 220, 14, 62, 224, 46, 20, 193, 181, 107, 14, 234, 156, 234, 108, 30, 112, - 235, 126, 237, 189, 252, 240, 240, 3, 175, 210, 85, 35, 230, 115, 219, 184, - 173, 48, 84, 250, 52, 113, 44, 187, 173, 253, 153, 177, 32, 127, 98, 100, - 180, 211, 71, 146, 82, 1, 69, 200, 165, 198, 121, 133, 232, 0, 237, 157, - 169, 31, 134, 106, 243, 245, 16, 228, 53, 133, 143, 255, 123, 175, 19, 10, + 220, 14, 62, 224, 46, 20, 193, 181, 107, 14, 234, 156, 234, 108, 30, 112, + 235, 126, 237, 189, 252, 240, 240, 3, 175, 210, 85, 35, 230, 115, 219, 184, + 173, 48, 84, 250, 52, 113, 44, 187, 173, 253, 153, 177, 32, 127, 98, 100, + 180, 211, 71, 146, 82, 1, 69, 200, 165, 198, 121, 133, 232, 0, 237, 157, + 169, 31, 134, 106, 243, 245, 16, 228, 53, 133, 143, 255, 123, 175, 19, 10, 98, 117, 180, 38, 50, 190, 63, 70, 106, 8, 221, 78, 66, 129, 190, 181, - 165, 119, 242, 101, 19, 18, 181, 91, 223, 30, 93, 253, 74, 242, 112, 139, + 165, 119, 242, 101, 19, 18, 181, 91, 223, 30, 93, 253, 74, 242, 112, 139, 30, 121, 25, 100, 144, 32, 212, 143, 3, 96, 134, 113, 193, 190, 51, 8, 60, 108, 88, 168, 142, 47, 217, 173, 44, 207, 174, 161, 237, 179, 147, 4, 30, 5, 177, 202, 43, 239, 15, 135, 44, 216, 10, 183, 63, 27, 159, 195, 56, 238, 95, 213, 45, 44, 252, 4, 101, 233, 38, 88, 66, 126, 149, 196, 87, 211, 55, 38, 17, 92, 26, 76, 156, 183, 136, 154, 166, 219, 125, 10, 88, 240, 97, 14, 86, 67, 4, 74, 236, 71, 72, 10, 49, 18, 158, 148, - 128, 15, 241, 17, 9, 236, 243, 22, 116, 160, 65, 166, 34, 113, 76, 41, - 100, 153, 184, 22, 62, 252, 220, 47, 180, 124, 103, 242, 104, 13, 244, 136, + 128, 15, 241, 17, 9, 236, 243, 22, 116, 160, 65, 166, 34, 113, 76, 41, + 100, 153, 184, 22, 62, 252, 220, 47, 180, 124, 103, 242, 104, 13, 244, 136, 33, 146, 33, 176, 31, 159, 235, 29, 221, 255, 182, 90, 183, 158, 186, 155, 85, 137, 173, 129, 71, 91, 147, 17, 30, 240, 214, 110, 79, 64, 21, 129, 97, 109, 253, 198, 203, 116, 235, 89, 166, 151, 116, 106, 194, 27, 51, 177, 23, 119, 199, 227, 50, 143, 129, 234, 188, 217, 9, 136, 48, 115, 5, 252, - 241, 195, 116, 239, 68, 176, 55, 121, 2, 38, 229, 224, 94, 204, 200, 115, + 241, 195, 116, 239, 68, 176, 55, 121, 2, 38, 229, 224, 94, 204, 200, 115, 84, 235, 131, 172, 242, 56, 208, 41, 21, 36, 113, 156, 137, 6, 225, 132, - 4, 181, 193, 84, 10, 213, 155, 150, 72, 127, 23, 107, 255, 105, 250, 61, - 234, 211, 225, 169, 93, 63, 138, 95, 201, 74, 208, 99, 119, 184, 219, 62, + 4, 181, 193, 84, 10, 213, 155, 150, 72, 127, 23, 107, 255, 105, 250, 61, + 234, 211, 225, 169, 93, 63, 138, 95, 201, 74, 208, 99, 119, 184, 219, 62, 86, 163, 142, 35, 24, 86, 92, 224, 53, 84, 57, 101, 113, 76, 26, 78, - 174, 49, 28, 234, 153, 240, 27, 114, 87, 133, 130, 78, 66, 144, 205, 152, - 171, 169, 136, 219, 142, 223, 145, 149, 196, 6, 167, 109, 52, 188, 0, 98, - 242, 254, 184, 129, 250, 63, 244, 10, 97, 188, 7, 137, 183, 165, 68, 91, + 174, 49, 28, 234, 153, 240, 27, 114, 87, 133, 130, 78, 66, 144, 205, 152, + 171, 169, 136, 219, 142, 223, 145, 149, 196, 6, 167, 109, 52, 188, 0, 98, + 242, 254, 184, 129, 250, 63, 244, 10, 97, 188, 7, 137, 183, 165, 68, 91, 26, 188, 230, 246, 227, 12, 217, 170, 224, 119, 135, 243, 149, 88, 67, 23, - 117, 173, 130, 164, 233, 244, 251, 11, 123, 57, 80, 111, 249, 146, 231, 213, - 158, 26, 236, 250, 213, 228, 117, 251, 101, 128, 8, 241, 251, 36, 40, 149, - 148, 60, 146, 48, 104, 121, 163, 233, 2, 24, 10, 21, 93, 137, 124, 8, - 115, 220, 255, 107, 153, 105, 6, 255, 32, 160, 96, 74, 84, 184, 31, 155, - 118, 206, 58, 131, 111, 150, 137, 145, 22, 45, 138, 211, 118, 151, 248, 189, + 117, 173, 130, 164, 233, 244, 251, 11, 123, 57, 80, 111, 249, 146, 231, 213, + 158, 26, 236, 250, 213, 228, 117, 251, 101, 128, 8, 241, 251, 36, 40, 149, + 148, 60, 146, 48, 104, 121, 163, 233, 2, 24, 10, 21, 93, 137, 124, 8, + 115, 220, 255, 107, 153, 105, 6, 255, 32, 160, 96, 74, 84, 184, 31, 155, + 118, 206, 58, 131, 111, 150, 137, 145, 22, 45, 138, 211, 118, 151, 248, 189, 64, 82, 222, 9, 137, 114, 59, 89, 77, 249, 245, 195, 146, 198, 43, 209, - 186, 151, 121, 136, 170, 81, 53, 43, 126, 15, 62, 88, 171, 206, 232, 34, + 186, 151, 121, 136, 170, 81, 53, 43, 126, 15, 62, 88, 171, 206, 232, 34, 99, 52, 6, 22, 126, 140, 32, 181, 122, 253, 230, 127, 211, 254, 61, 254, - 108, 114, 38, 214, 164, 244, 87, 243, 187, 185, 57, 105, 24, 244, 59, 254, + 108, 114, 38, 214, 164, 244, 87, 243, 187, 185, 57, 105, 24, 244, 59, 254, 92, 143, 235, 38, 70, 177, 126, 123, 61, 243, 45, 127, 76, 127, 39, 45, - 254, 239, 67, 221, 24, 81, 24, 130, 247, 106, 239, 93, 18, 57, 242, 4, - 223, 131, 86, 249, 241, 81, 149, 230, 154, 17, 14, 179, 194, 234, 17, 85, - 188, 33, 162, 62, 73, 157, 253, 248, 111, 97, 205, 47, 74, 223, 192, 185, - 212, 153, 240, 156, 104, 64, 46, 209, 146, 56, 27, 21, 184, 95, 107, 95, - 101, 243, 133, 146, 194, 240, 51, 109, 158, 225, 18, 80, 66, 4, 79, 252, - 174, 187, 55, 230, 54, 51, 42, 87, 34, 159, 155, 184, 118, 167, 150, 46, + 254, 239, 67, 221, 24, 81, 24, 130, 247, 106, 239, 93, 18, 57, 242, 4, + 223, 131, 86, 249, 241, 81, 149, 230, 154, 17, 14, 179, 194, 234, 17, 85, + 188, 33, 162, 62, 73, 157, 253, 248, 111, 97, 205, 47, 74, 223, 192, 185, + 212, 153, 240, 156, 104, 64, 46, 209, 146, 56, 27, 21, 184, 95, 107, 95, + 101, 243, 133, 146, 194, 240, 51, 109, 158, 225, 18, 80, 66, 4, 79, 252, + 174, 187, 55, 230, 54, 51, 42, 87, 34, 159, 155, 184, 118, 167, 150, 46, 32, 156, 244, 124, 222, 84, 247, 12, 231, 119, 237, 135, 225, 227, 97, 178, 37, 208, 112, 126, 32, 227, 60, 239, 194, 183, 169, 208, 221, 250, 180, 56, - 137, 67, 153, 170, 242, 54, 55, 48, 219, 79, 106, 249, 250, 56, 130, 184, + 137, 67, 153, 170, 242, 54, 55, 48, 219, 79, 106, 249, 250, 56, 130, 184, 43, 56, 114, 175, 122, 249, 107, 188, 63, 169, 25, 43, 68, 61, 246, 47, - 191, 117, 150, 7, 163, 144, 42, 186, 5, 195, 11, 68, 215, 219, 87, 213, + 191, 117, 150, 7, 163, 144, 42, 186, 5, 195, 11, 68, 215, 219, 87, 213, 42, 84, 99, 37, 29, 78, 34, 180, 131, 15, 171, 186, 225, 163, 204, 225, 72, 198, 227, 122, 245, 4, 133, 40, 134, 17, 61, 112, 55, 159, 37, 118, - 112, 173, 210, 126, 9, 23, 209, 65, 14, 109, 16, 247, 254, 45, 170, 33, - 143, 35, 107, 134, 51, 132, 135, 226, 40, 112, 156, 122, 5, 31, 37, 113, + 112, 173, 210, 126, 9, 23, 209, 65, 14, 109, 16, 247, 254, 45, 170, 33, + 143, 35, 107, 134, 51, 132, 135, 226, 40, 112, 156, 122, 5, 31, 37, 113, 24, 1, 153, 3, 180, 227, 249, 172, 93, 20, 79, 126, 42, 254, 100, 80, 86, 180, 123, 71, 213, 32, 178, 28, 63, 75, 177, 246, 25, 119, 33, 236, - 194, 31, 94, 169, 97, 96, 42, 29, 165, 234, 199, 12, 76, 8, 242, 229, - 160, 130, 169, 76, 120, 159, 25, 18, 36, 182, 222, 210, 105, 251, 2, 40, - 111, 212, 249, 119, 48, 137, 50, 71, 146, 216, 47, 18, 60, 194, 18, 119, - 197, 216, 84, 170, 143, 241, 61, 207, 206, 238, 51, 39, 145, 171, 81, 108, + 194, 31, 94, 169, 97, 96, 42, 29, 165, 234, 199, 12, 76, 8, 242, 229, + 160, 130, 169, 76, 120, 159, 25, 18, 36, 182, 222, 210, 105, 251, 2, 40, + 111, 212, 249, 119, 48, 137, 50, 71, 146, 216, 47, 18, 60, 194, 18, 119, + 197, 216, 84, 170, 143, 241, 61, 207, 206, 238, 51, 39, 145, 171, 81, 108, 64, 0, 229, 83, 190, 81, 149, 27, 77, 44, 34, 134, 178, 250, 9, 244, - 128, 175, 124, 28, 41, 116, 254, 30, 162, 88, 207, 231, 222, 155, 224, 234, - 201, 56, 119, 191, 190, 158, 195, 16, 153, 152, 99, 244, 60, 207, 205, 133, + 128, 175, 124, 28, 41, 116, 254, 30, 162, 88, 207, 231, 222, 155, 224, 234, + 201, 56, 119, 191, 190, 158, 195, 16, 153, 152, 99, 244, 60, 207, 205, 133, 34, 101, 0, 104, 144, 141, 121, 168, 44, 40, 234, 49, 35, 136, 39, 242, 14, 198, 188, 124, 161, 135, 113, 180, 68, 218, 10, 47, 223, 190, 0, 238, - 109, 149, 149, 25, 14, 218, 109, 85, 106, 125, 45, 29, 63, 122, 74, 184, + 109, 149, 149, 25, 14, 218, 109, 85, 106, 125, 45, 29, 63, 122, 74, 184, 39, 153, 72, 81, 69, 212, 62, 80, 161, 110, 103, 56, 254, 7, 198, 201, 47, 202, 145, 147, 115, 7, 252, 21, 157, 211, 102, 40, 117, 116, 41, 110, - 189, 45, 41, 128, 46, 18, 40, 228, 43, 159, 202, 90, 114, 78, 193, 9, - 237, 172, 59, 89, 50, 218, 47, 142, 139, 118, 146, 201, 8, 158, 116, 71, - 133, 105, 177, 199, 24, 202, 219, 64, 136, 101, 162, 11, 225, 13, 60, 217, + 189, 45, 41, 128, 46, 18, 40, 228, 43, 159, 202, 90, 114, 78, 193, 9, + 237, 172, 59, 89, 50, 218, 47, 142, 139, 118, 146, 201, 8, 158, 116, 71, + 133, 105, 177, 199, 24, 202, 219, 64, 136, 101, 162, 11, 225, 13, 60, 217, 13, 125, 9, 38, 224, 90, 78, 166, 145, 101, 167, 132, 24, 58, 73, 19, - 2, 185, 83, 148, 110, 133, 191, 76, 71, 18, 168, 103, 0, 123, 195, 39, + 2, 185, 83, 148, 110, 133, 191, 76, 71, 18, 168, 103, 0, 123, 195, 39, 41, 243, 215, 62, 38, 156, 101, 42, 144, 43, 125, 154, 46, 152, 74, 242, - 251, 158, 180, 189, 228, 165, 64, 75, 220, 184, 160, 9, 23, 57, 138, 16, + 251, 158, 180, 189, 228, 165, 64, 75, 220, 184, 160, 9, 23, 57, 138, 16, 88, 240, 5, 234, 106, 188, 171, 120, 55, 203, 43, 72, 33, 67, 129, 26, - 242, 128, 89, 144, 226, 129, 58, 143, 110, 185, 216, 158, 238, 175, 34, 121, + 242, 128, 89, 144, 226, 129, 58, 143, 110, 185, 216, 158, 238, 175, 34, 121, 59, 49, 76, 178, 81, 88, 181, 23, 219, 66, 1, 228, 34, 143, 250, 41, 77, 7, 245, 65, 3, 203, 53, 144, 140, 194, 71, 27, 10, 175, 218, 149, - 242, 213, 150, 9, 199, 22, 202, 155, 5, 44, 23, 111, 102, 5, 150, 32, + 242, 213, 150, 9, 199, 22, 202, 155, 5, 44, 23, 111, 102, 5, 150, 32, 62, 31, 220, 1, 129, 151, 109, 27, 215, 54, 235, 104, 157, 123, 8, 89, 94, 161, 197, 0, 163, 75, 124, 41, 240, 192, 109, 9, 202, 124, 25, 82, 95, 243, 170, 63, 91, 248, 4, 63, 47, 208, 243, 61, 85, 62, 107, 32, 87, 19, 208, 87, 120, 234, 108, 244, 44, 158, 238, 91, 185, 219, 105, 13, - 254, 85, 208, 93, 148, 144, 160, 98, 237, 72, 27, 59, 119, 22, 99, 52, - 193, 190, 57, 171, 46, 247, 180, 126, 30, 16, 200, 88, 35, 212, 215, 253, - 218, 25, 96, 40, 44, 53, 29, 129, 153, 154, 197, 238, 84, 201, 244, 106, - 184, 178, 127, 54, 198, 60, 160, 98, 4, 229, 110, 220, 225, 26, 254, 238, - 123, 69, 248, 222, 43, 122, 207, 63, 166, 246, 171, 129, 231, 7, 89, 132, - 245, 76, 55, 174, 184, 93, 139, 221, 250, 11, 86, 239, 248, 14, 98, 226, + 254, 85, 208, 93, 148, 144, 160, 98, 237, 72, 27, 59, 119, 22, 99, 52, + 193, 190, 57, 171, 46, 247, 180, 126, 30, 16, 200, 88, 35, 212, 215, 253, + 218, 25, 96, 40, 44, 53, 29, 129, 153, 154, 197, 238, 84, 201, 244, 106, + 184, 178, 127, 54, 198, 60, 160, 98, 4, 229, 110, 220, 225, 26, 254, 238, + 123, 69, 248, 222, 43, 122, 207, 63, 166, 246, 171, 129, 231, 7, 89, 132, + 245, 76, 55, 174, 184, 93, 139, 221, 250, 11, 86, 239, 248, 14, 98, 226, 66, 146, 45, 59, 106, 78, 6, 253, 6, 128, 53, 174, 7, 36, 100, 130, 22, 47, 157, 147, 27, 31, 15, 97, 122, 46, 137, 84, 126, 104, 48, 217, - 236, 131, 51, 253, 147, 23, 35, 133, 43, 183, 124, 197, 150, 85, 170, 39, + 236, 131, 51, 253, 147, 23, 35, 133, 43, 183, 124, 197, 150, 85, 170, 39, 96, 227, 44, 130, 51, 83, 224, 22, 177, 39, 65, 125, 98, 28, 162, 56, 25, 112, 81, 50, 28, 118, 184, 45, 236, 226, 87, 117, 111, 219, 157, 34, - 224, 77, 68, 59, 91, 80, 177, 178, 188, 203, 247, 133, 130, 15, 61, 125, - 252, 18, 201, 87, 157, 158, 47, 5, 151, 104, 231, 127, 161, 154, 172, 224, + 224, 77, 68, 59, 91, 80, 177, 178, 188, 203, 247, 133, 130, 15, 61, 125, + 252, 18, 201, 87, 157, 158, 47, 5, 151, 104, 231, 127, 161, 154, 172, 224, 74, 95, 195, 121, 175, 200, 18, 26, 240, 194, 222, 85, 189, 238, 106, 136, - 195, 28, 170, 10, 115, 25, 236, 203, 127, 254, 103, 79, 175, 57, 159, 102, - 193, 106, 136, 130, 195, 16, 19, 14, 240, 130, 74, 217, 154, 5, 217, 88, + 195, 28, 170, 10, 115, 25, 236, 203, 127, 254, 103, 79, 175, 57, 159, 102, + 193, 106, 136, 130, 195, 16, 19, 14, 240, 130, 74, 217, 154, 5, 217, 88, 21, 113, 205, 138, 241, 209, 39, 255, 182, 100, 41, 243, 199, 191, 7, 123, - 185, 7, 186, 28, 32, 71, 236, 16, 220, 222, 5, 122, 74, 55, 95, 19, - 230, 127, 201, 130, 180, 143, 142, 149, 229, 43, 81, 95, 32, 138, 165, 42, - 136, 231, 106, 34, 90, 135, 60, 60, 105, 191, 50, 195, 62, 230, 189, 100, + 185, 7, 186, 28, 32, 71, 236, 16, 220, 222, 5, 122, 74, 55, 95, 19, + 230, 127, 201, 130, 180, 143, 142, 149, 229, 43, 81, 95, 32, 138, 165, 42, + 136, 231, 106, 34, 90, 135, 60, 60, 105, 191, 50, 195, 62, 230, 189, 100, 41, 110, 61, 204, 139, 237, 185, 208, 136, 61, 249, 12, 20, 230, 48, 141, 65, 17, 204, 126, 215, 73, 77, 129, 49, 230, 39, 247, 222, 109, 50, 151, - 255, 246, 141, 254, 233, 117, 156, 172, 113, 74, 72, 133, 218, 227, 4, 192, + 255, 246, 141, 254, 233, 117, 156, 172, 113, 74, 72, 133, 218, 227, 4, 192, 27, 185, 21, 99, 61, 34, 52, 112, 74, 18, 149, 38, 195, 43, 154, 8, 16, 189, 142, 139, 167, 137, 2, 155, 165, 1, 255, 158, 107, 131, 141, 112, 87, 102, 97, 12, 228, 30, 143, 60, 14, 238, 183, 145, 88, 116, 187, 64, - 138, 136, 138, 24, 16, 241, 126, 37, 103, 99, 203, 164, 198, 129, 140, 189, + 138, 136, 138, 24, 16, 241, 126, 37, 103, 99, 203, 164, 198, 129, 140, 189, 18, 178, 241, 154, 7, 81, 8, 75, 196, 131, 121, 19, 52, 90, 125, 71, - 179, 8, 102, 149, 117, 88, 2, 58, 115, 41, 254, 118, 205, 28, 244, 153, + 179, 8, 102, 149, 117, 88, 2, 58, 115, 41, 254, 118, 205, 28, 244, 153, 79, 179, 136, 194, 59, 55, 233, 48, 87, 218, 151, 218, 172, 109, 72, 156, - 112, 175, 129, 111, 124, 151, 112, 69, 175, 237, 175, 208, 35, 15, 70, 189, - 245, 118, 229, 51, 121, 237, 106, 57, 190, 157, 42, 37, 107, 108, 240, 142, - 180, 123, 58, 243, 99, 76, 153, 94, 235, 148, 3, 146, 198, 250, 3, 176, + 112, 175, 129, 111, 124, 151, 112, 69, 175, 237, 175, 208, 35, 15, 70, 189, + 245, 118, 229, 51, 121, 237, 106, 57, 190, 157, 42, 37, 107, 108, 240, 142, + 180, 123, 58, 243, 99, 76, 153, 94, 235, 148, 3, 146, 198, 250, 3, 176, 73, 105, 64, 3, 129, 155, 69, 66, 114, 55, 53, 31, 200, 171, 9, 127, - 227, 81, 238, 0, 29, 54, 79, 184, 213, 44, 21, 21, 106, 118, 193, 193, - 132, 216, 89, 39, 107, 40, 29, 198, 229, 184, 123, 32, 225, 148, 78, 40, - 236, 108, 100, 112, 139, 33, 176, 201, 41, 56, 180, 87, 100, 161, 247, 181, + 227, 81, 238, 0, 29, 54, 79, 184, 213, 44, 21, 21, 106, 118, 193, 193, + 132, 216, 89, 39, 107, 40, 29, 198, 229, 184, 123, 32, 225, 148, 78, 40, + 236, 108, 100, 112, 139, 33, 176, 201, 41, 56, 180, 87, 100, 161, 247, 181, 48, 215, 32, 88, 3, 2, 69, 189, 162, 185, 155, 129, 131, 151, 170, 201, - 203, 192, 141, 27, 38, 21, 174, 100, 48, 138, 216, 113, 123, 137, 161, 92, - 153, 129, 184, 21, 205, 18, 190, 184, 189, 57, 130, 168, 67, 161, 16, 207, - 223, 35, 254, 40, 169, 65, 104, 178, 164, 88, 198, 40, 58, 221, 211, 96, + 203, 192, 141, 27, 38, 21, 174, 100, 48, 138, 216, 113, 123, 137, 161, 92, + 153, 129, 184, 21, 205, 18, 190, 184, 189, 57, 130, 168, 67, 161, 16, 207, + 223, 35, 254, 40, 169, 65, 104, 178, 164, 88, 198, 40, 58, 221, 211, 96, 91, 98, 147, 157, 193, 121, 211, 28, 185, 217, 84, 58, 236, 70, 181, 35, 58, 27, 111, 52, 213, 103, 93, 154, 18, 60, 201, 180, 29, 28, 85, 126, - 170, 190, 231, 64, 27, 191, 83, 158, 125, 124, 43, 172, 198, 25, 151, 108, - 116, 7, 164, 114, 92, 215, 197, 222, 31, 231, 41, 112, 42, 172, 207, 164, + 170, 190, 231, 64, 27, 191, 83, 158, 125, 124, 43, 172, 198, 25, 151, 108, + 116, 7, 164, 114, 92, 215, 197, 222, 31, 231, 41, 112, 42, 172, 207, 164, 87, 123, 138, 156, 78, 44, 131, 127, 155, 114, 138, 219, 52, 223, 150, 230, 94, 165, 103, 45, 139, 238, 161, 208, 117, 178, 225, 67, 90, 90, 110, 176, 20, 110, 4, 189, 194, 138, 12, 168, 150, 181, 139, 54, 241, 243, 87, 19, - 136, 251, 68, 1, 239, 85, 161, 139, 67, 117, 239, 162, 214, 96, 205, 66, + 136, 251, 68, 1, 239, 85, 161, 139, 67, 117, 239, 162, 214, 96, 205, 66, 79, 13, 47, 16, 72, 171, 33, 246, 93, 197, 65, 115, 108, 87, 83, 116, 49, 66, 34, 18, 101, 65, 24, 178, 147, 34, 61, 242, 51, 246, 191, 249, - 164, 200, 210, 150, 146, 46, 157, 137, 147, 161, 25, 101, 217, 142, 125, 241, + 164, 200, 210, 150, 146, 46, 157, 137, 147, 161, 25, 101, 217, 142, 125, 241, 73, 115, 83, 86, 208, 167, 233, 77, 109, 89, 197, 219, 108, 206, 54, 99, - 113, 101, 77, 41, 251, 24, 203, 179, 28, 109, 62, 248, 113, 197, 82, 35, + 113, 101, 77, 41, 251, 24, 203, 179, 28, 109, 62, 248, 113, 197, 82, 35, 89, 132, 11, 184, 194, 237, 142, 71, 81, 173, 36, 220, 103, 66, 254, 78, - 252, 105, 211, 89, 149, 132, 218, 43, 45, 77, 64, 137, 248, 238, 145, 172, + 252, 105, 211, 89, 149, 132, 218, 43, 45, 77, 64, 137, 248, 238, 145, 172, 64, 78, 123, 225, 161, 166, 202, 94, 210, 227, 36, 254, 153, 230, 23, 21, 82, 125, 167, 115, 10, 25, 141, 144, 226, 25, 151, 22, 157, 162, 2, 250, 16, 161, 48, 111, 121, 9, 191, 229, 41, 136, 83, 163, 165, 10, 195, 34, 56, 145, 166, 99, 184, 180, 180, 159, 95, 110, 17, 46, 227, 245, 97, 207, 27, 113, 121, 55, 196, 29, 248, 171, 108, 250, 236, 1, 31, 108, 15, 34, - 233, 32, 250, 127, 67, 159, 151, 145, 5, 171, 219, 102, 159, 137, 231, 130, - 229, 177, 209, 253, 150, 217, 76, 62, 111, 42, 25, 152, 169, 83, 245, 164, - 127, 61, 128, 35, 234, 8, 69, 152, 103, 107, 18, 98, 101, 214, 205, 136, + 233, 32, 250, 127, 67, 159, 151, 145, 5, 171, 219, 102, 159, 137, 231, 130, + 229, 177, 209, 253, 150, 217, 76, 62, 111, 42, 25, 152, 169, 83, 245, 164, + 127, 61, 128, 35, 234, 8, 69, 152, 103, 107, 18, 98, 101, 214, 205, 136, 68, 165, 54, 48, 189, 59, 29, 254, 128, 255, 249, 46, 23, 246, 29, 131, - 185, 27, 160, 235, 16, 52, 232, 247, 100, 230, 137, 91, 111, 48, 202, 31, - 126, 167, 162, 45, 159, 66, 215, 176, 32, 5, 255, 82, 108, 31, 184, 89, - 6, 73, 8, 209, 86, 202, 122, 111, 132, 39, 140, 160, 74, 148, 254, 21, + 185, 27, 160, 235, 16, 52, 232, 247, 100, 230, 137, 91, 111, 48, 202, 31, + 126, 167, 162, 45, 159, 66, 215, 176, 32, 5, 255, 82, 108, 31, 184, 89, + 6, 73, 8, 209, 86, 202, 122, 111, 132, 39, 140, 160, 74, 148, 254, 21, 33, 80, 180, 165, 241, 182, 74, 205, 243, 194, 17, 216, 113, 8, 239, 190, 34, 158, 31, 58, 223, 249, 51, 74, 174, 191, 157, 185, 12, 98, 190, 135, 91, 198, 25, 221, 76, 118, 88, 240, 184, 188, 70, 92, 36, 208, 124, 43, - 228, 200, 86, 193, 178, 251, 115, 233, 240, 11, 134, 91, 230, 141, 195, 161, - 255, 12, 103, 85, 187, 84, 129, 202, 48, 85, 155, 242, 226, 185, 109, 126, - 2, 8, 174, 221, 203, 67, 182, 52, 114, 243, 219, 32, 89, 183, 125, 18, - 209, 200, 99, 116, 123, 185, 17, 250, 250, 223, 129, 221, 147, 249, 142, 238, + 228, 200, 86, 193, 178, 251, 115, 233, 240, 11, 134, 91, 230, 141, 195, 161, + 255, 12, 103, 85, 187, 84, 129, 202, 48, 85, 155, 242, 226, 185, 109, 126, + 2, 8, 174, 221, 203, 67, 182, 52, 114, 243, 219, 32, 89, 183, 125, 18, + 209, 200, 99, 116, 123, 185, 17, 250, 250, 223, 129, 221, 147, 249, 142, 238, 25, 230, 85, 85, 141, 248, 144, 13, 241, 3, 10, 253, 74, 96, 82, 115, - 210, 221, 17, 79, 213, 119, 27, 192, 55, 41, 161, 125, 167, 87, 45, 10, - 246, 22, 76, 245, 83, 4, 160, 242, 62, 221, 89, 206, 80, 235, 33, 34, + 210, 221, 17, 79, 213, 119, 27, 192, 55, 41, 161, 125, 167, 87, 45, 10, + 246, 22, 76, 245, 83, 4, 160, 242, 62, 221, 89, 206, 80, 235, 33, 34, 81, 125, 28, 117, 233, 167, 89, 6, 132, 138, 130, 88, 227, 245, 44, 138, - 180, 42, 215, 4, 177, 9, 167, 135, 173, 234, 185, 119, 100, 108, 4, 237, - 145, 52, 227, 61, 231, 130, 77, 97, 204, 175, 136, 225, 27, 29, 36, 142, - 151, 129, 170, 105, 233, 88, 57, 122, 219, 60, 16, 70, 253, 218, 123, 188, + 180, 42, 215, 4, 177, 9, 167, 135, 173, 234, 185, 119, 100, 108, 4, 237, + 145, 52, 227, 61, 231, 130, 77, 97, 204, 175, 136, 225, 27, 29, 36, 142, + 151, 129, 170, 105, 233, 88, 57, 122, 219, 60, 16, 70, 253, 218, 123, 188, 49, 210, 121, 115, 150, 249, 213, 246, 76, 2, 197, 196, 24, 169, 143, 175, - 230, 138, 32, 81, 191, 13, 166, 211, 252, 110, 84, 221, 244, 13, 45, 116, - 242, 123, 18, 153, 163, 187, 46, 33, 28, 160, 219, 179, 85, 166, 2, 125, + 230, 138, 32, 81, 191, 13, 166, 211, 252, 110, 84, 221, 244, 13, 45, 116, + 242, 123, 18, 153, 163, 187, 46, 33, 28, 160, 219, 179, 85, 166, 2, 125, 92, 99, 147, 61, 4, 200, 245, 135, 172, 187, 4, 101, 102, 85, 79, 168, 53, 222, 129, 150, 252, 253, 252, 45, 39, 64, 33, 104, 69, 239, 180, 71, - 234, 177, 245, 185, 59, 238, 88, 65, 58, 156, 84, 238, 150, 46, 236, 65, - 229, 33, 221, 168, 102, 249, 163, 155, 36, 189, 54, 211, 154, 247, 69, 45, + 234, 177, 245, 185, 59, 238, 88, 65, 58, 156, 84, 238, 150, 46, 236, 65, + 229, 33, 221, 168, 102, 249, 163, 155, 36, 189, 54, 211, 154, 247, 69, 45, 47, 140, 119, 63, 143, 129, 163, 38, 120, 88, 216, 66, 117, 118, 176, 93, - 153, 42, 129, 198, 45, 203, 26, 150, 43, 17, 53, 104, 196, 82, 234, 59, - 129, 81, 14, 104, 229, 8, 204, 187, 8, 168, 112, 18, 211, 154, 195, 181, + 153, 42, 129, 198, 45, 203, 26, 150, 43, 17, 53, 104, 196, 82, 234, 59, + 129, 81, 14, 104, 229, 8, 204, 187, 8, 168, 112, 18, 211, 154, 195, 181, 87, 241, 234, 148, 68, 229, 231, 23, 134, 14, 97, 119, 22, 48, 123, 17, - 115, 105, 180, 124, 135, 51, 177, 104, 187, 23, 210, 76, 161, 8, 36, 57, - 218, 252, 142, 236, 154, 178, 119, 129, 189, 255, 208, 56, 25, 70, 68, 50, + 115, 105, 180, 124, 135, 51, 177, 104, 187, 23, 210, 76, 161, 8, 36, 57, + 218, 252, 142, 236, 154, 178, 119, 129, 189, 255, 208, 56, 25, 70, 68, 50, 57, 172, 77, 154, 163, 80, 33, 180, 118, 57, 105, 97, 5, 50, 158, 185, - 226, 119, 237, 163, 47, 79, 233, 114, 160, 246, 93, 238, 197, 217, 240, 55, - 121, 37, 138, 104, 245, 181, 30, 133, 129, 94, 97, 31, 188, 121, 119, 74, - 227, 167, 196, 194, 108, 185, 63, 242, 0, 224, 8, 162, 49, 173, 57, 250, + 226, 119, 237, 163, 47, 79, 233, 114, 160, 246, 93, 238, 197, 217, 240, 55, + 121, 37, 138, 104, 245, 181, 30, 133, 129, 94, 97, 31, 188, 121, 119, 74, + 227, 167, 196, 194, 108, 185, 63, 242, 0, 224, 8, 162, 49, 173, 57, 250, 12, 113, 238, 241, 0, 180, 180, 198, 57, 180, 248, 243, 214, 122, 103, 81, - 205, 243, 232, 213, 39, 122, 142, 107, 4, 63, 123, 147, 22, 78, 174, 200, + 205, 243, 232, 213, 39, 122, 142, 107, 4, 63, 123, 147, 22, 78, 174, 200, 33, 27, 16, 76, 139, 230, 32, 101, 246, 228, 246, 89, 15, 30, 11, 87, - 174, 70, 195, 104, 14, 26, 209, 149, 19, 254, 121, 62, 186, 224, 56, 247, + 174, 70, 195, 104, 14, 26, 209, 149, 19, 254, 121, 62, 186, 224, 56, 247, 10, 237, 102, 83, 215, 211, 22, 123, 161, 52, 251, 122, 142, 228, 191, 93, - 151, 174, 176, 166, 64, 184, 254, 113, 140, 214, 109, 159, 126, 201, 95, 245, - 167, 180, 165, 106, 61, 83, 143, 239, 68, 254, 0, 201, 237, 162, 231, 108, - 152, 131, 248, 39, 149, 131, 80, 224, 41, 14, 157, 96, 16, 251, 139, 15, - 153, 45, 29, 84, 116, 154, 221, 234, 127, 39, 10, 244, 3, 92, 154, 93, - 125, 209, 252, 144, 73, 139, 47, 93, 98, 78, 7, 61, 173, 117, 46, 155, + 151, 174, 176, 166, 64, 184, 254, 113, 140, 214, 109, 159, 126, 201, 95, 245, + 167, 180, 165, 106, 61, 83, 143, 239, 68, 254, 0, 201, 237, 162, 231, 108, + 152, 131, 248, 39, 149, 131, 80, 224, 41, 14, 157, 96, 16, 251, 139, 15, + 153, 45, 29, 84, 116, 154, 221, 234, 127, 39, 10, 244, 3, 92, 154, 93, + 125, 209, 252, 144, 73, 139, 47, 93, 98, 78, 7, 61, 173, 117, 46, 155, 73, 76, 127, 202, 5, 223, 113, 215, 86, 54, 82, 0, 105, 16, 52, 226, - 140, 232, 53, 23, 76, 117, 212, 139, 183, 112, 95, 162, 174, 153, 104, 4, - 241, 133, 159, 188, 4, 147, 92, 125, 133, 104, 26, 241, 130, 13, 239, 96, - 235, 36, 195, 74, 193, 126, 54, 27, 55, 190, 97, 44, 26, 106, 31, 76, - 244, 174, 179, 1, 97, 168, 114, 14, 65, 60, 199, 182, 133, 130, 65, 175, + 140, 232, 53, 23, 76, 117, 212, 139, 183, 112, 95, 162, 174, 153, 104, 4, + 241, 133, 159, 188, 4, 147, 92, 125, 133, 104, 26, 241, 130, 13, 239, 96, + 235, 36, 195, 74, 193, 126, 54, 27, 55, 190, 97, 44, 26, 106, 31, 76, + 244, 174, 179, 1, 97, 168, 114, 14, 65, 60, 199, 182, 133, 130, 65, 175, 95, 224, 125, 74, 157, 34, 99, 26, 135, 160, 188, 244, 114, 175, 211, 194, 74, 97, 182, 244, 93, 3, 219, 223, 154, 204, 10, 132, 233, 165, 23, 204, - 187, 163, 179, 23, 72, 137, 22, 40, 123, 77, 216, 95, 44, 20, 55, 213, - 165, 125, 17, 237, 77, 140, 2, 146, 193, 104, 9, 83, 40, 126, 177, 137, + 187, 163, 179, 23, 72, 137, 22, 40, 123, 77, 216, 95, 44, 20, 55, 213, + 165, 125, 17, 237, 77, 140, 2, 146, 193, 104, 9, 83, 40, 126, 177, 137, 53, 89, 59, 23, 49, 80, 240, 168, 70, 97, 250, 36, 161, 17, 228, 161, - 136, 213, 43, 118, 106, 198, 251, 68, 223, 34, 79, 123, 118, 91, 222, 236, + 136, 213, 43, 118, 106, 198, 251, 68, 223, 34, 79, 123, 118, 91, 222, 236, 73, 236, 175, 255, 248, 249, 96, 53, 245, 248, 238, 12, 106, 127, 183, 1, 31, 193, 14, 126, 7, 19, 252, 102, 191, 74, 208, 115, 140, 76, 133, 179, 82, 5, 83, 122, 154, 82, 37, 19, 171, 190, 177, 177, 233, 248, 175, 214, 93, 17, 121, 167, 249, 165, 149, 191, 145, 188, 218, 99, 154, 55, 109, 202, 12, 17, 56, 107, 124, 137, 156, 233, 85, 18, 237, 207, 9, 72, 10, 218, 98, 58, 70, 254, 207, 179, 61, 201, 250, 163, 135, 215, 130, 182, 47, 93, - 123, 14, 251, 252, 34, 240, 172, 151, 111, 127, 19, 6, 165, 96, 254, 15, + 123, 14, 251, 252, 34, 240, 172, 151, 111, 127, 19, 6, 165, 96, 254, 15, 32, 153, 247, 91, 200, 78, 169, 160, 28, 70, 146, 251, 174, 49, 54, 98, 93, 161, 19, 105, 195, 62, 196, 38, 84, 53, 122, 177, 158, 179, 113, 93, 91, 102, 90, 119, 52, 120, 247, 208, 228, 233, 97, 240, 187, 205, 14, 194, 35, 134, 229, 241, 16, 152, 130, 206, 63, 93, 110, 21, 52, 170, 67, 99, - 214, 121, 230, 201, 133, 173, 143, 225, 81, 184, 139, 105, 226, 58, 237, 106, + 214, 121, 230, 201, 133, 173, 143, 225, 81, 184, 139, 105, 226, 58, 237, 106, 16, 91, 163, 15, 4, 63, 94, 186, 80, 219, 85, 209, 183, 129, 122, 39, - 8, 140, 180, 203, 167, 223, 148, 74, 147, 29, 237, 108, 105, 143, 229, 254, - 104, 243, 111, 210, 11, 185, 158, 151, 90, 47, 43, 233, 91, 18, 119, 144, - 184, 63, 64, 3, 244, 225, 30, 134, 198, 210, 41, 103, 2, 31, 221, 74, + 8, 140, 180, 203, 167, 223, 148, 74, 147, 29, 237, 108, 105, 143, 229, 254, + 104, 243, 111, 210, 11, 185, 158, 151, 90, 47, 43, 233, 91, 18, 119, 144, + 184, 63, 64, 3, 244, 225, 30, 134, 198, 210, 41, 103, 2, 31, 221, 74, 26, 54, 18, 23, 242, 104, 39, 31, 167, 183, 209, 105, 192, 88, 219, 25, - 134, 228, 8, 222, 149, 25, 195, 141, 61, 33, 114, 213, 93, 6, 58, 12, - 191, 113, 216, 153, 39, 235, 173, 146, 34, 139, 210, 13, 59, 240, 88, 10, + 134, 228, 8, 222, 149, 25, 195, 141, 61, 33, 114, 213, 93, 6, 58, 12, + 191, 113, 216, 153, 39, 235, 173, 146, 34, 139, 210, 13, 59, 240, 88, 10, 71, 72, 27, 225, 32, 70, 92, 182, 120, 151, 82, 246, 248, 93, 119, 13, - 199, 161, 48, 202, 84, 88, 226, 198, 249, 152, 165, 34, 183, 109, 9, 196, - 232, 168, 236, 241, 85, 100, 181, 81, 235, 85, 247, 85, 173, 57, 141, 145, - 116, 254, 146, 249, 161, 133, 245, 17, 117, 141, 208, 49, 245, 121, 181, 158, - 144, 197, 200, 63, 202, 119, 158, 107, 112, 56, 178, 227, 29, 87, 48, 151, - 228, 55, 194, 130, 52, 12, 35, 245, 171, 149, 90, 206, 151, 205, 184, 221, + 199, 161, 48, 202, 84, 88, 226, 198, 249, 152, 165, 34, 183, 109, 9, 196, + 232, 168, 236, 241, 85, 100, 181, 81, 235, 85, 247, 85, 173, 57, 141, 145, + 116, 254, 146, 249, 161, 133, 245, 17, 117, 141, 208, 49, 245, 121, 181, 158, + 144, 197, 200, 63, 202, 119, 158, 107, 112, 56, 178, 227, 29, 87, 48, 151, + 228, 55, 194, 130, 52, 12, 35, 245, 171, 149, 90, 206, 151, 205, 184, 221, 45, 57, 126, 64, 203, 244, 167, 172, 134, 141, 5, 145, 101, 29, 33, 133, 90, 17, 64, 127, 152, 209, 78, 10, 131, 151, 157, 204, 231, 255, 164, 122, 16, 78, 220, 245, 161, 229, 90, 203, 12, 205, 95, 8, 47, 51, 92, 23, - 118, 95, 211, 124, 116, 147, 74, 79, 10, 192, 217, 74, 80, 127, 17, 105, + 118, 95, 211, 124, 116, 147, 74, 79, 10, 192, 217, 74, 80, 127, 17, 105, 56, 248, 144, 72, 197, 159, 230, 19, 147, 31, 50, 239, 236, 92, 237, 131, - 159, 88, 99, 171, 76, 209, 41, 181, 194, 28, 3, 242, 137, 227, 20, 198, - 120, 6, 12, 97, 45, 210, 143, 177, 60, 83, 61, 135, 132, 187, 54, 61, + 159, 88, 99, 171, 76, 209, 41, 181, 194, 28, 3, 242, 137, 227, 20, 198, + 120, 6, 12, 97, 45, 210, 143, 177, 60, 83, 61, 135, 132, 187, 54, 61, 82, 149, 193, 23, 45, 6, 95, 28, 167, 0, 67, 27, 17, 93, 241, 43, - 221, 109, 102, 179, 204, 80, 198, 60, 229, 38, 47, 100, 235, 50, 166, 193, + 221, 109, 102, 179, 204, 80, 198, 60, 229, 38, 47, 100, 235, 50, 166, 193, 79, 255, 71, 207, 116, 216, 201, 255, 134, 194, 201, 34, 169, 250, 28, 217, - 198, 176, 10, 203, 193, 197, 125, 80, 116, 149, 108, 224, 10, 195, 68, 228, - 218, 85, 146, 119, 67, 73, 118, 186, 171, 162, 86, 198, 176, 73, 41, 162, - 237, 196, 130, 32, 231, 70, 197, 139, 140, 182, 151, 221, 55, 95, 183, 58, + 198, 176, 10, 203, 193, 197, 125, 80, 116, 149, 108, 224, 10, 195, 68, 228, + 218, 85, 146, 119, 67, 73, 118, 186, 171, 162, 86, 198, 176, 73, 41, 162, + 237, 196, 130, 32, 231, 70, 197, 139, 140, 182, 151, 221, 55, 95, 183, 58, 43, 141, 160, 148, 193, 197, 162, 189, 62, 36, 226, 255, 214, 75, 166, 163, 78, 30, 253, 52, 8, 190, 55, 241, 60, 187, 226, 34, 177, 102, 155, 56, - 165, 51, 183, 2, 181, 247, 125, 53, 36, 206, 73, 32, 19, 20, 204, 228, - 105, 254, 34, 201, 161, 175, 232, 223, 216, 103, 247, 13, 68, 49, 206, 172, - 122, 11, 17, 3, 55, 101, 94, 39, 18, 183, 214, 16, 149, 252, 137, 39, - 205, 84, 114, 80, 101, 246, 222, 173, 145, 229, 199, 73, 91, 219, 123, 235, + 165, 51, 183, 2, 181, 247, 125, 53, 36, 206, 73, 32, 19, 20, 204, 228, + 105, 254, 34, 201, 161, 175, 232, 223, 216, 103, 247, 13, 68, 49, 206, 172, + 122, 11, 17, 3, 55, 101, 94, 39, 18, 183, 214, 16, 149, 252, 137, 39, + 205, 84, 114, 80, 101, 246, 222, 173, 145, 229, 199, 73, 91, 219, 123, 235, 45, 190, 39, 241, 146, 209, 124, 178, 151, 30, 19, 26, 112, 150, 192, 183, - 237, 124, 253, 165, 28, 130, 132, 161, 157, 140, 159, 163, 87, 181, 211, 166, - 233, 0, 180, 87, 125, 229, 173, 128, 90, 23, 38, 235, 143, 31, 117, 66, - 203, 76, 150, 249, 19, 23, 45, 184, 56, 249, 220, 114, 205, 1, 215, 169, - 205, 173, 58, 188, 128, 116, 122, 184, 48, 114, 95, 167, 3, 191, 136, 238, - 124, 245, 166, 82, 191, 16, 212, 149, 183, 166, 14, 212, 255, 67, 106, 50, - 159, 172, 211, 101, 207, 198, 242, 179, 40, 1, 73, 20, 64, 185, 29, 21, - 216, 246, 154, 104, 156, 214, 231, 192, 137, 220, 150, 215, 4, 80, 110, 164, - 185, 68, 114, 110, 234, 45, 143, 171, 196, 148, 151, 237, 16, 251, 68, 221, - 100, 18, 212, 110, 59, 147, 113, 217, 152, 28, 83, 198, 211, 231, 35, 39, - 198, 19, 163, 67, 40, 24, 124, 52, 138, 161, 254, 233, 90, 24, 214, 222, - 121, 189, 95, 180, 77, 147, 21, 187, 111, 9, 184, 75, 209, 250, 81, 110, + 237, 124, 253, 165, 28, 130, 132, 161, 157, 140, 159, 163, 87, 181, 211, 166, + 233, 0, 180, 87, 125, 229, 173, 128, 90, 23, 38, 235, 143, 31, 117, 66, + 203, 76, 150, 249, 19, 23, 45, 184, 56, 249, 220, 114, 205, 1, 215, 169, + 205, 173, 58, 188, 128, 116, 122, 184, 48, 114, 95, 167, 3, 191, 136, 238, + 124, 245, 166, 82, 191, 16, 212, 149, 183, 166, 14, 212, 255, 67, 106, 50, + 159, 172, 211, 101, 207, 198, 242, 179, 40, 1, 73, 20, 64, 185, 29, 21, + 216, 246, 154, 104, 156, 214, 231, 192, 137, 220, 150, 215, 4, 80, 110, 164, + 185, 68, 114, 110, 234, 45, 143, 171, 196, 148, 151, 237, 16, 251, 68, 221, + 100, 18, 212, 110, 59, 147, 113, 217, 152, 28, 83, 198, 211, 231, 35, 39, + 198, 19, 163, 67, 40, 24, 124, 52, 138, 161, 254, 233, 90, 24, 214, 222, + 121, 189, 95, 180, 77, 147, 21, 187, 111, 9, 184, 75, 209, 250, 81, 110, 34, 97, 198, 132, 182, 229, 192, 208, 67, 98, 124, 108, 141, 89, 37, 124, 11, 5, 128, 76, 13, 220, 167, 201, 182, 151, 45, 235, 37, 142, 35, 192, 28, 209, 254, 40, 15, 22, 183, 181, 138, 144, 72, 21, 48, 9, 133, 127, 74, 187, 19, 170, 88, 209, 119, 194, 230, 243, 237, 156, 184, 156, 46, 118, 58, 7, 139, 163, 157, 167, 65, 249, 102, 228, 201, 27, 255, 189, 54, 151, - 168, 108, 129, 113, 106, 245, 244, 158, 176, 247, 193, 161, 94, 248, 190, 38, - 208, 177, 246, 108, 158, 199, 56, 37, 141, 101, 102, 44, 109, 144, 23, 214, - 235, 251, 210, 184, 103, 145, 248, 118, 162, 139, 84, 61, 146, 29, 70, 170, + 168, 108, 129, 113, 106, 245, 244, 158, 176, 247, 193, 161, 94, 248, 190, 38, + 208, 177, 246, 108, 158, 199, 56, 37, 141, 101, 102, 44, 109, 144, 23, 214, + 235, 251, 210, 184, 103, 145, 248, 118, 162, 139, 84, 61, 146, 29, 70, 170, 80, 30, 145, 156, 202, 185, 222, 87, 247, 137, 153, 98, 166, 61, 173, 200, - 164, 40, 2, 137, 226, 66, 162, 24, 172, 46, 203, 80, 176, 156, 93, 26, + 164, 40, 2, 137, 226, 66, 162, 24, 172, 46, 203, 80, 176, 156, 93, 26, 48, 69, 130, 192, 129, 84, 70, 15, 25, 224, 175, 31, 161, 110, 61, 220, - 214, 220, 152, 22, 41, 51, 57, 114, 182, 139, 129, 159, 194, 169, 133, 246, + 214, 220, 152, 22, 41, 51, 57, 114, 182, 139, 129, 159, 194, 169, 133, 246, 37, 23, 79, 90, 88, 231, 6, 252, 101, 241, 250, 168, 71, 149, 252, 196, - 126, 2, 29, 177, 70, 218, 120, 203, 72, 243, 46, 45, 149, 57, 108, 37, - 198, 38, 177, 210, 32, 252, 227, 160, 77, 174, 211, 207, 212, 82, 139, 189, + 126, 2, 29, 177, 70, 218, 120, 203, 72, 243, 46, 45, 149, 57, 108, 37, + 198, 38, 177, 210, 32, 252, 227, 160, 77, 174, 211, 207, 212, 82, 139, 189, 79, 198, 116, 165, 185, 49, 188, 43, 116, 230, 182, 34, 224, 138, 216, 93, 93, 94, 175, 10, 217, 41, 209, 177, 36, 142, 205, 241, 34, 129, 8, 91, 78, 210, 231, 166, 188, 18, 77, 139, 201, 203, 3, 154, 131, 8, 193, 207, - 255, 98, 166, 192, 215, 206, 236, 217, 9, 19, 78, 227, 105, 146, 56, 50, + 255, 98, 166, 192, 215, 206, 236, 217, 9, 19, 78, 227, 105, 146, 56, 50, 60, 114, 20, 239, 186, 119, 113, 183, 79, 186, 126, 223, 131, 30, 217, 249, 82, 10, 188, 238, 161, 46, 174, 96, 6, 187, 251, 234, 62, 163, 213, 55, 71, 253, 25, 193, 26, 176, 111, 20, 167, 220, 240, 78, 243, 42, 104, 194, - 0, 62, 53, 119, 199, 9, 202, 20, 164, 55, 155, 204, 107, 120, 180, 6, + 0, 62, 53, 119, 199, 9, 202, 20, 164, 55, 155, 204, 107, 120, 180, 6, 20, 114, 122, 130, 143, 124, 89, 130, 66, 140, 43, 183, 203, 216, 78, 86, - 178, 16, 226, 159, 192, 205, 105, 113, 138, 165, 108, 18, 214, 100, 154, 71, - 150, 46, 70, 178, 181, 68, 68, 160, 253, 18, 19, 220, 253, 207, 87, 105, + 178, 16, 226, 159, 192, 205, 105, 113, 138, 165, 108, 18, 214, 100, 154, 71, + 150, 46, 70, 178, 181, 68, 68, 160, 253, 18, 19, 220, 253, 207, 87, 105, 32, 239, 229, 137, 155, 176, 139, 168, 248, 143, 86, 67, 224, 146, 17, 80, - 147, 87, 30, 168, 125, 169, 91, 59, 55, 169, 142, 226, 71, 181, 114, 40, - 231, 229, 155, 27, 31, 144, 166, 96, 9, 85, 90, 152, 25, 83, 113, 15, + 147, 87, 30, 168, 125, 169, 91, 59, 55, 169, 142, 226, 71, 181, 114, 40, + 231, 229, 155, 27, 31, 144, 166, 96, 9, 85, 90, 152, 25, 83, 113, 15, 65, 106, 162, 151, 74, 7, 27, 188, 221, 150, 108, 96, 102, 233, 174, 208, - 9, 170, 159, 239, 67, 230, 187, 93, 141, 102, 218, 191, 48, 22, 53, 124, + 9, 170, 159, 239, 67, 230, 187, 93, 141, 102, 218, 191, 48, 22, 53, 124, 84, 96, 110, 43, 28, 126, 26, 32, 104, 104, 65, 99, 112, 207, 167, 54, - 175, 165, 152, 105, 234, 18, 138, 148, 101, 9, 87, 32, 155, 192, 7, 100, - 101, 72, 133, 203, 170, 248, 222, 190, 243, 0, 75, 100, 38, 52, 98, 125, + 175, 165, 152, 105, 234, 18, 138, 148, 101, 9, 87, 32, 155, 192, 7, 100, + 101, 72, 133, 203, 170, 248, 222, 190, 243, 0, 75, 100, 38, 52, 98, 125, 66, 185, 104, 255, 8, 184, 116, 195, 32, 239, 213, 54, 28, 185, 96, 177, - 233, 30, 210, 25, 155, 28, 128, 53, 88, 101, 146, 68, 52, 60, 55, 183, - 171, 157, 207, 128, 53, 60, 22, 100, 53, 121, 124, 205, 163, 55, 82, 162, + 233, 30, 210, 25, 155, 28, 128, 53, 88, 101, 146, 68, 52, 60, 55, 183, + 171, 157, 207, 128, 53, 60, 22, 100, 53, 121, 124, 205, 163, 55, 82, 162, 96, 99, 71, 184, 243, 169, 137, 77, 191, 16, 55, 59, 220, 197, 20, 4, 61, 89, 4, 157, 96, 171, 145, 91, 145, 19, 36, 195, 42, 132, 152, 83, - 255, 137, 64, 37, 72, 190, 82, 29, 181, 41, 175, 144, 46, 229, 236, 217, - 105, 194, 7, 118, 19, 47, 151, 238, 222, 255, 183, 236, 181, 175, 135, 91, + 255, 137, 64, 37, 72, 190, 82, 29, 181, 41, 175, 144, 46, 229, 236, 217, + 105, 194, 7, 118, 19, 47, 151, 238, 222, 255, 183, 236, 181, 175, 135, 91, 55, 163, 4, 156, 190, 18, 153, 21, 178, 51, 102, 36, 62, 253, 228, 12, - 102, 230, 138, 183, 182, 253, 54, 170, 251, 50, 107, 223, 180, 177, 74, 169, - 231, 208, 76, 47, 146, 158, 251, 181, 9, 219, 240, 169, 72, 250, 241, 125, + 102, 230, 138, 183, 182, 253, 54, 170, 251, 50, 107, 223, 180, 177, 74, 169, + 231, 208, 76, 47, 146, 158, 251, 181, 9, 219, 240, 169, 72, 250, 241, 125, 86, 200, 125, 166, 137, 65, 115, 18, 68, 241, 124, 51, 128, 223, 113, 239, - 201, 221, 152, 21, 114, 127, 79, 101, 44, 48, 241, 21, 221, 91, 240, 214, - 166, 119, 140, 21, 143, 155, 172, 26, 207, 233, 0, 128, 118, 45, 22, 6, - 222, 75, 90, 99, 173, 214, 121, 53, 71, 183, 253, 19, 95, 71, 66, 16, + 201, 221, 152, 21, 114, 127, 79, 101, 44, 48, 241, 21, 221, 91, 240, 214, + 166, 119, 140, 21, 143, 155, 172, 26, 207, 233, 0, 128, 118, 45, 22, 6, + 222, 75, 90, 99, 173, 214, 121, 53, 71, 183, 253, 19, 95, 71, 66, 16, 41, 35, 195, 9, 93, 247, 42, 150, 49, 46, 229, 73, 220, 12, 230, 51, - 109, 147, 108, 124, 102, 83, 78, 75, 67, 141, 55, 246, 155, 195, 190, 56, - 116, 59, 185, 237, 104, 78, 66, 173, 165, 178, 32, 93, 14, 10, 46, 30, - 229, 108, 50, 52, 188, 2, 244, 142, 201, 8, 245, 53, 210, 132, 15, 184, + 109, 147, 108, 124, 102, 83, 78, 75, 67, 141, 55, 246, 155, 195, 190, 56, + 116, 59, 185, 237, 104, 78, 66, 173, 165, 178, 32, 93, 14, 10, 46, 30, + 229, 108, 50, 52, 188, 2, 244, 142, 201, 8, 245, 53, 210, 132, 15, 184, 82, 85, 156, 142, 35, 49, 39, 183, 58, 61, 96, 143, 60, 190, 41, 152, - 9, 183, 127, 90, 157, 109, 196, 76, 36, 177, 244, 173, 63, 233, 1, 16, - 110, 216, 203, 94, 245, 195, 71, 55, 161, 149, 230, 122, 159, 133, 143, 180, - 129, 6, 111, 56, 211, 30, 13, 142, 216, 122, 87, 69, 91, 233, 254, 4, - 232, 207, 157, 32, 113, 50, 227, 233, 158, 171, 38, 228, 191, 121, 56, 165, - 222, 22, 180, 217, 111, 104, 112, 134, 12, 22, 244, 44, 234, 34, 253, 217, - 212, 140, 93, 235, 36, 54, 4, 129, 32, 91, 197, 163, 24, 71, 133, 161, - 111, 114, 29, 19, 45, 100, 10, 207, 139, 158, 219, 206, 160, 248, 94, 12, - 241, 58, 118, 141, 115, 166, 177, 78, 173, 59, 85, 81, 97, 240, 154, 231, + 9, 183, 127, 90, 157, 109, 196, 76, 36, 177, 244, 173, 63, 233, 1, 16, + 110, 216, 203, 94, 245, 195, 71, 55, 161, 149, 230, 122, 159, 133, 143, 180, + 129, 6, 111, 56, 211, 30, 13, 142, 216, 122, 87, 69, 91, 233, 254, 4, + 232, 207, 157, 32, 113, 50, 227, 233, 158, 171, 38, 228, 191, 121, 56, 165, + 222, 22, 180, 217, 111, 104, 112, 134, 12, 22, 244, 44, 234, 34, 253, 217, + 212, 140, 93, 235, 36, 54, 4, 129, 32, 91, 197, 163, 24, 71, 133, 161, + 111, 114, 29, 19, 45, 100, 10, 207, 139, 158, 219, 206, 160, 248, 94, 12, + 241, 58, 118, 141, 115, 166, 177, 78, 173, 59, 85, 81, 97, 240, 154, 231, 79, 200, 199, 195, 205, 98, 245, 129, 246, 217, 97, 209, 249, 194, 28, 179, 49, 248, 14, 6, 128, 61, 178, 15, 190, 32, 251, 111, 225, 148, 0, 11, - 227, 246, 146, 46, 41, 231, 24, 80, 43, 174, 228, 166, 171, 206, 72, 142, - 253, 96, 242, 181, 31, 207, 95, 66, 88, 152, 165, 67, 7, 238, 23, 114, + 227, 246, 146, 46, 41, 231, 24, 80, 43, 174, 228, 166, 171, 206, 72, 142, + 253, 96, 242, 181, 31, 207, 95, 66, 88, 152, 165, 67, 7, 238, 23, 114, 50, 224, 212, 241, 202, 224, 247, 70, 215, 162, 8, 237, 121, 169, 254, 191, 30, 19, 72, 252, 3, 109, 5, 206, 105, 130, 69, 250, 250, 232, 135, 203, - 253, 77, 102, 203, 40, 72, 128, 223, 60, 59, 83, 103, 162, 117, 47, 200, + 253, 77, 102, 203, 40, 72, 128, 223, 60, 59, 83, 103, 162, 117, 47, 200, 65, 88, 43, 168, 168, 255, 46, 166, 86, 193, 231, 227, 92, 222, 186, 44, 20, 166, 136, 123, 193, 88, 155, 166, 185, 73, 85, 124, 253, 80, 43, 176, - 173, 191, 2, 10, 50, 101, 143, 17, 129, 56, 191, 83, 103, 183, 143, 247, - 253, 161, 1, 76, 161, 76, 127, 194, 108, 88, 138, 152, 147, 164, 65, 147, + 173, 191, 2, 10, 50, 101, 143, 17, 129, 56, 191, 83, 103, 183, 143, 247, + 253, 161, 1, 76, 161, 76, 127, 194, 108, 88, 138, 152, 147, 164, 65, 147, 61, 160, 192, 44, 56, 103, 144, 51, 153, 224, 38, 97, 173, 128, 34, 85, 89, 143, 17, 239, 200, 47, 160, 2, 151, 249, 219, 208, 116, 71, 205, 72, - 210, 178, 205, 184, 207, 19, 37, 127, 183, 21, 229, 176, 91, 196, 203, 225, + 210, 178, 205, 184, 207, 19, 37, 127, 183, 21, 229, 176, 91, 196, 203, 225, 67, 189, 94, 214, 180, 203, 140, 186, 39, 250, 66, 3, 128, 35, 206, 43, 67, 244, 207, 157, 165, 188, 201, 173, 43, 47, 210, 139, 254, 144, 218, 62, 55, 6, 187, 32, 128, 206, 56, 74, 66, 42, 159, 171, 108, 56, 220, 246, - 127, 127, 32, 221, 190, 33, 91, 93, 88, 36, 51, 115, 93, 47, 203, 133, - 155, 166, 13, 124, 118, 56, 182, 202, 55, 224, 226, 36, 233, 9, 200, 217, - 249, 22, 252, 209, 179, 66, 32, 30, 129, 48, 186, 232, 66, 248, 197, 120, - 168, 191, 124, 16, 232, 117, 44, 125, 188, 157, 71, 35, 245, 219, 17, 111, + 127, 127, 32, 221, 190, 33, 91, 93, 88, 36, 51, 115, 93, 47, 203, 133, + 155, 166, 13, 124, 118, 56, 182, 202, 55, 224, 226, 36, 233, 9, 200, 217, + 249, 22, 252, 209, 179, 66, 32, 30, 129, 48, 186, 232, 66, 248, 197, 120, + 168, 191, 124, 16, 232, 117, 44, 125, 188, 157, 71, 35, 245, 219, 17, 111, 41, 159, 96, 44, 233, 3, 105, 109, 199, 182, 42, 34, 87, 218, 48, 142, - 196, 99, 37, 89, 44, 173, 184, 160, 104, 203, 224, 230, 58, 60, 213, 132, - 9, 9, 253, 251, 72, 75, 235, 224, 20, 198, 208, 178, 42, 253, 126, 105, - 227, 171, 89, 93, 42, 222, 185, 232, 8, 248, 83, 78, 132, 37, 38, 173, + 196, 99, 37, 89, 44, 173, 184, 160, 104, 203, 224, 230, 58, 60, 213, 132, + 9, 9, 253, 251, 72, 75, 235, 224, 20, 198, 208, 178, 42, 253, 126, 105, + 227, 171, 89, 93, 42, 222, 185, 232, 8, 248, 83, 78, 132, 37, 38, 173, 67, 116, 185, 216, 47, 192, 196, 221, 172, 26, 5, 191, 41, 33, 114, 40, - 139, 22, 147, 173, 234, 41, 252, 118, 244, 73, 73, 237, 42, 6, 123, 228, - 213, 210, 202, 65, 195, 253, 112, 57, 202, 85, 247, 15, 160, 237, 138, 76, + 139, 22, 147, 173, 234, 41, 252, 118, 244, 73, 73, 237, 42, 6, 123, 228, + 213, 210, 202, 65, 195, 253, 112, 57, 202, 85, 247, 15, 160, 237, 138, 76, 70, 94, 230, 163, 112, 217, 134, 78, 213, 55, 68, 198, 29, 195, 16, 138, - 162, 19, 34, 158, 144, 131, 64, 244, 80, 85, 63, 175, 47, 63, 233, 175, - 168, 190, 39, 4, 47, 200, 9, 161, 248, 198, 182, 166, 56, 23, 5, 121, - 188, 46, 90, 56, 216, 72, 203, 107, 212, 171, 110, 134, 255, 24, 243, 30, - 188, 55, 111, 8, 238, 198, 201, 180, 150, 230, 191, 248, 10, 82, 178, 247, - 114, 216, 83, 183, 24, 188, 131, 26, 246, 210, 42, 30, 111, 181, 215, 129, + 162, 19, 34, 158, 144, 131, 64, 244, 80, 85, 63, 175, 47, 63, 233, 175, + 168, 190, 39, 4, 47, 200, 9, 161, 248, 198, 182, 166, 56, 23, 5, 121, + 188, 46, 90, 56, 216, 72, 203, 107, 212, 171, 110, 134, 255, 24, 243, 30, + 188, 55, 111, 8, 238, 198, 201, 180, 150, 230, 191, 248, 10, 82, 178, 247, + 114, 216, 83, 183, 24, 188, 131, 26, 246, 210, 42, 30, 111, 181, 215, 129, 41, 21, 207, 15, 83, 86, 252, 169, 220, 246, 117, 114, 254, 143, 193, 60, - 123, 226, 202, 18, 77, 221, 135, 84, 180, 229, 79, 143, 241, 219, 217, 85, - 158, 63, 5, 245, 134, 63, 102, 68, 145, 100, 35, 13, 127, 241, 76, 211, - 204, 45, 125, 175, 128, 142, 244, 189, 203, 138, 63, 249, 2, 174, 167, 171, + 123, 226, 202, 18, 77, 221, 135, 84, 180, 229, 79, 143, 241, 219, 217, 85, + 158, 63, 5, 245, 134, 63, 102, 68, 145, 100, 35, 13, 127, 241, 76, 211, + 204, 45, 125, 175, 128, 142, 244, 189, 203, 138, 63, 249, 2, 174, 167, 171, 32, 131, 12, 250, 248, 198, 245, 3, 98, 4, 111, 244, 226, 122, 136, 58, - 189, 234, 244, 106, 117, 92, 97, 191, 247, 95, 114, 20, 151, 51, 67, 174, - 236, 109, 252, 215, 107, 183, 174, 254, 59, 22, 158, 203, 152, 194, 135, 200, + 189, 234, 244, 106, 117, 92, 97, 191, 247, 95, 114, 20, 151, 51, 67, 174, + 236, 109, 252, 215, 107, 183, 174, 254, 59, 22, 158, 203, 152, 194, 135, 200, 61, 193, 249, 199, 24, 167, 119, 223, 205, 135, 112, 51, 118, 120, 253, 75, 61, 101, 172, 213, 36, 226, 135, 54, 229, 214, 151, 9, 2, 197, 84, 22, - 207, 55, 182, 191, 53, 243, 63, 53, 13, 93, 121, 44, 174, 237, 192, 138, - 116, 208, 200, 134, 94, 34, 122, 110, 157, 231, 169, 177, 180, 203, 167, 125, + 207, 55, 182, 191, 53, 243, 63, 53, 13, 93, 121, 44, 174, 237, 192, 138, + 116, 208, 200, 134, 94, 34, 122, 110, 157, 231, 169, 177, 180, 203, 167, 125, 73, 44, 57, 104, 204, 174, 36, 172, 47, 21, 36, 220, 92, 62, 191, 77, - 113, 5, 32, 8, 115, 61, 235, 237, 27, 76, 69, 187, 117, 72, 26, 49, - 217, 249, 130, 134, 139, 27, 229, 183, 146, 80, 3, 154, 25, 26, 52, 175, - 157, 1, 91, 126, 165, 6, 168, 134, 60, 32, 227, 68, 161, 126, 207, 247, - 160, 103, 105, 156, 129, 211, 220, 155, 222, 60, 184, 255, 149, 9, 116, 201, - 151, 42, 126, 0, 36, 167, 178, 40, 160, 5, 115, 82, 176, 207, 38, 10, - 213, 132, 57, 255, 138, 4, 204, 32, 33, 128, 174, 99, 94, 161, 237, 0, - 230, 209, 198, 89, 167, 80, 193, 116, 195, 111, 204, 241, 169, 46, 117, 108, - 244, 247, 12, 216, 106, 50, 242, 209, 61, 42, 214, 33, 25, 38, 138, 217, - 225, 105, 76, 244, 126, 252, 253, 57, 238, 107, 166, 158, 250, 132, 105, 91, - 184, 209, 217, 5, 202, 84, 254, 51, 233, 58, 2, 141, 130, 47, 97, 125, - 244, 95, 177, 68, 9, 213, 115, 118, 215, 70, 9, 64, 113, 139, 19, 165, - 231, 204, 191, 129, 15, 235, 143, 225, 241, 75, 168, 227, 126, 58, 201, 98, + 113, 5, 32, 8, 115, 61, 235, 237, 27, 76, 69, 187, 117, 72, 26, 49, + 217, 249, 130, 134, 139, 27, 229, 183, 146, 80, 3, 154, 25, 26, 52, 175, + 157, 1, 91, 126, 165, 6, 168, 134, 60, 32, 227, 68, 161, 126, 207, 247, + 160, 103, 105, 156, 129, 211, 220, 155, 222, 60, 184, 255, 149, 9, 116, 201, + 151, 42, 126, 0, 36, 167, 178, 40, 160, 5, 115, 82, 176, 207, 38, 10, + 213, 132, 57, 255, 138, 4, 204, 32, 33, 128, 174, 99, 94, 161, 237, 0, + 230, 209, 198, 89, 167, 80, 193, 116, 195, 111, 204, 241, 169, 46, 117, 108, + 244, 247, 12, 216, 106, 50, 242, 209, 61, 42, 214, 33, 25, 38, 138, 217, + 225, 105, 76, 244, 126, 252, 253, 57, 238, 107, 166, 158, 250, 132, 105, 91, + 184, 209, 217, 5, 202, 84, 254, 51, 233, 58, 2, 141, 130, 47, 97, 125, + 244, 95, 177, 68, 9, 213, 115, 118, 215, 70, 9, 64, 113, 139, 19, 165, + 231, 204, 191, 129, 15, 235, 143, 225, 241, 75, 168, 227, 126, 58, 201, 98, 16, 227, 27, 148, 166, 1, 34, 110, 84, 120, 11, 181, 150, 111, 167, 184, 49, 244, 231, 192, 44, 59, 41, 122, 58, 12, 185, 180, 54, 122, 106, 201, - 2, 65, 118, 129, 149, 139, 31, 201, 205, 90, 96, 76, 23, 43, 218, 15, - 233, 202, 103, 84, 18, 122, 25, 218, 38, 252, 222, 104, 172, 96, 30, 57, - 205, 130, 106, 183, 189, 230, 67, 63, 162, 142, 46, 199, 45, 244, 3, 26, - 208, 119, 15, 16, 29, 196, 178, 90, 41, 94, 193, 64, 51, 205, 136, 157 + 2, 65, 118, 129, 149, 139, 31, 201, 205, 90, 96, 76, 23, 43, 218, 15, + 233, 202, 103, 84, 18, 122, 25, 218, 38, 252, 222, 104, 172, 96, 30, 57, + 205, 130, 106, 183, 189, 230, 67, 63, 162, 142, 46, 199, 45, 244, 3, 26, + 208, 119, 15, 16, 29, 196, 178, 90, 41, 94, 193, 64, 51, 205, 136, 157 }; diff --git a/bench/sequential/rijndael_dec/rijndael_dec.c b/bench/sequential/rijndael_dec/rijndael_dec.c old mode 100644 new mode 100755 index 5fc79afb7e49eb7056f341503690c6c0cdc5fd9c..fc065d14ced52581b0044236d4109838767ed811 --- a/bench/sequential/rijndael_dec/rijndael_dec.c +++ b/bench/sequential/rijndael_dec/rijndael_dec.c @@ -44,10 +44,10 @@ /* Global variable definitions */ -unsigned char rijndael_dec_key[32]; +unsigned char rijndael_dec_key[ 32 ]; int rijndael_dec_key_len; -extern unsigned char rijndael_dec_data[]; +extern unsigned char rijndael_dec_data[ ]; struct rijndael_dec_FILE rijndael_dec_fin; int rijndael_dec_checksum = 0; @@ -73,7 +73,7 @@ void rijndael_dec_init( void ) rijndael_dec_fin.size ^= x; _Pragma( "loopbound min 32768 max 32768" ) for ( i = 0; i < rijndael_dec_fin.size; i++ ) - rijndael_dec_fin.data[i] ^= x; + rijndael_dec_fin.data[ i ] ^= x; /* this is a pointer to the hexadecimal key digits */ const volatile char *cp = @@ -98,7 +98,7 @@ void rijndael_dec_init( void ) /* store a key byte for each pair of hexadecimal digits */ if ( i++ & 1 ) - rijndael_dec_key[i / 2 - 1] = by & 0xff; + rijndael_dec_key[ i / 2 - 1 ] = by & 0xff; } if ( *cp ) { @@ -120,7 +120,7 @@ int rijndael_dec_return( void ) void rijndael_dec_decfile( struct rijndael_dec_FILE *fin, struct aes *ctx ) { - unsigned char inbuf1[16], inbuf2[16], outbuf[16], *bp1, *bp2, *tp; + unsigned char inbuf1[ 16 ], inbuf2[ 16 ], outbuf[ 16 ], *bp1, *bp2, *tp; int i; @@ -137,17 +137,17 @@ void rijndael_dec_decfile( struct rijndael_dec_FILE *fin, struct aes *ctx ) rijndael_dec_decrypt( inbuf2, outbuf, ctx ); /* decrypt it */ - rijndael_dec_checksum += outbuf[15]; + rijndael_dec_checksum += outbuf[ 15 ]; _Pragma( "loopbound min 16 max 16" ) for ( i = 0; i < 16; ++i ) /* xor with previous input */ - outbuf[i] ^= inbuf1[i]; + outbuf[ i ] ^= inbuf1[ i ]; bp1 = inbuf1; /* set up pointers to two input buffers */ bp2 = inbuf2; /* TODO: this is necessarily an input-dependent loop bound */ - _Pragma( "loopbound min 19491 max 91491" ) + _Pragma( "loopbound min 2046 max 2046" ) while ( 1 ) { i = rijndael_dec_fread( bp1, 1, 16, fin ); /* read next encrypted block */ /* to first input buffer */ @@ -159,11 +159,11 @@ void rijndael_dec_decfile( struct rijndael_dec_FILE *fin, struct aes *ctx ) rijndael_dec_decrypt( bp1, outbuf, ctx ); /* decrypt the new input block and */ - rijndael_dec_checksum += outbuf[15]; + rijndael_dec_checksum += outbuf[ 15 ]; _Pragma( "loopbound min 16 max 16" ) for ( i = 0; i < 16; ++i ) /* xor it with previous input block */ - outbuf[i] ^= bp2[i]; + outbuf[ i ] ^= bp2[ i ]; /* swap buffer pointers */ tp = bp1, bp1 = bp2, bp2 = tp; @@ -172,7 +172,7 @@ void rijndael_dec_decfile( struct rijndael_dec_FILE *fin, struct aes *ctx ) void _Pragma( "entrypoint" ) rijndael_dec_main( void ) { - struct aes ctx[1]; + struct aes ctx[ 1 ]; /* decryption in Cipher Block Chaining mode */ rijndael_dec_set_key( rijndael_dec_key, rijndael_dec_key_len, dec, ctx ); diff --git a/bench/sequential/rijndael_dec/rijndael_dec_libc.c b/bench/sequential/rijndael_dec/rijndael_dec_libc.c old mode 100644 new mode 100755 index 00390df318f7d3f7036dbcea8bd38681aa8c6990..b43a76a4f5874013ff2720df48e79d9dc9e23080 --- a/bench/sequential/rijndael_dec/rijndael_dec_libc.c +++ b/bench/sequential/rijndael_dec/rijndael_dec_libc.c @@ -14,9 +14,9 @@ unsigned long rijndael_dec_fread( void *ptr, unsigned long size, unsigned long number_of_chars_to_read = stream->size - stream->cur_pos >= size * count ? size * count : stream->size - stream->cur_pos; - _Pragma( "loopbound min 10 max 16" ) + _Pragma( "loopbound min 0 max 16" ) while ( i < stream->cur_pos + number_of_chars_to_read ) - ( ( unsigned char * )ptr )[i2++] = stream->data[i++]; + ( ( unsigned char * )ptr )[ i2++ ] = stream->data[ i++ ]; stream->cur_pos += number_of_chars_to_read; return number_of_chars_to_read; } @@ -30,7 +30,7 @@ unsigned long rijndael_dec_fwrite( const void *ptr, unsigned long size, size * count : stream->size - stream->cur_pos; _Pragma( "loopbound min 0 max 0" ) while ( i < stream->cur_pos + number_of_chars_to_write ) - stream->data[i++] = ( ( unsigned char * )ptr )[i2++]; + stream->data[ i++ ] = ( ( unsigned char * )ptr )[ i2++ ]; stream->cur_pos += number_of_chars_to_write; return number_of_chars_to_write; } diff --git a/bench/sequential/rijndael_dec/rijndael_dec_libc.h b/bench/sequential/rijndael_dec/rijndael_dec_libc.h old mode 100644 new mode 100755 diff --git a/bench/sequential/rijndael_enc/ChangeLog.txt b/bench/sequential/rijndael_enc/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/rijndael_enc/aes.c b/bench/sequential/rijndael_enc/aes.c old mode 100644 new mode 100755 index c1282a7f34c52565b98f06a21a8864f29c3ce047..a803a79b5439262530b3f67fca40571cd2b0b116 --- a/bench/sequential/rijndael_enc/aes.c +++ b/bench/sequential/rijndael_enc/aes.c @@ -30,10 +30,10 @@ #include "aestab.h" -#define four_tables(x,tab,vf,rf,c) ( tab[0][bval(vf(x,0,c),rf(0,c))] ^ \ - tab[1][bval(vf(x,1,c),rf(1,c))] ^ \ - tab[2][bval(vf(x,2,c),rf(2,c))] ^ \ - tab[3][bval(vf(x,3,c),rf(3,c))] ) +#define four_tables(x,tab,vf,rf,c) ( tab[ 0 ][ bval(vf(x,0,c),rf(0,c)) ] ^ \ + tab[ 1 ][ bval(vf(x,1,c),rf(1,c)) ] ^ \ + tab[ 2 ][ bval(vf(x,2,c),rf(2,c)) ] ^ \ + tab[ 3 ][ bval(vf(x,3,c),rf(3,c)) ] ) #define vf1(x,r,c) (x) #define rf1(r,c) (r) @@ -60,10 +60,10 @@ #define mx(t,f) (*t++ = inv_mcol(*f),f++) #define cp(t,f) *t++ = *f++ -#define cpy(d,s) do { cp(d,s); cp(d,s); cp(d,s); cp(d,s); } while (0) -#define mix(d,s) do { mx(d,s); mx(d,s); mx(d,s); mx(d,s); } while (0) +#define cpy(d,s) do { cp(d,s); cp(d,s); cp(d,s); cp(d,s); } while (0) //min 1 max 1 +#define mix(d,s) do { mx(d,s); mx(d,s); mx(d,s); mx(d,s); } while (0) //min 1 max 1 -aes_ret rijndael_enc_set_key( byte in_key[], const word n_bytes, +aes_ret rijndael_enc_set_key( byte in_key[ ], const word n_bytes, const enum aes_key f, struct aes *cx ) { word *kf, *kt, rci; @@ -76,57 +76,57 @@ aes_ret rijndael_enc_set_key( byte in_key[], const word n_bytes, cx->Nkey = n_bytes >> 2; cx->Nrnd = Nr( cx->Nkey, ( word )nc ); - cx->e_key[0] = word_in( in_key ); - cx->e_key[1] = word_in( in_key + 4 ); - cx->e_key[2] = word_in( in_key + 8 ); - cx->e_key[3] = word_in( in_key + 12 ); + cx->e_key[ 0 ] = word_in( in_key ); + cx->e_key[ 1 ] = word_in( in_key + 4 ); + cx->e_key[ 2 ] = word_in( in_key + 8 ); + cx->e_key[ 3 ] = word_in( in_key + 12 ); kf = cx->e_key; kt = kf + nc * ( cx->Nrnd + 1 ) - cx->Nkey; rci = 0; - + switch ( cx->Nkey ) { case 4: _Pragma( "loopbound min 0 max 0" ) do { - kf[4] = kf[0] ^ ls_box( kf[3], 3 ) ^ rijndael_enc_rcon_tab[rci++]; - kf[5] = kf[1] ^ kf[4]; - kf[6] = kf[2] ^ kf[5]; - kf[7] = kf[3] ^ kf[6]; + kf[ 4 ] = kf[ 0 ] ^ ls_box( kf[ 3 ], 3 ) ^ rijndael_enc_rcon_tab[ rci++ ]; + kf[ 5 ] = kf[ 1 ] ^ kf[ 4 ]; + kf[ 6 ] = kf[ 2 ] ^ kf[ 5 ]; + kf[ 7 ] = kf[ 3 ] ^ kf[ 6 ]; kf += 4; } while ( kf < kt ); break; case 6: - cx->e_key[4] = word_in( in_key + 16 ); - cx->e_key[5] = word_in( in_key + 20 ); + cx->e_key[ 4 ] = word_in( in_key + 16 ); + cx->e_key[ 5 ] = word_in( in_key + 20 ); _Pragma( "loopbound min 0 max 0" ) do { - kf[ 6] = kf[0] ^ ls_box( kf[5], 3 ) ^ rijndael_enc_rcon_tab[rci++]; - kf[ 7] = kf[1] ^ kf[ 6]; - kf[ 8] = kf[2] ^ kf[ 7]; - kf[ 9] = kf[3] ^ kf[ 8]; - kf[10] = kf[4] ^ kf[ 9]; - kf[11] = kf[5] ^ kf[10]; + kf[ 6 ] = kf[ 0 ] ^ ls_box( kf[ 5 ], 3 ) ^ rijndael_enc_rcon_tab[ rci++ ]; + kf[ 7 ] = kf[ 1 ] ^ kf[ 6 ]; + kf[ 8 ] = kf[ 2 ] ^ kf[ 7 ]; + kf[ 9 ] = kf[ 3 ] ^ kf[ 8 ]; + kf[ 10 ] = kf[ 4 ] ^ kf[ 9 ]; + kf[ 11 ] = kf[ 5 ] ^ kf[ 10 ]; kf += 6; } while ( kf < kt ); break; case 8: - cx->e_key[4] = word_in( in_key + 16 ); - cx->e_key[5] = word_in( in_key + 20 ); - cx->e_key[6] = word_in( in_key + 24 ); - cx->e_key[7] = word_in( in_key + 28 ); + cx->e_key[ 4 ] = word_in( in_key + 16 ); + cx->e_key[ 5 ] = word_in( in_key + 20 ); + cx->e_key[ 6 ] = word_in( in_key + 24 ); + cx->e_key[ 7 ] = word_in( in_key + 28 ); _Pragma( "loopbound min 7 max 7" ) do { - kf[ 8] = kf[0] ^ ls_box( kf[7], 3 ) ^ rijndael_enc_rcon_tab[rci++]; - kf[ 9] = kf[1] ^ kf[ 8]; - kf[10] = kf[2] ^ kf[ 9]; - kf[11] = kf[3] ^ kf[10]; - kf[12] = kf[4] ^ ls_box( kf[11], 0 ); - kf[13] = kf[5] ^ kf[12]; - kf[14] = kf[6] ^ kf[13]; - kf[15] = kf[7] ^ kf[14]; + kf[ 8 ] = kf[ 0 ] ^ ls_box( kf[ 7 ], 3 ) ^ rijndael_enc_rcon_tab[ rci++ ]; + kf[ 9 ] = kf[ 1 ] ^ kf[ 8 ]; + kf[ 10 ] = kf[ 2 ] ^ kf[ 9 ]; + kf[ 11 ] = kf[ 3 ] ^ kf[ 10 ]; + kf[ 12 ] = kf[ 4 ] ^ ls_box( kf[ 11 ], 0 ); + kf[ 13 ] = kf[ 5 ] ^ kf[ 12 ]; + kf[ 14 ] = kf[ 6 ] ^ kf[ 13 ]; + kf[ 15 ] = kf[ 7 ] ^ kf[ 14 ]; kf += 8; } while ( kf < kt ); break; @@ -153,254 +153,254 @@ aes_ret rijndael_enc_set_key( byte in_key[], const word n_bytes, return aes_good; } -short rijndael_enc_encrypt( unsigned char in_blk[], unsigned char out_blk[], +short rijndael_enc_encrypt( unsigned char in_blk[ ], unsigned char out_blk[ ], const struct aes *cx ) { const unsigned long *kp = cx->e_key; if ( !( cx->mode & 1 ) ) return 0; - unsigned long b0[4]; - b0[0] = *( unsigned long * )in_blk ^ kp[0]; - b0[1] = *( unsigned long * )( in_blk + 4 )^kp[1]; - b0[2] = *( unsigned long * )( in_blk + 8 )^kp[2]; - b0[3] = *( unsigned long * )( in_blk + 12 )^kp[3]; + unsigned long b0[ 4 ]; + b0[ 0 ] = *( unsigned long * )in_blk ^ kp[ 0 ]; + b0[ 1 ] = *( unsigned long * )( in_blk + 4 )^kp[ 1 ]; + b0[ 2 ] = *( unsigned long * )( in_blk + 8 )^kp[ 2 ]; + b0[ 3 ] = *( unsigned long * )( in_blk + 12 )^kp[ 3 ]; kp += 4; - unsigned long b1[4]; + unsigned long b1[ 4 ]; switch ( cx->Nrnd ) { case 14: - b1[0] = kp[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] ); - b1[1] = kp[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] ); - b1[2] = kp[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] ); - b1[3] = kp[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] ); - b0[0] = ( kp + 4 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] ); - b0[1] = ( kp + 4 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] ); - b0[2] = ( kp + 4 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] ); - b0[3] = ( kp + 4 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] ); + b1[ 0 ] = kp[ 0 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 0 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 1 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 2 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 3 ] >> 24 ) ) ] ); + b1[ 1 ] = kp[ 1 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 1 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 2 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 3 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 0 ] >> 24 ) ) ] ); + b1[ 2 ] = kp[ 2 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 2 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 3 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 0 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 1 ] >> 24 ) ) ] ); + b1[ 3 ] = kp[ 3 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 3 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 0 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 1 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 2 ] >> 24 ) ) ] ); + b0[ 0 ] = ( kp + 4 )[ 0 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 0 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 1 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 2 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 3 ] >> 24 ) ) ] ); + b0[ 1 ] = ( kp + 4 )[ 1 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 1 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 2 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 3 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 0 ] >> 24 ) ) ] ); + b0[ 2 ] = ( kp + 4 )[ 2 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 2 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 3 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 0 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 1 ] >> 24 ) ) ] ); + b0[ 3 ] = ( kp + 4 )[ 3 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 3 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 0 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 1 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 2 ] >> 24 ) ) ] ); kp += 8; case 12: - b1[0] = kp[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] ); - b1[1] = kp[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] ); - b1[2] = kp[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] ); - b1[3] = kp[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] ); - b0[0] = ( kp + 4 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] ); - b0[1] = ( kp + 4 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] ); - b0[2] = ( kp + 4 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] ); - b0[3] = ( kp + 4 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] ); + b1[ 0 ] = kp[ 0 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 0 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 1 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 2 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 3 ] >> 24 ) ) ] ); + b1[ 1 ] = kp[ 1 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 1 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 2 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 3 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 0 ] >> 24 ) ) ] ); + b1[ 2 ] = kp[ 2 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 2 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 3 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 0 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 1 ] >> 24 ) ) ] ); + b1[ 3 ] = kp[ 3 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 3 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 0 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 1 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 2 ] >> 24 ) ) ] ); + b0[ 0 ] = ( kp + 4 )[ 0 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 0 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 1 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 2 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 3 ] >> 24 ) ) ] ); + b0[ 1 ] = ( kp + 4 )[ 1 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 1 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 2 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 3 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 0 ] >> 24 ) ) ] ); + b0[ 2 ] = ( kp + 4 )[ 2 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 2 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 3 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 0 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 1 ] >> 24 ) ) ] ); + b0[ 3 ] = ( kp + 4 )[ 3 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 3 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 0 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 1 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 2 ] >> 24 ) ) ] ); kp += 8; case 10: - b1[0] = kp[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] ); - b1[1] = kp[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] ); - b1[2] = kp[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] ); - b1[3] = kp[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] ); - b0[0] = ( kp + 4 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] ); - b0[1] = ( kp + 4 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] ); - b0[2] = ( kp + 4 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] ); - b0[3] = ( kp + 4 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] ); - b1[0] = ( kp + 8 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] ); - b1[1] = ( kp + 8 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] ); - b1[2] = ( kp + 8 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] ); - b1[3] = ( kp + 8 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] ); - b0[0] = ( kp + 12 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] ); - b0[1] = ( kp + 12 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] ); - b0[2] = ( kp + 12 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] ); - b0[3] = ( kp + 12 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] ); - b1[0] = ( kp + 16 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] ); - b1[1] = ( kp + 16 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] ); - b1[2] = ( kp + 16 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] ); - b1[3] = ( kp + 16 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] ); - b0[0] = ( kp + 20 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] ); - b0[1] = ( kp + 20 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] ); - b0[2] = ( kp + 20 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] ); - b0[3] = ( kp + 20 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] ); - b1[0] = ( kp + 24 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] ); - b1[1] = ( kp + 24 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] ); - b1[2] = ( kp + 24 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] ); - b1[3] = ( kp + 24 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] ); - b0[0] = ( kp + 28 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] ); - b0[1] = ( kp + 28 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] ); - b0[2] = ( kp + 28 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] ); - b0[3] = ( kp + 28 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] ); - b1[0] = ( kp + 32 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] ); - b1[1] = ( kp + 32 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] ); - b1[2] = ( kp + 32 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] ); - b1[3] = ( kp + 32 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^ - rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^ - rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^ - rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] ); - b0[0] = ( kp + 36 )[0] ^ ( rijndael_enc_fl_tab[0][( ( unsigned char )b1[0] )] ^ - rijndael_enc_fl_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^ - rijndael_enc_fl_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^ - rijndael_enc_fl_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] ); - b0[1] = ( kp + 36 )[1] ^ ( rijndael_enc_fl_tab[0][( ( unsigned char )b1[1] )] ^ - rijndael_enc_fl_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^ - rijndael_enc_fl_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^ - rijndael_enc_fl_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] ); - b0[2] = ( kp + 36 )[2] ^ ( rijndael_enc_fl_tab[0][( ( unsigned char )b1[2] )] ^ - rijndael_enc_fl_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^ - rijndael_enc_fl_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^ - rijndael_enc_fl_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] ); - b0[3] = ( kp + 36 )[3] ^ ( rijndael_enc_fl_tab[0][( ( unsigned char )b1[3] )] ^ - rijndael_enc_fl_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^ - rijndael_enc_fl_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^ - rijndael_enc_fl_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] ); + b1[ 0 ] = kp[ 0 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 0 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 1 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 2 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 3 ] >> 24 ) ) ] ); + b1[ 1 ] = kp[ 1 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 1 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 2 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 3 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 0 ] >> 24 ) ) ] ); + b1[ 2 ] = kp[ 2 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 2 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 3 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 0 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 1 ] >> 24 ) ) ] ); + b1[ 3 ] = kp[ 3 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 3 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 0 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 1 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 2 ] >> 24 ) ) ] ); + b0[ 0 ] = ( kp + 4 )[ 0 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 0 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 1 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 2 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 3 ] >> 24 ) ) ] ); + b0[ 1 ] = ( kp + 4 )[ 1 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 1 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 2 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 3 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 0 ] >> 24 ) ) ] ); + b0[ 2 ] = ( kp + 4 )[ 2 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 2 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 3 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 0 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 1 ] >> 24 ) ) ] ); + b0[ 3 ] = ( kp + 4 )[ 3 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 3 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 0 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 1 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 2 ] >> 24 ) ) ] ); + b1[ 0 ] = ( kp + 8 )[ 0 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 0 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 1 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 2 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 3 ] >> 24 ) ) ] ); + b1[ 1 ] = ( kp + 8 )[ 1 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 1 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 2 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 3 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 0 ] >> 24 ) ) ] ); + b1[ 2 ] = ( kp + 8 )[ 2 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 2 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 3 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 0 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 1 ] >> 24 ) ) ] ); + b1[ 3 ] = ( kp + 8 )[ 3 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 3 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 0 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 1 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 2 ] >> 24 ) ) ] ); + b0[ 0 ] = ( kp + 12 )[ 0 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 0 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 1 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 2 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 3 ] >> 24 ) ) ] ); + b0[ 1 ] = ( kp + 12 )[ 1 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 1 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 2 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 3 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 0 ] >> 24 ) ) ] ); + b0[ 2 ] = ( kp + 12 )[ 2 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 2 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 3 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 0 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 1 ] >> 24 ) ) ] ); + b0[ 3 ] = ( kp + 12 )[ 3 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 3 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 0 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 1 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 2 ] >> 24 ) ) ] ); + b1[ 0 ] = ( kp + 16 )[ 0 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 0 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 1 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 2 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 3 ] >> 24 ) ) ] ); + b1[ 1 ] = ( kp + 16 )[ 1 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 1 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 2 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 3 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 0 ] >> 24 ) ) ] ); + b1[ 2 ] = ( kp + 16 )[ 2 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 2 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 3 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 0 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 1 ] >> 24 ) ) ] ); + b1[ 3 ] = ( kp + 16 )[ 3 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 3 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 0 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 1 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 2 ] >> 24 ) ) ] ); + b0[ 0 ] = ( kp + 20 )[ 0 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 0 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 1 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 2 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 3 ] >> 24 ) ) ] ); + b0[ 1 ] = ( kp + 20 )[ 1 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 1 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 2 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 3 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 0 ] >> 24 ) ) ] ); + b0[ 2 ] = ( kp + 20 )[ 2 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 2 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 3 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 0 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 1 ] >> 24 ) ) ] ); + b0[ 3 ] = ( kp + 20 )[ 3 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 3 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 0 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 1 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 2 ] >> 24 ) ) ] ); + b1[ 0 ] = ( kp + 24 )[ 0 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 0 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 1 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 2 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 3 ] >> 24 ) ) ] ); + b1[ 1 ] = ( kp + 24 )[ 1 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 1 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 2 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 3 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 0 ] >> 24 ) ) ] ); + b1[ 2 ] = ( kp + 24 )[ 2 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 2 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 3 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 0 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 1 ] >> 24 ) ) ] ); + b1[ 3 ] = ( kp + 24 )[ 3 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 3 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 0 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 1 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 2 ] >> 24 ) ) ] ); + b0[ 0 ] = ( kp + 28 )[ 0 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 0 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 1 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 2 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 3 ] >> 24 ) ) ] ); + b0[ 1 ] = ( kp + 28 )[ 1 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 1 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 2 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 3 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 0 ] >> 24 ) ) ] ); + b0[ 2 ] = ( kp + 28 )[ 2 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 2 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 3 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 0 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 1 ] >> 24 ) ) ] ); + b0[ 3 ] = ( kp + 28 )[ 3 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b1[ 3 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b1[ 0 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b1[ 1 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b1[ 2 ] >> 24 ) ) ] ); + b1[ 0 ] = ( kp + 32 )[ 0 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 0 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 1 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 2 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 3 ] >> 24 ) ) ] ); + b1[ 1 ] = ( kp + 32 )[ 1 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 1 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 2 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 3 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 0 ] >> 24 ) ) ] ); + b1[ 2 ] = ( kp + 32 )[ 2 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 2 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 3 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 0 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 1 ] >> 24 ) ) ] ); + b1[ 3 ] = ( kp + 32 )[ 3 ] ^ ( rijndael_enc_ft_tab[ 0 ][ ( ( unsigned char )b0[ 3 ] ) ] ^ + rijndael_enc_ft_tab[ 1 ][ ( ( unsigned char )( b0[ 0 ] >> 8 ) ) ] ^ + rijndael_enc_ft_tab[ 2 ][ ( ( unsigned char )( b0[ 1 ] >> 16 ) ) ] ^ + rijndael_enc_ft_tab[ 3 ][ ( ( unsigned char )( b0[ 2 ] >> 24 ) ) ] ); + b0[ 0 ] = ( kp + 36 )[ 0 ] ^ ( rijndael_enc_fl_tab[ 0 ][ ( ( unsigned char )b1[ 0 ] ) ] ^ + rijndael_enc_fl_tab[ 1 ][ ( ( unsigned char )( b1[ 1 ] >> 8 ) ) ] ^ + rijndael_enc_fl_tab[ 2 ][ ( ( unsigned char )( b1[ 2 ] >> 16 ) ) ] ^ + rijndael_enc_fl_tab[ 3 ][ ( ( unsigned char )( b1[ 3 ] >> 24 ) ) ] ); + b0[ 1 ] = ( kp + 36 )[ 1 ] ^ ( rijndael_enc_fl_tab[ 0 ][ ( ( unsigned char )b1[ 1 ] ) ] ^ + rijndael_enc_fl_tab[ 1 ][ ( ( unsigned char )( b1[ 2 ] >> 8 ) ) ] ^ + rijndael_enc_fl_tab[ 2 ][ ( ( unsigned char )( b1[ 3 ] >> 16 ) ) ] ^ + rijndael_enc_fl_tab[ 3 ][ ( ( unsigned char )( b1[ 0 ] >> 24 ) ) ] ); + b0[ 2 ] = ( kp + 36 )[ 2 ] ^ ( rijndael_enc_fl_tab[ 0 ][ ( ( unsigned char )b1[ 2 ] ) ] ^ + rijndael_enc_fl_tab[ 1 ][ ( ( unsigned char )( b1[ 3 ] >> 8 ) ) ] ^ + rijndael_enc_fl_tab[ 2 ][ ( ( unsigned char )( b1[ 0 ] >> 16 ) ) ] ^ + rijndael_enc_fl_tab[ 3 ][ ( ( unsigned char )( b1[ 1 ] >> 24 ) ) ] ); + b0[ 3 ] = ( kp + 36 )[ 3 ] ^ ( rijndael_enc_fl_tab[ 0 ][ ( ( unsigned char )b1[ 3 ] ) ] ^ + rijndael_enc_fl_tab[ 1 ][ ( ( unsigned char )( b1[ 0 ] >> 8 ) ) ] ^ + rijndael_enc_fl_tab[ 2 ][ ( ( unsigned char )( b1[ 1 ] >> 16 ) ) ] ^ + rijndael_enc_fl_tab[ 3 ][ ( ( unsigned char )( b1[ 2 ] >> 24 ) ) ] ); } - *( unsigned long * )out_blk = ( b0[0] ); - *( unsigned long * )( out_blk + 4 ) = ( b0[1] ); - *( unsigned long * )( out_blk + 8 ) = ( b0[2] ); - *( unsigned long * )( out_blk + 12 ) = ( b0[3] ); + *( unsigned long * )out_blk = ( b0[ 0 ] ); + *( unsigned long * )( out_blk + 4 ) = ( b0[ 1 ] ); + *( unsigned long * )( out_blk + 8 ) = ( b0[ 2 ] ); + *( unsigned long * )( out_blk + 12 ) = ( b0[ 3 ] ); return aes_good; } diff --git a/bench/sequential/rijndael_enc/aes.h b/bench/sequential/rijndael_enc/aes.h old mode 100644 new mode 100755 index 908f95ff07e2096d5a87ee104d2578c6f4cd4580..4d4ecf1fcf07d05ccfd5ccf21160c38a310e2bce --- a/bench/sequential/rijndael_enc/aes.h +++ b/bench/sequential/rijndael_enc/aes.h @@ -41,10 +41,10 @@ C subroutine calls: aes_ret set_blk(const word block_length, aes *cx) (variable block size) - aes_ret set_key(const byte key[], const word key_length, + aes_ret set_key(const byte key[ ], const word key_length, const enum aes_key direction, aes *cx) - aes_ret encrypt(const byte input_blk[], byte output_blk[], const aes *cx) - aes_ret decrypt(const byte input_blk[], byte output_blk[], const aes *cx) + aes_ret encrypt(const byte input_blk[ ], byte output_blk[ ], const aes *cx) + aes_ret decrypt(const byte input_blk[ ], byte output_blk[ ], const aes *cx) IMPORTANT NOTE: If you are using this C interface and your compiler does not set the memory used for objects to zero before use, you will need to @@ -152,14 +152,14 @@ enum aes_key { enc = 1, /* set if encryption is needed */ struct aes { word Nkey; /* the number of words in the key input block */ word Nrnd; /* the number of cipher rounds */ - word e_key[KS_LENGTH]; /* the encryption key schedule */ - word d_key[KS_LENGTH]; /* the decryption key schedule */ + word e_key[ KS_LENGTH ]; /* the encryption key schedule */ + word d_key[ KS_LENGTH ]; /* the decryption key schedule */ byte mode; /* encrypt, decrypt or both */ }; -aes_ret rijndael_enc_set_key( byte key[], const word n_bytes, +aes_ret rijndael_enc_set_key( byte key[ ], const word n_bytes, const enum aes_key f, struct aes *cx ); -aes_ret rijndael_enc_encrypt( byte in_blk[], byte out_blk[], +aes_ret rijndael_enc_encrypt( byte in_blk[ ], byte out_blk[ ], const struct aes *cx ); #endif diff --git a/bench/sequential/rijndael_enc/aestab.h b/bench/sequential/rijndael_enc/aestab.h old mode 100644 new mode 100755 index 9d347bc7ecb79c2552afe325d50abd81bbd71827..7a4c6bc66790e9307bfdd8fbcfa3440e84517e32 --- a/bench/sequential/rijndael_enc/aestab.h +++ b/bench/sequential/rijndael_enc/aestab.h @@ -43,7 +43,7 @@ code is adjusted accordingly */ -const word rijndael_enc_rcon_tab[29] = { +const word rijndael_enc_rcon_tab[ 29 ] = { w0( 01 ), w0( 02 ), w0( 04 ), w0( 08 ), w0( 10 ), w0( 20 ), w0( 40 ), w0( 80 ), w0( 1b ), w0( 36 ), w0( 6c ), w0( d8 ), @@ -148,7 +148,7 @@ const word rijndael_enc_rcon_tab[29] = { #undef r #define r r0 -const word rijndael_enc_ft_tab[4][256] = { +const word rijndael_enc_ft_tab[ 4 ][ 256 ] = { { f_table }, #undef r #define r r1 @@ -165,7 +165,7 @@ const word rijndael_enc_ft_tab[4][256] = { #undef r #define r(p,q,r,s) w0(q) -const word rijndael_enc_fl_tab[4][256] = { +const word rijndael_enc_fl_tab[ 4 ][ 256 ] = { { f_table }, #undef r #define r(p,q,r,s) w1(q) @@ -247,7 +247,7 @@ const word rijndael_enc_fl_tab[4][256] = { #undef r #define r r0 -const word rijndael_enc_im_tab[4][256] = { +const word rijndael_enc_im_tab[ 4 ][ 256 ] = { { m_table }, #undef r #define r r1 diff --git a/bench/sequential/rijndael_enc/input_small.c b/bench/sequential/rijndael_enc/input_small.c old mode 100644 new mode 100755 index b3eee55fd245c1ad2e8a657888ff969dd39ff28c..e75559dc56fc465285349e8c11b0d9dba671a160 --- a/bench/sequential/rijndael_enc/input_small.c +++ b/bench/sequential/rijndael_enc/input_small.c @@ -1,1963 +1,1963 @@ -unsigned char rijndael_enc_data[] = { - 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m', - 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s', - 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e', - 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s', - 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e', - 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y', - 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t', - 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e', - 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n', - 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s', - 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n', - 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s', - 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t', - 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b', - 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e', - 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r', - 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i', - 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d', - 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p', - 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y', - 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m', - 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d', - 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a', - 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o', - 'u','t','h','u','n','t','i','l','t','h','e','y','v','e','f','a', - 'd','e','d','B','u','t','t','r','u','s','t','m','e','i','n','2', - '0','y','e','a','r','s','y','o','u','l','l','l','o','o','k','b', - 'a','c','k','a','t','p','h','o','t','o','s','o','f','y','o','u', - 'r','s','e','l','f','a','n','d','r','e','c','a','l','l','i','n', - 'a','w','a','y','y','o','u','c','a','n','t','g','r','a','s','p', - 'n','o','w','h','o','w','m','u','c','h','p','o','s','s','i','b', - 'i','l','i','t','y','l','a','y','b','e','f','o','r','e','y','o', - 'u','a','n','d','h','o','w','f','a','b','u','l','o','u','s','y', - 'o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o', - 'u','a','r','e','n','o','t','a','s','f','a','t','a','s','y','o', - 'u','i','m','a','g','i','n','e','D','o','n','t','w','o','r','r', - 'y','a','b','o','u','t','t','h','e','f','u','t','u','r','e','O', - 'r','w','o','r','r','y','b','u','t','k','n','o','w','t','h','a', - 't','K','u','r','t','V','o','n','n','e','g','u','K','u','r','t', - 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c', - 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I', - 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e', - 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9', - '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f', - 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n', - 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u', - 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u', - 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r', - 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c', - 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v', - 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h', - 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y', - 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s', - 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n', - 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e', - 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i', - 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e', - 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r', - 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y', - 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y', - 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t', - 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e', - 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u', - 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B', - 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a', - 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a', - 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l', - 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y', - 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h', - 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t', - 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d', - 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e', - 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e', - 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a', - 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o', - 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r', - 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r', - 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n', - 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M', - 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l', - 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f', - '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I', - 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o', - 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f', - 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o', - 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e', - 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s', - 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o', - 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w', - 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m', - 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i', - 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a', - 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g', - 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d', - 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c', - 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e', - 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r', - 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d', - 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s', - 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b', - 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h', - 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d', - 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e', - 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k', - 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e', - 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a', - 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w', - 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i', - 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n', - 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r', - 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r', - 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m', - 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b', - 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o', - 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u', - 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e', - 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t', - 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t', - 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o', - 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n', - 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u', - 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e', - 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w', - 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t', - 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n', - 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r', - 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s', - 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f', - 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s', - 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h', - 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n', - 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l', - 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i', - 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w', - 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u', - 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n', - 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r', - 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d', - 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t', - 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e', - 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y', - 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c', - 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s', - 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w', - 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o', - 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l', - 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a', - 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u', - 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a', - 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i', - 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a', - 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w', - 'o','r','r','y','K','u','r','t','V','o','n','n','e','g','u','t', - 's','C','o','m','m','e','n','c','e','m','e','n','t','A','d','d', - 'r','e','s','s','a','t','M','I','T','L','a','d','i','e','s','a', - 'n','d','g','e','n','t','l','e','m','e','n','o','f','t','h','e', - 'c','l','a','s','s','o','f','9','7','W','e','a','r','s','u','n', - 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f', - 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p', - 'f','o','r','t','h','e','f','u','t','u','r','e','s','u','n','s', - 'c','r','e','e','n','w','o','u','l','d','b','e','i','t','T','h', - 'e','l','o','n','g','t','e','r','m','b','e','n','e','f','i','t', - 's','o','f','s','u','n','s','c','r','e','e','n','h','a','v','e', - 'b','e','e','n','p','r','o','v','e','d','b','y','s','c','i','e', - 'n','t','i','s','t','s','w','h','e','r','e','a','s','t','h','e', - 'r','e','s','t','o','f','m','y','a','d','v','i','c','e','h','a', - 's','n','o','b','a','s','i','s','m','o','r','e','r','e','l','i', - 'a','b','l','e','t','h','a','n','m','y','o','w','n','m','e','a', - 'n','d','e','r','i','n','g','e','x','p','e','r','i','e','n','c', - 'e','I','w','i','l','l','d','i','s','p','e','n','s','e','t','h', - 'i','s','a','d','v','i','c','e','n','o','w','E','n','j','o','y', - 't','h','e','p','o','w','e','r','a','n','d','b','e','a','u','t', - 'y','o','f','y','o','u','r','y','o','u','t','h','O','h','n','e', - 'v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n','o', - 't','u','n','d','e','r','s','t','a','n','d','t','h','e','p','o', - 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o', - 'u','r','y','o','u','t','h','u','n','t','i','l','t','h','e','y', - 'v','e','f','a','d','e','d','B','u','t','t','r','u','s','t','m', - 'e','i','n','2','0','y','e','a','r','s','y','o','u','l','l','l', - 'o','o','k','b','a','c','k','a','t','p','h','o','t','o','s','o', - 'f','y','o','u','r','s','e','l','f','a','n','d','r','e','c','a', - 'l','l','i','n','a','w','a','y','y','o','u','c','a','n','t','g', - 'r','a','s','p','n','o','w','h','o','w','m','u','c','h','p','o', - 's','s','i','b','i','l','i','t','y','l','a','y','b','e','f','o', - 'r','e','y','o','u','a','n','d','h','o','w','f','a','b','u','l', - 'o','u','s','y','o','u','r','e','a','l','l','y','l','o','o','k', - 'e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a','t', - 'a','s','y','o','u','i','m','a','g','i','n','e','D','o','n','t', - 'w','o','r','r','y','a','b','o','u','t','t','h','e','f','u','t', - 'u','r','e','O','r','w','o','r','r','y','b','u','t','k','n','o', - 'w','t','h','a','t','K','u','r','t','V','o','n','n','e','g','u', - 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m', - 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s', - 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e', - 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s', - 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e', - 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y', - 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t', - 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e', - 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n', - 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s', - 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n', - 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s', - 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t', - 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b', - 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e', - 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r', - 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i', - 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d', - 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p', - 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y', - 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m', - 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d', - 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a', - 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o', - 'u','t','h','u','n','t','i','l','t','h','e','y','v','e','f','a', - 'd','e','d','B','u','t','t','r','u','s','t','m','e','i','n','2', - '0','y','e','a','r','s','y','o','u','l','l','l','o','o','k','b', - 'a','c','k','a','t','p','h','o','t','o','s','o','f','y','o','u', - 'r','s','e','l','f','a','n','d','r','e','c','a','l','l','i','n', - 'a','w','a','y','y','o','u','c','a','n','t','g','r','a','s','p', - 'n','o','w','h','o','w','m','u','c','h','p','o','s','s','i','b', - 'i','l','i','t','y','l','a','y','b','e','f','o','r','e','y','o', - 'u','a','n','d','h','o','w','f','a','b','u','l','o','u','s','y', - 'o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o', - 'u','a','r','e','n','o','t','a','s','f','a','t','a','s','y','o', - 'u','i','m','a','g','i','n','e','D','o','n','t','w','o','r','r', - 'y','a','b','o','u','t','t','h','e','f','u','t','u','r','e','O', - 'r','w','o','r','r','y','b','u','t','k','n','o','w','t','h','a', - 't','K','u','r','t','V','o','n','n','e','g','u','t','s','C','o', - 'm','m','e','n','c','e','m','e','n','t','A','d','d','r','e','s', - 's','a','t','M','I','T','L','a','d','i','e','s','a','n','d','g', - 'e','n','t','l','e','m','e','n','o','f','t','h','e','c','l','a', - 's','s','o','f','9','7','W','e','a','r','s','u','n','s','c','r', - 'e','e','n','I','f','I','c','o','u','l','d','o','f','f','e','r', - 'y','o','u','o','n','l','y','o','n','e','t','i','p','f','o','r', - 't','h','e','f','u','t','u','r','e','s','u','n','s','c','r','e', - 'e','n','w','o','u','l','d','b','e','i','t','T','h','e','l','o', - 'n','g','t','e','r','m','b','e','n','e','f','i','t','s','o','f', - 's','u','n','s','c','r','e','e','n','h','a','v','e','b','e','e', - 'n','p','r','o','v','e','d','b','y','s','c','i','e','n','t','i', - 's','t','s','w','h','e','r','e','a','s','t','h','e','r','e','s', - 't','o','f','m','y','a','d','v','i','c','e','h','a','s','n','o', - 'b','a','s','i','s','m','o','r','e','r','e','l','i','a','b','l', - 'e','t','h','a','n','m','y','o','w','n','m','e','a','n','d','e', - 'r','i','n','g','e','x','p','e','r','i','e','n','c','e','I','w', - 'i','l','l','d','i','s','p','e','n','s','e','t','h','i','s','a', - 'd','v','i','c','e','n','o','w','E','n','j','o','y','t','h','e', - 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f', - 'y','o','u','r','y','o','u','t','h','O','h','n','e','v','e','r', - 'm','i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n', - 'd','e','r','s','t','a','n','d','t','h','e','p','o','w','e','r', - 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y', - 'o','u','t','h','u','n','t','i','l','t','h','e','y','v','e','f', - 'a','d','e','d','B','u','t','t','r','u','s','t','m','e','i','n', - '2','0','y','e','a','r','s','y','o','u','l','l','l','o','o','k', - 'b','a','c','k','a','t','p','h','o','t','o','s','o','f','y','o', - 'u','r','s','e','l','f','a','n','d','r','e','c','a','l','l','i', - 'n','a','w','a','y','y','o','u','c','a','n','t','g','r','a','s', - 'p','n','o','w','h','o','w','m','u','c','h','p','o','s','s','i', - 'b','i','l','i','t','y','l','a','y','b','e','f','o','r','e','y', - 'o','u','a','n','d','h','o','w','f','a','b','u','l','o','u','s', - 'y','o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y', - 'o','u','a','r','e','n','o','t','a','s','f','a','t','a','s','y', - 'o','u','i','m','a','g','i','n','e','D','o','n','t','w','o','r', - 'r','y','a','b','o','u','t','t','h','e','f','u','t','u','r','e', - 'O','r','w','o','r','r','y','b','u','t','k','n','o','w','t','h', - 'a','t','K','u','r','t','V','o','n','n','e','g','u','t','s','C', - 'o','m','m','e','n','c','e','m','e','n','t','A','d','d','r','e', - 's','s','a','t','M','I','T','L','a','d','i','e','s','a','n','d', - 'g','e','n','t','l','e','m','e','n','o','f','t','h','e','c','l', - 'a','s','s','o','f','9','7','W','e','a','r','s','u','n','s','c', - 'r','e','e','n','I','f','I','c','o','u','l','d','o','f','f','e', - 'r','y','o','u','o','n','l','y','o','n','e','t','i','p','f','o', - 'r','t','h','e','f','u','t','u','r','e','s','u','n','s','c','r', - 'e','e','n','w','o','u','l','d','b','e','i','t','T','h','e','l', - 'o','n','g','t','e','r','m','b','e','n','e','f','i','t','s','o', - 'f','s','u','n','s','c','r','e','e','n','h','a','v','e','b','e', - 'e','n','p','r','o','v','e','d','b','y','s','c','i','e','n','t', - 'i','s','t','s','w','h','e','r','e','a','s','t','h','e','r','e', - 's','t','o','f','m','y','a','d','v','i','c','e','h','a','s','n', - 'o','b','a','s','i','s','m','o','r','e','r','e','l','i','a','b', - 'l','e','t','h','a','n','m','y','o','w','n','m','e','a','n','d', - 'e','r','i','n','g','e','x','p','e','r','i','e','n','c','e','I', - 'w','i','l','l','d','i','s','p','e','n','s','e','t','h','i','s', - 'a','d','v','i','c','e','n','o','w','E','n','j','o','y','t','h', - 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o', - 'f','y','o','u','r','y','o','u','t','h','O','h','n','e','v','e', - 'r','m','i','n','d','Y','o','u','w','i','l','l','n','o','t','u', - 'n','d','e','r','s','t','a','n','d','t','h','e','p','o','w','e', - 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r', - 'y','o','u','t','h','u','n','t','i','l','t','h','e','y','v','e', - 'f','a','d','e','d','B','u','t','t','r','u','s','t','m','e','i', - 'n','2','0','y','e','a','r','s','y','o','u','l','l','l','o','o', - 'k','b','a','c','k','a','t','p','h','o','t','o','s','o','f','y', - 'o','u','r','s','e','l','f','a','n','d','r','e','c','a','l','l', - 'i','n','a','w','a','y','y','o','u','c','a','n','t','g','r','a', - 's','p','n','o','w','h','o','w','m','u','c','h','p','o','s','s', - 'i','b','i','l','i','t','y','l','a','y','b','e','f','o','r','e', - 'y','o','u','a','n','d','h','o','w','f','a','b','u','l','o','u', - 's','y','o','u','r','e','a','l','l','y','l','o','o','k','e','d', - 'Y','o','u','a','r','e','n','o','t','a','s','f','a','t','a','s', - 'y','o','u','i','m','a','g','i','n','e','D','o','n','t','w','o', - 'r','r','y','a','b','o','u','t','t','h','e','f','u','t','u','r', - 'e','O','r','w','o','r','r','y','b','u','t','k','n','o','w','t', - 'h','a','t','t','s','C','o','m','m','e','n','c','e','m','e','n', - 't','A','d','d','r','e','s','s','a','t','M','I','T','L','a','d', - 'i','e','s','a','n','d','g','e','n','t','l','e','m','e','n','o', - 'f','t','h','e','c','l','a','s','s','o','f','9','7','W','e','a', - 'r','s','u','n','s','c','r','e','e','n','I','f','I','c','o','u', - 'l','d','o','f','f','e','r','y','o','u','o','n','l','y','o','n', - 'e','t','i','p','f','o','r','t','h','e','f','u','t','u','r','e', - 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m', - 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s', - 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e', - 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s', - 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e', - 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y', - 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t', - 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e', - 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n', - 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s', - 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n', - 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s', - 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t', - 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b', - 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e', - 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r', - 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i', - 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d', - 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p', - 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y', - 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m', - 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d', - 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a', - 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o', - 'u','t','h','u','n','t','i','l','t','h','e','y','v','e','f','a', - 'd','e','d','B','u','t','t','r','u','s','t','m','e','i','n','2', - '0','y','e','a','r','s','y','o','u','l','l','l','o','o','k','b', - 'a','c','k','a','t','p','h','o','t','o','s','o','f','y','o','u', - 'r','s','e','l','f','a','n','d','r','e','c','a','l','l','i','n', - 'a','w','a','y','y','o','u','c','a','n','t','g','r','a','s','p', - 'n','o','w','h','o','w','m','u','c','h','p','o','s','s','i','b', - 'i','l','i','t','y','l','a','y','b','e','f','o','r','e','y','o', - 'u','a','n','d','h','o','w','f','a','b','u','l','o','u','s','y', - 'o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o', - 'u','a','r','e','n','o','t','a','s','f','a','t','a','s','y','o', - 'u','i','m','a','g','i','n','e','D','o','n','t','w','o','r','r', - 'y','a','b','o','u','t','t','h','e','f','u','t','u','r','e','O', - 'r','w','o','r','r','y','b','u','t','k','n','o','w','t','h','a', - 't','K','u','r','t','V','o','n','n','e','g','u','t','s','C','o', - 'm','m','e','n','c','e','m','e','n','t','A','d','d','r','e','s', - 's','a','t','M','I','T','L','a','d','i','e','s','a','n','d','g', - 'e','n','t','l','e','m','e','n','o','f','t','h','e','c','l','a', - 's','s','o','f','9','7','W','e','a','r','s','u','n','s','c','r', - 'e','e','n','I','f','I','c','o','u','l','d','o','f','f','e','r', - 'y','o','u','o','n','l','y','o','n','e','t','i','p','f','o','r', - 't','h','e','f','u','t','u','r','e','s','u','n','s','c','r','e', - 'e','n','w','o','u','l','d','b','e','i','t','T','h','e','l','o', - 'n','g','t','e','r','m','b','e','n','e','f','i','t','s','o','f', - 's','u','n','s','c','r','e','e','n','h','a','v','e','b','e','e', - 'n','p','r','o','v','e','d','b','y','s','c','i','e','n','t','i', - 's','t','s','w','h','e','r','e','a','s','t','h','e','r','e','s', - 't','o','f','m','y','a','d','v','i','c','e','h','a','s','n','o', - 'b','a','s','i','s','m','o','r','e','r','e','l','i','a','b','l', - 'e','t','h','a','n','m','y','o','w','n','m','e','a','n','d','e', - 'r','i','n','g','e','x','p','e','r','i','e','n','c','e','I','w', - 'i','l','l','d','i','s','p','e','n','s','e','t','h','i','s','a', - 'd','v','i','c','e','n','o','w','E','n','j','o','y','t','h','e', - 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f', - 'y','o','u','r','y','o','u','t','h','O','h','n','e','v','e','r', - 'm','i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n', - 'd','e','r','s','t','a','n','d','t','h','e','p','o','w','e','r', - 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y', - 'o','u','t','h','u','n','t','i','l','t','h','e','y','v','e','f', - 'a','d','e','d','B','u','t','t','r','u','s','t','m','e','i','n', - '2','0','y','e','a','r','s','y','o','u','l','l','l','o','o','k', - 'b','a','c','k','a','t','p','h','o','t','o','s','o','f','y','o', - 'u','r','s','e','l','f','a','n','d','r','e','c','a','l','l','i', - 'n','a','w','a','y','y','o','u','c','a','n','t','g','r','a','s', - 'p','n','o','w','h','o','w','m','u','c','h','p','o','s','s','i', - 'b','i','l','i','t','y','l','a','y','b','e','f','o','r','e','y', - 'o','u','a','n','d','h','o','w','f','a','b','u','l','o','u','s', - 'y','o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y', - 'o','u','a','r','e','n','o','t','a','s','f','a','t','a','s','y', - 'o','u','i','m','a','g','i','n','e','D','o','n','t','w','o','r', - 'r','y','a','b','o','u','t','t','h','e','f','u','t','u','r','e', - 'O','r','w','o','r','r','y','b','u','t','k','n','o','w','t','h', - 'a','t','K','u','r','t','V','o','n','n','e','g','u','t','s','C', - 'o','m','m','e','n','c','e','m','e','n','t','A','d','d','r','e', - 's','s','a','t','M','I','T','L','a','d','i','e','s','a','n','d', - 'g','e','n','t','l','e','m','e','n','o','f','t','h','e','c','l', - 'a','s','s','o','f','9','7','W','e','a','r','s','u','n','s','c', - 'r','e','e','n','I','f','I','c','o','u','l','d','o','f','f','e', - 'r','y','o','u','o','n','l','y','o','n','e','t','i','p','f','o', - 'r','t','h','e','f','u','t','u','r','e','s','u','n','s','c','r', - 'e','e','n','w','o','u','l','d','b','e','i','t','T','h','e','l', - 'o','n','g','t','e','r','m','b','e','n','e','f','i','t','s','o', - 'f','s','u','n','s','c','r','e','e','n','h','a','v','e','b','e', - 'e','n','p','r','o','v','e','d','b','y','s','c','i','e','n','t', - 'i','s','t','s','w','h','e','r','e','a','s','t','h','e','r','e', - 's','t','o','f','m','y','a','d','v','i','c','e','h','a','s','n', - 'o','b','a','s','i','s','m','o','r','e','r','e','l','i','a','b', - 'l','e','t','h','a','n','m','y','o','w','n','m','e','a','n','d', - 'e','r','i','n','g','e','x','p','e','r','i','e','n','c','e','I', - 'w','i','l','l','d','i','s','p','e','n','s','e','t','h','i','s', - 'a','d','v','i','c','e','n','o','w','E','n','j','o','y','t','h', - 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o', - 'f','y','o','u','r','y','o','u','t','h','O','h','n','e','v','e', - 'r','m','i','n','d','Y','o','u','w','i','l','l','n','o','t','u', - 'n','d','e','r','s','t','a','n','d','t','h','e','p','o','w','e', - 'r','a','K','u','r','t','V','o','n','n','e','g','u','t','s','C', - 'o','m','m','e','n','c','e','m','e','n','t','A','d','d','r','e', - 's','s','a','t','M','I','T','L','a','d','i','e','s','a','n','d', - 'g','e','n','t','l','e','m','e','n','o','f','t','h','e','c','l', - 'a','s','s','o','f','9','7','W','e','a','r','s','u','n','s','c', - 'r','e','e','n','I','f','I','c','o','u','l','d','o','f','f','e', - 'r','y','o','u','o','n','l','y','o','n','e','t','i','p','f','o', - 'r','t','h','e','f','u','t','u','r','e','s','u','n','s','c','r', - 'e','e','n','w','o','u','l','d','b','e','i','t','T','h','e','l', - 'o','n','g','t','e','r','m','b','e','n','e','f','i','t','s','o', - 'f','s','u','n','s','c','r','e','e','n','h','a','v','e','b','e', - 'e','n','p','r','o','v','e','d','b','y','s','c','i','e','n','t', - 'i','s','t','s','w','h','e','r','e','a','s','t','h','e','r','e', - 's','t','o','f','m','y','a','d','v','i','c','e','h','a','s','n', - 'o','b','a','s','i','s','m','o','r','e','r','e','l','i','a','b', - 'l','e','t','h','a','n','m','y','o','w','n','m','e','a','n','d', - 'e','r','i','n','g','e','x','p','e','r','i','e','n','c','e','I', - 'w','i','l','l','d','i','s','p','e','n','s','e','t','h','i','s', - 'a','d','v','i','c','e','n','o','w','E','n','j','o','y','t','h', - 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o', - 'f','y','o','u','r','y','o','u','t','h','O','h','n','e','v','e', - 'r','m','i','n','d','Y','o','u','w','i','l','l','n','o','t','u', - 'n','d','e','r','s','t','a','n','d','t','h','e','p','o','w','e', - 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r', - 'y','o','u','t','h','u','n','t','i','l','t','h','e','y','v','e', - 'f','a','d','e','d','B','u','t','t','r','u','s','t','m','e','i', - 'n','2','0','y','e','a','r','s','y','o','u','l','l','l','o','o', - 'k','b','a','c','k','a','t','p','h','o','t','o','s','o','f','y', - 'o','u','r','s','e','l','f','a','n','d','r','e','c','a','l','l', - 'i','n','a','w','a','y','y','o','u','c','a','n','t','g','r','a', - 's','p','n','o','w','h','o','w','m','u','c','h','p','o','s','s', - 'i','b','i','l','i','t','y','l','a','y','b','e','f','o','r','e', - 'y','o','u','a','n','d','h','o','w','f','a','b','u','l','o','u', - 's','y','o','u','r','e','a','l','l','y','l','o','o','k','e','d', - 'Y','o','u','a','r','e','n','o','t','a','s','f','a','t','a','s', - 'y','o','u','i','m','a','g','i','n','e','D','o','n','t','w','o', - 'r','r','y','a','b','o','u','t','t','h','e','f','u','t','u','r', - 'e','O','r','w','o','r','r','y','b','u','t','k','n','o','w','t', - 'h','a','t','K','u','r','t','V','o','n','n','e','g','u','K','u', - 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e', - 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t', - 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t', - 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o', - 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n', - 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u', - 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e', - 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w', - 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t', - 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n', - 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r', - 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s', - 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f', - 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s', - 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h', - 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n', - 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l', - 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i', - 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w', - 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u', - 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n', - 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r', - 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d', - 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t', - 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e', - 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y', - 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c', - 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s', - 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w', - 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o', - 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l', - 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a', - 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u', - 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a', - 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i', - 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a', - 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w', - 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','K', - 'u','r','t','V','o','n','n','e','g','u','t','s','C','o','m','m', - 'e','n','c','e','m','e','n','t','A','d','d','r','e','s','s','a', - 't','M','I','T','L','a','d','i','e','s','a','n','d','g','e','n', - 't','l','e','m','e','n','o','f','t','h','e','c','l','a','s','s', - 'o','f','9','7','W','e','a','r','s','u','n','s','c','r','e','e', - 'n','I','f','I','c','o','u','l','d','o','f','f','e','r','y','o', - 'u','o','n','l','y','o','n','e','t','i','p','f','o','r','t','h', - 'e','f','u','t','u','r','e','s','u','n','s','c','r','e','e','n', - 'w','o','u','l','d','b','e','i','t','T','h','e','l','o','n','g', - 't','e','r','m','b','e','n','e','f','i','t','s','o','f','s','u', - 'n','s','c','r','e','e','n','h','a','v','e','b','e','e','n','p', - 'r','o','v','e','d','b','y','s','c','i','e','n','t','i','s','t', - 's','w','h','e','r','e','a','s','t','h','e','r','e','s','t','o', - 'f','m','y','a','d','v','i','c','e','h','a','s','n','o','b','a', - 's','i','s','m','o','r','e','r','e','l','i','a','b','l','e','t', - 'h','a','n','m','y','o','w','n','m','e','a','n','d','e','r','i', - 'n','g','e','x','p','e','r','i','e','n','c','e','I','w','i','l', - 'l','d','i','s','p','e','n','s','e','t','h','i','s','a','d','v', - 'i','c','e','n','o','w','E','n','j','o','y','t','h','e','p','o', - 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o', - 'u','r','y','o','u','t','h','O','h','n','e','v','e','r','m','i', - 'n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d','e', - 'r','s','t','a','n','d','t','h','e','p','o','w','e','r','a','n', - 'd','b','e','a','u','t','y','o','f','y','o','u','r','y','o','u', - 't','h','u','n','t','i','l','t','h','e','y','v','e','f','a','d', - 'e','d','B','u','t','t','r','u','s','t','m','e','i','n','2','0', - 'y','e','a','r','s','y','o','u','l','l','l','o','o','k','b','a', - 'c','k','a','t','p','h','o','t','o','s','o','f','y','o','u','r', - 's','e','l','f','a','n','d','r','e','c','a','l','l','i','n','a', - 'w','a','y','y','o','u','c','a','n','t','g','r','a','s','p','n', - 'o','w','h','o','w','m','u','c','h','p','o','s','s','i','b','i', - 'l','i','t','y','l','a','y','b','e','f','o','r','e','y','o','u', - 'a','n','d','h','o','w','f','a','b','u','l','o','u','s','y','o', - 'u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u', - 'a','r','e','n','o','t','a','s','f','a','t','a','s','y','o','u', - 'i','m','a','g','i','n','e','D','o','n','t','w','o','r','r','y', - 'a','b','o','u','t','t','h','e','f','u','t','u','r','e','O','r', - 'w','o','r','r','y','b','u','t','k','n','o','w','t','h','a','t', - 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m', - 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s', - 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e', - 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s', - 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e', - 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y', - 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t', - 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e', - 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n', - 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s', - 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n', - 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s', - 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t', - 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b', - 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e', - 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r', - 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i', - 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d', - 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p', - 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y', - 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m', - 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d', - 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a', - 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o', - 'u','t','h','u','n','t','i','l','t','h','e','y','v','e','f','a', - 'd','e','d','B','u','t','t','r','u','s','t','m','e','i','n','2', - '0','y','e','a','r','s','y','o','u','l','l','l','o','o','k','b', - 'a','c','k','a','t','p','h','o','t','o','s','o','f','y','o','u', - 'r','s','e','l','f','a','n','d','r','e','c','a','l','l','i','n', - 'a','w','a','y','y','o','u','c','a','n','t','g','r','a','s','p', - 'n','o','w','h','o','w','m','u','c','h','p','o','s','s','i','b', - 'i','l','i','t','y','l','a','y','b','e','f','o','r','e','y','o', - 'u','a','n','d','h','o','w','f','a','b','u','l','o','u','s','y', - 'o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o', - 'u','a','r','e','n','o','t','a','s','f','a','t','a','s','y','o', - 'u','i','m','a','g','i','n','e','D','o','n','t','w','o','r','r', - 'y','a','b','o','u','t','t','h','e','f','u','t','u','r','e','O', - 'r','w','o','r','r','y','b','u','t','k','n','o','w','t','h','a', - 't','t','s','C','o','m','m','e','n','c','e','m','e','n','t','A', - 'd','d','r','e','s','s','a','t','M','I','T','L','a','d','i','e', - 's','a','n','d','g','e','n','t','l','e','m','e','n','o','f','t', - 'h','e','c','l','a','s','s','o','f','9','7','W','e','a','r','s', - 'u','n','s','c','r','e','e','n','I','f','I','c','o','u','l','d', - 'o','f','f','e','r','y','o','u','o','n','l','y','o','n','e','t', - 'i','p','f','o','r','t','h','e','f','u','t','u','r','e','K','u', - 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e', - 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t', - 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t', - 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o', - 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n', - 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u', - 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e', - 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w', - 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t', - 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n', - 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r', - 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s', - 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f', - 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s', - 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h', - 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n', - 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l', - 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i', - 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w', - 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u', - 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n', - 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r', - 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d', - 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t', - 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e', - 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y', - 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c', - 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s', - 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w', - 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o', - 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l', - 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a', - 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u', - 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a', - 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i', - 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a', - 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w', - 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','K', - 'u','r','t','V','o','n','n','e','g','u','t','s','C','o','m','m', - 'e','n','c','e','m','e','n','t','A','d','d','r','e','s','s','a', - 't','M','I','T','L','a','d','i','e','s','a','n','d','g','e','n', - 't','l','e','m','e','n','o','f','t','h','e','c','l','a','s','s', - 'o','f','9','7','W','e','a','r','s','u','n','s','c','r','e','e', - 'n','I','f','I','c','o','u','l','d','o','f','f','e','r','y','o', - 'u','o','n','l','y','o','n','e','t','i','p','f','o','r','t','h', - 'e','f','u','t','u','r','e','s','u','n','s','c','r','e','e','n', - 'w','o','u','l','d','b','e','i','t','T','h','e','l','o','n','g', - 't','e','r','m','b','e','n','e','f','i','t','s','o','f','s','u', - 'n','s','c','r','e','e','n','h','a','v','e','b','e','e','n','p', - 'r','o','v','e','d','b','y','s','c','i','e','n','t','i','s','t', - 's','w','h','e','r','e','a','s','t','h','e','r','e','s','t','o', - 'f','m','y','a','d','v','i','c','e','h','a','s','n','o','b','a', - 's','i','s','m','o','r','e','r','e','l','i','a','b','l','e','t', - 'h','a','n','m','y','o','w','n','m','e','a','n','d','e','r','i', - 'n','g','e','x','p','e','r','i','e','n','c','e','I','w','i','l', - 'l','d','i','s','p','e','n','s','e','t','h','i','s','a','d','v', - 'i','c','e','n','o','w','E','n','j','o','y','t','h','e','p','o', - 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o', - 'u','r','y','o','u','t','h','O','h','n','e','v','e','r','m','i', - 'n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d','e', - 'r','s','t','a','n','d','t','h','e','p','o','w','e','r','a','n', - 'd','b','e','a','u','t','y','o','f','y','o','u','r','y','o','u', - 't','h','u','n','t','i','l','t','h','e','y','v','e','f','a','d', - 'e','d','B','u','t','t','r','u','s','t','m','e','i','n','2','0', - 'y','e','a','r','s','y','o','u','l','l','l','o','o','k','b','a', - 'c','k','a','t','p','h','o','t','o','s','o','f','y','o','u','r', - 's','e','l','f','a','n','d','r','e','c','a','l','l','i','n','a', - 'w','a','y','y','o','u','c','a','n','t','g','r','a','s','p','n', - 'o','w','h','o','w','m','u','c','h','p','o','s','s','i','b','i', - 'l','i','t','y','l','a','y','b','e','f','o','r','e','y','o','u', - 'a','n','d','h','o','w','f','a','b','u','l','o','u','s','y','o', - 'u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u', - 'a','r','e','n','o','t','a','s','f','a','t','a','s','y','o','u', - 'i','m','a','g','i','n','e','D','o','n','t','w','o','r','r','y', - 'a','b','o','u','t','t','h','e','f','u','t','u','r','e','O','r', - 'w','o','r','r','y','b','u','t','k','n','o','w','t','h','a','t', - 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m', - 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s', - 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e', - 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s', - 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e', - 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y', - 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t', - 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e', - 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n', - 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s', - 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n', - 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s', - 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t', - 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b', - 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e', - 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r', - 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i', - 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d', - 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p', - 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y', - 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m', - 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d', - 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a', - 'K','u','r','t','V','o','n','n','e','g','u','t','s','C','o','m', - 'm','e','n','c','e','m','e','n','t','A','d','d','r','e','s','s', - 'a','t','M','I','T','L','a','d','i','e','s','a','n','d','g','e', - 'n','t','l','e','m','e','n','o','f','t','h','e','c','l','a','s', - 's','o','f','9','7','W','e','a','r','s','u','n','s','c','r','e', - 'e','n','I','f','I','c','o','u','l','d','o','f','f','e','r','y', - 'o','u','o','n','l','y','o','n','e','t','i','p','f','o','r','t', - 'h','e','f','u','t','u','r','e','s','u','n','s','c','r','e','e', - 'n','w','o','u','l','d','b','e','i','t','T','h','e','l','o','n', - 'g','t','e','r','m','b','e','n','e','f','i','t','s','o','f','s', - 'u','n','s','c','r','e','e','n','h','a','v','e','b','e','e','n', - 'p','r','o','v','e','d','b','y','s','c','i','e','n','t','i','s', - 't','s','w','h','e','r','e','a','s','t','h','e','r','e','s','t', - 'o','f','m','y','a','d','v','i','c','e','h','a','s','n','o','b', - 'a','s','i','s','m','o','r','e','r','e','l','i','a','b','l','e', - 't','h','a','n','m','y','o','w','n','m','e','a','n','d','e','r', - 'i','n','g','e','x','p','e','r','i','e','n','c','e','I','w','i', - 'l','l','d','i','s','p','e','n','s','e','t','h','i','s','a','d', - 'v','i','c','e','n','o','w','E','n','j','o','y','t','h','e','p', - 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y', - 'o','u','r','y','o','u','t','h','O','h','n','e','v','e','r','m', - 'i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d', - 'e','r','s','t','a','n','d','t','h','e','p','o','w','e','r','a', - 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o', - 'u','t','h','u','n','t','i','l','t','h','e','y','v','e','f','a', - 'd','e','d','B','u','t','t','r','u','s','t','m','e','i','n','2', - '0','y','e','a','r','s','y','o','u','l','l','l','o','o','k','b', - 'a','c','k','a','t','p','h','o','t','o','s','o','f','y','o','u', - 'r','s','e','l','f','a','n','d','r','e','c','a','l','l','i','n', - 'a','w','a','y','y','o','u','c','a','n','t','g','r','a','s','p', - 'n','o','w','h','o','w','m','u','c','h','p','o','s','s','i','b', - 'i','l','i','t','y','l','a','y','b','e','f','o','r','e','y','o', - 'u','a','n','d','h','o','w','f','a','b','u','l','o','u','s','y', - 'o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o', - 'u','a','r','e','n','o','t','a','s','f','a','t','a','s','y','o', - 'u','i','m','a','g','i','n','e','D','o','n','t','w','o','r','r', - 'y','a','b','o','u','t','t','h','e','f','u','t','u','r','e','O', - 'r','w','o','r','r','y','b','u','t','k','n','o','w','t','h','a', - 't','K','u','r','t','V','o','n','n','e','g','u','K','u','r','t', - 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c', - 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I', - 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e', - 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9', - '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f', - 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n', - 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u', - 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u', - 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r', - 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c', - 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v', - 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h', - 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y', - 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s', - 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n', - 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e', - 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i', - 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e', - 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r', - 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y', - 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y', - 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t', - 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e', - 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u', - 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B', - 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a', - 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a', - 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l', - 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y', - 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h', - 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t', - 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d', - 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e', - 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e', - 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a', - 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o', - 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r', - 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r', - 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n', - 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M', - 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l', - 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f', - '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I', - 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o', - 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f', - 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o', - 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e', - 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s', - 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o', - 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w', - 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m', - 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i', - 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a', - 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g', - 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d', - 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c', - 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e', - 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r', - 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d', - 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s', - 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b', - 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h', - 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d', - 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e', - 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k', - 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e', - 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a', - 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w', - 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i', - 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n', - 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r', - 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r', - 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m', - 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b', - 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o', - 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u', - 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e', - 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t', - 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t', - 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o', - 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n', - 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u', - 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e', - 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w', - 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t', - 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n', - 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r', - 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s', - 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f', - 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s', - 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h', - 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n', - 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l', - 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i', - 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w', - 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u', - 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n', - 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r', - 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d', - 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t', - 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e', - 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y', - 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c', - 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s', - 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w', - 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o', - 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l', - 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a', - 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u', - 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a', - 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i', - 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a', - 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w', - 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','t', - 's','C','o','m','m','e','n','c','e','m','e','n','t','A','d','d', - 'r','e','s','s','a','t','M','I','T','L','a','d','i','e','s','a', - 'n','d','g','e','n','t','l','e','m','e','n','o','f','t','h','e', - 'c','l','a','s','s','o','f','9','7','W','e','a','r','s','u','n', - 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f', - 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p', - 'f','o','r','t','h','e','f','u','t','u','r','e','K','u','r','t', - 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c', - 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I', - 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e', - 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9', - '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f', - 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n', - 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u', - 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u', - 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r', - 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c', - 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v', - 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h', - 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y', - 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s', - 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n', - 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e', - 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i', - 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e', - 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r', - 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y', - 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y', - 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t', - 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e', - 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u', - 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B', - 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a', - 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a', - 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l', - 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y', - 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h', - 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t', - 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d', - 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e', - 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e', - 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a', - 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o', - 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r', - 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r', - 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n', - 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M', - 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l', - 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f', - '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I', - 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o', - 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f', - 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o', - 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e', - 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s', - 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o', - 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w', - 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m', - 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i', - 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a', - 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g', - 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d', - 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c', - 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e', - 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r', - 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d', - 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s', - 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b', - 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h', - 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d', - 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e', - 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k', - 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e', - 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a', - 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w', - 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i', - 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n', - 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r', - 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r', - 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m', - 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b', - 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o', - 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u', - 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e', - 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t', - 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t', - 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o', - 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n', - 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u', - 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e', - 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w', - 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t', - 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n', - 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r', - 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s', - 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f', - 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s', - 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h', - 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n', - 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l', - 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i', - 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w', - 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u', - 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n', - 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r', - 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d', - 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t', - 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e', - 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y', - 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c', - 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s', - 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w', - 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o', - 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l', - 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a', - 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u', - 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a', - 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i', - 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a', - 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w', - 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','s', - 'u','n','s','c','r','e','e','n','w','o','u','l','d','b','e','i', - 't','T','h','e','l','o','n','g','t','e','r','m','b','e','n','e', - 'f','i','t','s','o','f','s','u','n','s','c','r','e','e','n','h', - 'a','v','e','b','e','e','n','p','r','o','v','e','d','b','y','s', - 'c','i','e','n','t','i','s','t','s','w','h','e','r','e','a','s', - 't','h','e','r','e','s','t','o','f','m','y','a','d','v','i','c', - 'e','h','a','s','n','o','b','a','s','i','s','m','o','r','e','r', - 'e','l','i','a','b','l','e','t','h','a','n','m','y','o','w','n', - 'm','e','a','n','d','e','r','i','n','g','e','x','p','e','r','i', - 'e','n','c','e','I','w','i','l','l','d','i','s','p','e','n','s', - 'e','t','h','i','s','a','d','v','i','c','e','n','o','w','E','n', - 'j','o','y','t','h','e','p','o','w','e','r','a','n','d','b','e', - 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','O', - 'h','n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l', - 'l','n','o','t','u','n','d','e','r','s','t','a','n','d','t','h', - 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o', - 'f','y','o','u','r','y','o','u','t','h','u','n','t','i','l','t', - 'h','e','y','v','e','f','a','d','e','d','B','u','t','t','r','u', - 's','t','m','e','i','n','2','0','y','e','a','r','s','y','o','u', - 'l','l','l','o','o','k','b','a','c','k','a','t','p','h','o','t', - 'o','s','o','f','y','o','u','r','s','e','l','f','a','n','d','r', - 'e','c','a','l','l','i','n','a','w','a','y','y','o','u','c','a', - 'n','t','g','r','a','s','p','n','o','w','h','o','w','m','u','c', - 'h','p','o','s','s','i','b','i','l','i','t','y','l','a','y','b', - 'e','f','o','r','e','y','o','u','a','n','d','h','o','w','f','a', - 'b','u','l','o','u','s','y','o','u','r','e','a','l','l','y','l', - 'o','o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s', - 'f','a','t','a','s','y','o','u','i','m','a','g','i','n','e','D', - 'o','n','t','w','o','r','r','y','a','b','o','u','t','t','h','e', - 'f','u','t','u','r','e','O','r','w','o','r','r','y','b','u','t', - 'k','n','o','w','t','h','a','t','n','d','b','e','a','u','t','y', - 'o','f','y','o','u','r','y','o','u','t','h','u','n','t','i','l', - 't','h','e','y','v','e','f','a','d','e','d','B','u','t','t','r', - 'u','s','t','m','e','i','n','2','0','y','e','a','r','s','y','o', - 'u','l','l','l','o','o','k','b','a','c','k','a','t','p','h','o', - 't','o','s','o','f','y','o','u','r','s','e','l','f','a','n','d', - 'r','e','c','a','l','l','i','n','a','w','a','y','y','o','u','c', - 'a','n','t','g','r','a','s','p','n','o','w','h','o','w','m','u', - 'c','h','p','o','s','s','i','b','i','l','i','t','y','l','a','y', - 'b','e','f','o','r','e','y','o','u','a','n','d','h','o','w','f', - 'a','b','u','l','o','u','s','y','o','u','r','e','a','l','l','y', - 'l','o','o','k','e','d','Y','o','u','a','r','e','n','o','t','a', - 's','f','a','t','a','s','y','o','u','i','m','a','g','i','n','e', - 'D','o','n','t','w','o','r','r','y','a','b','o','u','t','t','h', - 'e','f','u','t','u','r','e','O','r','w','o','r','r','y','b','u', - 't','k','n','o','w','t','h','a','t','s','u','n','s','c','r','e', - 'e','n','w','o','u','l','d','b','e','i','t','T','h','e','l','o', - 'n','g','t','e','r','m','b','e','n','e','f','i','t','s','o','f', - 's','u','n','s','c','r','e','e','n','h','a','v','e','b','e','e', - 'n','p','r','o','v','e','d','b','y','s','c','i','e','n','t','i', - 's','t','s','w','h','e','r','e','a','s','t','h','e','r','e','s', - 't','o','f','m','y','a','d','v','i','c','e','h','a','s','n','o', - 'b','a','s','i','s','m','o','r','e','r','e','l','i','a','b','l', - 'e','t','h','a','n','m','y','o','w','n','m','e','a','n','d','e', - 'r','i','n','g','e','x','p','e','r','i','e','n','c','e','I','w', - 'i','l','l','d','i','s','p','e','n','s','e','t','h','i','s','a', - 'd','v','i','c','e','n','o','w','E','n','j','o','y','t','h','e', - 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f', - 'y','o','u','r','y','o','u','t','h','O','h','n','e','v','e','r', - 'm','i','n','d','Y','o','u','w','i','l','l','n','o','t','u','n', - 'd','e','r','s','t','a','n','d','t','h','e','p','o','w','e','r', - 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y', - 'o','u','t','h','u','n','t','i','l','t','h','e','y','v','e','f', - 'a','d','e','d','B','u','t','t','r','u','s','t','m','e','i','n', - '2','0','y','e','a','r','s','y','o','u','l','l','l','o','o','k', - 'b','a','c','k','a','t','p','h','o','t','o','s','o','f','y','o', - 'u','r','s','e','l','f','a','n','d','r','e','c','a','l','l','i', - 'n','a','w','a','y','y','o','u','c','a','n','t','g','r','a','s', - 'p','n','o','w','h','o','w','m','u','c','h','p','o','s','s','i', - 'b','i','l','i','t','y','l','a','y','b','e','f','o','r','e','y', - 'o','u','a','n','d','h','o','w','f','a','b','u','l','o','u','s', - 'y','o','u','r','e','a','l','l','y','l','o','o','k','e','d','Y', - 'o','u','a','r','e','n','o','t','a','s','f','a','t','a','s','y', - 'o','u','i','m','a','g','i','n','e','D','o','n','t','w','o','r', - 'r','y','a','b','o','u','t','t','h','e','f','u','t','u','r','e', - 'O','r','w','o','r','r','y','b','u','t','k','n','o','w','t','h', - 'a','t','n','d','b','e','a','u','t','y','o','f','y','o','u','r', - 'y','o','u','t','h','u','n','t','i','l','t','h','e','y','v','e', - 'f','a','d','e','d','B','u','t','t','r','u','s','t','m','e','i', - 'n','2','0','y','e','a','r','s','y','o','u','l','l','l','o','o', - 'k','b','a','c','k','a','t','p','h','o','t','o','s','o','f','y', - 'o','u','r','s','e','l','f','a','n','d','r','e','c','a','l','l', - 'i','n','a','w','a','y','y','o','u','c','a','n','t','g','r','a', - 's','p','n','o','w','h','o','w','m','u','c','h','p','o','s','s', - 'i','b','i','l','i','t','y','l','a','y','b','e','f','o','r','e', - 'y','o','u','a','n','d','h','o','w','f','a','b','u','l','o','u', - 's','y','o','u','r','e','a','l','l','y','l','o','o','k','e','d', - 'Y','o','u','a','r','e','n','o','t','a','s','f','a','t','a','s', - 'y','o','u','i','m','a','g','i','n','e','D','o','n','t','w','o', - 'r','r','y','a','b','o','u','t','t','h','e','f','u','t','u','r', - 'e','O','r','w','o','r','r','y','b','u','t','k','n','o','w','t', - 'h','a','t','s','u','n','s','c','r','e','e','n','w','o','u','l', - 'd','b','e','i','t','T','h','e','l','o','n','g','t','e','r','m', - 'b','e','n','e','f','i','t','s','o','f','s','u','n','s','c','r', - 'e','e','n','h','a','v','e','b','e','e','n','p','r','o','v','e', - 'd','b','y','s','c','i','e','n','t','i','s','t','s','w','h','e', - 'r','e','a','s','t','h','e','r','e','s','t','o','f','m','y','a', - 'd','v','i','c','e','h','a','s','n','o','b','a','s','i','s','m', - 'o','r','e','r','e','l','i','a','b','l','e','t','h','a','n','m', - 'y','o','w','n','m','e','a','n','d','e','r','i','n','g','e','x', - 'p','e','r','i','e','n','c','e','I','w','i','l','l','d','i','s', - 'p','e','n','s','e','t','h','i','s','a','d','v','i','c','e','n', - 'o','w','E','n','j','o','y','t','h','e','p','o','w','e','r','a', - 'n','d','b','e','a','u','t','y','o','f','y','o','u','r','y','o', - 'u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y','o', - 'u','w','i','l','l','n','o','t','u','n','d','e','r','s','t','a', - 'n','d','t','h','e','p','o','w','e','r','a','n','d','b','e','a', - 'u','t','y','o','f','y','o','u','r','y','o','u','t','h','u','n', - 't','i','l','t','h','e','y','v','e','f','a','d','e','d','B','u', - 't','t','r','u','s','t','m','e','i','n','2','0','y','e','a','r', - 's','y','o','u','l','l','l','o','o','k','b','a','c','k','a','t', - 'p','h','o','t','o','s','o','f','y','o','u','r','s','e','l','f', - 'a','n','d','r','e','c','a','l','l','i','n','a','w','a','y','y', - 'o','u','c','a','n','t','g','r','a','s','p','n','o','w','h','o', - 'w','m','u','c','h','p','o','s','s','i','b','i','l','i','t','y', - 'l','a','y','b','e','f','o','r','e','y','o','u','a','n','d','h', - 'o','w','f','a','b','u','l','o','u','s','y','o','u','r','e','a', - 'l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e','n', - 'o','t','a','s','f','a','t','a','s','y','o','u','i','m','a','g', - 'i','n','e','D','o','n','t','w','o','r','r','y','a','b','o','u', - 't','t','h','e','f','u','t','u','r','e','O','r','w','o','r','r', - 'y','b','u','t','k','n','o','w','t','h','a','t','b','u','t','k', - 'n','o','w','t','h','a','t','t','s','C','o','m','m','e','n','c', - 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I', - 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e', - 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9', - '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f', - 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n', - 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u', - 't','u','r','e','K','u','r','t','V','o','n','n','e','g','u','t', - 's','C','o','m','m','e','n','c','e','m','e','n','t','A','d','d', - 'r','e','s','s','a','t','M','I','T','L','a','d','i','e','s','a', - 'n','d','g','e','n','t','l','e','m','e','n','o','f','t','h','e', - 'c','l','a','s','s','o','f','9','7','W','e','a','r','s','u','n', - 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f', - 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p', - 'f','o','r','t','h','e','f','u','t','u','r','e','s','u','n','s', - 'c','r','e','e','n','w','o','u','l','d','b','e','i','t','T','h', - 'e','l','o','n','g','t','e','r','m','b','e','n','e','f','i','t', - 's','o','f','s','u','n','s','c','r','e','e','n','h','a','v','e', - 'b','e','e','n','p','r','o','v','e','d','b','y','s','c','i','e', - 'n','t','i','s','t','s','w','h','e','r','e','a','s','t','h','e', - 'r','e','s','t','o','f','m','y','a','d','v','i','c','e','h','a', - 's','n','o','b','a','s','i','s','m','o','r','e','r','e','l','i', - 'a','b','l','e','t','h','a','n','m','y','o','w','n','m','e','a', - 'n','d','e','r','i','n','g','e','x','p','e','r','i','e','n','c', - 'e','I','w','i','l','l','d','i','s','p','e','n','s','e','t','h', - 'i','s','a','d','v','i','c','e','n','o','w','E','n','j','o','y', - 't','h','e','p','o','w','e','r','a','n','d','b','e','a','u','t', - 'y','o','f','y','o','u','r','y','o','u','t','h','O','h','n','e', - 'v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n','o', - 't','u','n','d','e','r','s','t','a','n','d','t','h','e','p','o', - 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o', - 'u','r','y','o','u','t','h','u','n','t','i','l','t','h','e','y', - 'v','e','f','a','d','e','d','B','u','t','t','r','u','s','t','m', - 'e','i','n','2','0','y','e','a','r','s','y','o','u','l','l','l', - 'o','o','k','b','a','c','k','a','t','p','h','o','t','o','s','o', - 'f','y','o','u','r','s','e','l','f','a','n','d','r','e','c','a', - 'l','l','i','n','a','w','a','y','y','o','u','c','a','n','t','g', - 'r','a','s','p','n','o','w','h','o','w','m','u','c','h','p','o', - 's','s','i','b','i','l','i','t','y','l','a','y','b','e','f','o', - 'r','e','y','o','u','a','n','d','h','o','w','f','a','b','u','l', - 'o','u','s','y','o','u','r','e','a','l','l','y','l','o','o','k', - 'e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a','t', - 'a','s','y','o','u','i','m','a','g','i','n','e','D','o','n','t', - 'w','o','r','r','y','a','b','o','u','t','t','h','e','f','u','t', - 'u','r','e','O','r','w','o','r','r','y','b','u','t','k','n','o', - 'w','t','h','a','t','K','u','r','t','V','o','n','n','e','g','u', - 't','s','C','o','m','m','e','n','c','e','m','e','n','t','A','d', - 'd','r','e','s','s','a','t','M','I','T','L','a','d','i','e','s', - 'a','n','d','g','e','n','t','l','e','m','e','n','o','f','t','h', - 'e','c','l','a','s','s','o','f','9','7','W','e','a','r','s','u', - 'n','s','c','r','e','e','n','I','f','I','c','o','u','l','d','o', - 'f','f','e','r','y','o','u','o','n','l','y','o','n','e','t','i', - 'p','f','o','r','t','h','e','f','u','t','u','r','e','s','u','n', - 's','c','r','e','e','n','w','o','u','l','d','b','e','i','t','T', - 'h','e','l','o','n','g','t','e','r','m','b','e','n','e','f','i', - 't','s','o','f','s','u','n','s','c','r','e','e','n','h','a','v', - 'e','b','e','e','n','p','r','o','v','e','d','b','y','s','c','i', - 'e','n','t','i','s','t','s','w','h','e','r','e','a','s','t','h', - 'e','r','e','s','t','o','f','m','y','a','d','v','i','c','e','h', - 'a','s','n','o','b','a','s','i','s','m','o','r','e','r','e','l', - 'i','a','b','l','e','t','h','a','n','m','y','o','w','n','m','e', - 'a','n','d','e','r','i','n','g','e','x','p','e','r','i','e','n', - 'c','e','I','w','i','l','l','d','i','s','p','e','n','s','e','t', - 'h','i','s','a','d','v','i','c','e','n','o','w','E','n','j','o', - 'y','t','h','e','p','o','w','e','r','a','n','d','b','e','a','u', - 't','y','o','f','y','o','u','r','y','o','u','t','h','O','h','n', - 'e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n', - 'o','t','u','n','d','e','r','s','t','a','n','d','t','h','e','p', - 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y', - 'o','u','r','y','o','u','t','h','u','n','t','i','l','t','h','e', - 'y','v','e','f','a','d','e','d','B','u','t','t','r','u','s','t', - 'm','e','i','n','2','0','y','e','a','r','s','y','o','u','l','l', - 'l','o','o','k','b','a','c','k','a','t','p','h','o','t','o','s', - 'o','f','y','o','u','r','s','e','l','f','a','n','d','r','e','c', - 'a','l','l','i','n','a','w','a','y','y','o','u','c','a','n','t', - 'g','r','a','s','p','n','o','w','h','o','w','m','u','c','h','p', - 'o','s','s','i','b','i','l','i','t','y','l','a','y','b','e','f', - 'o','r','e','y','o','u','a','n','d','h','o','w','f','a','b','u', - 'l','o','u','s','y','o','u','r','e','a','l','l','y','l','o','o', - 'k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a', - 't','a','s','y','o','u','i','m','a','g','i','n','e','D','o','n', - 't','w','o','r','r','y','a','b','o','u','t','t','h','e','f','u', - 't','u','r','e','O','r','w','o','r','r','y','b','u','t','k','n', - 'o','w','t','h','a','t','K','u','r','t','V','o','n','n','e','g', - 'u','t','s','C','o','m','m','e','n','c','e','m','e','n','t','A', - 'd','d','r','e','s','s','a','t','M','I','T','L','a','d','i','e', - 's','a','n','d','g','e','n','t','l','e','m','e','n','o','f','t', - 'h','e','c','l','a','s','s','o','f','9','7','W','e','a','r','s', - 'u','n','s','c','r','e','e','n','I','f','I','c','o','u','l','d', - 'o','f','f','e','r','y','o','u','o','n','l','y','o','n','e','t', - 'i','p','f','o','r','t','h','e','f','u','t','u','r','e','s','u', - 'n','s','c','r','e','e','n','w','o','u','l','d','b','e','i','t', - 'T','h','e','l','o','n','g','t','e','r','m','b','e','n','e','f', - 'i','t','s','o','f','s','u','n','s','c','r','e','e','n','h','a', - 'v','e','b','e','e','n','p','r','o','v','e','d','b','y','s','c', - 'i','e','n','t','i','s','t','s','w','h','e','r','e','a','s','t', - 'h','e','r','e','s','t','o','f','m','y','a','d','v','i','c','e', - 'h','a','s','n','o','b','a','s','i','s','m','o','r','e','r','e', - 'l','i','a','b','l','e','t','h','a','n','m','y','o','w','n','m', - 'e','a','n','d','e','r','i','n','g','e','x','p','e','r','i','e', - 'n','c','e','I','w','i','l','l','d','i','s','p','e','n','s','e', - 't','h','i','s','a','d','v','i','c','e','n','o','w','E','n','j', - 'o','y','t','h','e','p','o','w','e','r','a','n','d','b','e','a', - 'u','t','y','o','f','y','o','u','r','y','o','u','t','h','O','h', - 'n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l', - 'n','o','t','u','n','d','e','r','s','t','a','n','d','t','h','e', - 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f', - 'y','o','u','r','y','o','u','t','h','u','n','t','i','l','t','h', - 'e','y','v','e','f','a','d','e','d','B','u','t','t','r','u','s', - 't','m','e','i','n','2','0','y','e','a','r','s','y','o','u','l', - 'l','l','o','o','k','b','a','c','k','a','t','p','h','o','t','o', - 's','o','f','y','o','u','r','s','e','l','f','a','n','d','r','e', - 'c','a','l','l','i','n','a','w','a','y','y','o','u','c','a','n', - 't','g','r','a','s','p','n','o','w','h','o','w','m','u','c','h', - 'p','o','s','s','i','b','i','l','i','t','y','l','a','y','b','e', - 'f','o','r','e','y','o','u','a','n','d','h','o','w','f','a','b', - 'u','l','o','u','s','y','o','u','r','e','a','l','l','y','l','o', - 'o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f', - 'a','t','a','s','y','o','u','i','m','a','g','i','n','e','D','o', - 'n','t','w','o','r','r','y','a','b','o','u','t','t','h','e','f', - 'u','t','u','r','e','O','r','w','o','r','r','y','b','u','t','k', - 'n','o','w','t','h','a','t','s','u','n','s','c','r','e','e','n', - 'w','o','u','l','d','b','e','i','t','T','h','e','l','o','n','g', - 't','e','r','m','b','e','n','e','f','i','t','s','o','f','s','u', - 'n','s','c','r','e','e','n','h','a','v','e','b','e','e','n','p', - 'r','o','v','e','d','b','y','s','c','i','e','n','t','i','s','t', - 's','w','h','e','r','e','a','s','t','h','e','r','e','s','t','o', - 'f','m','y','a','d','v','i','c','e','h','a','s','n','o','b','a', - 's','i','s','m','o','r','e','r','e','l','i','a','b','l','e','t', - 'h','a','n','m','y','o','w','n','m','e','a','n','d','e','r','i', - 'n','g','e','x','p','e','r','i','e','n','c','e','I','w','i','l', - 'l','d','i','s','p','e','n','s','e','t','h','i','s','a','d','v', - 'i','c','e','n','o','w','E','n','j','o','y','t','h','e','p','o', - 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o', - 'u','r','y','o','u','t','h','O','h','n','e','v','e','r','m','i', - 'n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d','e', - 'r','s','t','a','n','d','t','h','e','p','o','w','e','r','a','n', - 'd','b','e','a','u','t','y','o','f','y','o','u','r','y','o','u', - 't','h','u','n','t','i','l','t','h','e','y','v','e','f','a','d', - 'e','d','B','u','t','t','r','u','s','t','m','e','i','n','2','0', - 'y','e','a','r','s','y','o','u','l','l','l','o','o','k','b','a', - 'c','k','a','t','p','h','o','t','o','s','o','f','y','o','u','r', - 's','e','l','f','a','n','d','r','e','c','a','l','l','i','n','a', - 'w','a','y','y','o','u','c','a','n','t','g','r','a','s','p','n', - 'o','w','h','o','w','m','u','c','h','p','o','s','s','i','b','i', - 'l','i','t','y','l','a','y','b','e','f','o','r','e','y','o','u', - 'a','n','d','h','o','w','f','a','b','u','l','o','u','s','y','o', - 'u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u', - 'a','r','e','n','o','t','a','s','f','a','t','a','s','y','o','u', - 'i','m','a','g','i','n','e','D','o','n','t','w','o','r','r','y', - 'a','b','o','u','t','t','h','e','f','u','t','u','r','e','O','r', - 'w','o','r','r','y','b','u','t','k','n','o','w','t','h','a','t', - '\n', 'l','a','s','s','o','f','9','7','W','e','a','r','s','u','n', - 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f', - 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p', - 'f','o','r','t','h','e','f','u','t','u','r','e','K','u','r','t', - 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c', - 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I', - 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e', - 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9', - '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f', - 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n', - 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u', - 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u', - 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r', - 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c', - 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v', - 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h', - 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y', - 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s', - 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n', - 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e', - 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i', - 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e', - 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r', - 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y', - 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y', - 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t', - 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e', - 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u', - 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B', - 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a', - 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a', - 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l', - 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y', - 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h', - 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t', - 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d', - 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e', - 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e', - 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a', - 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o', - 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r', - 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r', - 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n', - 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M', - 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l', - 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f', - '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I', - 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o', - 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f', - 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o', - 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e', - 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s', - 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o', - 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w', - 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m', - 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i', - 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a', - 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g', - 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d', - 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c', - 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e', - 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r', - 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d', - 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s', - 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b', - 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h', - 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d', - 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e', - 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k', - 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e', - 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a', - 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w', - 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i', - 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n', - 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r', - 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r', - 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m', - 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b', - 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o', - 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u', - 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e', - 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t', - 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t', - 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o', - 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n', - 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u', - 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e', - 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w', - 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t', - 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n', - 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r', - 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s', - 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f', - 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s', - 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h', - 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n', - 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l', - 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i', - 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w', - 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u', - 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n', - 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r', - 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d', - 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t', - 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e', - 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y', - 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c', - 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s', - 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w', - 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o', - 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l', - 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a', - 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u', - 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a', - 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i', - 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a', - 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w', - 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','s', - 'u','n','s','c','r','e','e','n','w','o','u','l','d','b','e','i', - 't','T','h','e','l','o','n','g','t','e','r','m','b','e','n','e', - 'f','i','t','s','o','f','s','u','n','s','c','r','e','e','n','h', - 'a','v','e','b','e','e','n','p','r','o','v','e','d','b','y','s', - 'c','i','e','n','t','i','s','t','s','w','h','e','r','e','a','s', - 't','h','e','r','e','s','t','o','f','m','y','a','d','v','i','c', - 'e','h','a','s','n','o','b','a','s','i','s','m','o','r','e','r', - 'e','l','i','a','b','l','e','t','h','a','n','m','y','o','w','n', - 'm','e','a','n','d','e','r','i','n','g','e','x','p','e','r','i', - 'e','n','c','e','I','w','i','l','l','d','i','s','p','e','n','s', - 'e','t','h','i','s','a','d','v','i','c','e','n','o','w','E','n', - 'j','o','y','t','h','e','p','o','w','e','r','a','n','d','b','e', - 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','O', - 'h','n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l', - 'l','n','o','t','u','n','d','e','r','s','t','a','n','d','t','h', - 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o', - 'f','y','o','u','r','y','o','u','t','h','u','n','t','i','l','t', - 'h','e','y','v','e','f','a','d','e','d','B','u','t','t','r','u', - 's','t','m','e','i','n','2','0','y','e','a','r','s','y','o','u', - 'l','l','l','o','o','k','b','a','c','k','a','t','p','h','o','t', - 'o','s','o','f','y','o','u','r','s','e','l','f','a','n','d','r', - 'e','c','a','l','l','i','n','a','w','a','y','y','o','u','c','a', - 'n','t','g','r','a','s','p','n','o','w','h','o','w','m','u','c', - 'h','p','o','s','s','i','b','i','l','i','t','y','l','a','y','b', - 'e','f','o','r','e','y','o','u','a','n','d','h','o','w','f','a', - 'b','u','l','o','u','s','y','o','u','r','e','a','l','l','y','l', - 'o','o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s', - 'f','a','t','a','s','y','o','u','i','m','a','g','i','n','e','D', - 'o','n','t','w','o','r','r','y','a','b','o','u','t','t','h','e', - 'f','u','t','u','r','e','O','r','w','o','r','r','y','b','u','t', - 'k','n','o','w','t','h','a','t','\n', 'l','a','s','s','o','f','9', - '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f', - 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n', - 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u', - 't','u','r','e','K','u','r','t','V','o','n','n','e','g','u','t', - 's','C','o','m','m','e','n','c','e','m','e','n','t','A','d','d', - 'r','e','s','s','a','t','M','I','T','L','a','d','i','e','s','a', - 'n','d','g','e','n','t','l','e','m','e','n','o','f','t','h','e', - 'c','l','a','s','s','o','f','9','7','W','e','a','r','s','u','n', - 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f', - 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p', - 'f','o','r','t','h','e','f','u','t','u','r','e','s','u','n','s', - 'c','r','e','e','n','w','o','u','l','d','b','e','i','t','T','h', - 'e','l','o','n','g','t','e','r','m','b','e','n','e','f','i','t', - 's','o','f','s','u','n','s','c','r','e','e','n','h','a','v','e', - 'b','e','e','n','p','r','o','v','e','d','b','y','s','c','i','e', - 'n','t','i','s','t','s','w','h','e','r','e','a','s','t','h','e', - 'r','e','s','t','o','f','m','y','a','d','v','i','c','e','h','a', - 's','n','o','b','a','s','i','s','m','o','r','e','r','e','l','i', - 'a','b','l','e','t','h','a','n','m','y','o','w','n','m','e','a', - 'n','d','e','r','i','n','g','e','x','p','e','r','i','e','n','c', - 'e','I','w','i','l','l','d','i','s','p','e','n','s','e','t','h', - 'i','s','a','d','v','i','c','e','n','o','w','E','n','j','o','y', - 't','h','e','p','o','w','e','r','a','n','d','b','e','a','u','t', - 'y','o','f','y','o','u','r','y','o','u','t','h','O','h','n','e', - 'v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n','o', - 't','u','n','d','e','r','s','t','a','n','d','t','h','e','p','o', - 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o', - 'u','r','y','o','u','t','h','u','n','t','i','l','t','h','e','y', - 'v','e','f','a','d','e','d','B','u','t','t','r','u','s','t','m', - 'e','i','n','2','0','y','e','a','r','s','y','o','u','l','l','l', - 'o','o','k','b','a','c','k','a','t','p','h','o','t','o','s','o', - 'f','y','o','u','r','s','e','l','f','a','n','d','r','e','c','a', - 'l','l','i','n','a','w','a','y','y','o','u','c','a','n','t','g', - 'r','a','s','p','n','o','w','h','o','w','m','u','c','h','p','o', - 's','s','i','b','i','l','i','t','y','l','a','y','b','e','f','o', - 'r','e','y','o','u','a','n','d','h','o','w','f','a','b','u','l', - 'o','u','s','y','o','u','r','e','a','l','l','y','l','o','o','k', - 'e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a','t', - 'a','s','y','o','u','i','m','a','g','i','n','e','D','o','n','t', - 'w','o','r','r','y','a','b','o','u','t','t','h','e','f','u','t', - 'u','r','e','O','r','w','o','r','r','y','b','u','t','k','n','o', - 'w','t','h','a','t','K','u','r','t','V','o','n','n','e','g','u', - 't','s','C','o','m','m','e','n','c','e','m','e','n','t','A','d', - 'd','r','e','s','s','a','t','M','I','T','L','a','d','i','e','s', - 'a','n','d','g','e','n','t','l','e','m','e','n','o','f','t','h', - 'e','c','l','a','s','s','o','f','9','7','W','e','a','r','s','u', - 'n','s','c','r','e','e','n','I','f','I','c','o','u','l','d','o', - 'f','f','e','r','y','o','u','o','n','l','y','o','n','e','t','i', - 'p','f','o','r','t','h','e','f','u','t','u','r','e','s','u','n', - 's','c','r','e','e','n','w','o','u','l','d','b','e','i','t','T', - 'h','e','l','o','n','g','t','e','r','m','b','e','n','e','f','i', - 't','s','o','f','s','u','n','s','c','r','e','e','n','h','a','v', - 'e','b','e','e','n','p','r','o','v','e','d','b','y','s','c','i', - 'e','n','t','i','s','t','s','w','h','e','r','e','a','s','t','h', - 'e','r','e','s','t','o','f','m','y','a','d','v','i','c','e','h', - 'a','s','n','o','b','a','s','i','s','m','o','r','e','r','e','l', - 'i','a','b','l','e','t','h','a','n','m','y','o','w','n','m','e', - 'a','n','d','e','r','i','n','g','e','x','p','e','r','i','e','n', - 'c','e','I','w','i','l','l','d','i','s','p','e','n','s','e','t', - 'h','i','s','a','d','v','i','c','e','n','o','w','E','n','j','o', - 'y','t','h','e','p','o','w','e','r','a','n','d','b','e','a','u', - 't','y','o','f','y','o','u','r','y','o','u','t','h','O','h','n', - 'e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n', - 'o','t','u','n','d','e','r','s','t','a','n','d','t','h','e','p', - 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y', - 'o','u','r','y','o','u','t','h','u','n','t','i','l','t','h','e', - 'y','v','e','f','a','d','e','d','B','u','t','t','r','u','s','t', - 'm','e','i','n','2','0','y','e','a','r','s','y','o','u','l','l', - 'l','o','o','k','b','a','c','k','a','t','p','h','o','t','o','s', - 'o','f','y','o','u','r','s','e','l','f','a','n','d','r','e','c', - 'a','l','l','i','n','a','w','a','y','y','o','u','c','a','n','t', - 'g','r','a','s','p','n','o','w','h','o','w','m','u','c','h','p', - 'o','s','s','i','b','i','l','i','t','y','l','a','y','b','e','f', - 'o','r','e','y','o','u','a','n','d','h','o','w','f','a','b','u', - 'l','o','u','s','y','o','u','r','e','a','l','l','y','l','o','o', - 'k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a', - 't','a','s','y','o','u','i','m','a','g','i','n','e','D','o','n', - 't','w','o','r','r','y','a','b','o','u','t','t','h','e','f','u', - 't','u','r','e','O','r','w','o','r','r','y','b','u','t','k','n', - 'o','w','t','h','a','t','K','u','r','t','V','o','n','n','e','g', - 'u','t','s','C','o','m','m','e','n','c','e','m','e','n','t','A', - 'd','d','r','e','s','s','a','t','M','I','T','L','a','d','i','e', - 's','a','n','d','g','e','n','t','l','e','m','e','n','o','f','t', - 'h','e','c','l','a','s','s','o','f','9','7','W','e','a','r','s', - 'u','n','s','c','r','e','e','n','I','f','I','c','o','u','l','d', - 'o','f','f','e','r','y','o','u','o','n','l','y','o','n','e','t', - 'i','p','f','o','r','t','h','e','f','u','t','u','r','e','s','u', - 'n','s','c','r','e','e','n','w','o','u','l','d','b','e','i','t', - 'T','h','e','l','o','n','g','t','e','r','m','b','e','n','e','f', - 'i','t','s','o','f','s','u','n','s','c','r','e','e','n','h','a', - 'v','e','b','e','e','n','p','r','o','v','e','d','b','y','s','c', - 'i','e','n','t','i','s','t','s','w','h','e','r','e','a','s','t', - 'h','e','r','e','s','t','o','f','m','y','a','d','v','i','c','e', - 'h','a','s','n','o','b','a','s','i','s','m','o','r','e','r','e', - 'l','i','a','b','l','e','t','h','a','n','m','y','o','w','n','m', - 'e','a','n','d','e','r','i','n','g','e','x','p','e','r','i','e', - 'n','c','e','I','w','i','l','l','d','i','s','p','e','n','s','e', - 't','h','i','s','a','d','v','i','c','e','n','o','w','E','n','j', - 'o','y','t','h','e','p','o','w','e','r','a','n','d','b','e','a', - 'u','t','y','o','f','y','o','u','r','y','o','u','t','h','O','h', - 'n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l', - 'n','o','t','u','n','d','e','r','s','t','a','n','d','t','h','e', - 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f', - 'y','o','u','r','y','o','u','t','h','u','n','t','i','l','t','h', - 'e','y','v','e','f','a','d','e','d','B','u','t','t','r','u','s', - 't','m','e','i','n','2','0','y','e','a','r','s','y','o','u','l', - 'l','l','o','o','k','b','a','c','k','a','t','p','h','o','t','o', - 's','o','f','y','o','u','r','s','e','l','f','a','n','d','r','e', - 'c','a','l','l','i','n','a','w','a','y','y','o','u','c','a','n', - 't','g','r','a','s','p','n','o','w','h','o','w','m','u','c','h', - 'p','o','s','s','i','b','i','l','i','t','y','l','a','y','b','e', - 'f','o','r','e','y','o','u','a','n','d','h','o','w','f','a','b', - 'u','l','o','u','s','y','o','u','r','e','a','l','l','y','l','o', - 'o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f', - 'a','t','a','s','y','o','u','i','m','a','g','i','n','e','D','o', - 'n','t','w','o','r','r','y','a','b','o','u','t','t','h','e','f', - 'u','t','u','r','e','O','r','w','o','r','r','y','b','u','t','k', - 'n','o','w','t','h','a','t','s','u','n','s','c','r','e','e','n', - 'w','o','u','l','d','b','e','i','t','T','h','e','l','o','n','g', - 't','e','r','m','b','e','n','e','f','i','t','s','o','f','s','u', - 'n','s','c','r','e','e','n','h','a','v','e','b','e','e','n','p', - 'r','o','v','e','d','b','y','s','c','i','e','n','t','i','s','t', - 's','w','h','e','r','e','a','s','t','h','e','r','e','s','t','o', - 'f','m','y','a','d','v','i','c','e','h','a','s','n','o','b','a', - 's','i','s','m','o','r','e','r','e','l','i','a','b','l','e','t', - 'h','a','n','m','y','o','w','n','m','e','a','n','d','e','r','i', - 'n','g','e','x','p','e','r','i','e','n','c','e','I','w','i','l', - 'l','d','i','s','p','e','n','s','e','t','h','i','s','a','d','v', - 'i','c','e','n','o','w','E','n','j','o','y','t','h','e','p','o', - 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o', - 'u','r','y','o','u','t','h','O','h','n','e','v','e','r','m','i', - 'n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d','e', - 'r','s','t','a','n','d','t','h','e','p','o','w','e','r','a','n', - 'd','b','e','a','u','t','y','o','f','y','o','u','r','y','o','u', - 't','h','u','n','t','i','l','t','h','e','y','v','e','f','a','d', - 'e','d','B','u','t','t','r','u','s','t','m','e','i','n','2','0', - 'y','e','a','r','s','y','o','u','l','l','l','o','o','k','b','a', - 'c','k','a','t','p','h','o','t','o','s','o','f','y','o','u','r', - 's','e','l','f','a','n','d','r','e','c','a','l','l','i','n','a', - 'w','a','y','y','o','u','c','a','n','t','g','r','a','s','p','n', - 'o','w','h','o','w','m','u','c','h','p','o','s','s','i','b','i', - 'l','i','t','y','l','a','y','b','e','f','o','r','e','y','o','u', - 'a','n','d','h','o','w','f','a','b','u','l','o','u','s','y','o', - 'u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u', - 'a','r','e','n','o','t','a','s','f','a','t','a','s','y','o','u', - 'i','m','a','g','i','n','e','D','o','n','t','w','o','r','r','y', - 'a','b','o','u','t','t','h','e','f','u','t','u','r','e','O','r', - 'w','o','r','r','y','b','u','t','k','n','o','w','t','h','a','t', - '\n', 'l','a','s','s','o','f','9','7','W','e','a','r','s','u','n', - 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f', - 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p', - 'f','o','r','t','h','e','f','u','t','u','r','e','K','u','r','t', - 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c', - 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I', - 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e', - 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9', - '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f', - 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n', - 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u', - 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u', - 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r', - 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c', - 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v', - 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h', - 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y', - 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s', - 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n', - 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e', - 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i', - 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e', - 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r', - 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y', - 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y', - 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t', - 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e', - 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u', - 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B', - 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a', - 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a', - 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l', - 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y', - 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h', - 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t', - 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d', - 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e', - 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e', - 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a', - 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o', - 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r', - 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r', - 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n', - 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M', - 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l', - 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f', - '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I', - 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o', - 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f', - 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o', - 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e', - 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s', - 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o', - 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w', - 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m', - 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i', - 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a', - 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g', - 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d', - 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c', - 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e', - 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r', - 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d', - 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s', - 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b', - 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h', - 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d', - 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e', - 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k', - 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e', - 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a', - 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w', - 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i', - 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n', - 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r', - 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r', - 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m', - 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b', - 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o', - 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u', - 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e', - 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t', - 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t', - 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o', - 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n', - 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u', - 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e', - 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w', - 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t', - 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n', - 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r', - 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s', - 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f', - 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s', - 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h', - 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n', - 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l', - 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i', - 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w', - 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u', - 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n', - 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r', - 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d', - 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t', - 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e', - 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y', - 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c', - 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s', - 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w', - 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o', - 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l', - 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a', - 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u', - 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a', - 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i', - 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a', - 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w', - 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','s', - 'u','n','s','c','r','e','e','n','w','o','u','l','d','b','e','i', - 't','T','h','e','l','o','n','g','t','e','r','m','b','e','n','e', - 'f','i','t','s','o','f','s','u','n','s','c','r','e','e','n','h', - 'a','v','e','b','e','e','n','p','r','o','v','e','d','b','y','s', - 'c','i','e','n','t','i','s','t','s','w','h','e','r','e','a','s', - 't','h','e','r','e','s','t','o','f','m','y','a','d','v','i','c', - 'e','h','a','s','n','o','b','a','s','i','s','m','o','r','e','r', - 'e','l','i','a','b','l','e','t','h','a','n','m','y','o','w','n', - 'm','e','a','n','d','e','r','i','n','g','e','x','p','e','r','i', - 'e','n','c','e','I','w','i','l','l','d','i','s','p','e','n','s', - 'e','t','h','i','s','a','d','v','i','c','e','n','o','w','E','n', - 'j','o','y','t','h','e','p','o','w','e','r','a','n','d','b','e', - 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','O', - 'h','n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l', - 'l','n','o','t','u','n','d','e','r','s','t','a','n','d','t','h', - 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o', - 'f','y','o','u','r','y','o','u','t','h','u','n','t','i','l','t', - 'h','e','y','v','e','f','a','d','e','d','B','u','t','t','r','u', - 's','t','m','e','i','n','2','0','y','e','a','r','s','y','o','u', - 'l','l','l','o','o','k','b','a','c','k','a','t','p','h','o','t', - 'o','s','o','f','y','o','u','r','s','e','l','f','a','n','d','r', - 'e','c','a','l','l','i','n','a','w','a','y','y','o','u','c','a', - 'n','t','g','r','a','s','p','n','o','w','h','o','w','m','u','c', - 'h','p','o','s','s','i','b','i','l','i','t','y','l','a','y','b', - 'e','f','o','r','e','y','o','u','a','n','d','h','o','w','f','a', - 'b','u','l','o','u','s','y','o','u','r','e','a','l','l','y','l', - 'o','o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s', - 'f','a','t','a','s','y','o','u','i','m','a','g','i','n','e','D', - 'o','n','t','w','o','r','r','y','a','b','o','u','t','t','h','e', - 'f','u','t','u','r','e','O','r','w','o','r','r','y','b','u','t', - 'k','n','o','w','t','h','a','t','\n', 'l','a','s','s','o','f','9', - '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f', - 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n', - 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u', - 't','u','r','e','K','u','r','t','V','o','n','n','e','g','u','t', - 's','C','o','m','m','e','n','c','e','m','e','n','t','A','d','d', - 'r','e','s','s','a','t','M','I','T','L','a','d','i','e','s','a', - 'n','d','g','e','n','t','l','e','m','e','n','o','f','t','h','e', - 'c','l','a','s','s','o','f','9','7','W','e','a','r','s','u','n', - 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f', - 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p', - 'f','o','r','t','h','e','f','u','t','u','r','e','s','u','n','s', - 'c','r','e','e','n','w','o','u','l','d','b','e','i','t','T','h', - 'e','l','o','n','g','t','e','r','m','b','e','n','e','f','i','t', - 's','o','f','s','u','n','s','c','r','e','e','n','h','a','v','e', - 'b','e','e','n','p','r','o','v','e','d','b','y','s','c','i','e', - 'n','t','i','s','t','s','w','h','e','r','e','a','s','t','h','e', - 'r','e','s','t','o','f','m','y','a','d','v','i','c','e','h','a', - 's','n','o','b','a','s','i','s','m','o','r','e','r','e','l','i', - 'a','b','l','e','t','h','a','n','m','y','o','w','n','m','e','a', - 'n','d','e','r','i','n','g','e','x','p','e','r','i','e','n','c', - 'e','I','w','i','l','l','d','i','s','p','e','n','s','e','t','h', - 'i','s','a','d','v','i','c','e','n','o','w','E','n','j','o','y', - 't','h','e','p','o','w','e','r','a','n','d','b','e','a','u','t', - 'y','o','f','y','o','u','r','y','o','u','t','h','O','h','n','e', - 'v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n','o', - 't','u','n','d','e','r','s','t','a','n','d','t','h','e','p','o', - 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o', - 'u','r','y','o','u','t','h','u','n','t','i','l','t','h','e','y', - 'v','e','f','a','d','e','d','B','u','t','t','r','u','s','t','m', - 'e','i','n','2','0','y','e','a','r','s','y','o','u','l','l','l', - 'o','o','k','b','a','c','k','a','t','p','h','o','t','o','s','o', - 'f','y','o','u','r','s','e','l','f','a','n','d','r','e','c','a', - 'l','l','i','n','a','w','a','y','y','o','u','c','a','n','t','g', - 'r','a','s','p','n','o','w','h','o','w','m','u','c','h','p','o', - 's','s','i','b','i','l','i','t','y','l','a','y','b','e','f','o', - 'r','e','y','o','u','a','n','d','h','o','w','f','a','b','u','l', - 'o','u','s','y','o','u','r','e','a','l','l','y','l','o','o','k', - 'e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a','t', - 'a','s','y','o','u','i','m','a','g','i','n','e','D','o','n','t', - 'w','o','r','r','y','a','b','o','u','t','t','h','e','f','u','t', - 'u','r','e','O','r','w','o','r','r','y','b','u','t','k','n','o', - 'w','t','h','a','t','K','u','r','t','V','o','n','n','e','g','u', - 't','s','C','o','m','m','e','n','c','e','m','e','n','t','A','d', - 'd','r','e','s','s','a','t','M','I','T','L','a','d','i','e','s', - 'a','n','d','g','e','n','t','l','e','m','e','n','o','f','t','h', - 'e','c','l','a','s','s','o','f','9','7','W','e','a','r','s','u', - 'n','s','c','r','e','e','n','I','f','I','c','o','u','l','d','o', - 'f','f','e','r','y','o','u','o','n','l','y','o','n','e','t','i', - 'p','f','o','r','t','h','e','f','u','t','u','r','e','s','u','n', - 's','c','r','e','e','n','w','o','u','l','d','b','e','i','t','T', - 'h','e','l','o','n','g','t','e','r','m','b','e','n','e','f','i', - 't','s','o','f','s','u','n','s','c','r','e','e','n','h','a','v', - 'e','b','e','e','n','p','r','o','v','e','d','b','y','s','c','i', - 'e','n','t','i','s','t','s','w','h','e','r','e','a','s','t','h', - 'e','r','e','s','t','o','f','m','y','a','d','v','i','c','e','h', - 'a','s','n','o','b','a','s','i','s','m','o','r','e','r','e','l', - 'i','a','b','l','e','t','h','a','n','m','y','o','w','n','m','e', - 'a','n','d','e','r','i','n','g','e','x','p','e','r','i','e','n', - 'c','e','I','w','i','l','l','d','i','s','p','e','n','s','e','t', - 'h','i','s','a','d','v','i','c','e','n','o','w','E','n','j','o', - 'y','t','h','e','p','o','w','e','r','a','n','d','b','e','a','u', - 't','y','o','f','y','o','u','r','y','o','u','t','h','O','h','n', - 'e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l','n', - 'o','t','u','n','d','e','r','s','t','a','n','d','t','h','e','p', - 'o','w','e','r','a','n','d','b','e','a','u','t','y','o','f','y', - 'o','u','r','y','o','u','t','h','u','n','t','i','l','t','h','e', - 'y','v','e','f','a','d','e','d','B','u','t','t','r','u','s','t', - 'm','e','i','n','2','0','y','e','a','r','s','y','o','u','l','l', - 'l','o','o','k','b','a','c','k','a','t','p','h','o','t','o','s', - 'o','f','y','o','u','r','s','e','l','f','a','n','d','r','e','c', - 'a','l','l','i','n','a','w','a','y','y','o','u','c','a','n','t', - 'g','r','a','s','p','n','o','w','h','o','w','m','u','c','h','p', - 'o','s','s','i','b','i','l','i','t','y','l','a','y','b','e','f', - 'o','r','e','y','o','u','a','n','d','h','o','w','f','a','b','u', - 'l','o','u','s','y','o','u','r','e','a','l','l','y','l','o','o', - 'k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f','a', - 't','a','s','y','o','u','i','m','a','g','i','n','e','D','o','n', - 't','w','o','r','r','y','a','b','o','u','t','t','h','e','f','u', - 't','u','r','e','O','r','w','o','r','r','y','b','u','t','k','n', - 'o','w','t','h','a','t','K','u','r','t','V','o','n','n','e','g', - 'u','t','s','C','o','m','m','e','n','c','e','m','e','n','t','A', - 'd','d','r','e','s','s','a','t','M','I','T','L','a','d','i','e', - 's','a','n','d','g','e','n','t','l','e','m','e','n','o','f','t', - 'h','e','c','l','a','s','s','o','f','9','7','W','e','a','r','s', - 'u','n','s','c','r','e','e','n','I','f','I','c','o','u','l','d', - 'o','f','f','e','r','y','o','u','o','n','l','y','o','n','e','t', - 'i','p','f','o','r','t','h','e','f','u','t','u','r','e','s','u', - 'n','s','c','r','e','e','n','w','o','u','l','d','b','e','i','t', - 'T','h','e','l','o','n','g','t','e','r','m','b','e','n','e','f', - 'i','t','s','o','f','s','u','n','s','c','r','e','e','n','h','a', - 'v','e','b','e','e','n','p','r','o','v','e','d','b','y','s','c', - 'i','e','n','t','i','s','t','s','w','h','e','r','e','a','s','t', - 'h','e','r','e','s','t','o','f','m','y','a','d','v','i','c','e', - 'h','a','s','n','o','b','a','s','i','s','m','o','r','e','r','e', - 'l','i','a','b','l','e','t','h','a','n','m','y','o','w','n','m', - 'e','a','n','d','e','r','i','n','g','e','x','p','e','r','i','e', - 'n','c','e','I','w','i','l','l','d','i','s','p','e','n','s','e', - 't','h','i','s','a','d','v','i','c','e','n','o','w','E','n','j', - 'o','y','t','h','e','p','o','w','e','r','a','n','d','b','e','a', - 'u','t','y','o','f','y','o','u','r','y','o','u','t','h','O','h', - 'n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l','l', - 'n','o','t','u','n','d','e','r','s','t','a','n','d','t','h','e', - 'p','o','w','e','r','a','n','d','b','e','a','u','t','y','o','f', - 'y','o','u','r','y','o','u','t','h','u','n','t','i','l','t','h', - 'e','y','v','e','f','a','d','e','d','B','u','t','t','r','u','s', - 't','m','e','i','n','2','0','y','e','a','r','s','y','o','u','l', - 'l','l','o','o','k','b','a','c','k','a','t','p','h','o','t','o', - 's','o','f','y','o','u','r','s','e','l','f','a','n','d','r','e', - 'c','a','l','l','i','n','a','w','a','y','y','o','u','c','a','n', - 't','g','r','a','s','p','n','o','w','h','o','w','m','u','c','h', - 'p','o','s','s','i','b','i','l','i','t','y','l','a','y','b','e', - 'f','o','r','e','y','o','u','a','n','d','h','o','w','f','a','b', - 'u','l','o','u','s','y','o','u','r','e','a','l','l','y','l','o', - 'o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s','f', - 'a','t','a','s','y','o','u','i','m','a','g','i','n','e','D','o', - 'n','t','w','o','r','r','y','a','b','o','u','t','t','h','e','f', - 'u','t','u','r','e','O','r','w','o','r','r','y','b','u','t','k', - 'n','o','w','t','h','a','t','s','u','n','s','c','r','e','e','n', - 'w','o','u','l','d','b','e','i','t','T','h','e','l','o','n','g', - 't','e','r','m','b','e','n','e','f','i','t','s','o','f','s','u', - 'n','s','c','r','e','e','n','h','a','v','e','b','e','e','n','p', - 'r','o','v','e','d','b','y','s','c','i','e','n','t','i','s','t', - 's','w','h','e','r','e','a','s','t','h','e','r','e','s','t','o', - 'f','m','y','a','d','v','i','c','e','h','a','s','n','o','b','a', - 's','i','s','m','o','r','e','r','e','l','i','a','b','l','e','t', - 'h','a','n','m','y','o','w','n','m','e','a','n','d','e','r','i', - 'n','g','e','x','p','e','r','i','e','n','c','e','I','w','i','l', - 'l','d','i','s','p','e','n','s','e','t','h','i','s','a','d','v', - 'i','c','e','n','o','w','E','n','j','o','y','t','h','e','p','o', - 'w','e','r','a','n','d','b','e','a','u','t','y','o','f','y','o', - 'u','r','y','o','u','t','h','O','h','n','e','v','e','r','m','i', - 'n','d','Y','o','u','w','i','l','l','n','o','t','u','n','d','e', - 'r','s','t','a','n','d','t','h','e','p','o','w','e','r','a','n', - 'd','b','e','a','u','t','y','o','f','y','o','u','r','y','o','u', - 't','h','u','n','t','i','l','t','h','e','y','v','e','f','a','d', - 'e','d','B','u','t','t','r','u','s','t','m','e','i','n','2','0', - 'y','e','a','r','s','y','o','u','l','l','l','o','o','k','b','a', - 'c','k','a','t','p','h','o','t','o','s','o','f','y','o','u','r', - 's','e','l','f','a','n','d','r','e','c','a','l','l','i','n','a', - 'w','a','y','y','o','u','c','a','n','t','g','r','a','s','p','n', - 'o','w','h','o','w','m','u','c','h','p','o','s','s','i','b','i', - 'l','i','t','y','l','a','y','b','e','f','o','r','e','y','o','u', - 'a','n','d','h','o','w','f','a','b','u','l','o','u','s','y','o', - 'u','r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u', - 'a','r','e','n','o','t','a','s','f','a','t','a','s','y','o','u', - 'i','m','a','g','i','n','e','D','o','n','t','w','o','r','r','y', - 'a','b','o','u','t','t','h','e','f','u','t','u','r','e','O','r', - 'w','o','r','r','y','b','u','t','k','n','o','w','t','h','a','t', - '\n', 'l','a','s','s','o','f','9','7','W','e','a','r','s','u','n', - 's','c','r','e','e','n','I','f','I','c','o','u','l','d','o','f', - 'f','e','r','y','o','u','o','n','l','y','o','n','e','t','i','p', - 'f','o','r','t','h','e','f','u','t','u','r','e','K','u','r','t', - 'V','o','n','n','e','g','u','t','s','C','o','m','m','e','n','c', - 'e','m','e','n','t','A','d','d','r','e','s','s','a','t','M','I', - 'T','L','a','d','i','e','s','a','n','d','g','e','n','t','l','e', - 'm','e','n','o','f','t','h','e','c','l','a','s','s','o','f','9', - '7','W','e','a','r','s','u','n','s','c','r','e','e','n','I','f', - 'I','c','o','u','l','d','o','f','f','e','r','y','o','u','o','n', - 'l','y','o','n','e','t','i','p','f','o','r','t','h','e','f','u', - 't','u','r','e','s','u','n','s','c','r','e','e','n','w','o','u', - 'l','d','b','e','i','t','T','h','e','l','o','n','g','t','e','r', - 'm','b','e','n','e','f','i','t','s','o','f','s','u','n','s','c', - 'r','e','e','n','h','a','v','e','b','e','e','n','p','r','o','v', - 'e','d','b','y','s','c','i','e','n','t','i','s','t','s','w','h', - 'e','r','e','a','s','t','h','e','r','e','s','t','o','f','m','y', - 'a','d','v','i','c','e','h','a','s','n','o','b','a','s','i','s', - 'm','o','r','e','r','e','l','i','a','b','l','e','t','h','a','n', - 'm','y','o','w','n','m','e','a','n','d','e','r','i','n','g','e', - 'x','p','e','r','i','e','n','c','e','I','w','i','l','l','d','i', - 's','p','e','n','s','e','t','h','i','s','a','d','v','i','c','e', - 'n','o','w','E','n','j','o','y','t','h','e','p','o','w','e','r', - 'a','n','d','b','e','a','u','t','y','o','f','y','o','u','r','y', - 'o','u','t','h','O','h','n','e','v','e','r','m','i','n','d','Y', - 'o','u','w','i','l','l','n','o','t','u','n','d','e','r','s','t', - 'a','n','d','t','h','e','p','o','w','e','r','a','n','d','b','e', - 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','u', - 'n','t','i','l','t','h','e','y','v','e','f','a','d','e','d','B', - 'u','t','t','r','u','s','t','m','e','i','n','2','0','y','e','a', - 'r','s','y','o','u','l','l','l','o','o','k','b','a','c','k','a', - 't','p','h','o','t','o','s','o','f','y','o','u','r','s','e','l', - 'f','a','n','d','r','e','c','a','l','l','i','n','a','w','a','y', - 'y','o','u','c','a','n','t','g','r','a','s','p','n','o','w','h', - 'o','w','m','u','c','h','p','o','s','s','i','b','i','l','i','t', - 'y','l','a','y','b','e','f','o','r','e','y','o','u','a','n','d', - 'h','o','w','f','a','b','u','l','o','u','s','y','o','u','r','e', - 'a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r','e', - 'n','o','t','a','s','f','a','t','a','s','y','o','u','i','m','a', - 'g','i','n','e','D','o','n','t','w','o','r','r','y','a','b','o', - 'u','t','t','h','e','f','u','t','u','r','e','O','r','w','o','r', - 'r','y','b','u','t','k','n','o','w','t','h','a','t','K','u','r', - 't','V','o','n','n','e','g','u','t','s','C','o','m','m','e','n', - 'c','e','m','e','n','t','A','d','d','r','e','s','s','a','t','M', - 'I','T','L','a','d','i','e','s','a','n','d','g','e','n','t','l', - 'e','m','e','n','o','f','t','h','e','c','l','a','s','s','o','f', - '9','7','W','e','a','r','s','u','n','s','c','r','e','e','n','I', - 'f','I','c','o','u','l','d','o','f','f','e','r','y','o','u','o', - 'n','l','y','o','n','e','t','i','p','f','o','r','t','h','e','f', - 'u','t','u','r','e','s','u','n','s','c','r','e','e','n','w','o', - 'u','l','d','b','e','i','t','T','h','e','l','o','n','g','t','e', - 'r','m','b','e','n','e','f','i','t','s','o','f','s','u','n','s', - 'c','r','e','e','n','h','a','v','e','b','e','e','n','p','r','o', - 'v','e','d','b','y','s','c','i','e','n','t','i','s','t','s','w', - 'h','e','r','e','a','s','t','h','e','r','e','s','t','o','f','m', - 'y','a','d','v','i','c','e','h','a','s','n','o','b','a','s','i', - 's','m','o','r','e','r','e','l','i','a','b','l','e','t','h','a', - 'n','m','y','o','w','n','m','e','a','n','d','e','r','i','n','g', - 'e','x','p','e','r','i','e','n','c','e','I','w','i','l','l','d', - 'i','s','p','e','n','s','e','t','h','i','s','a','d','v','i','c', - 'e','n','o','w','E','n','j','o','y','t','h','e','p','o','w','e', - 'r','a','n','d','b','e','a','u','t','y','o','f','y','o','u','r', - 'y','o','u','t','h','O','h','n','e','v','e','r','m','i','n','d', - 'Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r','s', - 't','a','n','d','t','h','e','p','o','w','e','r','a','n','d','b', - 'e','a','u','t','y','o','f','y','o','u','r','y','o','u','t','h', - 'u','n','t','i','l','t','h','e','y','v','e','f','a','d','e','d', - 'B','u','t','t','r','u','s','t','m','e','i','n','2','0','y','e', - 'a','r','s','y','o','u','l','l','l','o','o','k','b','a','c','k', - 'a','t','p','h','o','t','o','s','o','f','y','o','u','r','s','e', - 'l','f','a','n','d','r','e','c','a','l','l','i','n','a','w','a', - 'y','y','o','u','c','a','n','t','g','r','a','s','p','n','o','w', - 'h','o','w','m','u','c','h','p','o','s','s','i','b','i','l','i', - 't','y','l','a','y','b','e','f','o','r','e','y','o','u','a','n', - 'd','h','o','w','f','a','b','u','l','o','u','s','y','o','u','r', - 'e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a','r', - 'e','n','o','t','a','s','f','a','t','a','s','y','o','u','i','m', - 'a','g','i','n','e','D','o','n','t','w','o','r','r','y','a','b', - 'o','u','t','t','h','e','f','u','t','u','r','e','O','r','w','o', - 'r','r','y','b','u','t','k','n','o','w','t','h','a','t','K','u', - 'r','t','V','o','n','n','e','g','u','t','s','C','o','m','m','e', - 'n','c','e','m','e','n','t','A','d','d','r','e','s','s','a','t', - 'M','I','T','L','a','d','i','e','s','a','n','d','g','e','n','t', - 'l','e','m','e','n','o','f','t','h','e','c','l','a','s','s','o', - 'f','9','7','W','e','a','r','s','u','n','s','c','r','e','e','n', - 'I','f','I','c','o','u','l','d','o','f','f','e','r','y','o','u', - 'o','n','l','y','o','n','e','t','i','p','f','o','r','t','h','e', - 'f','u','t','u','r','e','s','u','n','s','c','r','e','e','n','w', - 'o','u','l','d','b','e','i','t','T','h','e','l','o','n','g','t', - 'e','r','m','b','e','n','e','f','i','t','s','o','f','s','u','n', - 's','c','r','e','e','n','h','a','v','e','b','e','e','n','p','r', - 'o','v','e','d','b','y','s','c','i','e','n','t','i','s','t','s', - 'w','h','e','r','e','a','s','t','h','e','r','e','s','t','o','f', - 'm','y','a','d','v','i','c','e','h','a','s','n','o','b','a','s', - 'i','s','m','o','r','e','r','e','l','i','a','b','l','e','t','h', - 'a','n','m','y','o','w','n','m','e','a','n','d','e','r','i','n', - 'g','e','x','p','e','r','i','e','n','c','e','I','w','i','l','l', - 'd','i','s','p','e','n','s','e','t','h','i','s','a','d','v','i', - 'c','e','n','o','w','E','n','j','o','y','t','h','e','p','o','w', - 'e','r','a','n','d','b','e','a','u','t','y','o','f','y','o','u', - 'r','y','o','u','t','h','O','h','n','e','v','e','r','m','i','n', - 'd','Y','o','u','w','i','l','l','n','o','t','u','n','d','e','r', - 's','t','a','n','d','t','h','e','p','o','w','e','r','a','n','d', - 'b','e','a','u','t','y','o','f','y','o','u','r','y','o','u','t', - 'h','u','n','t','i','l','t','h','e','y','v','e','f','a','d','e', - 'd','B','u','t','t','r','u','s','t','m','e','i','n','2','0','y', - 'e','a','r','s','y','o','u','l','l','l','o','o','k','b','a','c', - 'k','a','t','p','h','o','t','o','s','o','f','y','o','u','r','s', - 'e','l','f','a','n','d','r','e','c','a','l','l','i','n','a','w', - 'a','y','y','o','u','c','a','n','t','g','r','a','s','p','n','o', - 'w','h','o','w','m','u','c','h','p','o','s','s','i','b','i','l', - 'i','t','y','l','a','y','b','e','f','o','r','e','y','o','u','a', - 'n','d','h','o','w','f','a','b','u','l','o','u','s','y','o','u', - 'r','e','a','l','l','y','l','o','o','k','e','d','Y','o','u','a', - 'r','e','n','o','t','a','s','f','a','t','a','s','y','o','u','i', - 'm','a','g','i','n','e','D','o','n','t','w','o','r','r','y','a', - 'b','o','u','t','t','h','e','f','u','t','u','r','e','O','r','w', - 'o','r','r','y','b','u','t','k','n','o','w','t','h','a','t','s', - 'u','n','s','c','r','e','e','n','w','o','u','l','d','b','e','i', - 't','T','h','e','l','o','n','g','t','e','r','m','b','e','n','e', - 'f','i','t','s','o','f','s','u','n','s','c','r','e','e','n','h', - 'a','v','e','b','e','e','n','p','r','o','v','e','d','b','y','s', - 'c','i','e','n','t','i','s','t','s','w','h','e','r','e','a','s', - 't','h','e','r','e','s','t','o','f','m','y','a','d','v','i','c', - 'e','h','a','s','n','o','b','a','s','i','s','m','o','r','e','r', - 'e','l','i','a','b','l','e','t','h','a','n','m','y','o','w','n', - 'm','e','a','n','d','e','r','i','n','g','e','x','p','e','r','i', - 'e','n','c','e','I','w','i','l','l','d','i','s','p','e','n','s', - 'e','t','h','i','s','a','d','v','i','c','e','n','o','w','E','n', - 'j','o','y','t','h','e','p','o','w','e','r','a','n','d','b','e', - 'a','u','t','y','o','f','y','o','u','r','y','o','u','t','h','O', - 'h','n','e','v','e','r','m','i','n','d','Y','o','u','w','i','l', - 'l','n','o','t','u','n','d','e','r','s','t','a','n','d','t','h', - 'e','p','o','w','e','r','a','n','d','b','e','a','u','t','y','o', - 'f','y','o','u','r','y','o','u','t','h','u','n','t','i','l','t', - 'h','e','y','v','e','f','a','d','e','d','B','u','t','t','r','u', - 's','t','m','e','i','n','2','0','y','e','a','r','s','y','o','u', - 'l','l','l','o','o','k','b','a','c','k','a','t','p','h','o','t', - 'o','s','o','f','y','o','u','r','s','e','l','f','a','n','d','r', - 'e','c','a','l','l','i','n','a','w','a','y','y','o','u','c','a', - 'n','t','g','r','a','s','p','n','o','w','h','o','w','m','u','c', - 'h','p','o','s','s','i','b','i','l','i','t','y','l','a','y','b', - 'e','f','o','r','e','y','o','u','a','n','d','h','o','w','f','a', - 'b','u','l','o','u','s','y','o','u','r','e','a','l','l','y','l', - 'o','o','k','e','d','Y','o','u','a','r','e','n','o','t','a','s', - 'f','a','t','a','s','y','o','u','i','m','a','g','i','n','e','D', - 'o','n','t','w','o','r','r','y','a','b','o','u','t','t','h','e', - 'f','u','t','u','r','e','O','r','w','o','r','r','y','b','u','t', - 'k','n','o','w','t','h','a','t','\n' +unsigned char rijndael_enc_data[ ] = { + 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', + 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', + 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', + 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', + 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', + 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', + 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', + 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', + 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', + 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', + 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', + 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', + 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', + 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', + 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', + 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', + 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', + 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', + 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', + 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', + 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', + 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', + 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', + 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', + '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', + 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', + 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', + 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', + 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', + 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', + 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', + 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', + 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', + 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', + 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', + 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', + 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 'K', 'u', 'r', 't', + 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', + 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', + 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', + 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', + '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', + 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', + 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', + 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', + 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', + 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', + 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', + 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', + 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', + 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', + 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', + 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', + 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', + 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', + 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', + 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', + 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', + 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', + 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', + 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', + 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', + 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', + 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', + 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', + 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', + 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', + 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', + 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', + 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', + 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', + 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', + 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', + 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', + 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', + 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', + 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', + 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', + 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', + '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', + 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', + 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', + 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', + 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', + 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', + 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', + 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', + 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', + 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', + 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', + 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', + 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', + 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', + 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', + 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', + 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', + 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', + 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', + 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', + 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', + 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', + 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', + 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', + 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', + 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', + 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', + 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', + 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', + 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', + 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', + 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', + 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', + 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', + 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', + 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', + 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', + 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', + 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', + 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', + 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', + 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', + 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', + 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', + 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', + 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', + 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', + 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', + 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', + 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', + 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', + 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', + 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', + 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', + 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', + 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', + 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', + 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', + 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', + 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', + 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', + 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', + 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', + 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', + 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', + 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', + 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', + 'o', 'r', 'r', 'y', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', + 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', + 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', + 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', + 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', + 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', + 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', + 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', + 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', + 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', + 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', + 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', + 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', + 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', + 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', + 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', + 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', + 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', + 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', + 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', + 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', + 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', + 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', + 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', + 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', + 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', + 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', + 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', + 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', + 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', + 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', + 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', + 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', + 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', + 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', + 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', + 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', + 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', + 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', + 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', + 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', + 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', + 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', + 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', + 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', + 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', + 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', + 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', + 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', + 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', + 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', + 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', + 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', + 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', + 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', + 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', + 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', + 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', + 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', + 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', + 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', + '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', + 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', + 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', + 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', + 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', + 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', + 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', + 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', + 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', + 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', + 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', + 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', + 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', + 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', + 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', + 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', + 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', + 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', + 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', + 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', + 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', + 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', + 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', + 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', + 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', + 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', + 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', + 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', + 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', + 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', + 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', + 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', + 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', + 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', + 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', + 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', + 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', + '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', + 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', + 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', + 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', + 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', + 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', + 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', + 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', + 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', + 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', + 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', + 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', + 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', + 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', + 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', + 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', + 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', + 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', + 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', + 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', + 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', + 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', + 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', + 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', + 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', + 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', + 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', + 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', + 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', + 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', + 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', + 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', + 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', + 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', + 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', + 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', + 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', + 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', + 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', + 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', + 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', + 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', + 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', + 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', + 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', + 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', + 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', + 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', + 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', + 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', + 'h', 'a', 't', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', + 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', + 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', + 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', + 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', + 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', + 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', + 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', + 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', + 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', + 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', + 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', + 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', + 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', + 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', + 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', + 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', + 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', + 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', + 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', + 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', + 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', + 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', + 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', + 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', + 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', + 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', + 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', + 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', + 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', + 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', + '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', + 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', + 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', + 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', + 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', + 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', + 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', + 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', + 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', + 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', + 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', + 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', + 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', + 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', + 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', + 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', + 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', + 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', + 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', + 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', + 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', + 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', + 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', + 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', + 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', + 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', + 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', + 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', + 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', + 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', + 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', + 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', + 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', + 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', + 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', + 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', + 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', + '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', + 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', + 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', + 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', + 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', + 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', + 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', + 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', + 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', + 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', + 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', + 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', + 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', + 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', + 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', + 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', + 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', + 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', + 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', + 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', + 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', + 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', + 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', + 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', + 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', + 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', + 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', + 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', + 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', + 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', + 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', + 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', + 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', + 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', + 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', + 'r', 'a', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', + 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', + 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', + 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', + 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', + 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', + 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', + 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', + 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', + 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', + 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', + 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', + 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', + 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', + 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', + 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', + 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', + 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', + 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', + 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', + 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', + 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', + 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', + 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', + 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', + 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', + 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', + 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', + 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', + 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', + 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', + 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', + 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', + 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', + 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', + 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', + 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', + 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', + 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 'K', 'u', + 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', + 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', + 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', + 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', + 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', + 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', + 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', + 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', + 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', + 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', + 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', + 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', + 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', + 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', + 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', + 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', + 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', + 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', + 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', + 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', + 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', + 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', + 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', + 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', + 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', + 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', + 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', + 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', + 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', + 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', + 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', + 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', + 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', + 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', + 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', + 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', + 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', + 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', + 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', + 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', + 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', + 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', + 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', + 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', + 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', + 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', + 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', + 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', + 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', + 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', + 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', + 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', + 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', + 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', + 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', + 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', + 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', + 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', + 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', + 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', + 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', + 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', + 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', + 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', + 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', + 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', + 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', + 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', + 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', + 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', + 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', + 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', + 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', + 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', + 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', + 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', + 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', + 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', + 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', + 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', + 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', + 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', + 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', + 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', + 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', + 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', + 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', + 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', + 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', + 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', + 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', + 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', + 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', + 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', + 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', + 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', + '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', + 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', + 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', + 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', + 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', + 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', + 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', + 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', + 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', + 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', + 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', + 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', + 't', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', + 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', + 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', + 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', + 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', + 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'K', 'u', + 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', + 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', + 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', + 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', + 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', + 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', + 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', + 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', + 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', + 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', + 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', + 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', + 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', + 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', + 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', + 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', + 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', + 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', + 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', + 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', + 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', + 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', + 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', + 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', + 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', + 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', + 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', + 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', + 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', + 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', + 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', + 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', + 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', + 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', + 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', + 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', + 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', + 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', + 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', + 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', + 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', + 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', + 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', + 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', + 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', + 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', + 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', + 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', + 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', + 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', + 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', + 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', + 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', + 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', + 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', + 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', + 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', + 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', + 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', + 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', + 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', + 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', + 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', + 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', + 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', + 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', + 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', + 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', + 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', + 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', + 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', + 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', + 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', + 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', + 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', + 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', + 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', + 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', + 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', + 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', + 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', + 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', + 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', + 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', + 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', + 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', + 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', + 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', + 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', + 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', + 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', + 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', + 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', + 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', + 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', + 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', + 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', + 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', + 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', + 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', + 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', + 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', + 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', + 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', + 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', + 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', + 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', + 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', + 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', + 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', + 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', + 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', + 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', + 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', + 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', + 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', + 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', + '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', + 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', + 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', + 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', + 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', + 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', + 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', + 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', + 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', + 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', + 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', + 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', + 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 'K', 'u', 'r', 't', + 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', + 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', + 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', + 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', + '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', + 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', + 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', + 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', + 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', + 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', + 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', + 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', + 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', + 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', + 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', + 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', + 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', + 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', + 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', + 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', + 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', + 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', + 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', + 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', + 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', + 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', + 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', + 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', + 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', + 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', + 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', + 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', + 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', + 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', + 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', + 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', + 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', + 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', + 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', + 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', + 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', + 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', + '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', + 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', + 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', + 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', + 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', + 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', + 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', + 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', + 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', + 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', + 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', + 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', + 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', + 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', + 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', + 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', + 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', + 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', + 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', + 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', + 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', + 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', + 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', + 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', + 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', + 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', + 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', + 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', + 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', + 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', + 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', + 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', + 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', + 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', + 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', + 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', + 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', + 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', + 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', + 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', + 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', + 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', + 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', + 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', + 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', + 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', + 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', + 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', + 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', + 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', + 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', + 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', + 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', + 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', + 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', + 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', + 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', + 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', + 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', + 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', + 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', + 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', + 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', + 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', + 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', + 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', + 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', + 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 't', + 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', + 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', + 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', + 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', + 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', + 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'K', 'u', 'r', 't', + 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', + 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', + 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', + 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', + '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', + 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', + 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', + 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', + 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', + 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', + 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', + 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', + 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', + 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', + 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', + 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', + 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', + 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', + 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', + 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', + 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', + 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', + 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', + 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', + 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', + 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', + 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', + 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', + 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', + 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', + 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', + 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', + 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', + 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', + 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', + 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', + 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', + 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', + 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', + 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', + 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', + 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', + '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', + 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', + 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', + 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', + 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', + 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', + 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', + 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', + 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', + 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', + 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', + 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', + 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', + 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', + 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', + 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', + 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', + 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', + 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', + 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', + 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', + 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', + 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', + 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', + 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', + 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', + 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', + 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', + 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', + 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', + 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', + 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', + 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', + 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', + 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', + 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', + 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', + 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', + 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', + 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', + 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', + 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', + 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', + 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', + 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', + 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', + 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', + 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', + 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', + 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', + 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', + 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', + 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', + 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', + 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', + 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', + 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', + 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', + 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', + 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', + 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', + 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', + 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', + 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', + 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', + 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', + 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', + 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', + 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', + 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', + 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', + 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', + 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', + 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', + 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', + 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', + 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', + 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', + 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', + 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', + 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', + 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', + 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', + 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', + 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', + 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', + 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', + 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', + 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', + 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', + 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', + 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', + 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', + 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', + 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', + 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', + 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', + 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', + 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', + 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', + 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', + 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', + 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', + 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', + 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', + 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', + 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', + 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', + 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', + 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', + 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', + 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', + 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 's', 'u', 'n', 's', 'c', 'r', 'e', + 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', + 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', + 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', + 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', + 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', + 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', + 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', + 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', + 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', + 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', + 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', + 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', + 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', + 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', + 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', + 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', + 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', + 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', + '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', + 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', + 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', + 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', + 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', + 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', + 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', + 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', + 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', + 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', + 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', + 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', + 'a', 't', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', + 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', + 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', + 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', + 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', + 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', + 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', + 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', + 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', + 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', + 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', + 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', + 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', + 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', + 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', + 'h', 'a', 't', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', + 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', + 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', + 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', + 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', + 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', + 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', + 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', + 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', + 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', + 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', + 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', + 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', + 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', + 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', + 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', + 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', + 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', + 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', + 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', + 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', + 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', + 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', + 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', + 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', + 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', + 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', + 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', + 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', + 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', + 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'b', 'u', 't', 'k', + 'n', 'o', 'w', 't', 'h', 'a', 't', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', + 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', + 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', + 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', + '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', + 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', + 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', + 't', 'u', 'r', 'e', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', + 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', + 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', + 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', + 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', + 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', + 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', + 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', + 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', + 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', + 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', + 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', + 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', + 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', + 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', + 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', + 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', + 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', + 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', + 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', + 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', + 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', + 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', + 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', + 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', + 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', + 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', + 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', + 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', + 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', + 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', + 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', + 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', + 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', + 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', + 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', + 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', + 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', + 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', + 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', + 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', + 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', + 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', + 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', + 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', + 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', + 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', + 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', + 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', + 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', + 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', + 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', + 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', + 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', + 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', + 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', + 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', + 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', + 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', + 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', + 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', + 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', + 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', + 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', + 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', + 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', + 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', + 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', + 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', + 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', + 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', + 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', + 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', + 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', + 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', + 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', + 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', + 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', + 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', + 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', + 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', + 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', + 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', + 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', + 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', + 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', + 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', + 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', + 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', + 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', + 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', + 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', + 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', + 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', + 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', + 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', + 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', + 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', + 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', + 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', + 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', + 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', + 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', + 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', + 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', + 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', + 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', + 'n', 'o', 'w', 't', 'h', 'a', 't', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', + 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', + 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', + 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', + 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', + 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', + 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', + 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', + 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', + 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', + 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', + 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', + 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', + 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', + 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', + 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', + 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', + 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', + 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', + 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', + 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', + 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', + 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', + 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', + 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', + 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', + 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', + 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', + 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', + '\n', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', + 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', + 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'K', 'u', 'r', 't', + 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', + 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', + 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', + 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', + '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', + 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', + 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', + 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', + 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', + 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', + 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', + 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', + 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', + 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', + 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', + 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', + 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', + 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', + 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', + 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', + 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', + 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', + 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', + 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', + 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', + 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', + 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', + 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', + 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', + 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', + 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', + 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', + 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', + 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', + 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', + 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', + 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', + 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', + 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', + 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', + 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', + 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', + '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', + 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', + 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', + 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', + 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', + 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', + 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', + 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', + 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', + 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', + 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', + 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', + 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', + 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', + 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', + 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', + 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', + 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', + 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', + 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', + 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', + 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', + 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', + 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', + 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', + 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', + 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', + 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', + 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', + 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', + 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', + 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', + 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', + 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', + 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', + 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', + 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', + 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', + 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', + 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', + 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', + 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', + 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', + 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', + 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', + 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', + 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', + 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', + 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', + 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', + 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', + 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', + 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', + 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', + 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', + 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', + 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', + 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', + 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', + 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', + 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', + 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', + 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', + 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', + 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', + 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', + 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', + 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', + 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', + 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', + 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', + 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', + 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', + 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', + 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', + 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', + 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', + 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', + 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', + 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', + 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', + 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', + 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', + 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', + 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', + 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', + 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', + 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', + 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', + 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', + 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', + 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', + 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', + 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', + 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', + 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', + 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', + 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', '\n', 'l', 'a', 's', 's', 'o', 'f', '9', + '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', + 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', + 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', + 't', 'u', 'r', 'e', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', + 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', + 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', + 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', + 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', + 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', + 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', + 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', + 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', + 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', + 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', + 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', + 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', + 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', + 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', + 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', + 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', + 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', + 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', + 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', + 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', + 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', + 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', + 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', + 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', + 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', + 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', + 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', + 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', + 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', + 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', + 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', + 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', + 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', + 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', + 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', + 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', + 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', + 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', + 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', + 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', + 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', + 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', + 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', + 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', + 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', + 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', + 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', + 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', + 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', + 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', + 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', + 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', + 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', + 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', + 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', + 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', + 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', + 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', + 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', + 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', + 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', + 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', + 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', + 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', + 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', + 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', + 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', + 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', + 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', + 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', + 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', + 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', + 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', + 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', + 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', + 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', + 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', + 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', + 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', + 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', + 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', + 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', + 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', + 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', + 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', + 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', + 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', + 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', + 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', + 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', + 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', + 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', + 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', + 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', + 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', + 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', + 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', + 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', + 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', + 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', + 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', + 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', + 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', + 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', + 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', + 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', + 'n', 'o', 'w', 't', 'h', 'a', 't', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', + 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', + 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', + 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', + 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', + 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', + 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', + 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', + 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', + 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', + 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', + 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', + 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', + 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', + 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', + 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', + 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', + 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', + 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', + 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', + 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', + 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', + 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', + 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', + 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', + 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', + 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', + 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', + 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', + '\n', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', + 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', + 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'K', 'u', 'r', 't', + 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', + 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', + 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', + 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', + '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', + 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', + 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', + 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', + 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', + 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', + 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', + 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', + 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', + 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', + 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', + 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', + 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', + 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', + 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', + 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', + 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', + 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', + 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', + 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', + 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', + 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', + 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', + 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', + 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', + 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', + 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', + 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', + 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', + 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', + 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', + 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', + 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', + 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', + 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', + 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', + 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', + 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', + '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', + 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', + 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', + 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', + 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', + 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', + 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', + 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', + 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', + 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', + 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', + 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', + 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', + 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', + 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', + 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', + 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', + 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', + 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', + 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', + 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', + 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', + 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', + 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', + 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', + 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', + 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', + 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', + 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', + 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', + 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', + 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', + 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', + 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', + 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', + 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', + 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', + 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', + 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', + 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', + 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', + 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', + 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', + 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', + 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', + 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', + 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', + 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', + 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', + 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', + 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', + 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', + 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', + 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', + 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', + 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', + 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', + 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', + 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', + 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', + 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', + 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', + 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', + 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', + 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', + 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', + 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', + 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', + 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', + 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', + 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', + 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', + 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', + 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', + 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', + 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', + 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', + 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', + 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', + 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', + 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', + 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', + 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', + 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', + 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', + 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', + 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', + 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', + 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', + 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', + 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', + 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', + 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', + 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', + 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', + 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', + 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', + 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', '\n', 'l', 'a', 's', 's', 'o', 'f', '9', + '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', + 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', + 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', + 't', 'u', 'r', 'e', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', + 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', + 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', + 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', + 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', + 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', + 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', + 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', + 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', + 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', + 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', + 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', + 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', + 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', + 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', + 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', + 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', + 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', + 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', + 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', + 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', + 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', + 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', + 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', + 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', + 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', + 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', + 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', + 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', + 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', + 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', + 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', + 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', + 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', + 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', + 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', + 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', + 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', + 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', + 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', + 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', + 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', + 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', + 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', + 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', + 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', + 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', + 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', + 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', + 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', + 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', + 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', + 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', + 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', + 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', + 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', + 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', + 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', + 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', + 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', + 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', + 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', + 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', + 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', + 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', + 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', + 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', + 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', + 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', + 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', + 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', + 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', + 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', + 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', + 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', + 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', + 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', + 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', + 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', + 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', + 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', + 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', + 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', + 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', + 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', + 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', + 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', + 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', + 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', + 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', + 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', + 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', + 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', + 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', + 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', + 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', + 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', + 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', + 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', + 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', + 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', + 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', + 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', + 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', + 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', + 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', + 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', + 'n', 'o', 'w', 't', 'h', 'a', 't', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', + 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', + 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', + 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', + 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', + 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', + 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', + 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', + 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', + 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', + 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', + 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', + 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', + 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', + 'r', 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', + 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', + 't', 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', + 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', + 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', + 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', + 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', + 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', + 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', + 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', + 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', + 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', + 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', + 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', + 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', + 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', + '\n', 'l', 'a', 's', 's', 'o', 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', + 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', + 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'K', 'u', 'r', 't', + 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', 'c', + 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', 'I', + 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', 'e', + 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', '9', + '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', 'f', + 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', 'n', + 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', 'u', + 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', + 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', + 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', + 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', + 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', + 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', + 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', + 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', + 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', + 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', + 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', + 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', + 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', + 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', + 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', + 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', + 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', + 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', + 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', + 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', + 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', + 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', + 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', + 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', + 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', + 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', + 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', + 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', + 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', + 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', + 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', 'r', + 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', 'n', + 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', 'M', + 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', 'l', + 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', 'f', + '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'I', + 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', 'o', + 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', 'f', + 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', + 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', + 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', + 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', + 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', + 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', + 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', + 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', + 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', + 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', + 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', + 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', + 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', + 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', + 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', + 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', + 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', + 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', + 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', + 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', + 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', + 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', + 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', + 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', + 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', + 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', + 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', + 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', + 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', + 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', + 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 'K', 'u', + 'r', 't', 'V', 'o', 'n', 'n', 'e', 'g', 'u', 't', 's', 'C', 'o', 'm', 'm', 'e', + 'n', 'c', 'e', 'm', 'e', 'n', 't', 'A', 'd', 'd', 'r', 'e', 's', 's', 'a', 't', + 'M', 'I', 'T', 'L', 'a', 'd', 'i', 'e', 's', 'a', 'n', 'd', 'g', 'e', 'n', 't', + 'l', 'e', 'm', 'e', 'n', 'o', 'f', 't', 'h', 'e', 'c', 'l', 'a', 's', 's', 'o', + 'f', '9', '7', 'W', 'e', 'a', 'r', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', + 'I', 'f', 'I', 'c', 'o', 'u', 'l', 'd', 'o', 'f', 'f', 'e', 'r', 'y', 'o', 'u', + 'o', 'n', 'l', 'y', 'o', 'n', 'e', 't', 'i', 'p', 'f', 'o', 'r', 't', 'h', 'e', + 'f', 'u', 't', 'u', 'r', 'e', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', + 'o', 'u', 'l', 'd', 'b', 'e', 'i', 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', + 'e', 'r', 'm', 'b', 'e', 'n', 'e', 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', + 's', 'c', 'r', 'e', 'e', 'n', 'h', 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', + 'o', 'v', 'e', 'd', 'b', 'y', 's', 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', + 'w', 'h', 'e', 'r', 'e', 'a', 's', 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', + 'm', 'y', 'a', 'd', 'v', 'i', 'c', 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', + 'i', 's', 'm', 'o', 'r', 'e', 'r', 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', + 'a', 'n', 'm', 'y', 'o', 'w', 'n', 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', + 'g', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', + 'd', 'i', 's', 'p', 'e', 'n', 's', 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', + 'c', 'e', 'n', 'o', 'w', 'E', 'n', 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', + 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', + 'r', 'y', 'o', 'u', 't', 'h', 'O', 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', + 'd', 'Y', 'o', 'u', 'w', 'i', 'l', 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', + 's', 't', 'a', 'n', 'd', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', + 'b', 'e', 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', + 'h', 'u', 'n', 't', 'i', 'l', 't', 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', + 'd', 'B', 'u', 't', 't', 'r', 'u', 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', + 'e', 'a', 'r', 's', 'y', 'o', 'u', 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', + 'k', 'a', 't', 'p', 'h', 'o', 't', 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', + 'e', 'l', 'f', 'a', 'n', 'd', 'r', 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', + 'a', 'y', 'y', 'o', 'u', 'c', 'a', 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', + 'w', 'h', 'o', 'w', 'm', 'u', 'c', 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', + 'i', 't', 'y', 'l', 'a', 'y', 'b', 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', + 'n', 'd', 'h', 'o', 'w', 'f', 'a', 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', + 'r', 'e', 'a', 'l', 'l', 'y', 'l', 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', + 'r', 'e', 'n', 'o', 't', 'a', 's', 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', + 'm', 'a', 'g', 'i', 'n', 'e', 'D', 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', + 'b', 'o', 'u', 't', 't', 'h', 'e', 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', + 'o', 'r', 'r', 'y', 'b', 'u', 't', 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', 's', + 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'w', 'o', 'u', 'l', 'd', 'b', 'e', 'i', + 't', 'T', 'h', 'e', 'l', 'o', 'n', 'g', 't', 'e', 'r', 'm', 'b', 'e', 'n', 'e', + 'f', 'i', 't', 's', 'o', 'f', 's', 'u', 'n', 's', 'c', 'r', 'e', 'e', 'n', 'h', + 'a', 'v', 'e', 'b', 'e', 'e', 'n', 'p', 'r', 'o', 'v', 'e', 'd', 'b', 'y', 's', + 'c', 'i', 'e', 'n', 't', 'i', 's', 't', 's', 'w', 'h', 'e', 'r', 'e', 'a', 's', + 't', 'h', 'e', 'r', 'e', 's', 't', 'o', 'f', 'm', 'y', 'a', 'd', 'v', 'i', 'c', + 'e', 'h', 'a', 's', 'n', 'o', 'b', 'a', 's', 'i', 's', 'm', 'o', 'r', 'e', 'r', + 'e', 'l', 'i', 'a', 'b', 'l', 'e', 't', 'h', 'a', 'n', 'm', 'y', 'o', 'w', 'n', + 'm', 'e', 'a', 'n', 'd', 'e', 'r', 'i', 'n', 'g', 'e', 'x', 'p', 'e', 'r', 'i', + 'e', 'n', 'c', 'e', 'I', 'w', 'i', 'l', 'l', 'd', 'i', 's', 'p', 'e', 'n', 's', + 'e', 't', 'h', 'i', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'n', 'o', 'w', 'E', 'n', + 'j', 'o', 'y', 't', 'h', 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', + 'a', 'u', 't', 'y', 'o', 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'O', + 'h', 'n', 'e', 'v', 'e', 'r', 'm', 'i', 'n', 'd', 'Y', 'o', 'u', 'w', 'i', 'l', + 'l', 'n', 'o', 't', 'u', 'n', 'd', 'e', 'r', 's', 't', 'a', 'n', 'd', 't', 'h', + 'e', 'p', 'o', 'w', 'e', 'r', 'a', 'n', 'd', 'b', 'e', 'a', 'u', 't', 'y', 'o', + 'f', 'y', 'o', 'u', 'r', 'y', 'o', 'u', 't', 'h', 'u', 'n', 't', 'i', 'l', 't', + 'h', 'e', 'y', 'v', 'e', 'f', 'a', 'd', 'e', 'd', 'B', 'u', 't', 't', 'r', 'u', + 's', 't', 'm', 'e', 'i', 'n', '2', '0', 'y', 'e', 'a', 'r', 's', 'y', 'o', 'u', + 'l', 'l', 'l', 'o', 'o', 'k', 'b', 'a', 'c', 'k', 'a', 't', 'p', 'h', 'o', 't', + 'o', 's', 'o', 'f', 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', 'a', 'n', 'd', 'r', + 'e', 'c', 'a', 'l', 'l', 'i', 'n', 'a', 'w', 'a', 'y', 'y', 'o', 'u', 'c', 'a', + 'n', 't', 'g', 'r', 'a', 's', 'p', 'n', 'o', 'w', 'h', 'o', 'w', 'm', 'u', 'c', + 'h', 'p', 'o', 's', 's', 'i', 'b', 'i', 'l', 'i', 't', 'y', 'l', 'a', 'y', 'b', + 'e', 'f', 'o', 'r', 'e', 'y', 'o', 'u', 'a', 'n', 'd', 'h', 'o', 'w', 'f', 'a', + 'b', 'u', 'l', 'o', 'u', 's', 'y', 'o', 'u', 'r', 'e', 'a', 'l', 'l', 'y', 'l', + 'o', 'o', 'k', 'e', 'd', 'Y', 'o', 'u', 'a', 'r', 'e', 'n', 'o', 't', 'a', 's', + 'f', 'a', 't', 'a', 's', 'y', 'o', 'u', 'i', 'm', 'a', 'g', 'i', 'n', 'e', 'D', + 'o', 'n', 't', 'w', 'o', 'r', 'r', 'y', 'a', 'b', 'o', 'u', 't', 't', 'h', 'e', + 'f', 'u', 't', 'u', 'r', 'e', 'O', 'r', 'w', 'o', 'r', 'r', 'y', 'b', 'u', 't', + 'k', 'n', 'o', 'w', 't', 'h', 'a', 't', '\n' }; diff --git a/bench/sequential/rijndael_enc/rijndael_enc.c b/bench/sequential/rijndael_enc/rijndael_enc.c old mode 100644 new mode 100755 index 57eed39406c8b4bb7d3f3ba5c611a12c4b447f79..eaa7183ebda06be4629a718d01d4aa313b3e75d8 --- a/bench/sequential/rijndael_enc/rijndael_enc.c +++ b/bench/sequential/rijndael_enc/rijndael_enc.c @@ -44,10 +44,10 @@ /* Global variable definitions */ -unsigned char rijndael_enc_key[32]; +unsigned char rijndael_enc_key[ 32 ]; int rijndael_enc_key_len; -extern unsigned char rijndael_enc_data[]; +extern unsigned char rijndael_enc_data[ ]; struct rijndael_enc_FILE rijndael_enc_fin; int rijndael_enc_checksum = 0; @@ -73,7 +73,7 @@ void rijndael_enc_init( void ) rijndael_enc_fin.size ^= x; _Pragma( "loopbound min 31369 max 31369" ) for ( i = 0; i < rijndael_enc_fin.size; i++ ) - rijndael_enc_fin.data[i] ^= x; + rijndael_enc_fin.data[ i ] ^= x; /* this is a pointer to the hexadecimal key digits */ const volatile char *cp = @@ -98,7 +98,7 @@ void rijndael_enc_init( void ) /* store a key byte for each pair of hexadecimal digits */ if ( i++ & 1 ) - rijndael_enc_key[i / 2 - 1] = by & 0xff; + rijndael_enc_key[ i / 2 - 1 ] = by & 0xff; } if ( *cp ) { @@ -130,30 +130,30 @@ int rijndael_enc_return( void ) void rijndael_enc_fillrand( unsigned char *buf, int len ) { - static unsigned long a[2], mt = 1, count = 4; - static char r[4]; + static unsigned long a[ 2 ], mt = 1, count = 4; + static char r[ 4 ]; int i; if ( mt ) { mt = 0; - a[0] = 0xeaf3; - a[1] = 0x35fe; + a[ 0 ] = 0xeaf3; + a[ 1 ] = 0x35fe; } _Pragma( "loopbound min 1 max 16" ) for ( i = 0; i < len; ++i ) { if ( count == 4 ) { - *( unsigned long * )r = RAND( a[0], a[1] ); + *( unsigned long * )r = RAND( a[ 0 ], a[ 1 ] ); count = 0; } - buf[i] = r[count++]; + buf[ i ] = r[ count++ ]; } } void rijndael_enc_encfile( struct rijndael_enc_FILE *fin, struct aes *ctx ) { - unsigned char inbuf[16], outbuf[16]; + unsigned char inbuf[ 16 ], outbuf[ 16 ]; long int flen; unsigned long i = 0, l = 0; @@ -165,25 +165,25 @@ void rijndael_enc_encfile( struct rijndael_enc_FILE *fin, struct aes *ctx ) 1 ); /* make top 4 bits of a byte random */ l = 15; /* and store the length of the last */ /* block in the lower 4 bits */ - inbuf[0] = ( ( char )flen & 15 ) | ( inbuf[0] & ~15 ); + inbuf[ 0 ] = ( ( char )flen & 15 ) | ( inbuf[ 0 ] & ~15 ); /* TODO: this is necessarily an input-dependent loop bound */ - _Pragma( "loopbound min 1961 max 1961" ) + _Pragma( "loopbound min 1960 max 1960" ) while ( !rijndael_enc_feof( fin ) ) { /* loop to encrypt the input file */ - /* input 1st 16 bytes to buf[1..16] */ - i = rijndael_enc_fread( inbuf + 16 - l, 1, l, fin ); /* on 1st round byte[0] */ + /* input 1st 16 bytes to buf[ 1..16 ] */ + i = rijndael_enc_fread( inbuf + 16 - l, 1, l, fin ); /* on 1st round byte[ 0 ] */ /* is the length code */ if ( i < l ) break; /* if end of the input file reached */ _Pragma( "loopbound min 16 max 16" ) for ( i = 0; i < 16; ++i ) /* xor in previous cipher text */ - inbuf[i] ^= outbuf[i]; + inbuf[ i ] ^= outbuf[ i ]; rijndael_enc_encrypt( inbuf, outbuf, ctx ); /* and do the encryption */ - rijndael_enc_checksum += outbuf[15]; + rijndael_enc_checksum += outbuf[ 15 ]; /* in all but first round read 16 */ l = 16; /* bytes into the buffer */ @@ -201,21 +201,21 @@ void rijndael_enc_encfile( struct rijndael_enc_FILE *fin, struct aes *ctx ) if ( i ) { /* if bytes remain to be output */ _Pragma( "loopbound min 6 max 6" ) while ( i < 16 ) /* clear empty buffer positions */ - inbuf[i++] = 0; + inbuf[ i++ ] = 0; _Pragma( "loopbound min 16 max 16" ) for ( i = 0; i < 16; ++i ) /* xor in previous cipher text */ - inbuf[i] ^= outbuf[i]; + inbuf[ i ] ^= outbuf[ i ]; rijndael_enc_encrypt( inbuf, outbuf, ctx ); /* encrypt and output it */ - rijndael_enc_checksum += outbuf[15]; + rijndael_enc_checksum += outbuf[ 15 ]; } } void _Pragma( "entrypoint" ) rijndael_enc_main( void ) { - struct aes ctx[1]; + struct aes ctx[ 1 ]; /* encryption in Cipher Block Chaining mode */ rijndael_enc_set_key( rijndael_enc_key, rijndael_enc_key_len, enc, ctx ); diff --git a/bench/sequential/rijndael_enc/rijndael_enc_libc.c b/bench/sequential/rijndael_enc/rijndael_enc_libc.c old mode 100644 new mode 100755 index 921af68d4fbdc08eb6b0eb2c5602c1147c3087c0..d591081a900480d1147053465e4b90767dc484a3 --- a/bench/sequential/rijndael_enc/rijndael_enc_libc.c +++ b/bench/sequential/rijndael_enc/rijndael_enc_libc.c @@ -16,7 +16,7 @@ unsigned long rijndael_enc_fread( void *ptr, unsigned long size, size * count : stream->size - stream->cur_pos; _Pragma( "loopbound min 10 max 16" ) while ( i < stream->cur_pos + number_of_chars_to_read ) - ( ( unsigned char * )ptr )[i2++] = stream->data[i++]; + ( ( unsigned char * )ptr )[ i2++ ] = stream->data[ i++ ]; stream->cur_pos += number_of_chars_to_read; return number_of_chars_to_read; } @@ -30,7 +30,7 @@ unsigned long rijndael_enc_fwrite( const void *ptr, unsigned long size, size * count : stream->size - stream->cur_pos; _Pragma( "loopbound min 0 max 0" ) while ( i < stream->cur_pos + number_of_chars_to_write ) - stream->data[i++] = ( ( unsigned char * )ptr )[i2++]; + stream->data[ i++ ] = ( ( unsigned char * )ptr )[ i2++ ]; stream->cur_pos += number_of_chars_to_write; return number_of_chars_to_write; } diff --git a/bench/sequential/rijndael_enc/rijndael_enc_libc.h b/bench/sequential/rijndael_enc/rijndael_enc_libc.h old mode 100644 new mode 100755 diff --git a/bench/sequential/statemate/ChangeLog.txt b/bench/sequential/statemate/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/statemate/statemate.c b/bench/sequential/statemate/statemate.c old mode 100644 new mode 100755 index 67435293e72bebc1540dc4af4f821c5f9a8f132e..bd9d6b813a7c4fb56ebe1f308f79b3d078f896d1 --- a/bench/sequential/statemate/statemate.c +++ b/bench/sequential/statemate/statemate.c @@ -27,10 +27,10 @@ Macro definitions */ -#define SYS_bit_get(a,b) (a)[(b)] -#define SYS_bit_clr(a,b) (a)[(b)] = 0 -#define SYS_bit_set(a,b) (a)[(b)] = 1 -#define SYS_bit_cpy(a1,i1,a2,i2) (a1)[(i1)] = (a2)[(i2)] +#define SYS_bit_get(a,b) (a)[ (b) ] +#define SYS_bit_clr(a,b) (a)[ (b) ] = 0 +#define SYS_bit_set(a,b) (a)[ (b) ] = 1 +#define SYS_bit_cpy(a1,i1,a2,i2) (a1)[ (i1) ] = (a2)[ (i2) ] #define active_KINDERSICHERUNG_CTRL_IDX 10 #define active_KINDERSICHERUNG_CTRL_copy_IDX 11 @@ -75,7 +75,7 @@ int statemate_return ( void ); Declaration of global variables */ -static char statemate_bitlist[64]; +static char statemate_bitlist[ 64 ]; unsigned long statemate_tm_entered_EINSCHALTSTROM_MESSEN_BLOCK_ERKENNUNG_CTRLch_BLOCK_ERKENNUNG_CTRL__N_copy; unsigned long @@ -1257,10 +1257,10 @@ int statemate_return() { unsigned long int checksum = 0; int index; - for ( index=63 ; index>=0 ; index-- ){ - checksum += (unsigned long) (statemate_bitlist[index] << index); - } - return(checksum == 18446744073709551614ul); + _Pragma( "loopbound min 64 max 64" ) + for ( index = 63 ; index >= 0 ; index-- ) + checksum += ( unsigned long ) ( statemate_bitlist[ index ] << index ); + return ( checksum == 18446744073709551614ul ); } void _Pragma ( "entrypoint" ) statemate_main( void ) diff --git a/bench/sequential/susan/ChangeLog.txt b/bench/sequential/susan/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/sequential/susan/LICENSE b/bench/sequential/susan/LICENSE old mode 100644 new mode 100755 diff --git a/bench/sequential/susan/input.c b/bench/sequential/susan/input.c old mode 100644 new mode 100755 index 4e6ba40a91ecff4844c87ee84dfcf2a3b0d5c0cc..5984488d77a1f42fd54a0f51db5fd906a74c094a --- a/bench/sequential/susan/input.c +++ b/bench/sequential/susan/input.c @@ -1,7292 +1,7293 @@ -char susan_input[7292] = { 80, -53, -10, -35, -32, -67, -82, -69, -65, -84, -79, -82, -58, -32, -88, -86, -32, -86, -101, -114, -115, -105, -111, -110, -32, -51, -46, -49, -48, -97, -32, -32, -82, -101, -118, -58, -32, -49, -50, -47, -50, -57, -47, -57, -52, -32, -40, -80, -78, -71, -32, -112, -97, -116, -99, -104, -32, -49, -46, -50, -41, -10, -55, -54, -32, -57, -53, -10, -50, -53, -53, -10, -35, -36, -36, -36, -36, -38, -38, -36, -37, -37, -37, -38, -38, -36, -34, -38, -40, -41, -42, -40, -38, -36, -36, -35, -36, -35, -32, -35, -38, -42, -42, -38, -36, -36, -36, -37, -36, -35, -33, -33, -33, -32, -31, -33, -36, -39, -40, -36, -36, -34, -34, -36, -38, -39, -37, -36, -36, -35, -36, -39, -39, -37, -37, -39, -37, -38, -39, -40, -38, -37, -37, -33, -33, -32, -33, -34, -35, -35, -36, -36, -36, -37, -38, -37, -38, -38, -39, -41, -41, -40, -40, -43, -42, -41, -40, -39, -38, -35, -33, -35, -35, -37, -39, -38, -37, -36, -38, -36, -36, -34, -34, -38, -39, -39, -37, -36, -36, -34, -33, -34, -33, -35, -33, -36, -35, -35, -36, -36, -37, -33, -32, -36, -38, -38, -38, -39, -39, -38, -39, -37, -35, -36, -34, -35, -36, -37, -39, -38, -37, -34, -31, -34, -35, -35, -35, -35, -36, -38, -39, -39, -37, -38, -38, -40, -39, -40, -41, -43, -44, -42, -40, -39, -38, -42, -42, -39, -39, -36, -33, -33, -34, -36, -36, -35, -33, -33, -35, -37, -36, -34, -34, -31, -30, -32, -36, -42, -43, -43, -40, -36, -36, -36, -35, -34, -35, -33, -33, -30, -32, -34, -35, -35, -35, -36, -35, -37, -34, -34, -35, -36, -37, -37, -35, -36, -37, -39, -39, -38, -35, -35, -35, -35, -35, -36, -38, -37, -38, -38, -36, -35, -35, -36, -35, -35, -35, -35, -34, -34, -36, -36, -38, -40, -38, -37, -36, -34, -34, -35, -35, -36, -37, -37, -38, -38, -39, -39, -36, -35, -36, -35, -37, -36, -38, -39, -37, -38, -34, -33, -32, -33, -32, -28, -34, -40, -45, -44, -40, -38, -34, -30, -30, -33, -40, -45, -43, -41, -37, -37, -37, -36, -33, -31, -32, -31, -35, -35, -35, -35, -35, -38, -39, -39, -40, -39, -37, -37, -37, -35, -35, -37, -37, -36, -37, -37, -37, -38, -37, -38, -37, -37, -35, -35, -34, -35, -35, -35, -36, -39, -45, -43, -38, -39, -38, -36, -36, -36, -35, -37, -39, -38, -37, -37, -37, -39, -38, -37, -37, -35, -34, -34, -37, -39, -36, -37, -38, -39, -40, -41, -39, -36, -38, -39, -39, -39, -36, -33, -32, -30, -30, -31, -35, -35, -35, -35, -35, -39, -40, -38, -37, -40, -39, -38, -39, -39, -39, -38, -39, -39, -40, -40, -39, -41, -39, -41, -39, -38, -39, -38, -38, -36, -35, -36, -35, -37, -38, -38, -38, -40, -38, -39, -39, -36, -36, -33, -34, -36, -35, -37, -38, -39, -39, -38, -36, -32, -32, -35, -38, -38, -39, -38, -35, -35, -34, -37, -39, -38, -36, -35, -35, -33, -31, -30, -32, -36, -37, -38, -35, -35, -35, -35, -35, -39, -41, -42, -38, -33, -31, -33, -37, -36, -37, -38, -37, -37, -38, -39, -38, -38, -38, -38, -37, -38, -38, -39, -41, -41, -37, -39, -40, -42, -44, -43, -39, -42, -48, -45, -41, -39, -38, -38, -38, -38, -36, -37, -38, -39, -39, -39, -43, -41, -38, -37, -37, -38, -36, -34, -34, -34, -38, -41, -41, -38, -35, -35, -34, -35, -32, -30, -31, -33, -34, -35, -35, -35, -35, -35, -35, -39, -36, -35, -38, -41, -38, -32, -34, -38, -34, -38, -40, -39, -39, -36, -36, -39, -38, -39, -37, -38, -38, -36, -36, -35, -37, -38, -39, -38, -36, -38, -37, -35, -31, -35, -37, -40, -39, -35, -35, -36, -34, -36, -36, -38, -37, -38, -37, -37, -36, -37, -38, -37, -36, -35, -34, -34, -34, -37, -36, -37, -36, -34, -36, -36, -34, -31, -30, -33, -32, -33, -35, -35, -35, -35, -34, -27, -33, -39, -42, -41, -42, -44, -45, -42, -39, -41, -41, -42, -43, -42, -41, -40, -38, -37, -35, -37, -36, -36, -36, -37, -36, -36, -37, -37, -39, -43, -43, -43, -42, -39, -39, -39, -39, -40, -39, -38, -35, -34, -36, -37, -36, -37, -38, -38, -37, -36, -35, -35, -33, -35, -38, -38, -39, -41, -39, -38, -37, -38, -38, -36, -37, -36, -37, -37, -36, -36, -35, -35, -35, -35, -36, -42, -40, -41, -43, -42, -39, -37, -37, -37, -37, -39, -39, -38, -37, -35, -37, -36, -35, -36, -36, -39, -39, -36, -36, -34, -37, -40, -40, -40, -39, -41, -40, -39, -39, -39, -40, -38, -36, -34, -35, -37, -34, -36, -35, -35, -34, -33, -36, -36, -38, -39, -38, -37, -34, -34, -33, -34, -35, -36, -36, -35, -36, -35, -38, -39, -39, -40, -38, -37, -36, -36, -35, -35, -35, -35, -36, -36, -42, -45, -44, -43, -40, -38, -37, -36, -37, -37, -38, -38, -38, -38, -36, -35, -35, -34, -34, -36, -38, -36, -35, -38, -37, -37, -38, -38, -37, -38, -36, -33, -35, -37, -37, -38, -38, -41, -41, -41, -38, -35, -33, -30, -29, -32, -37, -39, -39, -38, -39, -38, -35, -34, -35, -35, -35, -35, -34, -35, -36, -36, -37, -38, -38, -38, -36, -35, -33, -34, -35, -35, -35, -35, -36, -36, -32, -33, -36, -38, -40, -42, -42, -39, -40, -41, -43, -42, -36, -33, -32, -33, -32, -35, -37, -41, -41, -39, -40, -37, -36, -38, -39, -41, -40, -40, -41, -39, -37, -37, -36, -37, -37, -36, -35, -37, -37, -39, -41, -41, -43, -41, -40, -40, -37, -37, -38, -38, -38, -38, -38, -36, -38, -37, -36, -39, -41, -41, -42, -41, -39, -38, -38, -36, -37, -37, -35, -35, -35, -36, -36, -33, -35, -37, -34, -35, -35, -35, -39, -38, -39, -41, -43, -43, -43, -42, -39, -38, -39, -37, -37, -38, -37, -36, -38, -38, -40, -38, -39, -39, -36, -35, -34, -33, -34, -36, -37, -38, -37, -37, -37, -36, -34, -34, -33, -34, -35, -38, -41, -38, -36, -37, -37, -37, -37, -39, -41, -40, -41, -42, -41, -40, -41, -41, -39, -40, -40, -39, -37, -37, -36, -38, -35, -35, -35, -36, -37, -45, -42, -40, -44, -45, -42, -43, -42, -42, -45, -47, -49, -51, -50, -51, -50, -49, -45, -45, -45, -43, -42, -42, -43, -41, -39, -40, -40, -40, -39, -38, -40, -40, -39, -39, -39, -38, -35, -33, -37, -41, -42, -39, -37, -37, -37, -38, -38, -36, -37, -35, -33, -32, -33, -34, -35, -35, -38, -39, -37, -38, -36, -35, -37, -38, -39, -42, -41, -38, -36, -34, -35, -35, -35, -35, -36, -39, -38, -36, -37, -37, -37, -36, -40, -42, -43, -47, -49, -48, -47, -44, -43, -47, -52, -55, -52, -47, -44, -42, -42, -42, -40, -40, -39, -38, -37, -37, -39, -38, -38, -38, -36, -33, -31, -34, -35, -38, -39, -38, -37, -38, -38, -37, -38, -37, -42, -46, -45, -42, -39, -39, -38, -34, -36, -39, -39, -37, -35, -36, -34, -37, -37, -36, -36, -39, -41, -42, -35, -35, -35, -35, -36, -40, -40, -38, -39, -39, -36, -36, -38, -39, -42, -46, -49, -50, -52, -52, -51, -51, -52, -54, -51, -50, -51, -52, -51, -47, -47, -46, -47, -45, -43, -43, -43, -43, -43, -42, -41, -41, -40, -40, -42, -46, -44, -41, -37, -36, -37, -39, -39, -38, -38, -39, -38, -38, -39, -37, -35, -35, -38, -38, -38, -36, -35, -35, -37, -35, -36, -38, -36, -38, -38, -39, -35, -35, -35, -36, -36, -39, -39, -40, -40, -39, -37, -38, -41, -39, -43, -46, -47, -49, -49, -49, -48, -48, -51, -52, -52, -53, -53, -52, -51, -52, -50, -48, -49, -48, -46, -47, -47, -44, -42, -43, -44, -43, -45, -48, -46, -45, -44, -42, -43, -46, -45, -44, -42, -41, -38, -39, -38, -37, -36, -35, -37, -35, -37, -36, -33, -31, -32, -38, -43, -42, -41, -39, -37, -38, -37, -37, -35, -35, -36, -36, -36, -38, -38, -36, -37, -39, -38, -39, -38, -39, -42, -47, -49, -46, -46, -47, -47, -46, -47, -49, -48, -48, -49, -51, -50, -49, -50, -51, -48, -46, -46, -47, -48, -47, -45, -43, -42, -44, -45, -47, -49, -51, -51, -51, -49, -47, -48, -47, -49, -46, -44, -40, -39, -40, -40, -39, -38, -40, -38, -39, -40, -39, -37, -36, -35, -33, -35, -34, -32, -33, -34, -38, -35, -36, -36, -36, -36, -35, -36, -38, -36, -37, -37, -37, -38, -38, -39, -43, -46, -51, -52, -50, -50, -48, -50, -49, -49, -50, -48, -50, -50, -49, -49, -51, -54, -54, -51, -51, -49, -47, -48, -52, -53, -51, -49, -46, -46, -43, -46, -45, -47, -50, -49, -47, -47, -46, -45, -48, -48, -45, -43, -44, -43, -43, -42, -41, -39, -39, -39, -37, -37, -34, -34, -32, -33, -35, -36, -39, -35, -36, -36, -36, -36, -40, -39, -36, -36, -35, -34, -33, -32, -37, -43, -51, -56, -54, -55, -56, -55, -52, -50, -49, -46, -46, -45, -47, -49, -51, -54, -54, -51, -49, -50, -50, -48, -47, -45, -46, -47, -50, -50, -48, -43, -42, -42, -43, -45, -47, -47, -48, -50, -49, -47, -47, -48, -49, -47, -48, -48, -47, -47, -45, -44, -42, -39, -38, -38, -38, -42, -41, -41, -39, -36, -35, -35, -35, -36, -36, -36, -34, -37, -37, -35, -36, -36, -35, -36, -37, -38, -41, -50, -67, -82, -84, -80, -80, -76, -75, -74, -71, -64, -61, -58, -54, -53, -54, -56, -56, -53, -51, -51, -49, -47, -49, -49, -48, -48, -47, -47, -48, -48, -47, -45, -46, -47, -46, -46, -45, -41, -42, -44, -44, -45, -45, -48, -47, -44, -42, -37, -35, -34, -32, -33, -37, -40, -37, -37, -36, -36, -37, -35, -35, -36, -36, -36, -37, -35, -37, -37, -37, -35, -35, -35, -37, -40, -41, -46, -58, -85, -119, --119, --123, -123, -115, -109, -110, -109, -107, -102, -95, -93, -88, -86, -86, -86, -86, -83, -77, -68, -64, -59, -58, -61, -61, -61, -58, -56, -51, -49, -51, -51, -50, -50, -45, -37, -41, -47, -50, -50, -53, -52, -49, -48, -45, -43, -42, -39, -38, -36, -38, -39, -39, -39, -38, -37, -36, -35, -35, -35, -36, -36, -34, -36, -36, -38, -39, -38, -37, -39, -41, -43, -47, -56, -79, -121, --106, --110, --108, --99, --102, --100, --99, --101, --103, --102, --106, --108, --110, --111, --111, --115, --117, --120, --123, --123, --125, --128, -127, -124, -118, -114, -119, -113, -104, -99, -100, -100, -97, -89, -83, -79, -76, -73, -69, -60, -52, -48, -47, -45, -46, -40, -37, -38, -38, -42, -45, -43, -42, -42, -39, -38, -39, -35, -35, -36, -36, -36, -37, -37, -40, -42, -42, -40, -39, -38, -40, -43, -49, -60, -83, -126, --105, --98, --93, --97, --94, --93, --90, --88, --91, --94, --91, --90, --93, --94, --94, --96, --94, --94, --96, --95, --93, --96, --100, --104, --104, --105, --108, --110, --115, --119, --120, --122, --125, -127, -122, -118, -115, -118, -113, -97, -78, -59, -45, -48, -46, -40, -38, -38, -37, -38, -38, -35, -37, -37, -34, -32, -32, -35, -36, -36, -36, -36, -38, -39, -38, -37, -38, -35, -34, -36, -35, -37, -41, -51, -77, -120, --100, --91, --96, --95, --93, --92, --89, --90, --92, --92, --93, --93, --91, --90, --91, --94, --94, --94, --93, --92, --93, --95, --95, --93, --94, --94, --91, --92, --94, --93, --91, --92, --91, --92, --96, --97, --99, --105, --112, -126, -95, -63, -43, -47, -42, -38, -38, -36, -36, -36, -38, -37, -37, -37, -36, -37, -38, -35, -36, -36, -36, -36, -39, -39, -39, -41, -38, -33, -35, -37, -39, -45, -51, -58, -80, -121, --104, --94, --93, --92, --94, --94, --91, --89, --89, --88, --86, --86, --88, --87, --88, --90, --90, --91, --91, --89, --87, --90, --92, --92, --90, --91, --91, --89, --89, --90, --92, --93, --91, --90, --91, --90, --91, --91, --100, --128, -88, -54, -44, -47, -48, -46, -43, -41, -36, -37, -40, -38, -40, -38, -38, -37, -39, -35, -36, -36, -36, -36, -38, -41, -39, -37, -35, -32, -34, -36, -38, -42, -47, -57, -82, -118, --105, --88, --86, --84, --88, --91, --91, --91, --92, --91, --89, --90, --89, --87, --88, --88, --89, --89, --91, --91, --91, --92, --93, --92, --93, --97, --93, --93, --93, --92, --92, --94, --94, --92, --94, --94, --91, --91, --98, --122, -96, -63, -53, -49, -44, -42, -42, -41, -38, -36, -37, -36, -37, -38, -39, -38, -40, -35, -36, -36, -36, -36, -34, -36, -35, -37, -39, -40, -43, -41, -41, -44, -48, -56, -83, --127, --99, --89, --88, --87, --88, --89, --87, --89, --90, --90, --89, --91, --91, --89, --87, --88, --87, --89, --88, --89, --88, --90, --89, --87, --88, --92, --91, --88, --89, --88, --87, --89, --91, --93, --95, --97, --94, --93, --99, --125, -91, -59, -45, -45, -47, -43, -42, -39, -36, -36, -36, -40, -38, -39, -39, -37, -36, -36, -36, -36, -36, -36, -34, -37, -38, -39, -40, -43, -43, -43, -43, -40, -43, -56, -87, --127, --100, --94, --95, --91, --88, --90, --89, --90, --92, --88, --88, --90, --88, --90, --90, --89, --89, --91, --91, --92, --92, --91, --90, --89, --89, --92, --90, --90, --92, --91, --89, --90, --91, --91, --95, --94, --92, --93, --99, --124, -92, -61, -48, -47, -49, -45, -44, -41, -38, -37, -37, -38, -34, -35, -35, -35, -35, -36, -36, -36, -36, -36, -40, -39, -36, -34, -35, -35, -37, -37, -40, -49, -56, -62, -89, --124, --99, --93, --88, --88, --92, --90, --87, --88, --89, --87, --88, --89, --88, --87, --88, --89, --89, --87, --88, --88, --87, --89, --92, --91, --92, --92, --91, --91, --90, --89, --89, --89, --90, --92, --93, --91, --87, --86, --96, --127, -90, -60, -45, -44, -43, -36, -36, -37, -39, -38, -40, -40, -37, -36, -36, -33, -35, -36, -36, -36, -36, -36, -34, -34, -34, -33, -34, -34, -35, -37, -40, -42, -41, -50, -80, --127, --96, --92, --89, --85, --88, --91, --88, --88, --89, --87, --90, --90, --89, --89, --90, --91, --90, --89, --87, --86, --87, --89, --90, --91, --93, --93, --93, --91, --91, --90, --90, --91, --92, --91, --92, --89, --87, --88, --96, --123, -96, -65, -48, -47, -45, -38, -37, -37, -37, -37, -39, -39, -37, -38, -36, -35, -35, -36, -36, -36, -36, -36, -40, -41, -40, -41, -42, -42, -41, -39, -39, -45, -53, -66, -100, --111, --86, --86, --87, --80, --86, --92, --88, --86, --87, --84, --83, --86, --86, --85, --85, --86, --84, --84, --88, --90, --87, --88, --88, --88, --88, --90, --89, --89, --89, --89, --89, --88, --87, --88, --90, --87, --88, --90, --98, --127, -93, -69, -50, -50, -51, -43, -44, -43, -41, -37, -37, -40, -38, -38, -37, -36, -38, -36, -36, -36, -36, -36, -36, -38, -39, -40, -39, -40, -39, -42, -46, -49, -52, -62, -90, --123, --101, --100, --98, --94, --90, --88, --87, --89, --90, --89, --88, --88, --87, --86, --87, --86, --86, --87, --85, --85, --88, --89, --88, --89, --88, --89, --90, --89, --90, --90, --91, --90, --89, --91, --91, --91, --90, --92, --99, --126, -93, -61, -45, -49, -48, -43, -41, -38, -37, -36, -38, -38, -37, -36, -35, -35, -39, -36, -36, -36, -36, -37, -41, -42, -40, -41, -41, -38, -40, -42, -42, -45, -50, -61, -91, --121, --94, --93, --96, --94, --94, --93, --91, --91, --93, --90, --88, --92, --90, --87, --87, --89, --88, --87, --89, --89, --90, --93, --96, --94, --91, --89, --88, --88, --90, --90, --89, --91, --92, --93, --91, --91, --92, --91, --101, -122, -84, -60, -48, -52, -46, -34, -36, -36, -37, -34, -34, -37, -34, -32, -33, -34, -37, -36, -36, -36, -37, -37, -36, -39, -39, -41, -40, -41, -40, -39, -42, -44, -49, -62, -92, --124, --96, --84, --81, --86, --87, --89, --90, --91, --92, --90, --88, --89, --91, --90, --89, --89, --89, --90, --89, --86, --88, --89, --89, --90, --88, --90, --91, --91, --92, --92, --92, --91, --91, --93, --95, --94, --93, --93, --101, -125, -86, -61, -47, -47, -49, -45, -44, -44, -43, -44, -45, -44, -42, -41, -38, -35, -38, -37, -37, -37, -37, -37, -39, -40, -40, -42, -44, -42, -43, -47, -45, -44, -50, -66, -99, --111, --93, --97, --96, --92, --89, --89, --89, --87, --88, --86, --87, --90, --88, --88, --88, --87, --87, --88, --91, --93, --91, --92, --89, --86, --84, --83, --83, --87, --90, --91, --90, --91, --92, --93, --94, --97, --96, --97, --107, -119, -79, -53, -39, -39, -38, -37, -40, -38, -38, -37, -38, -40, -41, -39, -38, -36, -36, -37, -37, -37, -37, -37, -40, -39, -40, -40, -40, -40, -38, -39, -43, -44, -48, -59, -95, --121, --103, --96, --95, --97, --94, --92, --90, --90, --90, --88, --85, --88, --89, --88, --89, --91, --92, --92, --91, --90, --88, --88, --88, --90, --91, --92, --91, --89, --93, --93, --92, --92, --91, --93, --94, --94, --94, --93, --105, -118, -79, -52, -38, -36, -40, -41, -41, -42, -39, -38, -40, -40, -39, -39, -39, -37, -38, -37, -37, -37, -37, -37, -41, -42, -40, -41, -43, -43, -45, -43, -42, -43, -47, -62, -95, --120, --93, --92, --96, --92, --94, --92, --91, --88, --88, --89, --90, --91, --88, --88, --89, --88, --91, --93, --92, --91, --90, --89, --90, --89, --91, --90, --90, --94, --95, --95, --94, --91, --87, --83, --87, --88, --89, --94, --106, -117, -79, -60, -51, -45, -40, -37, -38, -38, -36, -34, -33, -34, -34, -33, -35, -37, -36, -37, -37, -37, -37, -37, -36, -40, -38, -39, -40, -41, -38, -40, -43, -48, -52, -62, -96, --120, --103, --99, --94, --95, --93, --92, --90, --89, --90, --91, --90, --92, --95, --95, --94, --94, --92, --92, --93, --93, --92, --91, --90, --92, --94, --93, --92, --89, --91, --89, --87, --88, --91, --97, --98, --95, --94, --94, --104, -123, -86, -61, -48, -46, -47, -40, -38, -37, -34, -36, -35, -39, -41, -40, -39, -37, -37, -37, -37, -37, -37, -37, -39, -39, -40, -39, -40, -42, -41, -40, -43, -42, -43, -52, -85, -125, --106, --92, --98, --96, --84, --82, --87, --86, --85, --86, --86, --90, --88, --88, --87, --87, --92, --93, --93, --93, --90, --91, --92, --89, --89, --89, --89, --91, --91, --93, --93, --94, --93, --92, --94, --94, --91, --92, --100, -123, -79, -57, -47, -45, -47, -40, -37, -36, -35, -38, -37, -39, -40, -38, -39, -36, -35, -37, -37, -37, -37, -37, -41, -38, -33, -31, -37, -44, -44, -44, -46, -48, -52, -64, -96, --117, --98, --103, --99, --97, --96, --97, --97, --94, --89, --85, --90, --91, --89, --89, --89, --88, --87, --86, --90, --92, --91, --93, --91, --92, --92, --91, --93, --92, --92, --92, --91, --94, --94, --94, --95, --93, --98, --102, --110, -117, -83, -55, -40, -46, -48, -44, -42, -39, -40, -37, -39, -40, -38, -38, -38, -39, -42, -37, -37, -37, -37, -38, -39, -40, -41, -41, -41, -41, -40, -42, -46, -47, -52, -65, -102, --114, --102, --97, --100, --95, --83, --88, --91, --89, --91, --91, --89, --89, --88, --90, --89, --88, --88, --88, --89, --92, --90, --90, --90, --90, --92, --94, --95, --94, --93, --92, --90, --90, --92, --92, --94, --92, --92, --96, --108, -116, -76, -57, -50, -47, -42, -38, -41, -42, -41, -37, -36, -37, -36, -36, -37, -35, -35, -37, -37, -37, -37, -38, -39, -40, -41, -39, -41, -40, -36, -34, -37, -39, -42, -61, -100, --113, --90, --97, --96, --90, --87, --88, --90, --91, --93, --89, --91, --91, --90, --90, --91, --91, --89, --87, --90, --91, --89, --90, --89, --90, --90, --92, --92, --92, --91, --91, --89, --90, --92, --90, --92, --93, --93, --96, --107, -119, -81, -48, -37, -40, -44, -45, -41, -40, -38, -36, -37, -38, -37, -37, -37, -36, -35, -37, -37, -37, -37, -39, -47, -50, -45, -40, -41, -40, -41, -42, -44, -48, -53, -64, -98, --116, --95, --96, --97, --87, --83, --87, --87, --88, --87, --86, --86, --87, --91, --95, --94, --92, --88, --89, --90, --90, --88, --87, --88, --90, --94, --92, --93, --91, --89, --89, --87, --86, --87, --90, --92, --92, --91, --92, --100, -125, -79, -52, -51, -54, -50, -47, -47, -47, -46, -45, -46, -44, -40, -36, -34, -34, -34, -37, -37, -37, -37, -38, -41, -42, -42, -39, -39, -37, -35, -39, -46, -52, -53, -68, -101, --119, --101, --101, --101, --93, --90, --89, --88, --88, --88, --85, --89, --90, --89, --91, --93, --92, --90, --90, --90, --91, --91, --90, --91, --93, --91, --92, --92, --89, --90, --91, --92, --95, --95, --94, --95, --95, --96, --97, --110, -116, -81, -54, -48, -52, -51, -49, -45, -47, -46, -43, -44, -43, -38, -35, -35, -34, -36, -37, -37, -37, -37, -39, -43, -43, -41, -40, -42, -41, -41, -40, -40, -44, -50, -68, -106, --112, --93, --93, --95, --92, --94, --93, --90, --89, --90, --88, --90, --89, --88, --89, --89, --89, --86, --88, --91, --92, --92, --91, --92, --91, --91, --92, --91, --92, --90, --90, --91, --88, --87, --90, --92, --91, --91, --92, --104, -121, -80, -54, -43, -45, -46, -41, -41, -40, -38, -38, -38, -37, -37, -37, -37, -39, -40, -37, -37, -37, -37, -37, -39, -39, -40, -38, -40, -41, -40, -41, -43, -46, -52, -69, -105, --112, --92, --95, --94, --90, --94, --94, --92, --91, --90, --91, --90, --90, --90, --90, --89, --88, --89, --90, --90, --93, --94, --93, --92, --91, --91, --92, --94, --91, --91, --89, --89, --93, --95, --96, --97, --96, --96, --96, --106, -121, -86, -54, -47, -53, -50, -48, -43, -40, -39, -37, -40, -40, -38, -38, -36, -37, -37, -37, -37, -37, -37, -37, -39, -38, -38, -38, -38, -37, -37, -39, -41, -42, -45, -62, -104, --112, --93, --87, --91, --92, --92, --91, --89, --91, --89, --90, --88, --86, --88, --90, --91, --91, --90, --91, --91, --91, --90, --89, --90, --89, --90, --93, --91, --92, --92, --91, --92, --91, --91, --94, --94, --92, --93, --92, --103, -124, -92, -65, -49, -47, -45, -39, -40, -40, -40, -37, -37, -37, -37, -41, -41, -38, -38, -37, -37, -37, -37, -38, -46, -42, -42, -40, -41, -41, -37, -39, -43, -49, -59, -78, -112, --105, --88, --94, --93, --96, --95, --92, --90, --88, --90, --91, --90, --88, --89, --90, --89, --90, --91, --90, --91, --93, --93, --92, --92, --91, --91, --90, --92, --92, --92, --93, --92, --92, --92, --94, --94, --94, --94, --93, --107, -116, -77, -48, -43, -47, -43, -41, -40, -39, -38, -38, -42, -40, -38, -37, -34, -34, -34, -36, -37, -37, -37, -37, -41, -41, -38, -38, -39, -40, -39, -39, -40, -40, -45, -63, -102, --117, --98, --92, --88, --87, --91, --90, --89, --90, --91, --93, --90, --83, --85, --87, --88, --90, --91, --93, --92, --93, --91, --89, --89, --89, --91, --94, --92, --91, --90, --92, --92, --92, --93, --91, --89, --90, --89, --87, --99, -126, -86, -54, -43, -45, -46, -42, -40, -38, -36, -34, -34, -36, -34, -35, -34, -35, -36, -36, -37, -37, -37, -38, -43, -40, -38, -38, -40, -41, -40, -41, -41, -42, -50, -74, -113, --113, --98, --95, --88, --88, --90, --91, --90, --90, --92, --91, --88, --86, --87, --86, --86, --89, --91, --92, --92, --91, --88, --90, --93, --95, --97, --97, --95, --94, --93, --92, --92, --92, --93, --94, --94, --96, --95, --96, --111, -111, -73, -42, -39, -50, -45, -41, -40, -38, -38, -39, -41, -38, -35, -35, -33, -30, -28, -36, -37, -37, -37, -37, -37, -40, -38, -40, -41, -41, -43, -42, -40, -42, -49, -74, -119, --100, --88, --94, --93, --90, --94, --94, --91, --89, --89, --90, --89, --88, --93, --94, --91, --89, --87, --90, --96, --98, --96, --94, --94, --92, --92, --92, --89, --88, --89, --91, --90, --89, --88, --86, --87, --90, --93, --95, --110, -113, -79, -59, -52, -43, -38, -38, -38, -41, -41, -39, -41, -42, -41, -40, -40, -40, -39, -37, -37, -37, -37, -37, -39, -38, -40, -40, -42, -40, -41, -43, -47, -50, -53, -74, -112, --114, --99, --95, --92, --94, --95, --95, --92, --90, --91, --88, --85, --89, --88, --87, --88, --89, --89, --91, --91, --90, --88, --91, --94, --93, --93, --93, --94, --93, --91, --90, --90, --92, --93, --94, --92, --94, --94, --95, --110, -113, -78, -52, -46, -49, -45, -43, -42, -43, -41, -39, -41, -40, -38, -38, -35, -37, -39, -37, -37, -37, -37, -37, -35, -38, -38, -41, -42, -39, -42, -43, -44, -46, -55, -80, -119, --108, --99, --95, --91, --90, --95, --95, --92, --90, --94, --94, --89, --88, --92, --91, --91, --93, --93, --93, --93, --91, --89, --90, --93, --91, --89, --88, --89, --88, --89, --92, --93, --93, --93, --92, --92, --95, --95, --97, --113, -108, -67, -48, -46, -41, -41, -42, -39, -39, -37, -36, -38, -38, -36, -37, -39, -38, -39, -37, -37, -37, -37, -36, -32, -34, -36, -38, -38, -38, -38, -41, -42, -44, -50, -67, -115, --98, --89, --94, --93, --87, --86, --91, --90, --92, --93, --92, --89, --91, --92, --90, --92, --92, --91, --90, --90, --89, --87, --90, --93, --92, --92, --95, --94, --94, --93, --91, --92, --94, --95, --96, --93, --93, --92, --95, --112, -107, -73, -56, -45, -45, -44, -41, -41, -39, -38, -37, -39, -39, -37, -38, -37, -39, -41, -37, -37, -37, -37, -37, -40, -39, -41, -42, -42, -39, -39, -43, -47, -49, -56, -76, -112, --112, --102, --90, --78, --88, --93, --92, --92, --90, --89, --91, --88, --86, --90, --88, --87, --89, --91, --90, --90, --89, --90, --90, --88, --90, --89, --89, --89, --87, --90, --91, --90, --90, --88, --90, --92, --93, --93, --97, --112, -108, -71, -52, -48, -51, -48, -45, -40, -40, -41, -42, -42, -41, -39, -41, -42, -39, -37, -37, -37, -37, -37, -37, -38, -39, -40, -40, -40, -40, -42, -45, -46, -45, -51, -72, -121, --98, --99, --100, --95, --93, --96, --95, --93, --90, --90, --87, --89, --89, --90, --89, --90, --90, --89, --92, --94, --90, --91, --91, --91, --90, --89, --90, --88, --90, --92, --91, --92, --93, --94, --96, --94, --94, --95, --97, --113, -106, -71, -52, -48, -46, -45, -45, -41, -37, -33, -33, -35, -35, -37, -38, -37, -36, -35, -37, -37, -37, -37, -37, -37, -37, -38, -39, -39, -39, -40, -42, -40, -42, -50, -73, -114, --107, --96, --100, --97, --100, --103, --101, --97, --92, --89, --89, --87, --85, --88, --89, --87, --87, --88, --88, --89, --91, --92, --89, --86, --86, --84, --86, --86, --90, --94, --94, --93, --93, --94, --94, --93, --92, --94, --99, --115, -106, -72, -60, -59, -57, -55, -48, -42, -39, -37, -37, -39, -37, -37, -38, -37, -35, -33, -37, -37, -37, -37, -38, -45, -43, -42, -39, -36, -35, -34, -38, -40, -42, -50, -76, -115, --110, --97, --89, --88, --92, --95, --94, --91, --90, --88, --86, --87, --88, --87, --86, --88, --88, --88, --91, --90, --89, --90, --89, --89, --91, --90, --91, --90, --91, --93, --93, --93, --95, --97, --96, --92, --94, --97, --100, --118, -106, -72, -54, -50, -48, -47, -46, -44, -40, -36, -38, -40, -42, -41, -40, -38, -36, -38, -37, -37, -37, -37, -37, -39, -41, -41, -41, -40, -41, -45, -47, -47, -46, -53, -77, -119, --102, --90, --94, --89, --88, --94, --90, --87, --86, --85, --87, --87, --85, --86, --86, --87, --88, --90, --90, --91, --91, --91, --93, --91, --91, --92, --93, --93, --92, --94, --93, --90, --91, --92, --92, --91, --94, --96, --95, --105, -114, -74, -57, -51, -50, -53, -47, -42, -39, -37, -41, -46, -46, -43, -40, -35, -31, -29, -37, -37, -37, -37, -38, -39, -37, -38, -39, -40, -41, -40, -43, -46, -48, -57, -89, --126, --102, --97, --96, --93, --96, --92, --89, --89, --91, --94, --90, --91, --90, --88, --88, --90, --90, --90, --92, --93, --93, --92, --90, --89, --90, --89, --91, --93, --91, --92, --93, --92, --94, --95, --92, --92, --95, --99, --100, --116, -103, -70, -54, -52, -54, -49, -46, -43, -40, -36, -35, -39, -41, -37, -38, -38, -38, -37, -37, -37, -37, -38, -38, -42, -43, -41, -41, -41, -45, -45, -44, -44, -46, -56, -86, -119, --113, --96, --91, --78, --83, --90, --90, --90, --89, --91, --92, --92, --90, --88, --89, --91, --91, --90, --89, --89, --88, --88, --90, --90, --92, --92, --92, --90, --90, --94, --93, --91, --91, --92, --94, --91, --90, --95, --100, --121, -91, -58, -49, -49, -47, -45, -44, -44, -43, -41, -40, -40, -37, -35, -35, -36, -35, -34, -37, -37, -38, -38, -38, -42, -38, -37, -38, -37, -37, -40, -45, -45, -44, -54, -84, -123, --106, --96, --95, --96, --99, --97, --96, --92, --91, --92, --91, --92, --95, --94, --93, --92, --91, --89, --91, --92, --91, --91, --92, --94, --92, --88, --89, --91, --91, --93, --94, --92, --93, --92, --93, --92, --94, --95, --97, --118, -95, -55, -33, -34, -37, -37, -34, -33, -33, -31, -34, -36, -36, -34, -35, -36, -37, -38, -37, -37, -38, -38, -38, -40, -40, -42, -43, -43, -41, -41, -40, -43, -43, -50, -77, -116, --110, --84, --81, --87, --91, --94, --91, --88, --88, --89, --88, --88, --88, --85, --88, --89, --88, --88, --89, --92, --91, --93, --92, --92, --94, --94, --93, --93, --94, --96, --95, --91, --89, --88, --91, --92, --94, --98, --100, --122, -91, -57, -43, -46, -41, -33, -36, -36, -38, -39, -39, -38, -33, -33, -34, -34, -34, -35, -37, -38, -38, -38, -39, -44, -43, -44, -45, -44, -40, -40, -42, -40, -46, -60, -93, --127, --103, --88, --87, --94, --93, --96, --97, --94, --89, --90, --89, --88, --90, --90, --91, --92, --90, --90, --91, --93, --94, --94, --94, --94, --93, --91, --94, --96, --95, --98, --97, --94, --94, --95, --99, --98, --95, --95, --101, --121, -95, -58, -42, -39, -44, -44, -39, -37, -41, -42, -41, -41, -37, -33, -33, -32, -33, -33, -37, -38, -38, -38, -38, -39, -41, -44, -44, -47, -46, -44, -41, -39, -40, -52, -85, -127, --102, --88, --82, --87, --92, --94, --91, --90, --91, --92, --91, --89, --91, --92, --91, --89, --87, --86, --89, --91, --92, --93, --93, --92, --95, --98, --95, --90, --87, --90, --92, --93, --94, --98, --99, --97, --97, --96, --98, --114, -106, -65, -40, -42, -41, -39, -41, -41, -43, -46, -45, -43, -40, -38, -39, -40, -40, -39, -37, -38, -38, -38, -38, -34, -37, -39, -42, -42, -41, -42, -41, -42, -44, -58, -88, -124, --109, --98, --95, --96, --97, --95, --95, --95, --96, --94, --91, --90, --92, --91, --90, --90, --89, --87, --89, --92, --94, --95, --96, --95, --94, --94, --97, --98, --97, --97, --96, --95, --96, --95, --98, --99, --98, --97, --100, --121, -90, -52, -37, -36, -39, -41, -39, -39, -40, -38, -35, -33, -34, -35, -34, -36, -36, -35, -37, -38, -38, -38, -38, -40, -39, -40, -39, -40, -44, -46, -49, -53, -53, -53, -73, -108, --114, --96, --96, --99, --100, --99, --96, --94, --95, --93, --89, --84, --88, --91, --91, --93, --97, --97, --98, --97, --93, --92, --92, --92, --95, --95, --94, --92, --91, --94, --96, --96, --94, --94, --94, --92, --93, --94, --96, --115, -103, -64, -36, -38, -45, -42, -44, -41, -41, -41, -37, -38, -42, -45, -46, -43, -39, -33, -37, -38, -38, -38, -38, -42, -42, -38, -36, -35, -34, -36, -40, -39, -39, -49, -82, --123, --95, --91, --87, --89, --93, --94, --95, --94, --95, --94, --91, --92, --93, --92, --92, --94, --95, --95, --96, --94, --94, --94, --93, --94, --92, --90, --92, --90, --91, --93, --92, --92, --91, --91, --93, --93, --93, --93, --98, --122, -90, -54, -40, -40, -41, -40, -38, -36, -36, -36, -39, -42, -43, -41, -38, -38, -36, -36, -37, -38, -38, -38, -38, -41, -40, -37, -36, -38, -42, -42, -41, -44, -41, -48, -73, -116, --103, --88, --87, --92, --96, --95, --93, --91, --87, --85, --88, --85, --89, --93, --91, --88, --87, --85, --87, --89, --91, --93, --92, --92, --92, --91, --94, --90, --91, --93, --93, --94, --92, --92, --95, --93, --92, --93, --96, --116, -104, -66, -40, -39, -37, -39, -42, -43, -43, -40, -38, -37, -36, -36, -34, -34, -35, -35, -37, -38, -38, -38, -38, -41, -41, -38, -37, -36, -35, -37, -42, -44, -46, -58, -91, --120, --98, --99, --94, --89, --93, --92, --92, --93, --93, --93, --91, --89, --88, --85, --86, --88, --89, --87, --89, --88, --90, --94, --93, --94, --94, --91, --90, --86, --90, --94, --94, --96, --95, --95, --94, --93, --92, --91, --97, --123, -91, -58, -48, -52, -48, -44, -43, -43, -41, -36, -38, -42, -43, -39, -37, -34, -31, -32, -37, -38, -38, -38, -38, -41, -40, -37, -41, -42, -41, -43, -41, -39, -45, -60, -92, --123, --102, --102, --99, --99, --97, --92, --93, --93, --94, --94, --96, --93, --89, --92, --91, --90, --89, --90, --88, --90, --90, --91, --92, --92, --92, --92, --94, --90, --90, --90, --91, --91, --91, --93, --94, --91, --92, --95, --103, --127, -92, -59, -49, -56, -53, -55, -51, -50, -48, -43, -39, -36, -35, -35, -34, -33, -34, -37, -37, -38, -38, -38, -38, -38, -39, -38, -40, -41, -40, -42, -45, -45, -47, -64, -100, --118, --104, --102, --93, --95, --92, --96, --97, --96, --96, --94, --92, --89, --90, --93, --93, --96, --97, --94, --96, --96, --97, --98, --97, --96, --94, --94, --95, --92, --95, --94, --94, --95, --94, --95, --96, --95, --94, --94, --97, --118, -102, -70, -53, -53, -55, -52, -54, -52, -47, -41, -38, -39, -40, -36, -37, -37, -35, -36, -37, -38, -38, -38, -38, -40, -39, -40, -41, -39, -33, -33, -36, -40, -51, -64, -84, -125, --102, --87, --81, --92, --98, --101, --98, --97, --95, --95, --95, --94, --94, --98, --97, --94, --93, --93, --93, --92, --91, --92, --93, --93, --93, --93, --95, --94, --94, --96, --94, --91, --91, --95, --94, --95, --98, --98, --102, --119, -101, -71, -55, -47, -47, -48, -51, -52, -45, -38, -34, -30, -34, -34, -32, -34, -34, -37, -37, -37, -38, -38, -38, -41, -42, -41, -39, -41, -39, -37, -37, -37, -44, -66, -105, --118, --105, --107, --106, --102, --101, --102, --100, --101, --101, --99, --98, --96, --96, --98, --94, --94, --95, --94, --96, --97, --97, --96, --96, --95, --96, --94, --96, --99, --95, --96, --98, --100, --98, --97, --97, --94, --93, --97, --107, -123, -83, -54, -41, -45, -48, -45, -46, -44, -43, -40, -36, -39, -36, -37, -38, -40, -41, -40, -37, -37, -38, -38, -38, -40, -40, -43, -43, -41, -40, -42, -42, -40, -44, -61, -90, -121, --122, --121, --117, --113, --111, --108, --104, --104, --105, --106, --106, --102, --103, --106, --106, --107, --106, --106, --104, --103, --101, --100, --99, --98, --99, --100, --101, --98, --95, --94, --94, --93, --95, --95, --97, --97, --98, --97, --97, --115, -98, -58, -40, -42, -46, -46, -47, -48, -45, -43, -42, -40, -39, -36, -34, -35, -36, -38, -37, -37, -37, -38, -38, -37, -41, -41, -42, -43, -40, -41, -40, -40, -42, -51, -68, -78, -81, -81, -81, -85, -85, -87, -88, -89, -93, -96, -97, -100, -98, -101, -105, -109, -110, -113, -116, -116, -117, -118, -119, -120, -121, -126, --126, --126, --123, --120, --118, --117, --115, --114, --113, --110, --106, --108, --115, -117, -81, -52, -40, -42, -47, -48, -48, -45, -42, -38, -34, -37, -34, -36, -37, -39, -39, -38, -37, -37, -37, -38, -38, -38, -37, -39, -41, -39, -42, -42, -40, -41, -43, -53, -69, -71, -66, -65, -61, -57, -57, -58, -60, -62, -65, -64, -68, -76, -71, -67, -68, -69, -75, -82, -87, -85, -85, -86, -87, -92, -94, -94, -96, -90, -91, -95, -101, -109, -109, -114, -115, -119, -123, -121, -117, -104, -77, -50, -37, -32, -30, -24, -27, -35, -39, -39, -36, -38, -36, -37, -36, -34, -33, -32, -37, -37, -37, -37, -38, -37, -41, -40, -41, -43, -41, -39, -38, -40, -43, -49, -53, -52, -50, -50, -51, -51, -52, -54, -49, -46, -50, -48, -47, -51, -51, -50, -48, -50, -50, -50, -50, -50, -51, -51, -52, -52, -56, -57, -58, -59, -57, -56, -56, -55, -52, -53, -56, -59, -60, -61, -62, -59, -54, -54, -51, -47, -50, -47, -45, -44, -43, -40, -37, -37, -37, -39, -43, -45, -43, -39, -36, -37, -37, -37, -39, -46, -41, -38, -40, -40, -39, -40, -40, -38, -43, -49, -54, -54, -52, -52, -49, -47, -47, -50, -48, -49, -52, -49, -50, -51, -48, -48, -49, -49, -49, -51, -50, -46, -46, -50, -49, -52, -52, -47, -48, -51, -52, -48, -50, -52, -47, -45, -46, -45, -48, -49, -50, -48, -44, -45, -48, -50, -47, -43, -44, -44, -44, -43, -43, -43, -41, -41, -41, -38, -36, -36, -36, -37, -37, -37, -37, -41, -41, -39, -38, -38, -36, -36, -37, -39, -44, -48, -50, -50, -50, -52, -52, -52, -52, -53, -50, -46, -46, -46, -42, -43, -46, -45, -44, -46, -46, -45, -43, -45, -46, -50, -51, -50, -51, -50, -49, -51, -51, -50, -51, -50, -49, -47, -49, -49, -50, -52, -50, -48, -45, -46, -47, -47, -48, -47, -45, -44, -45, -42, -38, -37, -35, -31, -29, -31, -33, -35, -36, -36, -37, -37, -37, -39, -39, -40, -41, -42, -39, -37, -37, -36, -40, -44, -48, -47, -45, -46, -49, -49, -49, -50, -47, -48, -49, -48, -45, -47, -47, -49, -51, -53, -51, -49, -48, -46, -44, -44, -43, -44, -46, -48, -49, -51, -51, -50, -49, -49, -48, -50, -54, -56, -49, -44, -43, -44, -44, -45, -45, -44, -45, -42, -40, -41, -42, -41, -38, -36, -37, -41, -46, -43, -40, -37, -36, -36, -37, -37, -37, -40, -41, -40, -39, -39, -36, -35, -37, -38, -41, -43, -45, -46, -46, -46, -47, -45, -41, -45, -46, -47, -48, -47, -45, -44, -45, -47, -46, -46, -46, -45, -46, -45, -43, -44, -44, -46, -51, -51, -47, -49, -46, -44, -43, -39, -39, -42, -46, -46, -46, -44, -43, -42, -42, -44, -44, -46, -46, -47, -45, -40, -37, -33, -35, -40, -45, -42, -42, -42, -38, -36, -36, -36, -36, -37, -38, -42, -42, -40, -39, -38, -38, -39, -40, -39, -38, -40, -40, -38, -37, -38, -40, -40, -38, -39, -39, -40, -39, -36, -34, -37, -40, -40, -41, -40, -38, -35, -36, -40, -39, -38, -36, -36, -37, -39, -40, -40, -40, -41, -42, -42, -42, -42, -40, -41, -41, -42, -45, -45, -42, -42, -40, -42, -46, -46, -44, -43, -41, -39, -37, -40, -41, -37, -35, -32, -30, -31, -36, -36, -36, -36, -37, -40, -40, -40, -39, -39, -38, -39, -41, -42, -40, -42, -42, -41, -38, -38, -42, -39, -37, -39, -37, -34, -35, -36, -39, -39, -41, -41, -39, -39, -36, -35, -35, -37, -41, -45, -48, -47, -48, -45, -42, -44, -41, -41, -42, -43, -42, -41, -40, -39, -37, -37, -37, -38, -38, -40, -41, -42, -40, -41, -40, -39, -40, -38, -37, -39, -41, -40, -37, -35, -32, -33, -36, -36, -36, -36, -36, -38, -39, -38, -37, -38, -37, -37, -40, -39, -43, -48, -48, -44, -39, -38, -40, -41, -41, -41, -42, -42, -39, -36, -35, -35, -34, -35, -36, -38, -38, -37, -39, -38, -36, -36, -37, -39, -40, -40, -38, -38, -37, -35, -36, -33, -34, -37, -36, -39, -39, -38, -37, -33, -30, -32, -33, -33, -35, -36, -36, -36, -37, -35, -37, -39, -40, -36, -35, -37, -36, -35, -36, -36, -36, -36, -35, -31, -34, -35, -37, -38, -37, -36, -39, -42, -41, -41, -40, -38, -36, -37, -38, -39, -40, -40, -37, -34, -34, -35, -37, -37, -39, -39, -38, -40, -39, -41, -43, -43, -43, -40, -39, -41, -41, -39, -35, -33, -34, -33, -36, -38, -40, -40, -39, -40, -37, -39, -37, -34, -33, -34, -35, -35, -35, -35, -33, -35, -34, -33, -34, -36, -37, -36, -35, -35, -34, -35, -36, -36, -36, -36, -36, -38, -39, -40, -40, -42, -41, -40, -43, -42, -39, -38, -35, -35, -34, -35, -37, -37, -37, -37, -38, -37, -35, -34, -36, -39, -40, -39, -40, -41, -40, -36, -37, -38, -34, -35, -36, -37, -39, -40, -37, -37, -37, -34, -34, -35, -35, -37, -37, -38, -39, -42, -44, -42, -40, -41, -40, -38, -35, -34, -34, -36, -36, -37, -39, -38, -40, -40, -38, -36, -33, -31, -36, -36, -36, -36, -36, -36, -36, -39, -41, -42, -41, -40, -38, -38, -37, -37, -41, -40, -39, -39, -37, -39, -38, -39, -37, -35, -35, -35, -36, -39, -38, -38, -38, -38, -39, -39, -39, -38, -38, -39, -40, -41, -41, -41, -38, -38, -37, -37, -36, -38, -40, -39, -37, -35, -37, -35, -33, -34, -35, -38, -36, -36, -38, -34, -33, -35, -36, -35, -37, -39, -38, -38, -38, -37, -34, -31, -36, -36, -36, -36, -36, -37, -41, -41, -39, -40, -39, -40, -41, -42, -40, -35, -35, -36, -34, -36, -38, -38, -39, -39, -39, -39, -38, -37, -38, -38, -36, -34, -35, -40, -44, -43, -46, -47, -40, -35, -36, -36, -37, -37, -35, -36, -37, -35, -36, -38, -38, -39, -39, -39, -40, -40, -38, -33, -32, -35, -36, -35, -32, -31, -32, -34, -34, -35, -38, -39, -38, -37, -35, -36, -36, -33, -36, -36, -36, -36, -36, -35, -31, -33, -36, -36, -37, -37, -37, -38, -38, -39, -41, -39, -36, -36, -36, -35, -37, -34, -34, -32, -32, -34, -35, -39, -38, -38, -39, -38, -38, -38, -38, -36, -33, -34, -33, -34, -34, -37, -40, -40, -40, -37, -35, -37, -38, -37, -35, -35, -36, -37, -38, -41, -43, -42, -37, -36, -40, -39, -41, -43, -41, -36, -32, -33, -36, -37, -40, -39, -36, -33, -36, -36, -36, -36, -37, -42, -42, -39, -35, -35, -35, -37, -37, -38, -39, -38, -40, -40, -39, -44, -44, -39, -40, -40, -42, -44, -42, -38, -38, -36, -35, -35, -35, -38, -38, -35, -33, -36, -35, -35, -37, -38, -39, -38, -38, -38, -37, -36, -33, -33, -33, -34, -37, -38, -39, -40, -36, -31, -33, -36, -34, -37, -35, -34, -36, -37, -38, -38, -37, -37, -35, -33, -35, -39, -36, -34, -36, -36, -36, -36, -36, -36, -35, -36, -36, -37, -35, -37, -38, -38, -40, -41, -42, -40, -41, -44, -42, -42, -40, -38, -39, -37, -36, -35, -35, -34, -33, -34, -35, -36, -36, -38, -37, -37, -36, -34, -36, -39, -40, -39, -38, -39, -37, -37, -36, -39, -40, -39, -39, -35, -37, -37, -36, -40, -41, -40, -37, -35, -36, -36, -37, -35, -35, -34, -32, -36, -34, -32, -31, -30, -31, -33, -36, -36, -36, -36, -37, -37, -37, -36, -35, -38, -39, -41, -40, -35, -36, -35, -35, -34, -34, -38, -38, -39, -40, -36, -35, -36, -35, -36, -36, -38, -36, -39, -41, -42, -41, -41, -40, -41, -41, -39, -38, -36, -37, -37, -35, -37, -40, -39, -37, -37, -37, -38, -39, -43, -44, -41, -39, -39, -42, -40, -36, -38, -34, -33, -36, -37, -41, -41, -41, -41, -41, -40, -40, -44, -41, -38, -36, -36, -36, -37, -37, -38, -39, -39, -38, -38, -37, -40, -40, -37, -38, -38, -37, -36, -36, -36, -35, -39, -39, -38, -41, -38, -37, -38, -39, -41, -40, -40, -41, -41, -41, -40, -37, -39, -40, -40, -39, -39, -36, -35, -35, -35, -35, -35, -34, -36, -35, -37, -40, -40, -40, -38, -36, -36, -35, -37, -36, -37, -38, -38, -38, -37, -37, -34, -31, -33, -32, -33, -33, -33, -35, -36}; +char susan_input[ 7292 ] = { 80, + 53, + 10, + 35, + 32, + 67, + 82, + 69, + 65, + 84, + 79, + 82, + 58, + 32, + 88, + 86, + 32, + 86, + 101, + 114, + 115, + 105, + 111, + 110, + 32, + 51, + 46, + 49, + 48, + 97, + 32, + 32, + 82, + 101, + 118, + 58, + 32, + 49, + 50, + 47, + 50, + 57, + 47, + 57, + 52, + 32, + 40, + 80, + 78, + 71, + 32, + 112, + 97, + 116, + 99, + 104, + 32, + 49, + 46, + 50, + 41, + 10, + 55, + 54, + 32, + 57, + 53, + 10, + 50, + 53, + 53, + 10, + 35, + 36, + 36, + 36, + 36, + 38, + 38, + 36, + 37, + 37, + 37, + 38, + 38, + 36, + 34, + 38, + 40, + 41, + 42, + 40, + 38, + 36, + 36, + 35, + 36, + 35, + 32, + 35, + 38, + 42, + 42, + 38, + 36, + 36, + 36, + 37, + 36, + 35, + 33, + 33, + 33, + 32, + 31, + 33, + 36, + 39, + 40, + 36, + 36, + 34, + 34, + 36, + 38, + 39, + 37, + 36, + 36, + 35, + 36, + 39, + 39, + 37, + 37, + 39, + 37, + 38, + 39, + 40, + 38, + 37, + 37, + 33, + 33, + 32, + 33, + 34, + 35, + 35, + 36, + 36, + 36, + 37, + 38, + 37, + 38, + 38, + 39, + 41, + 41, + 40, + 40, + 43, + 42, + 41, + 40, + 39, + 38, + 35, + 33, + 35, + 35, + 37, + 39, + 38, + 37, + 36, + 38, + 36, + 36, + 34, + 34, + 38, + 39, + 39, + 37, + 36, + 36, + 34, + 33, + 34, + 33, + 35, + 33, + 36, + 35, + 35, + 36, + 36, + 37, + 33, + 32, + 36, + 38, + 38, + 38, + 39, + 39, + 38, + 39, + 37, + 35, + 36, + 34, + 35, + 36, + 37, + 39, + 38, + 37, + 34, + 31, + 34, + 35, + 35, + 35, + 35, + 36, + 38, + 39, + 39, + 37, + 38, + 38, + 40, + 39, + 40, + 41, + 43, + 44, + 42, + 40, + 39, + 38, + 42, + 42, + 39, + 39, + 36, + 33, + 33, + 34, + 36, + 36, + 35, + 33, + 33, + 35, + 37, + 36, + 34, + 34, + 31, + 30, + 32, + 36, + 42, + 43, + 43, + 40, + 36, + 36, + 36, + 35, + 34, + 35, + 33, + 33, + 30, + 32, + 34, + 35, + 35, + 35, + 36, + 35, + 37, + 34, + 34, + 35, + 36, + 37, + 37, + 35, + 36, + 37, + 39, + 39, + 38, + 35, + 35, + 35, + 35, + 35, + 36, + 38, + 37, + 38, + 38, + 36, + 35, + 35, + 36, + 35, + 35, + 35, + 35, + 34, + 34, + 36, + 36, + 38, + 40, + 38, + 37, + 36, + 34, + 34, + 35, + 35, + 36, + 37, + 37, + 38, + 38, + 39, + 39, + 36, + 35, + 36, + 35, + 37, + 36, + 38, + 39, + 37, + 38, + 34, + 33, + 32, + 33, + 32, + 28, + 34, + 40, + 45, + 44, + 40, + 38, + 34, + 30, + 30, + 33, + 40, + 45, + 43, + 41, + 37, + 37, + 37, + 36, + 33, + 31, + 32, + 31, + 35, + 35, + 35, + 35, + 35, + 38, + 39, + 39, + 40, + 39, + 37, + 37, + 37, + 35, + 35, + 37, + 37, + 36, + 37, + 37, + 37, + 38, + 37, + 38, + 37, + 37, + 35, + 35, + 34, + 35, + 35, + 35, + 36, + 39, + 45, + 43, + 38, + 39, + 38, + 36, + 36, + 36, + 35, + 37, + 39, + 38, + 37, + 37, + 37, + 39, + 38, + 37, + 37, + 35, + 34, + 34, + 37, + 39, + 36, + 37, + 38, + 39, + 40, + 41, + 39, + 36, + 38, + 39, + 39, + 39, + 36, + 33, + 32, + 30, + 30, + 31, + 35, + 35, + 35, + 35, + 35, + 39, + 40, + 38, + 37, + 40, + 39, + 38, + 39, + 39, + 39, + 38, + 39, + 39, + 40, + 40, + 39, + 41, + 39, + 41, + 39, + 38, + 39, + 38, + 38, + 36, + 35, + 36, + 35, + 37, + 38, + 38, + 38, + 40, + 38, + 39, + 39, + 36, + 36, + 33, + 34, + 36, + 35, + 37, + 38, + 39, + 39, + 38, + 36, + 32, + 32, + 35, + 38, + 38, + 39, + 38, + 35, + 35, + 34, + 37, + 39, + 38, + 36, + 35, + 35, + 33, + 31, + 30, + 32, + 36, + 37, + 38, + 35, + 35, + 35, + 35, + 35, + 39, + 41, + 42, + 38, + 33, + 31, + 33, + 37, + 36, + 37, + 38, + 37, + 37, + 38, + 39, + 38, + 38, + 38, + 38, + 37, + 38, + 38, + 39, + 41, + 41, + 37, + 39, + 40, + 42, + 44, + 43, + 39, + 42, + 48, + 45, + 41, + 39, + 38, + 38, + 38, + 38, + 36, + 37, + 38, + 39, + 39, + 39, + 43, + 41, + 38, + 37, + 37, + 38, + 36, + 34, + 34, + 34, + 38, + 41, + 41, + 38, + 35, + 35, + 34, + 35, + 32, + 30, + 31, + 33, + 34, + 35, + 35, + 35, + 35, + 35, + 35, + 39, + 36, + 35, + 38, + 41, + 38, + 32, + 34, + 38, + 34, + 38, + 40, + 39, + 39, + 36, + 36, + 39, + 38, + 39, + 37, + 38, + 38, + 36, + 36, + 35, + 37, + 38, + 39, + 38, + 36, + 38, + 37, + 35, + 31, + 35, + 37, + 40, + 39, + 35, + 35, + 36, + 34, + 36, + 36, + 38, + 37, + 38, + 37, + 37, + 36, + 37, + 38, + 37, + 36, + 35, + 34, + 34, + 34, + 37, + 36, + 37, + 36, + 34, + 36, + 36, + 34, + 31, + 30, + 33, + 32, + 33, + 35, + 35, + 35, + 35, + 34, + 27, + 33, + 39, + 42, + 41, + 42, + 44, + 45, + 42, + 39, + 41, + 41, + 42, + 43, + 42, + 41, + 40, + 38, + 37, + 35, + 37, + 36, + 36, + 36, + 37, + 36, + 36, + 37, + 37, + 39, + 43, + 43, + 43, + 42, + 39, + 39, + 39, + 39, + 40, + 39, + 38, + 35, + 34, + 36, + 37, + 36, + 37, + 38, + 38, + 37, + 36, + 35, + 35, + 33, + 35, + 38, + 38, + 39, + 41, + 39, + 38, + 37, + 38, + 38, + 36, + 37, + 36, + 37, + 37, + 36, + 36, + 35, + 35, + 35, + 35, + 36, + 42, + 40, + 41, + 43, + 42, + 39, + 37, + 37, + 37, + 37, + 39, + 39, + 38, + 37, + 35, + 37, + 36, + 35, + 36, + 36, + 39, + 39, + 36, + 36, + 34, + 37, + 40, + 40, + 40, + 39, + 41, + 40, + 39, + 39, + 39, + 40, + 38, + 36, + 34, + 35, + 37, + 34, + 36, + 35, + 35, + 34, + 33, + 36, + 36, + 38, + 39, + 38, + 37, + 34, + 34, + 33, + 34, + 35, + 36, + 36, + 35, + 36, + 35, + 38, + 39, + 39, + 40, + 38, + 37, + 36, + 36, + 35, + 35, + 35, + 35, + 36, + 36, + 42, + 45, + 44, + 43, + 40, + 38, + 37, + 36, + 37, + 37, + 38, + 38, + 38, + 38, + 36, + 35, + 35, + 34, + 34, + 36, + 38, + 36, + 35, + 38, + 37, + 37, + 38, + 38, + 37, + 38, + 36, + 33, + 35, + 37, + 37, + 38, + 38, + 41, + 41, + 41, + 38, + 35, + 33, + 30, + 29, + 32, + 37, + 39, + 39, + 38, + 39, + 38, + 35, + 34, + 35, + 35, + 35, + 35, + 34, + 35, + 36, + 36, + 37, + 38, + 38, + 38, + 36, + 35, + 33, + 34, + 35, + 35, + 35, + 35, + 36, + 36, + 32, + 33, + 36, + 38, + 40, + 42, + 42, + 39, + 40, + 41, + 43, + 42, + 36, + 33, + 32, + 33, + 32, + 35, + 37, + 41, + 41, + 39, + 40, + 37, + 36, + 38, + 39, + 41, + 40, + 40, + 41, + 39, + 37, + 37, + 36, + 37, + 37, + 36, + 35, + 37, + 37, + 39, + 41, + 41, + 43, + 41, + 40, + 40, + 37, + 37, + 38, + 38, + 38, + 38, + 38, + 36, + 38, + 37, + 36, + 39, + 41, + 41, + 42, + 41, + 39, + 38, + 38, + 36, + 37, + 37, + 35, + 35, + 35, + 36, + 36, + 33, + 35, + 37, + 34, + 35, + 35, + 35, + 39, + 38, + 39, + 41, + 43, + 43, + 43, + 42, + 39, + 38, + 39, + 37, + 37, + 38, + 37, + 36, + 38, + 38, + 40, + 38, + 39, + 39, + 36, + 35, + 34, + 33, + 34, + 36, + 37, + 38, + 37, + 37, + 37, + 36, + 34, + 34, + 33, + 34, + 35, + 38, + 41, + 38, + 36, + 37, + 37, + 37, + 37, + 39, + 41, + 40, + 41, + 42, + 41, + 40, + 41, + 41, + 39, + 40, + 40, + 39, + 37, + 37, + 36, + 38, + 35, + 35, + 35, + 36, + 37, + 45, + 42, + 40, + 44, + 45, + 42, + 43, + 42, + 42, + 45, + 47, + 49, + 51, + 50, + 51, + 50, + 49, + 45, + 45, + 45, + 43, + 42, + 42, + 43, + 41, + 39, + 40, + 40, + 40, + 39, + 38, + 40, + 40, + 39, + 39, + 39, + 38, + 35, + 33, + 37, + 41, + 42, + 39, + 37, + 37, + 37, + 38, + 38, + 36, + 37, + 35, + 33, + 32, + 33, + 34, + 35, + 35, + 38, + 39, + 37, + 38, + 36, + 35, + 37, + 38, + 39, + 42, + 41, + 38, + 36, + 34, + 35, + 35, + 35, + 35, + 36, + 39, + 38, + 36, + 37, + 37, + 37, + 36, + 40, + 42, + 43, + 47, + 49, + 48, + 47, + 44, + 43, + 47, + 52, + 55, + 52, + 47, + 44, + 42, + 42, + 42, + 40, + 40, + 39, + 38, + 37, + 37, + 39, + 38, + 38, + 38, + 36, + 33, + 31, + 34, + 35, + 38, + 39, + 38, + 37, + 38, + 38, + 37, + 38, + 37, + 42, + 46, + 45, + 42, + 39, + 39, + 38, + 34, + 36, + 39, + 39, + 37, + 35, + 36, + 34, + 37, + 37, + 36, + 36, + 39, + 41, + 42, + 35, + 35, + 35, + 35, + 36, + 40, + 40, + 38, + 39, + 39, + 36, + 36, + 38, + 39, + 42, + 46, + 49, + 50, + 52, + 52, + 51, + 51, + 52, + 54, + 51, + 50, + 51, + 52, + 51, + 47, + 47, + 46, + 47, + 45, + 43, + 43, + 43, + 43, + 43, + 42, + 41, + 41, + 40, + 40, + 42, + 46, + 44, + 41, + 37, + 36, + 37, + 39, + 39, + 38, + 38, + 39, + 38, + 38, + 39, + 37, + 35, + 35, + 38, + 38, + 38, + 36, + 35, + 35, + 37, + 35, + 36, + 38, + 36, + 38, + 38, + 39, + 35, + 35, + 35, + 36, + 36, + 39, + 39, + 40, + 40, + 39, + 37, + 38, + 41, + 39, + 43, + 46, + 47, + 49, + 49, + 49, + 48, + 48, + 51, + 52, + 52, + 53, + 53, + 52, + 51, + 52, + 50, + 48, + 49, + 48, + 46, + 47, + 47, + 44, + 42, + 43, + 44, + 43, + 45, + 48, + 46, + 45, + 44, + 42, + 43, + 46, + 45, + 44, + 42, + 41, + 38, + 39, + 38, + 37, + 36, + 35, + 37, + 35, + 37, + 36, + 33, + 31, + 32, + 38, + 43, + 42, + 41, + 39, + 37, + 38, + 37, + 37, + 35, + 35, + 36, + 36, + 36, + 38, + 38, + 36, + 37, + 39, + 38, + 39, + 38, + 39, + 42, + 47, + 49, + 46, + 46, + 47, + 47, + 46, + 47, + 49, + 48, + 48, + 49, + 51, + 50, + 49, + 50, + 51, + 48, + 46, + 46, + 47, + 48, + 47, + 45, + 43, + 42, + 44, + 45, + 47, + 49, + 51, + 51, + 51, + 49, + 47, + 48, + 47, + 49, + 46, + 44, + 40, + 39, + 40, + 40, + 39, + 38, + 40, + 38, + 39, + 40, + 39, + 37, + 36, + 35, + 33, + 35, + 34, + 32, + 33, + 34, + 38, + 35, + 36, + 36, + 36, + 36, + 35, + 36, + 38, + 36, + 37, + 37, + 37, + 38, + 38, + 39, + 43, + 46, + 51, + 52, + 50, + 50, + 48, + 50, + 49, + 49, + 50, + 48, + 50, + 50, + 49, + 49, + 51, + 54, + 54, + 51, + 51, + 49, + 47, + 48, + 52, + 53, + 51, + 49, + 46, + 46, + 43, + 46, + 45, + 47, + 50, + 49, + 47, + 47, + 46, + 45, + 48, + 48, + 45, + 43, + 44, + 43, + 43, + 42, + 41, + 39, + 39, + 39, + 37, + 37, + 34, + 34, + 32, + 33, + 35, + 36, + 39, + 35, + 36, + 36, + 36, + 36, + 40, + 39, + 36, + 36, + 35, + 34, + 33, + 32, + 37, + 43, + 51, + 56, + 54, + 55, + 56, + 55, + 52, + 50, + 49, + 46, + 46, + 45, + 47, + 49, + 51, + 54, + 54, + 51, + 49, + 50, + 50, + 48, + 47, + 45, + 46, + 47, + 50, + 50, + 48, + 43, + 42, + 42, + 43, + 45, + 47, + 47, + 48, + 50, + 49, + 47, + 47, + 48, + 49, + 47, + 48, + 48, + 47, + 47, + 45, + 44, + 42, + 39, + 38, + 38, + 38, + 42, + 41, + 41, + 39, + 36, + 35, + 35, + 35, + 36, + 36, + 36, + 34, + 37, + 37, + 35, + 36, + 36, + 35, + 36, + 37, + 38, + 41, + 50, + 67, + 82, + 84, + 80, + 80, + 76, + 75, + 74, + 71, + 64, + 61, + 58, + 54, + 53, + 54, + 56, + 56, + 53, + 51, + 51, + 49, + 47, + 49, + 49, + 48, + 48, + 47, + 47, + 48, + 48, + 47, + 45, + 46, + 47, + 46, + 46, + 45, + 41, + 42, + 44, + 44, + 45, + 45, + 48, + 47, + 44, + 42, + 37, + 35, + 34, + 32, + 33, + 37, + 40, + 37, + 37, + 36, + 36, + 37, + 35, + 35, + 36, + 36, + 36, + 37, + 35, + 37, + 37, + 37, + 35, + 35, + 35, + 37, + 40, + 41, + 46, + 58, + 85, + 119, + -119, + -123, + 123, + 115, + 109, + 110, + 109, + 107, + 102, + 95, + 93, + 88, + 86, + 86, + 86, + 86, + 83, + 77, + 68, + 64, + 59, + 58, + 61, + 61, + 61, + 58, + 56, + 51, + 49, + 51, + 51, + 50, + 50, + 45, + 37, + 41, + 47, + 50, + 50, + 53, + 52, + 49, + 48, + 45, + 43, + 42, + 39, + 38, + 36, + 38, + 39, + 39, + 39, + 38, + 37, + 36, + 35, + 35, + 35, + 36, + 36, + 34, + 36, + 36, + 38, + 39, + 38, + 37, + 39, + 41, + 43, + 47, + 56, + 79, + 121, + -106, + -110, + -108, + -99, + -102, + -100, + -99, + -101, + -103, + -102, + -106, + -108, + -110, + -111, + -111, + -115, + -117, + -120, + -123, + -123, + -125, + -128, + 127, + 124, + 118, + 114, + 119, + 113, + 104, + 99, + 100, + 100, + 97, + 89, + 83, + 79, + 76, + 73, + 69, + 60, + 52, + 48, + 47, + 45, + 46, + 40, + 37, + 38, + 38, + 42, + 45, + 43, + 42, + 42, + 39, + 38, + 39, + 35, + 35, + 36, + 36, + 36, + 37, + 37, + 40, + 42, + 42, + 40, + 39, + 38, + 40, + 43, + 49, + 60, + 83, + 126, + -105, + -98, + -93, + -97, + -94, + -93, + -90, + -88, + -91, + -94, + -91, + -90, + -93, + -94, + -94, + -96, + -94, + -94, + -96, + -95, + -93, + -96, + -100, + -104, + -104, + -105, + -108, + -110, + -115, + -119, + -120, + -122, + -125, + 127, + 122, + 118, + 115, + 118, + 113, + 97, + 78, + 59, + 45, + 48, + 46, + 40, + 38, + 38, + 37, + 38, + 38, + 35, + 37, + 37, + 34, + 32, + 32, + 35, + 36, + 36, + 36, + 36, + 38, + 39, + 38, + 37, + 38, + 35, + 34, + 36, + 35, + 37, + 41, + 51, + 77, + 120, + -100, + -91, + -96, + -95, + -93, + -92, + -89, + -90, + -92, + -92, + -93, + -93, + -91, + -90, + -91, + -94, + -94, + -94, + -93, + -92, + -93, + -95, + -95, + -93, + -94, + -94, + -91, + -92, + -94, + -93, + -91, + -92, + -91, + -92, + -96, + -97, + -99, + -105, + -112, + 126, + 95, + 63, + 43, + 47, + 42, + 38, + 38, + 36, + 36, + 36, + 38, + 37, + 37, + 37, + 36, + 37, + 38, + 35, + 36, + 36, + 36, + 36, + 39, + 39, + 39, + 41, + 38, + 33, + 35, + 37, + 39, + 45, + 51, + 58, + 80, + 121, + -104, + -94, + -93, + -92, + -94, + -94, + -91, + -89, + -89, + -88, + -86, + -86, + -88, + -87, + -88, + -90, + -90, + -91, + -91, + -89, + -87, + -90, + -92, + -92, + -90, + -91, + -91, + -89, + -89, + -90, + -92, + -93, + -91, + -90, + -91, + -90, + -91, + -91, + -100, + -128, + 88, + 54, + 44, + 47, + 48, + 46, + 43, + 41, + 36, + 37, + 40, + 38, + 40, + 38, + 38, + 37, + 39, + 35, + 36, + 36, + 36, + 36, + 38, + 41, + 39, + 37, + 35, + 32, + 34, + 36, + 38, + 42, + 47, + 57, + 82, + 118, + -105, + -88, + -86, + -84, + -88, + -91, + -91, + -91, + -92, + -91, + -89, + -90, + -89, + -87, + -88, + -88, + -89, + -89, + -91, + -91, + -91, + -92, + -93, + -92, + -93, + -97, + -93, + -93, + -93, + -92, + -92, + -94, + -94, + -92, + -94, + -94, + -91, + -91, + -98, + -122, + 96, + 63, + 53, + 49, + 44, + 42, + 42, + 41, + 38, + 36, + 37, + 36, + 37, + 38, + 39, + 38, + 40, + 35, + 36, + 36, + 36, + 36, + 34, + 36, + 35, + 37, + 39, + 40, + 43, + 41, + 41, + 44, + 48, + 56, + 83, + -127, + -99, + -89, + -88, + -87, + -88, + -89, + -87, + -89, + -90, + -90, + -89, + -91, + -91, + -89, + -87, + -88, + -87, + -89, + -88, + -89, + -88, + -90, + -89, + -87, + -88, + -92, + -91, + -88, + -89, + -88, + -87, + -89, + -91, + -93, + -95, + -97, + -94, + -93, + -99, + -125, + 91, + 59, + 45, + 45, + 47, + 43, + 42, + 39, + 36, + 36, + 36, + 40, + 38, + 39, + 39, + 37, + 36, + 36, + 36, + 36, + 36, + 36, + 34, + 37, + 38, + 39, + 40, + 43, + 43, + 43, + 43, + 40, + 43, + 56, + 87, + -127, + -100, + -94, + -95, + -91, + -88, + -90, + -89, + -90, + -92, + -88, + -88, + -90, + -88, + -90, + -90, + -89, + -89, + -91, + -91, + -92, + -92, + -91, + -90, + -89, + -89, + -92, + -90, + -90, + -92, + -91, + -89, + -90, + -91, + -91, + -95, + -94, + -92, + -93, + -99, + -124, + 92, + 61, + 48, + 47, + 49, + 45, + 44, + 41, + 38, + 37, + 37, + 38, + 34, + 35, + 35, + 35, + 35, + 36, + 36, + 36, + 36, + 36, + 40, + 39, + 36, + 34, + 35, + 35, + 37, + 37, + 40, + 49, + 56, + 62, + 89, + -124, + -99, + -93, + -88, + -88, + -92, + -90, + -87, + -88, + -89, + -87, + -88, + -89, + -88, + -87, + -88, + -89, + -89, + -87, + -88, + -88, + -87, + -89, + -92, + -91, + -92, + -92, + -91, + -91, + -90, + -89, + -89, + -89, + -90, + -92, + -93, + -91, + -87, + -86, + -96, + -127, + 90, + 60, + 45, + 44, + 43, + 36, + 36, + 37, + 39, + 38, + 40, + 40, + 37, + 36, + 36, + 33, + 35, + 36, + 36, + 36, + 36, + 36, + 34, + 34, + 34, + 33, + 34, + 34, + 35, + 37, + 40, + 42, + 41, + 50, + 80, + -127, + -96, + -92, + -89, + -85, + -88, + -91, + -88, + -88, + -89, + -87, + -90, + -90, + -89, + -89, + -90, + -91, + -90, + -89, + -87, + -86, + -87, + -89, + -90, + -91, + -93, + -93, + -93, + -91, + -91, + -90, + -90, + -91, + -92, + -91, + -92, + -89, + -87, + -88, + -96, + -123, + 96, + 65, + 48, + 47, + 45, + 38, + 37, + 37, + 37, + 37, + 39, + 39, + 37, + 38, + 36, + 35, + 35, + 36, + 36, + 36, + 36, + 36, + 40, + 41, + 40, + 41, + 42, + 42, + 41, + 39, + 39, + 45, + 53, + 66, + 100, + -111, + -86, + -86, + -87, + -80, + -86, + -92, + -88, + -86, + -87, + -84, + -83, + -86, + -86, + -85, + -85, + -86, + -84, + -84, + -88, + -90, + -87, + -88, + -88, + -88, + -88, + -90, + -89, + -89, + -89, + -89, + -89, + -88, + -87, + -88, + -90, + -87, + -88, + -90, + -98, + -127, + 93, + 69, + 50, + 50, + 51, + 43, + 44, + 43, + 41, + 37, + 37, + 40, + 38, + 38, + 37, + 36, + 38, + 36, + 36, + 36, + 36, + 36, + 36, + 38, + 39, + 40, + 39, + 40, + 39, + 42, + 46, + 49, + 52, + 62, + 90, + -123, + -101, + -100, + -98, + -94, + -90, + -88, + -87, + -89, + -90, + -89, + -88, + -88, + -87, + -86, + -87, + -86, + -86, + -87, + -85, + -85, + -88, + -89, + -88, + -89, + -88, + -89, + -90, + -89, + -90, + -90, + -91, + -90, + -89, + -91, + -91, + -91, + -90, + -92, + -99, + -126, + 93, + 61, + 45, + 49, + 48, + 43, + 41, + 38, + 37, + 36, + 38, + 38, + 37, + 36, + 35, + 35, + 39, + 36, + 36, + 36, + 36, + 37, + 41, + 42, + 40, + 41, + 41, + 38, + 40, + 42, + 42, + 45, + 50, + 61, + 91, + -121, + -94, + -93, + -96, + -94, + -94, + -93, + -91, + -91, + -93, + -90, + -88, + -92, + -90, + -87, + -87, + -89, + -88, + -87, + -89, + -89, + -90, + -93, + -96, + -94, + -91, + -89, + -88, + -88, + -90, + -90, + -89, + -91, + -92, + -93, + -91, + -91, + -92, + -91, + -101, + 122, + 84, + 60, + 48, + 52, + 46, + 34, + 36, + 36, + 37, + 34, + 34, + 37, + 34, + 32, + 33, + 34, + 37, + 36, + 36, + 36, + 37, + 37, + 36, + 39, + 39, + 41, + 40, + 41, + 40, + 39, + 42, + 44, + 49, + 62, + 92, + -124, + -96, + -84, + -81, + -86, + -87, + -89, + -90, + -91, + -92, + -90, + -88, + -89, + -91, + -90, + -89, + -89, + -89, + -90, + -89, + -86, + -88, + -89, + -89, + -90, + -88, + -90, + -91, + -91, + -92, + -92, + -92, + -91, + -91, + -93, + -95, + -94, + -93, + -93, + -101, + 125, + 86, + 61, + 47, + 47, + 49, + 45, + 44, + 44, + 43, + 44, + 45, + 44, + 42, + 41, + 38, + 35, + 38, + 37, + 37, + 37, + 37, + 37, + 39, + 40, + 40, + 42, + 44, + 42, + 43, + 47, + 45, + 44, + 50, + 66, + 99, + -111, + -93, + -97, + -96, + -92, + -89, + -89, + -89, + -87, + -88, + -86, + -87, + -90, + -88, + -88, + -88, + -87, + -87, + -88, + -91, + -93, + -91, + -92, + -89, + -86, + -84, + -83, + -83, + -87, + -90, + -91, + -90, + -91, + -92, + -93, + -94, + -97, + -96, + -97, + -107, + 119, + 79, + 53, + 39, + 39, + 38, + 37, + 40, + 38, + 38, + 37, + 38, + 40, + 41, + 39, + 38, + 36, + 36, + 37, + 37, + 37, + 37, + 37, + 40, + 39, + 40, + 40, + 40, + 40, + 38, + 39, + 43, + 44, + 48, + 59, + 95, + -121, + -103, + -96, + -95, + -97, + -94, + -92, + -90, + -90, + -90, + -88, + -85, + -88, + -89, + -88, + -89, + -91, + -92, + -92, + -91, + -90, + -88, + -88, + -88, + -90, + -91, + -92, + -91, + -89, + -93, + -93, + -92, + -92, + -91, + -93, + -94, + -94, + -94, + -93, + -105, + 118, + 79, + 52, + 38, + 36, + 40, + 41, + 41, + 42, + 39, + 38, + 40, + 40, + 39, + 39, + 39, + 37, + 38, + 37, + 37, + 37, + 37, + 37, + 41, + 42, + 40, + 41, + 43, + 43, + 45, + 43, + 42, + 43, + 47, + 62, + 95, + -120, + -93, + -92, + -96, + -92, + -94, + -92, + -91, + -88, + -88, + -89, + -90, + -91, + -88, + -88, + -89, + -88, + -91, + -93, + -92, + -91, + -90, + -89, + -90, + -89, + -91, + -90, + -90, + -94, + -95, + -95, + -94, + -91, + -87, + -83, + -87, + -88, + -89, + -94, + -106, + 117, + 79, + 60, + 51, + 45, + 40, + 37, + 38, + 38, + 36, + 34, + 33, + 34, + 34, + 33, + 35, + 37, + 36, + 37, + 37, + 37, + 37, + 37, + 36, + 40, + 38, + 39, + 40, + 41, + 38, + 40, + 43, + 48, + 52, + 62, + 96, + -120, + -103, + -99, + -94, + -95, + -93, + -92, + -90, + -89, + -90, + -91, + -90, + -92, + -95, + -95, + -94, + -94, + -92, + -92, + -93, + -93, + -92, + -91, + -90, + -92, + -94, + -93, + -92, + -89, + -91, + -89, + -87, + -88, + -91, + -97, + -98, + -95, + -94, + -94, + -104, + 123, + 86, + 61, + 48, + 46, + 47, + 40, + 38, + 37, + 34, + 36, + 35, + 39, + 41, + 40, + 39, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 39, + 39, + 40, + 39, + 40, + 42, + 41, + 40, + 43, + 42, + 43, + 52, + 85, + 125, + -106, + -92, + -98, + -96, + -84, + -82, + -87, + -86, + -85, + -86, + -86, + -90, + -88, + -88, + -87, + -87, + -92, + -93, + -93, + -93, + -90, + -91, + -92, + -89, + -89, + -89, + -89, + -91, + -91, + -93, + -93, + -94, + -93, + -92, + -94, + -94, + -91, + -92, + -100, + 123, + 79, + 57, + 47, + 45, + 47, + 40, + 37, + 36, + 35, + 38, + 37, + 39, + 40, + 38, + 39, + 36, + 35, + 37, + 37, + 37, + 37, + 37, + 41, + 38, + 33, + 31, + 37, + 44, + 44, + 44, + 46, + 48, + 52, + 64, + 96, + -117, + -98, + -103, + -99, + -97, + -96, + -97, + -97, + -94, + -89, + -85, + -90, + -91, + -89, + -89, + -89, + -88, + -87, + -86, + -90, + -92, + -91, + -93, + -91, + -92, + -92, + -91, + -93, + -92, + -92, + -92, + -91, + -94, + -94, + -94, + -95, + -93, + -98, + -102, + -110, + 117, + 83, + 55, + 40, + 46, + 48, + 44, + 42, + 39, + 40, + 37, + 39, + 40, + 38, + 38, + 38, + 39, + 42, + 37, + 37, + 37, + 37, + 38, + 39, + 40, + 41, + 41, + 41, + 41, + 40, + 42, + 46, + 47, + 52, + 65, + 102, + -114, + -102, + -97, + -100, + -95, + -83, + -88, + -91, + -89, + -91, + -91, + -89, + -89, + -88, + -90, + -89, + -88, + -88, + -88, + -89, + -92, + -90, + -90, + -90, + -90, + -92, + -94, + -95, + -94, + -93, + -92, + -90, + -90, + -92, + -92, + -94, + -92, + -92, + -96, + -108, + 116, + 76, + 57, + 50, + 47, + 42, + 38, + 41, + 42, + 41, + 37, + 36, + 37, + 36, + 36, + 37, + 35, + 35, + 37, + 37, + 37, + 37, + 38, + 39, + 40, + 41, + 39, + 41, + 40, + 36, + 34, + 37, + 39, + 42, + 61, + 100, + -113, + -90, + -97, + -96, + -90, + -87, + -88, + -90, + -91, + -93, + -89, + -91, + -91, + -90, + -90, + -91, + -91, + -89, + -87, + -90, + -91, + -89, + -90, + -89, + -90, + -90, + -92, + -92, + -92, + -91, + -91, + -89, + -90, + -92, + -90, + -92, + -93, + -93, + -96, + -107, + 119, + 81, + 48, + 37, + 40, + 44, + 45, + 41, + 40, + 38, + 36, + 37, + 38, + 37, + 37, + 37, + 36, + 35, + 37, + 37, + 37, + 37, + 39, + 47, + 50, + 45, + 40, + 41, + 40, + 41, + 42, + 44, + 48, + 53, + 64, + 98, + -116, + -95, + -96, + -97, + -87, + -83, + -87, + -87, + -88, + -87, + -86, + -86, + -87, + -91, + -95, + -94, + -92, + -88, + -89, + -90, + -90, + -88, + -87, + -88, + -90, + -94, + -92, + -93, + -91, + -89, + -89, + -87, + -86, + -87, + -90, + -92, + -92, + -91, + -92, + -100, + 125, + 79, + 52, + 51, + 54, + 50, + 47, + 47, + 47, + 46, + 45, + 46, + 44, + 40, + 36, + 34, + 34, + 34, + 37, + 37, + 37, + 37, + 38, + 41, + 42, + 42, + 39, + 39, + 37, + 35, + 39, + 46, + 52, + 53, + 68, + 101, + -119, + -101, + -101, + -101, + -93, + -90, + -89, + -88, + -88, + -88, + -85, + -89, + -90, + -89, + -91, + -93, + -92, + -90, + -90, + -90, + -91, + -91, + -90, + -91, + -93, + -91, + -92, + -92, + -89, + -90, + -91, + -92, + -95, + -95, + -94, + -95, + -95, + -96, + -97, + -110, + 116, + 81, + 54, + 48, + 52, + 51, + 49, + 45, + 47, + 46, + 43, + 44, + 43, + 38, + 35, + 35, + 34, + 36, + 37, + 37, + 37, + 37, + 39, + 43, + 43, + 41, + 40, + 42, + 41, + 41, + 40, + 40, + 44, + 50, + 68, + 106, + -112, + -93, + -93, + -95, + -92, + -94, + -93, + -90, + -89, + -90, + -88, + -90, + -89, + -88, + -89, + -89, + -89, + -86, + -88, + -91, + -92, + -92, + -91, + -92, + -91, + -91, + -92, + -91, + -92, + -90, + -90, + -91, + -88, + -87, + -90, + -92, + -91, + -91, + -92, + -104, + 121, + 80, + 54, + 43, + 45, + 46, + 41, + 41, + 40, + 38, + 38, + 38, + 37, + 37, + 37, + 37, + 39, + 40, + 37, + 37, + 37, + 37, + 37, + 39, + 39, + 40, + 38, + 40, + 41, + 40, + 41, + 43, + 46, + 52, + 69, + 105, + -112, + -92, + -95, + -94, + -90, + -94, + -94, + -92, + -91, + -90, + -91, + -90, + -90, + -90, + -90, + -89, + -88, + -89, + -90, + -90, + -93, + -94, + -93, + -92, + -91, + -91, + -92, + -94, + -91, + -91, + -89, + -89, + -93, + -95, + -96, + -97, + -96, + -96, + -96, + -106, + 121, + 86, + 54, + 47, + 53, + 50, + 48, + 43, + 40, + 39, + 37, + 40, + 40, + 38, + 38, + 36, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 39, + 38, + 38, + 38, + 38, + 37, + 37, + 39, + 41, + 42, + 45, + 62, + 104, + -112, + -93, + -87, + -91, + -92, + -92, + -91, + -89, + -91, + -89, + -90, + -88, + -86, + -88, + -90, + -91, + -91, + -90, + -91, + -91, + -91, + -90, + -89, + -90, + -89, + -90, + -93, + -91, + -92, + -92, + -91, + -92, + -91, + -91, + -94, + -94, + -92, + -93, + -92, + -103, + 124, + 92, + 65, + 49, + 47, + 45, + 39, + 40, + 40, + 40, + 37, + 37, + 37, + 37, + 41, + 41, + 38, + 38, + 37, + 37, + 37, + 37, + 38, + 46, + 42, + 42, + 40, + 41, + 41, + 37, + 39, + 43, + 49, + 59, + 78, + 112, + -105, + -88, + -94, + -93, + -96, + -95, + -92, + -90, + -88, + -90, + -91, + -90, + -88, + -89, + -90, + -89, + -90, + -91, + -90, + -91, + -93, + -93, + -92, + -92, + -91, + -91, + -90, + -92, + -92, + -92, + -93, + -92, + -92, + -92, + -94, + -94, + -94, + -94, + -93, + -107, + 116, + 77, + 48, + 43, + 47, + 43, + 41, + 40, + 39, + 38, + 38, + 42, + 40, + 38, + 37, + 34, + 34, + 34, + 36, + 37, + 37, + 37, + 37, + 41, + 41, + 38, + 38, + 39, + 40, + 39, + 39, + 40, + 40, + 45, + 63, + 102, + -117, + -98, + -92, + -88, + -87, + -91, + -90, + -89, + -90, + -91, + -93, + -90, + -83, + -85, + -87, + -88, + -90, + -91, + -93, + -92, + -93, + -91, + -89, + -89, + -89, + -91, + -94, + -92, + -91, + -90, + -92, + -92, + -92, + -93, + -91, + -89, + -90, + -89, + -87, + -99, + 126, + 86, + 54, + 43, + 45, + 46, + 42, + 40, + 38, + 36, + 34, + 34, + 36, + 34, + 35, + 34, + 35, + 36, + 36, + 37, + 37, + 37, + 38, + 43, + 40, + 38, + 38, + 40, + 41, + 40, + 41, + 41, + 42, + 50, + 74, + 113, + -113, + -98, + -95, + -88, + -88, + -90, + -91, + -90, + -90, + -92, + -91, + -88, + -86, + -87, + -86, + -86, + -89, + -91, + -92, + -92, + -91, + -88, + -90, + -93, + -95, + -97, + -97, + -95, + -94, + -93, + -92, + -92, + -92, + -93, + -94, + -94, + -96, + -95, + -96, + -111, + 111, + 73, + 42, + 39, + 50, + 45, + 41, + 40, + 38, + 38, + 39, + 41, + 38, + 35, + 35, + 33, + 30, + 28, + 36, + 37, + 37, + 37, + 37, + 37, + 40, + 38, + 40, + 41, + 41, + 43, + 42, + 40, + 42, + 49, + 74, + 119, + -100, + -88, + -94, + -93, + -90, + -94, + -94, + -91, + -89, + -89, + -90, + -89, + -88, + -93, + -94, + -91, + -89, + -87, + -90, + -96, + -98, + -96, + -94, + -94, + -92, + -92, + -92, + -89, + -88, + -89, + -91, + -90, + -89, + -88, + -86, + -87, + -90, + -93, + -95, + -110, + 113, + 79, + 59, + 52, + 43, + 38, + 38, + 38, + 41, + 41, + 39, + 41, + 42, + 41, + 40, + 40, + 40, + 39, + 37, + 37, + 37, + 37, + 37, + 39, + 38, + 40, + 40, + 42, + 40, + 41, + 43, + 47, + 50, + 53, + 74, + 112, + -114, + -99, + -95, + -92, + -94, + -95, + -95, + -92, + -90, + -91, + -88, + -85, + -89, + -88, + -87, + -88, + -89, + -89, + -91, + -91, + -90, + -88, + -91, + -94, + -93, + -93, + -93, + -94, + -93, + -91, + -90, + -90, + -92, + -93, + -94, + -92, + -94, + -94, + -95, + -110, + 113, + 78, + 52, + 46, + 49, + 45, + 43, + 42, + 43, + 41, + 39, + 41, + 40, + 38, + 38, + 35, + 37, + 39, + 37, + 37, + 37, + 37, + 37, + 35, + 38, + 38, + 41, + 42, + 39, + 42, + 43, + 44, + 46, + 55, + 80, + 119, + -108, + -99, + -95, + -91, + -90, + -95, + -95, + -92, + -90, + -94, + -94, + -89, + -88, + -92, + -91, + -91, + -93, + -93, + -93, + -93, + -91, + -89, + -90, + -93, + -91, + -89, + -88, + -89, + -88, + -89, + -92, + -93, + -93, + -93, + -92, + -92, + -95, + -95, + -97, + -113, + 108, + 67, + 48, + 46, + 41, + 41, + 42, + 39, + 39, + 37, + 36, + 38, + 38, + 36, + 37, + 39, + 38, + 39, + 37, + 37, + 37, + 37, + 36, + 32, + 34, + 36, + 38, + 38, + 38, + 38, + 41, + 42, + 44, + 50, + 67, + 115, + -98, + -89, + -94, + -93, + -87, + -86, + -91, + -90, + -92, + -93, + -92, + -89, + -91, + -92, + -90, + -92, + -92, + -91, + -90, + -90, + -89, + -87, + -90, + -93, + -92, + -92, + -95, + -94, + -94, + -93, + -91, + -92, + -94, + -95, + -96, + -93, + -93, + -92, + -95, + -112, + 107, + 73, + 56, + 45, + 45, + 44, + 41, + 41, + 39, + 38, + 37, + 39, + 39, + 37, + 38, + 37, + 39, + 41, + 37, + 37, + 37, + 37, + 37, + 40, + 39, + 41, + 42, + 42, + 39, + 39, + 43, + 47, + 49, + 56, + 76, + 112, + -112, + -102, + -90, + -78, + -88, + -93, + -92, + -92, + -90, + -89, + -91, + -88, + -86, + -90, + -88, + -87, + -89, + -91, + -90, + -90, + -89, + -90, + -90, + -88, + -90, + -89, + -89, + -89, + -87, + -90, + -91, + -90, + -90, + -88, + -90, + -92, + -93, + -93, + -97, + -112, + 108, + 71, + 52, + 48, + 51, + 48, + 45, + 40, + 40, + 41, + 42, + 42, + 41, + 39, + 41, + 42, + 39, + 37, + 37, + 37, + 37, + 37, + 37, + 38, + 39, + 40, + 40, + 40, + 40, + 42, + 45, + 46, + 45, + 51, + 72, + 121, + -98, + -99, + -100, + -95, + -93, + -96, + -95, + -93, + -90, + -90, + -87, + -89, + -89, + -90, + -89, + -90, + -90, + -89, + -92, + -94, + -90, + -91, + -91, + -91, + -90, + -89, + -90, + -88, + -90, + -92, + -91, + -92, + -93, + -94, + -96, + -94, + -94, + -95, + -97, + -113, + 106, + 71, + 52, + 48, + 46, + 45, + 45, + 41, + 37, + 33, + 33, + 35, + 35, + 37, + 38, + 37, + 36, + 35, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 38, + 39, + 39, + 39, + 40, + 42, + 40, + 42, + 50, + 73, + 114, + -107, + -96, + -100, + -97, + -100, + -103, + -101, + -97, + -92, + -89, + -89, + -87, + -85, + -88, + -89, + -87, + -87, + -88, + -88, + -89, + -91, + -92, + -89, + -86, + -86, + -84, + -86, + -86, + -90, + -94, + -94, + -93, + -93, + -94, + -94, + -93, + -92, + -94, + -99, + -115, + 106, + 72, + 60, + 59, + 57, + 55, + 48, + 42, + 39, + 37, + 37, + 39, + 37, + 37, + 38, + 37, + 35, + 33, + 37, + 37, + 37, + 37, + 38, + 45, + 43, + 42, + 39, + 36, + 35, + 34, + 38, + 40, + 42, + 50, + 76, + 115, + -110, + -97, + -89, + -88, + -92, + -95, + -94, + -91, + -90, + -88, + -86, + -87, + -88, + -87, + -86, + -88, + -88, + -88, + -91, + -90, + -89, + -90, + -89, + -89, + -91, + -90, + -91, + -90, + -91, + -93, + -93, + -93, + -95, + -97, + -96, + -92, + -94, + -97, + -100, + -118, + 106, + 72, + 54, + 50, + 48, + 47, + 46, + 44, + 40, + 36, + 38, + 40, + 42, + 41, + 40, + 38, + 36, + 38, + 37, + 37, + 37, + 37, + 37, + 39, + 41, + 41, + 41, + 40, + 41, + 45, + 47, + 47, + 46, + 53, + 77, + 119, + -102, + -90, + -94, + -89, + -88, + -94, + -90, + -87, + -86, + -85, + -87, + -87, + -85, + -86, + -86, + -87, + -88, + -90, + -90, + -91, + -91, + -91, + -93, + -91, + -91, + -92, + -93, + -93, + -92, + -94, + -93, + -90, + -91, + -92, + -92, + -91, + -94, + -96, + -95, + -105, + 114, + 74, + 57, + 51, + 50, + 53, + 47, + 42, + 39, + 37, + 41, + 46, + 46, + 43, + 40, + 35, + 31, + 29, + 37, + 37, + 37, + 37, + 38, + 39, + 37, + 38, + 39, + 40, + 41, + 40, + 43, + 46, + 48, + 57, + 89, + -126, + -102, + -97, + -96, + -93, + -96, + -92, + -89, + -89, + -91, + -94, + -90, + -91, + -90, + -88, + -88, + -90, + -90, + -90, + -92, + -93, + -93, + -92, + -90, + -89, + -90, + -89, + -91, + -93, + -91, + -92, + -93, + -92, + -94, + -95, + -92, + -92, + -95, + -99, + -100, + -116, + 103, + 70, + 54, + 52, + 54, + 49, + 46, + 43, + 40, + 36, + 35, + 39, + 41, + 37, + 38, + 38, + 38, + 37, + 37, + 37, + 37, + 38, + 38, + 42, + 43, + 41, + 41, + 41, + 45, + 45, + 44, + 44, + 46, + 56, + 86, + 119, + -113, + -96, + -91, + -78, + -83, + -90, + -90, + -90, + -89, + -91, + -92, + -92, + -90, + -88, + -89, + -91, + -91, + -90, + -89, + -89, + -88, + -88, + -90, + -90, + -92, + -92, + -92, + -90, + -90, + -94, + -93, + -91, + -91, + -92, + -94, + -91, + -90, + -95, + -100, + -121, + 91, + 58, + 49, + 49, + 47, + 45, + 44, + 44, + 43, + 41, + 40, + 40, + 37, + 35, + 35, + 36, + 35, + 34, + 37, + 37, + 38, + 38, + 38, + 42, + 38, + 37, + 38, + 37, + 37, + 40, + 45, + 45, + 44, + 54, + 84, + 123, + -106, + -96, + -95, + -96, + -99, + -97, + -96, + -92, + -91, + -92, + -91, + -92, + -95, + -94, + -93, + -92, + -91, + -89, + -91, + -92, + -91, + -91, + -92, + -94, + -92, + -88, + -89, + -91, + -91, + -93, + -94, + -92, + -93, + -92, + -93, + -92, + -94, + -95, + -97, + -118, + 95, + 55, + 33, + 34, + 37, + 37, + 34, + 33, + 33, + 31, + 34, + 36, + 36, + 34, + 35, + 36, + 37, + 38, + 37, + 37, + 38, + 38, + 38, + 40, + 40, + 42, + 43, + 43, + 41, + 41, + 40, + 43, + 43, + 50, + 77, + 116, + -110, + -84, + -81, + -87, + -91, + -94, + -91, + -88, + -88, + -89, + -88, + -88, + -88, + -85, + -88, + -89, + -88, + -88, + -89, + -92, + -91, + -93, + -92, + -92, + -94, + -94, + -93, + -93, + -94, + -96, + -95, + -91, + -89, + -88, + -91, + -92, + -94, + -98, + -100, + -122, + 91, + 57, + 43, + 46, + 41, + 33, + 36, + 36, + 38, + 39, + 39, + 38, + 33, + 33, + 34, + 34, + 34, + 35, + 37, + 38, + 38, + 38, + 39, + 44, + 43, + 44, + 45, + 44, + 40, + 40, + 42, + 40, + 46, + 60, + 93, + -127, + -103, + -88, + -87, + -94, + -93, + -96, + -97, + -94, + -89, + -90, + -89, + -88, + -90, + -90, + -91, + -92, + -90, + -90, + -91, + -93, + -94, + -94, + -94, + -94, + -93, + -91, + -94, + -96, + -95, + -98, + -97, + -94, + -94, + -95, + -99, + -98, + -95, + -95, + -101, + -121, + 95, + 58, + 42, + 39, + 44, + 44, + 39, + 37, + 41, + 42, + 41, + 41, + 37, + 33, + 33, + 32, + 33, + 33, + 37, + 38, + 38, + 38, + 38, + 39, + 41, + 44, + 44, + 47, + 46, + 44, + 41, + 39, + 40, + 52, + 85, + 127, + -102, + -88, + -82, + -87, + -92, + -94, + -91, + -90, + -91, + -92, + -91, + -89, + -91, + -92, + -91, + -89, + -87, + -86, + -89, + -91, + -92, + -93, + -93, + -92, + -95, + -98, + -95, + -90, + -87, + -90, + -92, + -93, + -94, + -98, + -99, + -97, + -97, + -96, + -98, + -114, + 106, + 65, + 40, + 42, + 41, + 39, + 41, + 41, + 43, + 46, + 45, + 43, + 40, + 38, + 39, + 40, + 40, + 39, + 37, + 38, + 38, + 38, + 38, + 34, + 37, + 39, + 42, + 42, + 41, + 42, + 41, + 42, + 44, + 58, + 88, + 124, + -109, + -98, + -95, + -96, + -97, + -95, + -95, + -95, + -96, + -94, + -91, + -90, + -92, + -91, + -90, + -90, + -89, + -87, + -89, + -92, + -94, + -95, + -96, + -95, + -94, + -94, + -97, + -98, + -97, + -97, + -96, + -95, + -96, + -95, + -98, + -99, + -98, + -97, + -100, + -121, + 90, + 52, + 37, + 36, + 39, + 41, + 39, + 39, + 40, + 38, + 35, + 33, + 34, + 35, + 34, + 36, + 36, + 35, + 37, + 38, + 38, + 38, + 38, + 40, + 39, + 40, + 39, + 40, + 44, + 46, + 49, + 53, + 53, + 53, + 73, + 108, + -114, + -96, + -96, + -99, + -100, + -99, + -96, + -94, + -95, + -93, + -89, + -84, + -88, + -91, + -91, + -93, + -97, + -97, + -98, + -97, + -93, + -92, + -92, + -92, + -95, + -95, + -94, + -92, + -91, + -94, + -96, + -96, + -94, + -94, + -94, + -92, + -93, + -94, + -96, + -115, + 103, + 64, + 36, + 38, + 45, + 42, + 44, + 41, + 41, + 41, + 37, + 38, + 42, + 45, + 46, + 43, + 39, + 33, + 37, + 38, + 38, + 38, + 38, + 42, + 42, + 38, + 36, + 35, + 34, + 36, + 40, + 39, + 39, + 49, + 82, + -123, + -95, + -91, + -87, + -89, + -93, + -94, + -95, + -94, + -95, + -94, + -91, + -92, + -93, + -92, + -92, + -94, + -95, + -95, + -96, + -94, + -94, + -94, + -93, + -94, + -92, + -90, + -92, + -90, + -91, + -93, + -92, + -92, + -91, + -91, + -93, + -93, + -93, + -93, + -98, + -122, + 90, + 54, + 40, + 40, + 41, + 40, + 38, + 36, + 36, + 36, + 39, + 42, + 43, + 41, + 38, + 38, + 36, + 36, + 37, + 38, + 38, + 38, + 38, + 41, + 40, + 37, + 36, + 38, + 42, + 42, + 41, + 44, + 41, + 48, + 73, + 116, + -103, + -88, + -87, + -92, + -96, + -95, + -93, + -91, + -87, + -85, + -88, + -85, + -89, + -93, + -91, + -88, + -87, + -85, + -87, + -89, + -91, + -93, + -92, + -92, + -92, + -91, + -94, + -90, + -91, + -93, + -93, + -94, + -92, + -92, + -95, + -93, + -92, + -93, + -96, + -116, + 104, + 66, + 40, + 39, + 37, + 39, + 42, + 43, + 43, + 40, + 38, + 37, + 36, + 36, + 34, + 34, + 35, + 35, + 37, + 38, + 38, + 38, + 38, + 41, + 41, + 38, + 37, + 36, + 35, + 37, + 42, + 44, + 46, + 58, + 91, + -120, + -98, + -99, + -94, + -89, + -93, + -92, + -92, + -93, + -93, + -93, + -91, + -89, + -88, + -85, + -86, + -88, + -89, + -87, + -89, + -88, + -90, + -94, + -93, + -94, + -94, + -91, + -90, + -86, + -90, + -94, + -94, + -96, + -95, + -95, + -94, + -93, + -92, + -91, + -97, + -123, + 91, + 58, + 48, + 52, + 48, + 44, + 43, + 43, + 41, + 36, + 38, + 42, + 43, + 39, + 37, + 34, + 31, + 32, + 37, + 38, + 38, + 38, + 38, + 41, + 40, + 37, + 41, + 42, + 41, + 43, + 41, + 39, + 45, + 60, + 92, + -123, + -102, + -102, + -99, + -99, + -97, + -92, + -93, + -93, + -94, + -94, + -96, + -93, + -89, + -92, + -91, + -90, + -89, + -90, + -88, + -90, + -90, + -91, + -92, + -92, + -92, + -92, + -94, + -90, + -90, + -90, + -91, + -91, + -91, + -93, + -94, + -91, + -92, + -95, + -103, + -127, + 92, + 59, + 49, + 56, + 53, + 55, + 51, + 50, + 48, + 43, + 39, + 36, + 35, + 35, + 34, + 33, + 34, + 37, + 37, + 38, + 38, + 38, + 38, + 38, + 39, + 38, + 40, + 41, + 40, + 42, + 45, + 45, + 47, + 64, + 100, + -118, + -104, + -102, + -93, + -95, + -92, + -96, + -97, + -96, + -96, + -94, + -92, + -89, + -90, + -93, + -93, + -96, + -97, + -94, + -96, + -96, + -97, + -98, + -97, + -96, + -94, + -94, + -95, + -92, + -95, + -94, + -94, + -95, + -94, + -95, + -96, + -95, + -94, + -94, + -97, + -118, + 102, + 70, + 53, + 53, + 55, + 52, + 54, + 52, + 47, + 41, + 38, + 39, + 40, + 36, + 37, + 37, + 35, + 36, + 37, + 38, + 38, + 38, + 38, + 40, + 39, + 40, + 41, + 39, + 33, + 33, + 36, + 40, + 51, + 64, + 84, + 125, + -102, + -87, + -81, + -92, + -98, + -101, + -98, + -97, + -95, + -95, + -95, + -94, + -94, + -98, + -97, + -94, + -93, + -93, + -93, + -92, + -91, + -92, + -93, + -93, + -93, + -93, + -95, + -94, + -94, + -96, + -94, + -91, + -91, + -95, + -94, + -95, + -98, + -98, + -102, + -119, + 101, + 71, + 55, + 47, + 47, + 48, + 51, + 52, + 45, + 38, + 34, + 30, + 34, + 34, + 32, + 34, + 34, + 37, + 37, + 37, + 38, + 38, + 38, + 41, + 42, + 41, + 39, + 41, + 39, + 37, + 37, + 37, + 44, + 66, + 105, + -118, + -105, + -107, + -106, + -102, + -101, + -102, + -100, + -101, + -101, + -99, + -98, + -96, + -96, + -98, + -94, + -94, + -95, + -94, + -96, + -97, + -97, + -96, + -96, + -95, + -96, + -94, + -96, + -99, + -95, + -96, + -98, + -100, + -98, + -97, + -97, + -94, + -93, + -97, + -107, + 123, + 83, + 54, + 41, + 45, + 48, + 45, + 46, + 44, + 43, + 40, + 36, + 39, + 36, + 37, + 38, + 40, + 41, + 40, + 37, + 37, + 38, + 38, + 38, + 40, + 40, + 43, + 43, + 41, + 40, + 42, + 42, + 40, + 44, + 61, + 90, + 121, + -122, + -121, + -117, + -113, + -111, + -108, + -104, + -104, + -105, + -106, + -106, + -102, + -103, + -106, + -106, + -107, + -106, + -106, + -104, + -103, + -101, + -100, + -99, + -98, + -99, + -100, + -101, + -98, + -95, + -94, + -94, + -93, + -95, + -95, + -97, + -97, + -98, + -97, + -97, + -115, + 98, + 58, + 40, + 42, + 46, + 46, + 47, + 48, + 45, + 43, + 42, + 40, + 39, + 36, + 34, + 35, + 36, + 38, + 37, + 37, + 37, + 38, + 38, + 37, + 41, + 41, + 42, + 43, + 40, + 41, + 40, + 40, + 42, + 51, + 68, + 78, + 81, + 81, + 81, + 85, + 85, + 87, + 88, + 89, + 93, + 96, + 97, + 100, + 98, + 101, + 105, + 109, + 110, + 113, + 116, + 116, + 117, + 118, + 119, + 120, + 121, + 126, + -126, + -126, + -123, + -120, + -118, + -117, + -115, + -114, + -113, + -110, + -106, + -108, + -115, + 117, + 81, + 52, + 40, + 42, + 47, + 48, + 48, + 45, + 42, + 38, + 34, + 37, + 34, + 36, + 37, + 39, + 39, + 38, + 37, + 37, + 37, + 38, + 38, + 38, + 37, + 39, + 41, + 39, + 42, + 42, + 40, + 41, + 43, + 53, + 69, + 71, + 66, + 65, + 61, + 57, + 57, + 58, + 60, + 62, + 65, + 64, + 68, + 76, + 71, + 67, + 68, + 69, + 75, + 82, + 87, + 85, + 85, + 86, + 87, + 92, + 94, + 94, + 96, + 90, + 91, + 95, + 101, + 109, + 109, + 114, + 115, + 119, + 123, + 121, + 117, + 104, + 77, + 50, + 37, + 32, + 30, + 24, + 27, + 35, + 39, + 39, + 36, + 38, + 36, + 37, + 36, + 34, + 33, + 32, + 37, + 37, + 37, + 37, + 38, + 37, + 41, + 40, + 41, + 43, + 41, + 39, + 38, + 40, + 43, + 49, + 53, + 52, + 50, + 50, + 51, + 51, + 52, + 54, + 49, + 46, + 50, + 48, + 47, + 51, + 51, + 50, + 48, + 50, + 50, + 50, + 50, + 50, + 51, + 51, + 52, + 52, + 56, + 57, + 58, + 59, + 57, + 56, + 56, + 55, + 52, + 53, + 56, + 59, + 60, + 61, + 62, + 59, + 54, + 54, + 51, + 47, + 50, + 47, + 45, + 44, + 43, + 40, + 37, + 37, + 37, + 39, + 43, + 45, + 43, + 39, + 36, + 37, + 37, + 37, + 39, + 46, + 41, + 38, + 40, + 40, + 39, + 40, + 40, + 38, + 43, + 49, + 54, + 54, + 52, + 52, + 49, + 47, + 47, + 50, + 48, + 49, + 52, + 49, + 50, + 51, + 48, + 48, + 49, + 49, + 49, + 51, + 50, + 46, + 46, + 50, + 49, + 52, + 52, + 47, + 48, + 51, + 52, + 48, + 50, + 52, + 47, + 45, + 46, + 45, + 48, + 49, + 50, + 48, + 44, + 45, + 48, + 50, + 47, + 43, + 44, + 44, + 44, + 43, + 43, + 43, + 41, + 41, + 41, + 38, + 36, + 36, + 36, + 37, + 37, + 37, + 37, + 41, + 41, + 39, + 38, + 38, + 36, + 36, + 37, + 39, + 44, + 48, + 50, + 50, + 50, + 52, + 52, + 52, + 52, + 53, + 50, + 46, + 46, + 46, + 42, + 43, + 46, + 45, + 44, + 46, + 46, + 45, + 43, + 45, + 46, + 50, + 51, + 50, + 51, + 50, + 49, + 51, + 51, + 50, + 51, + 50, + 49, + 47, + 49, + 49, + 50, + 52, + 50, + 48, + 45, + 46, + 47, + 47, + 48, + 47, + 45, + 44, + 45, + 42, + 38, + 37, + 35, + 31, + 29, + 31, + 33, + 35, + 36, + 36, + 37, + 37, + 37, + 39, + 39, + 40, + 41, + 42, + 39, + 37, + 37, + 36, + 40, + 44, + 48, + 47, + 45, + 46, + 49, + 49, + 49, + 50, + 47, + 48, + 49, + 48, + 45, + 47, + 47, + 49, + 51, + 53, + 51, + 49, + 48, + 46, + 44, + 44, + 43, + 44, + 46, + 48, + 49, + 51, + 51, + 50, + 49, + 49, + 48, + 50, + 54, + 56, + 49, + 44, + 43, + 44, + 44, + 45, + 45, + 44, + 45, + 42, + 40, + 41, + 42, + 41, + 38, + 36, + 37, + 41, + 46, + 43, + 40, + 37, + 36, + 36, + 37, + 37, + 37, + 40, + 41, + 40, + 39, + 39, + 36, + 35, + 37, + 38, + 41, + 43, + 45, + 46, + 46, + 46, + 47, + 45, + 41, + 45, + 46, + 47, + 48, + 47, + 45, + 44, + 45, + 47, + 46, + 46, + 46, + 45, + 46, + 45, + 43, + 44, + 44, + 46, + 51, + 51, + 47, + 49, + 46, + 44, + 43, + 39, + 39, + 42, + 46, + 46, + 46, + 44, + 43, + 42, + 42, + 44, + 44, + 46, + 46, + 47, + 45, + 40, + 37, + 33, + 35, + 40, + 45, + 42, + 42, + 42, + 38, + 36, + 36, + 36, + 36, + 37, + 38, + 42, + 42, + 40, + 39, + 38, + 38, + 39, + 40, + 39, + 38, + 40, + 40, + 38, + 37, + 38, + 40, + 40, + 38, + 39, + 39, + 40, + 39, + 36, + 34, + 37, + 40, + 40, + 41, + 40, + 38, + 35, + 36, + 40, + 39, + 38, + 36, + 36, + 37, + 39, + 40, + 40, + 40, + 41, + 42, + 42, + 42, + 42, + 40, + 41, + 41, + 42, + 45, + 45, + 42, + 42, + 40, + 42, + 46, + 46, + 44, + 43, + 41, + 39, + 37, + 40, + 41, + 37, + 35, + 32, + 30, + 31, + 36, + 36, + 36, + 36, + 37, + 40, + 40, + 40, + 39, + 39, + 38, + 39, + 41, + 42, + 40, + 42, + 42, + 41, + 38, + 38, + 42, + 39, + 37, + 39, + 37, + 34, + 35, + 36, + 39, + 39, + 41, + 41, + 39, + 39, + 36, + 35, + 35, + 37, + 41, + 45, + 48, + 47, + 48, + 45, + 42, + 44, + 41, + 41, + 42, + 43, + 42, + 41, + 40, + 39, + 37, + 37, + 37, + 38, + 38, + 40, + 41, + 42, + 40, + 41, + 40, + 39, + 40, + 38, + 37, + 39, + 41, + 40, + 37, + 35, + 32, + 33, + 36, + 36, + 36, + 36, + 36, + 38, + 39, + 38, + 37, + 38, + 37, + 37, + 40, + 39, + 43, + 48, + 48, + 44, + 39, + 38, + 40, + 41, + 41, + 41, + 42, + 42, + 39, + 36, + 35, + 35, + 34, + 35, + 36, + 38, + 38, + 37, + 39, + 38, + 36, + 36, + 37, + 39, + 40, + 40, + 38, + 38, + 37, + 35, + 36, + 33, + 34, + 37, + 36, + 39, + 39, + 38, + 37, + 33, + 30, + 32, + 33, + 33, + 35, + 36, + 36, + 36, + 37, + 35, + 37, + 39, + 40, + 36, + 35, + 37, + 36, + 35, + 36, + 36, + 36, + 36, + 35, + 31, + 34, + 35, + 37, + 38, + 37, + 36, + 39, + 42, + 41, + 41, + 40, + 38, + 36, + 37, + 38, + 39, + 40, + 40, + 37, + 34, + 34, + 35, + 37, + 37, + 39, + 39, + 38, + 40, + 39, + 41, + 43, + 43, + 43, + 40, + 39, + 41, + 41, + 39, + 35, + 33, + 34, + 33, + 36, + 38, + 40, + 40, + 39, + 40, + 37, + 39, + 37, + 34, + 33, + 34, + 35, + 35, + 35, + 35, + 33, + 35, + 34, + 33, + 34, + 36, + 37, + 36, + 35, + 35, + 34, + 35, + 36, + 36, + 36, + 36, + 36, + 38, + 39, + 40, + 40, + 42, + 41, + 40, + 43, + 42, + 39, + 38, + 35, + 35, + 34, + 35, + 37, + 37, + 37, + 37, + 38, + 37, + 35, + 34, + 36, + 39, + 40, + 39, + 40, + 41, + 40, + 36, + 37, + 38, + 34, + 35, + 36, + 37, + 39, + 40, + 37, + 37, + 37, + 34, + 34, + 35, + 35, + 37, + 37, + 38, + 39, + 42, + 44, + 42, + 40, + 41, + 40, + 38, + 35, + 34, + 34, + 36, + 36, + 37, + 39, + 38, + 40, + 40, + 38, + 36, + 33, + 31, + 36, + 36, + 36, + 36, + 36, + 36, + 36, + 39, + 41, + 42, + 41, + 40, + 38, + 38, + 37, + 37, + 41, + 40, + 39, + 39, + 37, + 39, + 38, + 39, + 37, + 35, + 35, + 35, + 36, + 39, + 38, + 38, + 38, + 38, + 39, + 39, + 39, + 38, + 38, + 39, + 40, + 41, + 41, + 41, + 38, + 38, + 37, + 37, + 36, + 38, + 40, + 39, + 37, + 35, + 37, + 35, + 33, + 34, + 35, + 38, + 36, + 36, + 38, + 34, + 33, + 35, + 36, + 35, + 37, + 39, + 38, + 38, + 38, + 37, + 34, + 31, + 36, + 36, + 36, + 36, + 36, + 37, + 41, + 41, + 39, + 40, + 39, + 40, + 41, + 42, + 40, + 35, + 35, + 36, + 34, + 36, + 38, + 38, + 39, + 39, + 39, + 39, + 38, + 37, + 38, + 38, + 36, + 34, + 35, + 40, + 44, + 43, + 46, + 47, + 40, + 35, + 36, + 36, + 37, + 37, + 35, + 36, + 37, + 35, + 36, + 38, + 38, + 39, + 39, + 39, + 40, + 40, + 38, + 33, + 32, + 35, + 36, + 35, + 32, + 31, + 32, + 34, + 34, + 35, + 38, + 39, + 38, + 37, + 35, + 36, + 36, + 33, + 36, + 36, + 36, + 36, + 36, + 35, + 31, + 33, + 36, + 36, + 37, + 37, + 37, + 38, + 38, + 39, + 41, + 39, + 36, + 36, + 36, + 35, + 37, + 34, + 34, + 32, + 32, + 34, + 35, + 39, + 38, + 38, + 39, + 38, + 38, + 38, + 38, + 36, + 33, + 34, + 33, + 34, + 34, + 37, + 40, + 40, + 40, + 37, + 35, + 37, + 38, + 37, + 35, + 35, + 36, + 37, + 38, + 41, + 43, + 42, + 37, + 36, + 40, + 39, + 41, + 43, + 41, + 36, + 32, + 33, + 36, + 37, + 40, + 39, + 36, + 33, + 36, + 36, + 36, + 36, + 37, + 42, + 42, + 39, + 35, + 35, + 35, + 37, + 37, + 38, + 39, + 38, + 40, + 40, + 39, + 44, + 44, + 39, + 40, + 40, + 42, + 44, + 42, + 38, + 38, + 36, + 35, + 35, + 35, + 38, + 38, + 35, + 33, + 36, + 35, + 35, + 37, + 38, + 39, + 38, + 38, + 38, + 37, + 36, + 33, + 33, + 33, + 34, + 37, + 38, + 39, + 40, + 36, + 31, + 33, + 36, + 34, + 37, + 35, + 34, + 36, + 37, + 38, + 38, + 37, + 37, + 35, + 33, + 35, + 39, + 36, + 34, + 36, + 36, + 36, + 36, + 36, + 36, + 35, + 36, + 36, + 37, + 35, + 37, + 38, + 38, + 40, + 41, + 42, + 40, + 41, + 44, + 42, + 42, + 40, + 38, + 39, + 37, + 36, + 35, + 35, + 34, + 33, + 34, + 35, + 36, + 36, + 38, + 37, + 37, + 36, + 34, + 36, + 39, + 40, + 39, + 38, + 39, + 37, + 37, + 36, + 39, + 40, + 39, + 39, + 35, + 37, + 37, + 36, + 40, + 41, + 40, + 37, + 35, + 36, + 36, + 37, + 35, + 35, + 34, + 32, + 36, + 34, + 32, + 31, + 30, + 31, + 33, + 36, + 36, + 36, + 36, + 37, + 37, + 37, + 36, + 35, + 38, + 39, + 41, + 40, + 35, + 36, + 35, + 35, + 34, + 34, + 38, + 38, + 39, + 40, + 36, + 35, + 36, + 35, + 36, + 36, + 38, + 36, + 39, + 41, + 42, + 41, + 41, + 40, + 41, + 41, + 39, + 38, + 36, + 37, + 37, + 35, + 37, + 40, + 39, + 37, + 37, + 37, + 38, + 39, + 43, + 44, + 41, + 39, + 39, + 42, + 40, + 36, + 38, + 34, + 33, + 36, + 37, + 41, + 41, + 41, + 41, + 41, + 40, + 40, + 44, + 41, + 38, + 36, + 36, + 36, + 37, + 37, + 38, + 39, + 39, + 38, + 38, + 37, + 40, + 40, + 37, + 38, + 38, + 37, + 36, + 36, + 36, + 35, + 39, + 39, + 38, + 41, + 38, + 37, + 38, + 39, + 41, + 40, + 40, + 41, + 41, + 41, + 40, + 37, + 39, + 40, + 40, + 39, + 39, + 36, + 35, + 35, + 35, + 35, + 35, + 34, + 36, + 35, + 37, + 40, + 40, + 40, + 38, + 36, + 36, + 35, + 37, + 36, + 37, + 38, + 38, + 38, + 37, + 37, + 34, + 31, + 33, + 32, + 33, + 33, + 33, + 35, + 36 + }; diff --git a/bench/sequential/susan/math_private.h b/bench/sequential/susan/math_private.h old mode 100644 new mode 100755 index 58d4354759a9102758b891c60cd15bfc117c875e..e846510e1141749424cf61c9328fd47964e49dab --- a/bench/sequential/susan/math_private.h +++ b/bench/sequential/susan/math_private.h @@ -1,17 +1,17 @@ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ /* - * from: @(#)fdlibm.h 5.1 93/09/24 - */ + from: @(#)fdlibm.h 5.1 93/09/24 +*/ #ifndef _MATH_PRIVATE_H_ #define _MATH_PRIVATE_H_ @@ -22,34 +22,33 @@ //#include <sys/types.h> /* A representation of a double as a union. */ -union ieee754_double -{ +union ieee754_double { double d; /* This is the IEEE 754 double-precision format. */ struct { /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; + unsigned int mantissa1: 32; + unsigned int mantissa0: 20; + unsigned int exponent: 11; + unsigned int negative: 1; } ieee; /* This format makes it easier to see if a NaN is a signalling NaN. */ struct { /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; + unsigned int mantissa1: 32; + unsigned int mantissa0: 19; + unsigned int quiet_nan: 1; + unsigned int exponent: 11; + unsigned int negative: 1; } ieee_nan; }; /* The original fdlibm code used statements like: - n0 = ((*(int*)&one)>>29)^1; * index of high word * - ix0 = *(n0+(int*)&x); * high word of x * - ix1 = *((1-n0)+(int*)&x); * low word of x * + n0 = ((*(int*)&one)>>29)^1; * index of high word * + ix0 = *(n0+(int*)&x); * high word of x * + ix1 = *((1-n0)+(int*)&x); * low word of x * to dig two 32 bit words out of the 64 bit IEEE floating point value. That is non-ANSI, and, moreover, the gcc instruction scheduler gets it wrong. We instead use the following macros. @@ -77,11 +76,9 @@ union ieee754_double /* #if __FLOAT_WORD_ORDER == LITTLE_ENDIAN */ /* #warning USING Little Endian float word order */ -typedef union -{ +typedef union { double value; - struct - { + struct { u_int16_t lsw; u_int16_t msw; } parts; @@ -91,87 +88,86 @@ typedef union /* Get two 32 bit ints from a double. */ -#define EXTRACT_WORDS(ix0,ix1,d) \ -{ \ - ieeeDoubleShapeType ew_u; \ - ew_u.value = (d); \ - (ix0) = ew_u.parts.msw; \ - (ix1) = ew_u.parts.lsw; \ +#define EXTRACT_WORDS(ix0,ix1,d) \ +{ \ + ieeeDoubleShapeType ew_u; \ + ew_u.value = (d); \ + (ix0) = ew_u.parts.msw; \ + (ix1) = ew_u.parts.lsw; \ } /* Get the more significant 32 bit int from a double. */ -#define GET_HIGH_WORD(i,d) \ -{ \ - ieeeDoubleShapeType gh_u; \ - gh_u.value = (d); \ - (i) = gh_u.parts.msw; \ +#define GET_HIGH_WORD(i,d) \ +{ \ + ieeeDoubleShapeType gh_u; \ + gh_u.value = (d); \ + (i) = gh_u.parts.msw; \ } /* Get the less significant 32 bit int from a double. */ -#define GET_LOW_WORD(i,d) \ -{ \ - ieeeDoubleShapeType gl_u; \ - gl_u.value = (d); \ - (i) = gl_u.parts.lsw; \ +#define GET_LOW_WORD(i,d) \ +{ \ + ieeeDoubleShapeType gl_u; \ + gl_u.value = (d); \ + (i) = gl_u.parts.lsw; \ } /* Set a double from two 32 bit ints. */ -#define INSERT_WORDS(d,ix0,ix1) \ -{ \ - ieeeDoubleShapeType iw_u; \ - iw_u.parts.msw = (ix0); \ - iw_u.parts.lsw = (ix1); \ - (d) = iw_u.value; \ +#define INSERT_WORDS(d,ix0,ix1) \ +{ \ + ieeeDoubleShapeType iw_u; \ + iw_u.parts.msw = (ix0); \ + iw_u.parts.lsw = (ix1); \ + (d) = iw_u.value; \ } /* Set the more significant 32 bits of a double from an int. */ -#define SET_HIGH_WORD(d,v) \ -{ \ - ieeeDoubleShapeType sh_u; \ - sh_u.value = (d); \ - sh_u.parts.msw = (v); \ - (d) = sh_u.value; \ +#define SET_HIGH_WORD(d,v) \ +{ \ + ieeeDoubleShapeType sh_u; \ + sh_u.value = (d); \ + sh_u.parts.msw = (v); \ + (d) = sh_u.value; \ } /* Set the less significant 32 bits of a double from an int. */ -#define SET_LOW_WORD(d,v) \ -{ \ - ieeeDoubleShapeType sl_u; \ - sl_u.value = (d); \ - sl_u.parts.lsw = (v); \ - (d) = sl_u.value; \ +#define SET_LOW_WORD(d,v) \ +{ \ + ieeeDoubleShapeType sl_u; \ + sl_u.value = (d); \ + sl_u.parts.lsw = (v); \ + (d) = sl_u.value; \ } /* A union which permits us to convert between a float and a 32 bit int. */ -typedef union -{ +typedef union { float value; u_int32_t word; } ieee_float_shape_type; /* Get a 32 bit int from a float. */ -#define GET_FLOAT_WORD(i,d) \ -{ \ - ieee_float_shape_type gf_u; \ - gf_u.value = (d); \ - (i) = gf_u.word; \ +#define GET_FLOAT_WORD(i,d) \ +{ \ + ieee_float_shape_type gf_u; \ + gf_u.value = (d); \ + (i) = gf_u.word; \ } /* Set a float from a 32 bit int. */ -#define SET_FLOAT_WORD(d,i) \ -{ \ - ieee_float_shape_type sf_u; \ - sf_u.word = (i); \ - (d) = sf_u.value; \ +#define SET_FLOAT_WORD(d,i) \ +{ \ + ieee_float_shape_type sf_u; \ + sf_u.word = (i); \ + (d) = sf_u.value; \ } diff --git a/bench/sequential/susan/susan.c b/bench/sequential/susan/susan.c old mode 100644 new mode 100755 index 819b33eca044d95834eb47d6a1cf6e0bd25521c3..71a21f4d194437946ffaf80a764e1d6470ec5f59 --- a/bench/sequential/susan/susan.c +++ b/bench/sequential/susan/susan.c @@ -27,7 +27,7 @@ not be passed on without this header information being kept intact. This code must not be sold. -\**********************************************************************/ + \**********************************************************************/ /**********************************************************************\ @@ -146,14 +146,14 @@ malloced space. The SUSAN function e^-(x^6) or e^-(x^2) is calculated and converted to a uchar in the range 0-100, for all possible image brightness differences (including negative - ones). Thus bp[23] is the output for a brightness difference of 23 + ones). Thus bp[ 23 ] is the output for a brightness difference of 23 greylevels. In the SUSAN algorithms this LUT is used as follows: p=in + (i-3)*x_size + j - 1; p points to the first image pixel in the circular mask surrounding point (x,y). - cp=bp + in[i*x_size+j]; + cp=bp + in[ i*x_size+j ]; cp points to a position in the LUT corresponding to the brightness of the centre pixel (x,y). @@ -170,7 +170,7 @@ centre pixel. tmp = *dpt++ * *(cp-brightness); -\**********************************************************************/ + \**********************************************************************/ /**********************************************************************\ @@ -184,7 +184,7 @@ SGI IRIX SGI cc - DEC Unix V3.2+ + DEC Unix V3.2+ IBM RISC AIX gcc @@ -208,7 +208,7 @@ export CCOPTS="-Aa -D_HPUX_SOURCE | -lM" cc -O3 -o susan susan2l.c -\**********************************************************************/ + \**********************************************************************/ /**********************************************************************\ @@ -267,60 +267,58 @@ fixed image sizes. The algorithms themselves are virtually unaltered between "versions 1" and the combined program, version 2. -\**********************************************************************/ + \**********************************************************************/ #include "wcclibm.h" #include "wccfile.h" #include "wccmalloc.h" - +int printf(const char * restrict format, ... ); #define EXP_A 184 -#define EXP_C 16249 +#define EXP_C 16249 -float susan_expf(float y) +float susan_expf( float y ) { - union - { + union { float d; - struct - { -#ifdef LITTLE_ENDIAN + struct { + #ifdef LITTLE_ENDIAN short j, i; -#else + #else short i, j; -#endif + #endif } n; } eco; - eco.n.i = EXP_A*(y) + (EXP_C); + eco.n.i = EXP_A * ( y ) + ( EXP_C ); eco.n.j = 0; return eco.d; } -float susan_sqrtf(float val) +float susan_sqrtf( float val ) { - float x = val/10; - + float x = val / 10; + float dx; - + float diff; float min_tol = 0.00001f; - + int i, flag; - - + + flag = 0; - if (val == 0 ) x = 0; + if ( val == 0 ) x = 0; else { - for (i=1;i<20;i++) - { - if (!flag) { - dx = (val - (x*x)) / (2.0f * x); + _Pragma( "loopbound min 19 max 19" ) + for ( i = 1; i < 20; i++ ) { + if ( !flag ) { + dx = ( val - ( x * x ) ) / ( 2.0f * x ); x = x + dx; - diff = val - (x*x); - if (fabs(diff) <= min_tol) flag = 1; + diff = val - ( x * x ); + if ( fabs( diff ) <= min_tol ) flag = 1; } } } - return (x); + return ( x ); } /* ********** Optional settings */ @@ -333,10 +331,12 @@ typedef int TOTAL_TYPE; #define FTOI(a) ( (a) < 0 ? ((int)(a-0.5)) : ((int)(a+0.5)) ) #define abs(a) ( (a) < 0 ? -a : a ) typedef unsigned char uchar; -typedef struct {int x,y,info, dx, dy, I;} corner_rep; -typedef corner_rep CORNER_LIST[MAX_CORNERS]; +typedef struct { + int x, y, info, dx, dy, I; +} corner_rep; +typedef corner_rep CORNER_LIST[ MAX_CORNERS ]; -extern char susan_input[7292]; +extern char susan_input[ 7292 ]; struct wccFILE susan_file; float susan_dt; int susan_bt; @@ -351,60 +351,60 @@ int susan_max_no_edges; int susan_getint( struct wccFILE *fd ) { int c, i; - char dummy[10000]; - - c = susan_wccfgetc(fd); - _Pragma( "loopbound min 1 max 4" ) - while (1) { /* find next integer */ - if (c=='#') /* if we're at a comment, read to end of line */ - susan_wccfgets(dummy,9000,fd); - if (c==EOF) { + char dummy[ 10000 ]; + + c = susan_wccfgetc( fd ); + _Pragma( "loopbound min 0 max 3" ) + while ( 1 ) { /* find next integer */ + if ( c == '#' ) /* if we're at a comment, read to end of line */ + susan_wccfgets( dummy, 9000, fd ); + if ( c == EOF ) { /* "Image is not binary PGM." */ } - if (c>='0' && c<='9') + if ( c >= '0' && c <= '9' ) break; /* found what we were looking for */ - c = susan_wccfgetc(fd); + c = susan_wccfgetc( fd ); } /* we're at the start of a number, continue until we hit a non-number */ i = 0; - _Pragma( "loopbound min 2 max 3" ) - while (1) { - i = (i*10) + (c - '0'); - c = susan_wccfgetc(fd); - if (c==EOF) return (i); - if (c<'0' || c>'9') break; + _Pragma( "loopbound min 1 max 2" ) + while ( 1 ) { + i = ( i * 10 ) + ( c - '0' ); + c = susan_wccfgetc( fd ); + if ( c == EOF ) return ( i ); + if ( c < '0' || c > '9' ) break; } - return (i); + return ( i ); } -void susan_get_image( struct wccFILE *fd, - unsigned char **in, int *x_size, int *y_size ) +void susan_get_image( struct wccFILE *fd, + unsigned char **in, int *x_size, int *y_size ) { - char header [100]; - + char header [ 100 ]; + susan_wccfseek( fd, 0, WCCSEEK_SET ); /* {{{ read header */ - header[0]=susan_wccfgetc( fd ); - header[1]=susan_wccfgetc( fd ); - if(!(header[0]=='P' && header[1]=='5')) { + header[ 0 ] = susan_wccfgetc( fd ); + header[ 1 ] = susan_wccfgetc( fd ); + if ( !( header[ 0 ] == 'P' && header[ 1 ] == '5' ) ) { /* "Image does not have binary PGM header." */ } - *x_size = susan_getint(fd); - *y_size = susan_getint(fd); + *x_size = susan_getint( fd ); + *y_size = susan_getint( fd ); // dummy read - susan_getint(fd); + susan_getint( fd ); -/* }}} */ + /* }}} */ - *in = (uchar *) susan_wccmalloc(*x_size * *y_size); + *in = ( uchar * ) susan_wccmalloc( *x_size * *y_size ); - if (susan_wccfread(*in,1,*x_size * *y_size,fd) == 0) { + if ( susan_wccfread( *in, 1, *x_size * *y_size, fd ) == 0 ) { /* "Image is wrong size.\n" */ } } @@ -414,39 +414,36 @@ void susan_put_image( int x_size, int y_size ) { int i; _Pragma( "loopbound min 7220 max 7220" ) - for ( i = 0; i < x_size*y_size; i++ ) { + for ( i = 0; i < x_size * y_size; i++ ) ; - } } void susan_int_to_uchar( char *r, uchar *in, int size ) { - int i, max_r=r[0], min_r=r[0]; + int i, max_r = r[ 0 ], min_r = r[ 0 ]; _Pragma( "loopbound min 0 max 0" ) - for (i=0; i<size; i++) { - if ( r[i] > max_r ) - max_r=r[i]; - if ( r[i] < min_r ) - min_r=r[i]; + for ( i = 0; i < size; i++ ) { + if ( r[ i ] > max_r ) + max_r = r[ i ]; + if ( r[ i ] < min_r ) + min_r = r[ i ]; } - if (max_r == min_r) { + if ( max_r == min_r ) { /* Should not occur in TACLeBench. */ _Pragma( "loopbound min 0 max 0" ) - for (i=0; i<size; i++) { - in[i] = (uchar)(0); - } + for ( i = 0; i < size; i++ ) + in[ i ] = ( uchar )( 0 ); return; } - max_r-=min_r; + max_r -= min_r; _Pragma( "loopbound min 0 max 0" ) - for (i=0; i<size; i++) { - in[i] = (uchar)((int)((int)(r[i]-min_r)*255)/max_r); - } + for ( i = 0; i < size; i++ ) + in[ i ] = ( uchar )( ( int )( ( int )( r[ i ] - min_r ) * 255 ) / max_r ); } @@ -455,126 +452,126 @@ void susan_setup_brightness_lut( uchar **bp, int thresh, int form ) int k; float temp; - *bp=(unsigned char *)susan_wccmalloc(516); - *bp=*bp+258; + *bp = ( unsigned char * )susan_wccmalloc( 516 ); + *bp = *bp + 258; _Pragma( "loopbound min 513 max 513" ) - for(k=-256;k<257;k++) { - temp=((float)k)/((float)thresh); - temp=temp*temp; - if (form==6) - temp=temp*temp*temp; - temp=100.0*susan_expf(-temp); - *(*bp+k)= (uchar)temp; + for ( k = -256; k < 257; k++ ) { + temp = ( ( float )k ) / ( ( float )thresh ); + temp = temp * temp; + if ( form == 6 ) + temp = temp * temp * temp; + temp = 100.0 * susan_expf( -temp ); + *( *bp + k ) = ( uchar )temp; } } -void susan_principle( uchar *in, char *r, uchar *bp, - int max_no, int x_size, int y_size ) +void susan_principle( uchar *in, char *r, uchar *bp, + int max_no, int x_size, int y_size ) { int i, j, n; - uchar *p,*cp; + uchar *p, *cp; - susan_wccmemset(r,0,x_size * y_size * sizeof(int)); + susan_wccmemset( r, 0, x_size * y_size * sizeof( int ) ); _Pragma( "loopbound min 0 max 0" ) - for (i=3;i<y_size-3;i++) { + for ( i = 3; i < y_size - 3; i++ ) { _Pragma( "loopbound min 0 max 0" ) - for (j=3;j<x_size-3;j++) { - n=100; - p=in + (i-3)*x_size + j - 1; - cp=bp + in[i*x_size+j]; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-3; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-5; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-6; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=2; - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-6; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-5; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-3; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - - if (n<=max_no) - r[i*x_size+j] = max_no - n; + for ( j = 3; j < x_size - 3; j++ ) { + n = 100; + p = in + ( i - 3 ) * x_size + j - 1; + cp = bp + in[ i * x_size + j ]; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 3; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 5; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 6; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += 2; + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 6; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 5; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 3; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + + if ( n <= max_no ) + r[ i * x_size + j ] = max_no - n; } } } -void susan_principle_small( uchar *in, char *r, uchar *bp, - int max_no, int x_size, int y_size ) +void susan_principle_small( uchar *in, char *r, uchar *bp, + int max_no, int x_size, int y_size ) { int i, j, n; - uchar *p,*cp; + uchar *p, *cp; - susan_wccmemset(r,0,x_size * y_size * sizeof(int)); + susan_wccmemset( r, 0, x_size * y_size * sizeof( int ) ); _Pragma( "loopbound min 0 max 0" ) - for (i=1;i<y_size-1;i++) { + for ( i = 1; i < y_size - 1; i++ ) { _Pragma( "loopbound min 0 max 0" ) - for (j=1;j<x_size-1;j++) { - n=100; - p=in + (i-1)*x_size + j - 1; - cp=bp + in[i*x_size+j]; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-2; - - n+=*(cp-*p); - p+=2; - n+=*(cp-*p); - p+=x_size-2; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - - if (n<=max_no) - r[i*x_size+j] = max_no - n; + for ( j = 1; j < x_size - 1; j++ ) { + n = 100; + p = in + ( i - 1 ) * x_size + j - 1; + cp = bp + in[ i * x_size + j ]; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 2; + + n += *( cp - *p ); + p += 2; + n += *( cp - *p ); + p += x_size - 2; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + + if ( n <= max_no ) + r[ i * x_size + j ] = max_no - n; } } } @@ -582,214 +579,254 @@ void susan_principle_small( uchar *in, char *r, uchar *bp, uchar susan_median( uchar *in, int i, int j, int x_size ) { - int p[8],k,l,tmp; + int p[ 8 ], k, l, tmp; - p[0]=in[(i-1)*x_size+j-1]; - p[1]=in[(i-1)*x_size+j ]; - p[2]=in[(i-1)*x_size+j+1]; - p[3]=in[(i )*x_size+j-1]; - p[4]=in[(i )*x_size+j+1]; - p[5]=in[(i+1)*x_size+j-1]; - p[6]=in[(i+1)*x_size+j ]; - p[7]=in[(i+1)*x_size+j+1]; + p[ 0 ] = in[ ( i - 1 ) * x_size + j - 1 ]; + p[ 1 ] = in[ ( i - 1 ) * x_size + j ]; + p[ 2 ] = in[ ( i - 1 ) * x_size + j + 1 ]; + p[ 3 ] = in[ ( i ) * x_size + j - 1 ]; + p[ 4 ] = in[ ( i ) * x_size + j + 1 ]; + p[ 5 ] = in[ ( i + 1 ) * x_size + j - 1 ]; + p[ 6 ] = in[ ( i + 1 ) * x_size + j ]; + p[ 7 ] = in[ ( i + 1 ) * x_size + j + 1 ]; _Pragma( "loopbound min 0 max 0" ) - for(k=0; k<7; k++) { + for ( k = 0; k < 7; k++ ) { _Pragma( "loopbound min 0 max 0" ) - for(l=0; l<(7-k); l++) { - if (p[l]>p[l+1]) { - tmp=p[l]; - p[l]=p[l+1]; - p[l+1]=tmp; + for ( l = 0; l < ( 7 - k ); l++ ) { + if ( p[ l ] > p[ l + 1 ] ) { + tmp = p[ l ]; + p[ l ] = p[ l + 1 ]; + p[ l + 1 ] = tmp; } } } - return( (p[3]+p[4]) / 2 ); + return ( ( p[ 3 ] + p[ 4 ] ) / 2 ); } /* this enlarges "in" so that borders can be dealt with easily */ -void susan_enlarge( uchar **in, uchar *tmp_image, - int *x_size, int *y_size, int border ) +void susan_enlarge( uchar **in, uchar *tmp_image, + int *x_size, int *y_size, int border ) { int i, j; _Pragma( "loopbound min 95 max 95" ) - for(i=0; i<*y_size; i++) { /* copy *in into tmp_image */ - susan_wccmemcpy( tmp_image+(i+border)*(*x_size+2*border)+border, - *in+i* *x_size, *x_size); + for ( i = 0; i < *y_size; i++ ) { /* copy *in into tmp_image */ + susan_wccmemcpy( tmp_image + ( i + border ) * ( *x_size + 2 * border ) + border, + *in + i * *x_size, *x_size ); } _Pragma( "loopbound min 7 max 7" ) - for(i=0; i<border; i++) { /* copy top and bottom rows; invert as many as necessary */ - susan_wccmemcpy( tmp_image+(border-1-i)*(*x_size+2*border)+border, - *in+i* *x_size,*x_size); - susan_wccmemcpy( tmp_image+(*y_size+border+i)*(*x_size+2*border)+border, - *in+(*y_size-i-1)* *x_size,*x_size); + for ( i = 0; i < border; + i++ ) { /* copy top and bottom rows; invert as many as necessary */ + susan_wccmemcpy( tmp_image + ( border - 1 - i ) * ( *x_size + 2 * border ) + + border, + *in + i * *x_size, *x_size ); + susan_wccmemcpy( tmp_image + ( *y_size + border + i ) * + ( *x_size + 2 * border ) + border, + *in + ( *y_size - i - 1 ) * *x_size, *x_size ); } _Pragma( "loopbound min 7 max 7" ) - for(i=0; i<border; i++) { /* copy left and right columns */ + for ( i = 0; i < border; i++ ) { /* copy left and right columns */ _Pragma( "loopbound min 109 max 109" ) - for(j=0; j<*y_size+2*border; j++) { - tmp_image[j*(*x_size+2*border)+border-1-i]=tmp_image[j*(*x_size+2*border)+border+i]; - tmp_image[j*(*x_size+2*border)+ *x_size+border+i]=tmp_image[j*(*x_size+2*border)+ *x_size+border-1-i]; + for ( j = 0; j < *y_size + 2 * border; j++ ) { + tmp_image[ j * ( *x_size + 2 * border ) + border - 1 - i ] = tmp_image[ j * + ( *x_size + 2 * border ) + border + i ]; + tmp_image[ j * ( *x_size + 2 * border ) + *x_size + border + i ] = tmp_image[ j * + ( *x_size + 2 * border ) + *x_size + border - 1 - i ]; } } - *x_size+=2*border; /* alter image size */ - *y_size+=2*border; - *in=tmp_image; /* repoint in */ + *x_size += 2 * border; /* alter image size */ + *y_size += 2 * border; + *in = tmp_image; /* repoint in */ } -void susan_smoothing( int three_by_three, uchar *in, float dt, - int x_size, int y_size, uchar *bp ) +void susan_smoothing( int three_by_three, uchar *in, float dt, + int x_size, int y_size, uchar *bp ) { float temp; int n_max, increment, mask_size, - i,j,x,y,area,brightness,tmp,centre; - uchar *ip, *dp, *dpt, *cp, *out=in, - *tmp_image; + i, j, x, y, area, brightness, tmp, centre; + uchar *ip, *dp, *dpt, *cp, *out = in, + *tmp_image; TOTAL_TYPE total; - + /* {{{ setup larger image and border sizes */ - if (three_by_three==0) - mask_size = ((int)(1.5 * dt)) + 1; + if ( three_by_three == 0 ) + mask_size = ( ( int )( 1.5 * dt ) ) + 1; else mask_size = 1; - if ( dt>15 ) { + if ( dt > 15 ) { /* "Distance_thresh too big for integer arithmetic." */ - // Either reduce it to <=15 or recompile with variable "total" - // as a float: see top "defines" section. + // Either reduce it to <=15 or recompile with variable "total" + // as a float: see top "defines" section. } - if ( (2*mask_size+1>x_size) || (2*mask_size+1>y_size) ) { + if ( ( 2 * mask_size + 1 > x_size ) || ( 2 * mask_size + 1 > y_size ) ) { /* "Mask size too big for image." */ } - tmp_image = (uchar *)susan_wccmalloc( (x_size+mask_size*2) * (y_size+mask_size*2) ); - susan_enlarge(&in,tmp_image,&x_size,&y_size,mask_size); - - if (three_by_three==0) { + tmp_image = ( uchar * )susan_wccmalloc( ( x_size + mask_size * 2 ) * + ( y_size + mask_size * 2 ) ); + susan_enlarge( &in, tmp_image, &x_size, &y_size, mask_size ); + printf("x_size: %d\n", x_size); + if ( three_by_three == 0 ) { /* large Gaussian masks */ /* {{{ setup distance lut */ - n_max = (mask_size*2) + 1; - + n_max = ( mask_size * 2 ) + 1; + increment = x_size - n_max; - - dp = (unsigned char *)susan_wccmalloc(n_max*n_max); + + dp = ( unsigned char * )susan_wccmalloc( n_max * n_max ); dpt = dp; - temp = -(dt*dt); - + temp = -( dt * dt ); + _Pragma( "loopbound min 15 max 15" ) - for(i=-mask_size; i<=mask_size; i++) { + for ( i = -mask_size; i <= mask_size; i++ ) { _Pragma( "loopbound min 15 max 15" ) - for(j=-mask_size; j<=mask_size; j++) { - x = (int) (100.0 * susan_expf( ((float)((i*i)+(j*j))) / temp )); - *dpt++ = (unsigned char)x; + for ( j = -mask_size; j <= mask_size; j++ ) { + x = ( int ) ( 100.0 * susan_expf( ( ( float )( ( i * i ) + + ( j * j ) ) ) / temp ) ); + *dpt++ = ( unsigned char )x; } } - + /* {{{ main section */ - _Pragma( "loopbound min 95 max 95" ) - for (i=mask_size;i<y_size-mask_size;i++) { + for ( i = mask_size; i < y_size - mask_size; i++ ) { _Pragma( "loopbound min 76 max 76" ) - for (j=mask_size;j<x_size-mask_size;j++) { + for ( j = mask_size; j < x_size - mask_size; j++ ) { area = 0; total = 0; dpt = dp; - ip = in + ((i-mask_size)*x_size) + j - mask_size; - centre = in[i*x_size+j]; + ip = in + ( ( i - mask_size ) * x_size ) + j - mask_size; + centre = in[ i * x_size + j ]; cp = bp + centre; _Pragma( "loopbound min 15 max 15" ) - for(y=-mask_size; y<=mask_size; y++) { + for ( y = -mask_size; y <= mask_size; y++ ) { _Pragma( "loopbound min 15 max 15" ) - for(x=-mask_size; x<=mask_size; x++) { + for ( x = -mask_size; x <= mask_size; x++ ) { brightness = *ip++; - tmp = *dpt++ * *(cp-brightness); + tmp = *dpt++ * *( cp - brightness ); area += tmp; total += tmp * brightness; } ip += increment; } - tmp = area-10000; - if (tmp==0) - *out++=susan_median(in,i,j,x_size); + tmp = area - 10000; + if ( tmp == 0 ) + *out++ = susan_median( in, i, j, x_size ); else - *out++=((total-(centre*10000))/tmp); + *out++ = ( ( total - ( centre * 10000 ) ) / tmp ); } } } else { /* 3x3 constant mask */ - + /* {{{ main section */ - - _Pragma( "loopbound min 15 max 15" ) - for (i=1;i<y_size-1;i++) { - _Pragma( "loopbound min 15 max 15" ) - for (j=1;j<x_size-1;j++) { + _Pragma( "loopbound min 15 max 15" ) //neue Änderung min max 107 + for ( i = 1; i < y_size - 1; i++ ) { + _Pragma( "loopbound min 15 max 15" ) //neue Änderung min max 88 + for ( j = 1; j < x_size - 1; j++ ) { area = 0; total = 0; - ip = in + ((i-1)*x_size) + j - 1; - centre = in[i*x_size+j]; + ip = in + ( ( i - 1 ) * x_size ) + j - 1; + centre = in[ i * x_size + j ]; cp = bp + centre; - - brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness; - brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness; - brightness=*ip; tmp=*(cp-brightness); area += tmp; total += tmp * brightness; - ip += x_size-2; - brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness; - brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness; - brightness=*ip; tmp=*(cp-brightness); area += tmp; total += tmp * brightness; - ip += x_size-2; - brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness; - brightness=*ip++; tmp=*(cp-brightness); area += tmp; total += tmp * brightness; - brightness=*ip; tmp=*(cp-brightness); area += tmp; total += tmp * brightness; - - tmp = area-100; - if (tmp==0) - *out++=susan_median(in,i,j,x_size); + + brightness = *ip++; + tmp = *( cp - brightness ); + area += tmp; + total += tmp * brightness; + brightness = *ip++; + tmp = *( cp - brightness ); + area += tmp; + total += tmp * brightness; + brightness = *ip; + tmp = *( cp - brightness ); + area += tmp; + total += tmp * brightness; + ip += x_size - 2; + brightness = *ip++; + tmp = *( cp - brightness ); + area += tmp; + total += tmp * brightness; + brightness = *ip++; + tmp = *( cp - brightness ); + area += tmp; + total += tmp * brightness; + brightness = *ip; + tmp = *( cp - brightness ); + area += tmp; + total += tmp * brightness; + ip += x_size - 2; + brightness = *ip++; + tmp = *( cp - brightness ); + area += tmp; + total += tmp * brightness; + brightness = *ip++; + tmp = *( cp - brightness ); + area += tmp; + total += tmp * brightness; + brightness = *ip; + tmp = *( cp - brightness ); + area += tmp; + total += tmp * brightness; + + tmp = area - 100; + if ( tmp == 0 ) + *out++ = susan_median( in, i, j, x_size ); else - *out++=(total-(centre*100))/tmp; + *out++ = ( total - ( centre * 100 ) ) / tmp; } } } } -void susan_edge_draw( uchar *in, uchar *mid, - int x_size, int y_size, int drawing_mode ) +void susan_edge_draw( uchar *in, uchar *mid, + int x_size, int y_size, int drawing_mode ) { int i; uchar *inp, *midp; - if (drawing_mode==0) { + if ( drawing_mode == 0 ) { /* mark 3x3 white block around each edge point */ - midp=mid; + midp = mid; _Pragma( "loopbound min 7220 max 7220" ) - for (i=0; i<x_size*y_size; i++) { - if (*midp<8) { - inp = in + (midp - mid) - x_size - 1; - *inp++=255; *inp++=255; *inp=255; inp+=x_size-2; - *inp++=255; inp++; *inp=255; inp+=x_size-2; - *inp++=255; *inp++=255; *inp=255; + for ( i = 0; i < x_size * y_size; i++ ) { + if ( *midp < 8 ) { + inp = in + ( midp - mid ) - x_size - 1; + *inp++ = 255; + *inp++ = 255; + *inp = 255; + inp += x_size - 2; + *inp++ = 255; + inp++; + *inp = 255; + inp += x_size - 2; + *inp++ = 255; + *inp++ = 255; + *inp = 255; } midp++; } } /* now mark 1 black pixel at each edge point */ - midp=mid; + midp = mid; _Pragma( "loopbound min 7220 max 7220" ) - for (i=0; i<x_size*y_size; i++) { - if (*midp<8) - *(in + (midp - mid)) = 0; + for ( i = 0; i < x_size * y_size; i++ ) { + if ( *midp < 8 ) + *( in + ( midp - mid ) ) = 0; midp++; } } @@ -797,7 +834,7 @@ void susan_edge_draw( uchar *in, uchar *mid, void susan_thin( char *r, uchar *mid, int x_size, int y_size ) { - int l[9], centre, + int l[ 9 ], centre, b01, b12, b21, b10, p1, p2, p3, p4, b00, b02, b20, b22, @@ -805,176 +842,288 @@ void susan_thin( char *r, uchar *mid, int x_size, int y_size ) uchar *mp; _Pragma( "loopbound min 87 max 87" ) - for (i=4;i<y_size-4;i++) { + for ( i = 4; i < y_size - 4; i++ ) { _Pragma( "loopbound min 68 max 68" ) - for (j=4;j<x_size-4;j++) { - if (mid[i*x_size+j]<8) { - centre = r[i*x_size+j]; + for ( j = 4; j < x_size - 4; j++ ) { + if ( mid[ i * x_size + j ] < 8 ) { + centre = r[ i * x_size + j ]; /* {{{ count number of neighbours */ - mp=mid + (i-1)*x_size + j-1; + mp = mid + ( i - 1 ) * x_size + j - 1; - n = (*mp<8) + - (*(mp+1)<8) + - (*(mp+2)<8) + - (*(mp+x_size)<8) + - (*(mp+x_size+2)<8) + - (*(mp+x_size+x_size)<8) + - (*(mp+x_size+x_size+1)<8) + - (*(mp+x_size+x_size+2)<8); + n = ( *mp < 8 ) + + ( *( mp + 1 ) < 8 ) + + ( *( mp + 2 ) < 8 ) + + ( *( mp + x_size ) < 8 ) + + ( *( mp + x_size + 2 ) < 8 ) + + ( *( mp + x_size + x_size ) < 8 ) + + ( *( mp + x_size + x_size + 1 ) < 8 ) + + ( *( mp + x_size + x_size + 2 ) < 8 ); /* {{{ n==0 no neighbours - remove point */ - if (n==0) - mid[i*x_size+j]=100; + if ( n == 0 ) + mid[ i * x_size + j ] = 100; /* {{{ n==1 - extend line if I can */ /* extension is only allowed a few times - the value of mid is used to control this */ - if ( (n==1) && (mid[i*x_size+j]<6) ) { + if ( ( n == 1 ) && ( mid[ i * x_size + j ] < 6 ) ) { /* find maximum neighbour weighted in direction opposite the neighbour already present. e.g. have: O O O weight r by 0 2 3 X X O 0 0 4 O O O 0 2 3 */ - l[0]=r[(i-1)*x_size+j-1]; l[1]=r[(i-1)*x_size+j]; l[2]=r[(i-1)*x_size+j+1]; - l[3]=r[(i )*x_size+j-1]; l[4]=0; l[5]=r[(i )*x_size+j+1]; - l[6]=r[(i+1)*x_size+j-1]; l[7]=r[(i+1)*x_size+j]; l[8]=r[(i+1)*x_size+j+1]; - - if (mid[(i-1)*x_size+j-1]<8) { l[0]=0; l[1]=0; l[3]=0; l[2]*=2; - l[6]*=2; l[5]*=3; l[7]*=3; l[8]*=4; } - else { if (mid[(i-1)*x_size+j]<8) { l[1]=0; l[0]=0; l[2]=0; l[3]*=2; - l[5]*=2; l[6]*=3; l[8]*=3; l[7]*=4; } - else { if (mid[(i-1)*x_size+j+1]<8) { l[2]=0; l[1]=0; l[5]=0; l[0]*=2; - l[8]*=2; l[3]*=3; l[7]*=3; l[6]*=4; } - else { if (mid[(i)*x_size+j-1]<8) { l[3]=0; l[0]=0; l[6]=0; l[1]*=2; - l[7]*=2; l[2]*=3; l[8]*=3; l[5]*=4; } - else { if (mid[(i)*x_size+j+1]<8) { l[5]=0; l[2]=0; l[8]=0; l[1]*=2; - l[7]*=2; l[0]*=3; l[6]*=3; l[3]*=4; } - else { if (mid[(i+1)*x_size+j-1]<8) { l[6]=0; l[3]=0; l[7]=0; l[0]*=2; - l[8]*=2; l[1]*=3; l[5]*=3; l[2]*=4; } - else { if (mid[(i+1)*x_size+j]<8) { l[7]=0; l[6]=0; l[8]=0; l[3]*=2; - l[5]*=2; l[0]*=3; l[2]*=3; l[1]*=4; } - else { if (mid[(i+1)*x_size+j+1]<8) { l[8]=0; l[5]=0; l[7]=0; l[6]*=2; - l[2]*=2; l[1]*=3; l[3]*=3; l[0]*=4; } }}}}}}} - - m=0; /* find the highest point */ + l[ 0 ] = r[ ( i - 1 ) * x_size + j - 1 ]; + l[ 1 ] = r[ ( i - 1 ) * x_size + j ]; + l[ 2 ] = r[ ( i - 1 ) * x_size + j + 1 ]; + l[ 3 ] = r[ ( i ) * x_size + j - 1 ]; + l[ 4 ] = 0; + l[ 5 ] = r[ ( i ) * x_size + j + 1 ]; + l[ 6 ] = r[ ( i + 1 ) * x_size + j - 1 ]; + l[ 7 ] = r[ ( i + 1 ) * x_size + j ]; + l[ 8 ] = r[ ( i + 1 ) * x_size + j + 1 ]; + + if ( mid[ ( i - 1 )*x_size + j - 1 ] < 8 ) { + l[ 0 ] = 0; + l[ 1 ] = 0; + l[ 3 ] = 0; + l[ 2 ] *= 2; + l[ 6 ] *= 2; + l[ 5 ] *= 3; + l[ 7 ] *= 3; + l[ 8 ] *= 4; + } else { + if ( mid[ ( i - 1 )*x_size + j ] < 8 ) { + l[ 1 ] = 0; + l[ 0 ] = 0; + l[ 2 ] = 0; + l[ 3 ] *= 2; + l[ 5 ] *= 2; + l[ 6 ] *= 3; + l[ 8 ] *= 3; + l[ 7 ] *= 4; + } else { + if ( mid[ ( i - 1 )*x_size + j + 1 ] < 8 ) { + l[ 2 ] = 0; + l[ 1 ] = 0; + l[ 5 ] = 0; + l[ 0 ] *= 2; + l[ 8 ] *= 2; + l[ 3 ] *= 3; + l[ 7 ] *= 3; + l[ 6 ] *= 4; + } else { + if ( mid[ ( i )*x_size + j - 1 ] < 8 ) { + l[ 3 ] = 0; + l[ 0 ] = 0; + l[ 6 ] = 0; + l[ 1 ] *= 2; + l[ 7 ] *= 2; + l[ 2 ] *= 3; + l[ 8 ] *= 3; + l[ 5 ] *= 4; + } else { + if ( mid[ ( i )*x_size + j + 1 ] < 8 ) { + l[ 5 ] = 0; + l[ 2 ] = 0; + l[ 8 ] = 0; + l[ 1 ] *= 2; + l[ 7 ] *= 2; + l[ 0 ] *= 3; + l[ 6 ] *= 3; + l[ 3 ] *= 4; + } else { + if ( mid[ ( i + 1 )*x_size + j - 1 ] < 8 ) { + l[ 6 ] = 0; + l[ 3 ] = 0; + l[ 7 ] = 0; + l[ 0 ] *= 2; + l[ 8 ] *= 2; + l[ 1 ] *= 3; + l[ 5 ] *= 3; + l[ 2 ] *= 4; + } else { + if ( mid[ ( i + 1 )*x_size + j ] < 8 ) { + l[ 7 ] = 0; + l[ 6 ] = 0; + l[ 8 ] = 0; + l[ 3 ] *= 2; + l[ 5 ] *= 2; + l[ 0 ] *= 3; + l[ 2 ] *= 3; + l[ 1 ] *= 4; + } else { + if ( mid[ ( i + 1 )*x_size + j + 1 ] < 8 ) { + l[ 8 ] = 0; + l[ 5 ] = 0; + l[ 7 ] = 0; + l[ 6 ] *= 2; + l[ 2 ] *= 2; + l[ 1 ] *= 3; + l[ 3 ] *= 3; + l[ 0 ] *= 4; + } + } + } + } + } + } + } + } + + m = 0; /* find the highest point */ _Pragma( "loopbound min 3 max 3" ) - for(y=0; y<3; y++) + for ( y = 0; y < 3; y++ ) _Pragma( "loopbound min 3 max 3" ) - for(x=0; x<3; x++) - if (l[y+y+y+x]>m) { m=l[y+y+y+x]; a=y; b=x; } + for ( x = 0; x < 3; x++ ) + if ( l[ y + y + y + x ] > m ) { + m = l[ y + y + y + x ]; + a = y; + b = x; + } - if (m>0) { - if (mid[i*x_size+j]<4) - mid[(i+a-1)*x_size+j+b-1] = 4; + if ( m > 0 ) { + if ( mid[ i * x_size + j ] < 4 ) + mid[ ( i + a - 1 )*x_size + j + b - 1 ] = 4; else - mid[(i+a-1)*x_size+j+b-1] = mid[i*x_size+j]+1; - if ( (a+a+b) < 3 ) { /* need to jump back in image */ - i+=a-1; - j+=b-2; - if (i<4) i=4; - if (j<4) j=4; + mid[ ( i + a - 1 )*x_size + j + b - 1 ] = mid[ i * x_size + j ] + 1; + if ( ( a + a + b ) < 3 ) { /* need to jump back in image */ + i += a - 1; + j += b - 2; + if ( i < 4 ) i = 4; + if ( j < 4 ) j = 4; } } } /* {{{ n==2 */ - if (n==2) { + if ( n == 2 ) { /* put in a bit here to straighten edges */ - b00 = mid[(i-1)*x_size+j-1]<8; /* corners of 3x3 */ - b02 = mid[(i-1)*x_size+j+1]<8; - b20 = mid[(i+1)*x_size+j-1]<8; - b22 = mid[(i+1)*x_size+j+1]<8; - if ( ((b00+b02+b20+b22)==2) && ((b00|b22)&(b02|b20))) { + b00 = mid[ ( i - 1 ) * x_size + j - 1 ] < 8; /* corners of 3x3 */ + b02 = mid[ ( i - 1 ) * x_size + j + 1 ] < 8; + b20 = mid[ ( i + 1 ) * x_size + j - 1 ] < 8; + b22 = mid[ ( i + 1 ) * x_size + j + 1 ] < 8; + if ( ( ( b00 + b02 + b20 + b22 ) == 2 ) && ( ( b00 | b22 ) & ( b02 | b20 ) ) ) { /* case: move a point back into line. e.g. X O X CAN become X X X O X O O O O O O O O O O */ - if (b00) { - if (b02) { x=0; y=-1; } - else { x=-1; y=0; } + if ( b00 ) { + if ( b02 ) { + x = 0; + y = -1; + } else { + x = -1; + y = 0; + } } else { - if (b02) { x=1; y=0; } - else { x=0; y=1; } + if ( b02 ) { + x = 1; + y = 0; + } else { + x = 0; + y = 1; + } } - if (((float)r[(i+y)*x_size+j+x]/(float)centre) > 0.7) { - if ( ( (x==0) && (mid[(i+(2*y))*x_size+j]>7) && (mid[(i+(2*y))*x_size+j-1]>7) && (mid[(i+(2*y))*x_size+j+1]>7) ) || - ( (y==0) && (mid[(i)*x_size+j+(2*x)]>7) && (mid[(i+1)*x_size+j+(2*x)]>7) && (mid[(i-1)*x_size+j+(2*x)]>7) ) ) { - mid[(i)*x_size+j]=100; - mid[(i+y)*x_size+j+x]=3; /* no jumping needed */ + if ( ( ( float )r[ ( i + y )*x_size + j + x ] / ( float )centre ) > 0.7 ) { + if ( ( ( x == 0 ) && ( mid[ ( i + ( 2 * y ) )*x_size + j ] > 7 ) && + ( mid[ ( i + ( 2 * y ) )*x_size + j - 1 ] > 7 ) && + ( mid[ ( i + ( 2 * y ) )*x_size + j + 1 ] > 7 ) ) || + ( ( y == 0 ) && ( mid[ ( i )*x_size + j + ( 2 * x ) ] > 7 ) && + ( mid[ ( i + 1 )*x_size + j + ( 2 * x ) ] > 7 ) && + ( mid[ ( i - 1 )*x_size + j + ( 2 * x ) ] > 7 ) ) ) { + mid[ ( i )*x_size + j ] = 100; + mid[ ( i + y )*x_size + j + x ] = 3; /* no jumping needed */ } } } else { - b01 = mid[(i-1)*x_size+j ]<8; - b12 = mid[(i )*x_size+j+1]<8; - b21 = mid[(i+1)*x_size+j ]<8; - b10 = mid[(i )*x_size+j-1]<8; + b01 = mid[ ( i - 1 ) * x_size + j ] < 8; + b12 = mid[ ( i ) * x_size + j + 1 ] < 8; + b21 = mid[ ( i + 1 ) * x_size + j ] < 8; + b10 = mid[ ( i ) * x_size + j - 1 ] < 8; /* {{{ right angle ends - not currently used */ -#ifdef IGNORETHIS - if ( (b00&b01)|(b00&b10)|(b02&b01)|(b02&b12)|(b20&b10)|(b20&b21)|(b22&b21)|(b22&b12) ) { + #ifdef IGNORETHIS + if ( ( b00 & b01 ) | ( b00 & b10 ) | ( b02 & b01 ) | ( b02 & b12 ) | + ( b20 & b10 ) | ( b20 & b21 ) | ( b22 & b21 ) | ( b22 & b12 ) ) { /* case; right angle ends. clean up. e.g.; X X O CAN become X X O O X O O O O O O O O O O */ - if ( ((b01)&(mid[(i-2)*x_size+j-1]>7)&(mid[(i-2)*x_size+j]>7)&(mid[(i-2)*x_size+j+1]>7)& - ((b00&((2*r[(i-1)*x_size+j+1])>centre))|(b02&((2*r[(i-1)*x_size+j-1])>centre)))) | - ((b10)&(mid[(i-1)*x_size+j-2]>7)&(mid[(i)*x_size+j-2]>7)&(mid[(i+1)*x_size+j-2]>7)& - ((b00&((2*r[(i+1)*x_size+j-1])>centre))|(b20&((2*r[(i-1)*x_size+j-1])>centre)))) | - ((b12)&(mid[(i-1)*x_size+j+2]>7)&(mid[(i)*x_size+j+2]>7)&(mid[(i+1)*x_size+j+2]>7)& - ((b02&((2*r[(i+1)*x_size+j+1])>centre))|(b22&((2*r[(i-1)*x_size+j+1])>centre)))) | - ((b21)&(mid[(i+2)*x_size+j-1]>7)&(mid[(i+2)*x_size+j]>7)&(mid[(i+2)*x_size+j+1]>7)& - ((b20&((2*r[(i+1)*x_size+j+1])>centre))|(b22&((2*r[(i+1)*x_size+j-1])>centre)))) ) { - mid[(i)*x_size+j]=100; - if (b10&b20) j-=2; - if (b00|b01|b02) { i--; j-=2; } + if ( ( ( b01 ) & ( mid[ ( i - 2 )*x_size + j - 1 ] > 7 ) & + ( mid[ ( i - 2 )*x_size + j ] > 7 ) & ( mid[ ( i - 2 )*x_size + j + 1 ] > 7 )& + ( ( b00 & ( ( 2 * r[ ( i - 1 )*x_size + j + 1 ] ) > centre ) ) | ( b02 & ( ( + 2 * r[ ( i - 1 )*x_size + j - 1 ] ) > centre ) ) ) ) | + ( ( b10 ) & ( mid[ ( i - 1 )*x_size + j - 2 ] > 7 ) & ( mid[ ( i )*x_size + j - 2 ] + > 7 ) & ( mid[ ( i + 1 )*x_size + j - 2 ] > 7 )& + ( ( b00 & ( ( 2 * r[ ( i + 1 )*x_size + j - 1 ] ) > centre ) ) | ( b20 & ( ( + 2 * r[ ( i - 1 )*x_size + j - 1 ] ) > centre ) ) ) ) | + ( ( b12 ) & ( mid[ ( i - 1 )*x_size + j + 2 ] > 7 ) & ( mid[ ( i )*x_size + j + 2 ] + > 7 ) & ( mid[ ( i + 1 )*x_size + j + 2 ] > 7 )& + ( ( b02 & ( ( 2 * r[ ( i + 1 )*x_size + j + 1 ] ) > centre ) ) | ( b22 & ( ( + 2 * r[ ( i - 1 )*x_size + j + 1 ] ) > centre ) ) ) ) | + ( ( b21 ) & ( mid[ ( i + 2 )*x_size + j - 1 ] > 7 ) & ( mid[ ( i + 2 )*x_size + j ] + > 7 ) & ( mid[ ( i + 2 )*x_size + j + 1 ] > 7 )& + ( ( b20 & ( ( 2 * r[ ( i + 1 )*x_size + j + 1 ] ) > centre ) ) | ( b22 & ( ( + 2 * r[ ( i + 1 )*x_size + j - 1 ] ) > centre ) ) ) ) ) { + mid[ ( i )*x_size + j ] = 100; + if ( b10 & b20 ) j -= 2; + if ( b00 | b01 | b02 ) { + i--; + j -= 2; + } } } -#endif - - if ( ((b01+b12+b21+b10)==2) && ((b10|b12)&(b01|b21)) && - ((b01&((mid[(i-2)*x_size+j-1]<8)|(mid[(i-2)*x_size+j+1]<8)))|(b10&((mid[(i-1)*x_size+j-2]<8)|(mid[(i+1)*x_size+j-2]<8)))| - (b12&((mid[(i-1)*x_size+j+2]<8)|(mid[(i+1)*x_size+j+2]<8)))|(b21&((mid[(i+2)*x_size+j-1]<8)|(mid[(i+2)*x_size+j+1]<8)))) ) { + #endif + + if ( ( ( b01 + b12 + b21 + b10 ) == 2 ) && ( ( b10 | b12 ) & ( b01 | b21 ) ) && + ( ( b01 & ( ( mid[ ( i - 2 )*x_size + j - 1 ] < 8 ) | ( mid[ ( i - 2 )*x_size + j + + 1 ] < 8 ) ) ) | ( b10 & ( ( mid[ ( i - 1 )*x_size + j - 2 ] < 8 ) | + ( mid[ ( i + 1 )*x_size + j - 2 ] < 8 ) ) ) | + ( b12 & ( ( mid[ ( i - 1 )*x_size + j + 2 ] < 8 ) | ( mid[ ( i + 1 )*x_size + j + + 2 ] < 8 ) ) ) | ( b21 & ( ( mid[ ( i + 2 )*x_size + j - 1 ] < 8 ) | + ( mid[ ( i + 2 )*x_size + j + 1 ] < 8 ) ) ) ) ) { /* case; clears odd right angles. e.g.; O O O becomes O O O X X O X O O O X O O X O */ - mid[(i)*x_size+j]=100; + mid[ ( i )*x_size + j ] = 100; i--; /* jump back */ - j-=2; - if (i<4) i=4; - if (j<4) j=4; + j -= 2; + if ( i < 4 ) i = 4; + if ( j < 4 ) j = 4; } } } /* {{{ n>2 the thinning is done here without breaking connectivity */ - if (n>2) { - b01 = mid[(i-1)*x_size+j ]<8; - b12 = mid[(i )*x_size+j+1]<8; - b21 = mid[(i+1)*x_size+j ]<8; - b10 = mid[(i )*x_size+j-1]<8; - if((b01+b12+b21+b10)>1) { - b00 = mid[(i-1)*x_size+j-1]<8; - b02 = mid[(i-1)*x_size+j+1]<8; - b20 = mid[(i+1)*x_size+j-1]<8; - b22 = mid[(i+1)*x_size+j+1]<8; + if ( n > 2 ) { + b01 = mid[ ( i - 1 ) * x_size + j ] < 8; + b12 = mid[ ( i ) * x_size + j + 1 ] < 8; + b21 = mid[ ( i + 1 ) * x_size + j ] < 8; + b10 = mid[ ( i ) * x_size + j - 1 ] < 8; + if ( ( b01 + b12 + b21 + b10 ) > 1 ) { + b00 = mid[ ( i - 1 ) * x_size + j - 1 ] < 8; + b02 = mid[ ( i - 1 ) * x_size + j + 1 ] < 8; + b20 = mid[ ( i + 1 ) * x_size + j - 1 ] < 8; + b22 = mid[ ( i + 1 ) * x_size + j + 1 ] < 8; p1 = b00 | b01; p2 = b02 | b12; p3 = b22 | b21; p4 = b20 | b10; - if( ((p1 + p2 + p3 + p4) - ((b01 & p2)+(b12 & p3)+(b21 & p4)+(b10 & p1))) < 2) { - mid[(i)*x_size+j]=100; + if ( ( ( p1 + p2 + p3 + p4 ) - ( ( b01 & p2 ) + ( b12 & p3 ) + ( b21 & p4 ) + + ( b10 & p1 ) ) ) < 2 ) { + mid[ ( i )*x_size + j ] = 100; i--; - j-=2; - if (i<4) i=4; - if (j<4) j=4; + j -= 2; + if ( i < 4 ) i = 4; + if ( j < 4 ) j = 4; } } } @@ -984,233 +1133,410 @@ void susan_thin( char *r, uchar *mid, int x_size, int y_size ) } -void susan_edges( uchar *in, char *r, uchar *mid, uchar *bp, - int max_no, int x_size, int y_size ) +void susan_edges( uchar *in, char *r, uchar *mid, uchar *bp, + int max_no, int x_size, int y_size ) { float z; int do_symmetry, i, j, m, n, a, b, x, y, w; - uchar c,*p,*cp; + uchar c, *p, *cp; - susan_wccmemset(r,0,x_size * y_size); + susan_wccmemset( r, 0, x_size * y_size ); _Pragma( "loopbound min 89 max 89" ) - for (i=3;i<y_size-3;i++) { + for ( i = 3; i < y_size - 3; i++ ) { _Pragma( "loopbound min 70 max 70" ) - for (j=3;j<x_size-3;j++) { - n=100; - p=in + (i-3)*x_size + j - 1; - cp=bp + in[i*x_size+j]; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-3; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-5; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-6; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=2; - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-6; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-5; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-3; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - - if (n<=max_no) - r[i*x_size+j] = max_no - n; + for ( j = 3; j < x_size - 3; j++ ) { + n = 100; + p = in + ( i - 3 ) * x_size + j - 1; + cp = bp + in[ i * x_size + j ]; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 3; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 5; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 6; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += 2; + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 6; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 5; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 3; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + + if ( n <= max_no ) + r[ i * x_size + j ] = max_no - n; } } _Pragma( "loopbound min 87 max 87" ) - for (i=4;i<y_size-4;i++) { + for ( i = 4; i < y_size - 4; i++ ) { _Pragma( "loopbound min 68 max 68" ) - for (j=4;j<x_size-4;j++) { - if (r[i*x_size+j]>0) { - m=r[i*x_size+j]; - n=max_no - m; - cp=bp + in[i*x_size+j]; - - if (n>600) { - p=in + (i-3)*x_size + j - 1; - x=0;y=0; - - c=*(cp-*p++);x-=c;y-=3*c; - c=*(cp-*p++);y-=3*c; - c=*(cp-*p);x+=c;y-=3*c; - p+=x_size-3; - - c=*(cp-*p++);x-=2*c;y-=2*c; - c=*(cp-*p++);x-=c;y-=2*c; - c=*(cp-*p++);y-=2*c; - c=*(cp-*p++);x+=c;y-=2*c; - c=*(cp-*p);x+=2*c;y-=2*c; - p+=x_size-5; - - c=*(cp-*p++);x-=3*c;y-=c; - c=*(cp-*p++);x-=2*c;y-=c; - c=*(cp-*p++);x-=c;y-=c; - c=*(cp-*p++);y-=c; - c=*(cp-*p++);x+=c;y-=c; - c=*(cp-*p++);x+=2*c;y-=c; - c=*(cp-*p);x+=3*c;y-=c; - p+=x_size-6; - - c=*(cp-*p++);x-=3*c; - c=*(cp-*p++);x-=2*c; - c=*(cp-*p);x-=c; - p+=2; - c=*(cp-*p++);x+=c; - c=*(cp-*p++);x+=2*c; - c=*(cp-*p);x+=3*c; - p+=x_size-6; - - c=*(cp-*p++);x-=3*c;y+=c; - c=*(cp-*p++);x-=2*c;y+=c; - c=*(cp-*p++);x-=c;y+=c; - c=*(cp-*p++);y+=c; - c=*(cp-*p++);x+=c;y+=c; - c=*(cp-*p++);x+=2*c;y+=c; - c=*(cp-*p);x+=3*c;y+=c; - p+=x_size-5; - - c=*(cp-*p++);x-=2*c;y+=2*c; - c=*(cp-*p++);x-=c;y+=2*c; - c=*(cp-*p++);y+=2*c; - c=*(cp-*p++);x+=c;y+=2*c; - c=*(cp-*p);x+=2*c;y+=2*c; - p+=x_size-3; - - c=*(cp-*p++);x-=c;y+=3*c; - c=*(cp-*p++);y+=3*c; - c=*(cp-*p);x+=c;y+=3*c; - - z = susan_sqrtf((float)((x*x) + (y*y))); - if (z > (0.9*(float)n)) { /* 0.5 */ - do_symmetry=0; - if (x==0) - z=1000000.0; + for ( j = 4; j < x_size - 4; j++ ) { + if ( r[ i * x_size + j ] > 0 ) { + m = r[ i * x_size + j ]; + n = max_no - m; + cp = bp + in[ i * x_size + j ]; + + if ( n > 600 ) { + p = in + ( i - 3 ) * x_size + j - 1; + x = 0; + y = 0; + + c = *( cp - *p++ ); + x -= c; + y -= 3 * c; + c = *( cp - *p++ ); + y -= 3 * c; + c = *( cp - *p ); + x += c; + y -= 3 * c; + p += x_size - 3; + + c = *( cp - *p++ ); + x -= 2 * c; + y -= 2 * c; + c = *( cp - *p++ ); + x -= c; + y -= 2 * c; + c = *( cp - *p++ ); + y -= 2 * c; + c = *( cp - *p++ ); + x += c; + y -= 2 * c; + c = *( cp - *p ); + x += 2 * c; + y -= 2 * c; + p += x_size - 5; + + c = *( cp - *p++ ); + x -= 3 * c; + y -= c; + c = *( cp - *p++ ); + x -= 2 * c; + y -= c; + c = *( cp - *p++ ); + x -= c; + y -= c; + c = *( cp - *p++ ); + y -= c; + c = *( cp - *p++ ); + x += c; + y -= c; + c = *( cp - *p++ ); + x += 2 * c; + y -= c; + c = *( cp - *p ); + x += 3 * c; + y -= c; + p += x_size - 6; + + c = *( cp - *p++ ); + x -= 3 * c; + c = *( cp - *p++ ); + x -= 2 * c; + c = *( cp - *p ); + x -= c; + p += 2; + c = *( cp - *p++ ); + x += c; + c = *( cp - *p++ ); + x += 2 * c; + c = *( cp - *p ); + x += 3 * c; + p += x_size - 6; + + c = *( cp - *p++ ); + x -= 3 * c; + y += c; + c = *( cp - *p++ ); + x -= 2 * c; + y += c; + c = *( cp - *p++ ); + x -= c; + y += c; + c = *( cp - *p++ ); + y += c; + c = *( cp - *p++ ); + x += c; + y += c; + c = *( cp - *p++ ); + x += 2 * c; + y += c; + c = *( cp - *p ); + x += 3 * c; + y += c; + p += x_size - 5; + + c = *( cp - *p++ ); + x -= 2 * c; + y += 2 * c; + c = *( cp - *p++ ); + x -= c; + y += 2 * c; + c = *( cp - *p++ ); + y += 2 * c; + c = *( cp - *p++ ); + x += c; + y += 2 * c; + c = *( cp - *p ); + x += 2 * c; + y += 2 * c; + p += x_size - 3; + + c = *( cp - *p++ ); + x -= c; + y += 3 * c; + c = *( cp - *p++ ); + y += 3 * c; + c = *( cp - *p ); + x += c; + y += 3 * c; + + z = susan_sqrtf( ( float )( ( x * x ) + ( y * y ) ) ); + if ( z > ( 0.9 * ( float )n ) ) { /* 0.5 */ + do_symmetry = 0; + if ( x == 0 ) + z = 1000000.0; else - z=((float)y) / ((float)x); - if (z < 0) { z=-z; w=-1; } - else w=1; - if (z < 0.5) { /* vert_edge */ a=0; b=1; } - else { if (z > 2.0) { /* hor_edge */ a=1; b=0; } - else { /* diag_edge */ if (w>0) { a=1; b=1; } - else { a=-1; b=1; }}} - if ( (m > r[(i+a)*x_size+j+b]) && (m >= r[(i-a)*x_size+j-b]) && - (m > r[(i+(2*a))*x_size+j+(2*b)]) && (m >= r[(i-(2*a))*x_size+j-(2*b)]) ) - mid[i*x_size+j] = 1; - } else { - do_symmetry=1; - } - } else { - do_symmetry=1; - } - - if (do_symmetry==1) { - p=in + (i-3)*x_size + j - 1; - x=0; y=0; w=0; + z = ( ( float )y ) / ( ( float )x ); + if ( z < 0 ) { + z = -z; + w = -1; + } else w = 1; + if ( z < 0.5 ) { + /* vert_edge */ a = 0; + b = 1; + } else { + if ( z > 2.0 ) { + /* hor_edge */ a = 1; + b = 0; + } else { + /* diag_edge */ if ( w > 0 ) { + a = 1; + b = 1; + } else { + a = -1; + b = 1; + } + } + } + if ( ( m > r[ ( i + a )*x_size + j + b ] ) && + ( m >= r[ ( i - a )*x_size + j - b ] ) && + ( m > r[ ( i + ( 2 * a ) )*x_size + j + ( 2 * b ) ] ) && + ( m >= r[ ( i - ( 2 * a ) )*x_size + j - ( 2 * b ) ] ) ) + mid[ i * x_size + j ] = 1; + } else + do_symmetry = 1; + } else + do_symmetry = 1; + + if ( do_symmetry == 1 ) { + p = in + ( i - 3 ) * x_size + j - 1; + x = 0; + y = 0; + w = 0; /* | \ y -x- w | \ */ - c=*(cp-*p++);x+=c;y+=9*c;w+=3*c; - c=*(cp-*p++);y+=9*c; - c=*(cp-*p);x+=c;y+=9*c;w-=3*c; - p+=x_size-3; - - c=*(cp-*p++);x+=4*c;y+=4*c;w+=4*c; - c=*(cp-*p++);x+=c;y+=4*c;w+=2*c; - c=*(cp-*p++);y+=4*c; - c=*(cp-*p++);x+=c;y+=4*c;w-=2*c; - c=*(cp-*p);x+=4*c;y+=4*c;w-=4*c; - p+=x_size-5; - - c=*(cp-*p++);x+=9*c;y+=c;w+=3*c; - c=*(cp-*p++);x+=4*c;y+=c;w+=2*c; - c=*(cp-*p++);x+=c;y+=c;w+=c; - c=*(cp-*p++);y+=c; - c=*(cp-*p++);x+=c;y+=c;w-=c; - c=*(cp-*p++);x+=4*c;y+=c;w-=2*c; - c=*(cp-*p);x+=9*c;y+=c;w-=3*c; - p+=x_size-6; - - c=*(cp-*p++);x+=9*c; - c=*(cp-*p++);x+=4*c; - c=*(cp-*p);x+=c; - p+=2; - c=*(cp-*p++);x+=c; - c=*(cp-*p++);x+=4*c; - c=*(cp-*p);x+=9*c; - p+=x_size-6; - - c=*(cp-*p++);x+=9*c;y+=c;w-=3*c; - c=*(cp-*p++);x+=4*c;y+=c;w-=2*c; - c=*(cp-*p++);x+=c;y+=c;w-=c; - c=*(cp-*p++);y+=c; - c=*(cp-*p++);x+=c;y+=c;w+=c; - c=*(cp-*p++);x+=4*c;y+=c;w+=2*c; - c=*(cp-*p);x+=9*c;y+=c;w+=3*c; - p+=x_size-5; - - c=*(cp-*p++);x+=4*c;y+=4*c;w-=4*c; - c=*(cp-*p++);x+=c;y+=4*c;w-=2*c; - c=*(cp-*p++);y+=4*c; - c=*(cp-*p++);x+=c;y+=4*c;w+=2*c; - c=*(cp-*p);x+=4*c;y+=4*c;w+=4*c; - p+=x_size-3; - - c=*(cp-*p++);x+=c;y+=9*c;w-=3*c; - c=*(cp-*p++);y+=9*c; - c=*(cp-*p);x+=c;y+=9*c;w+=3*c; - - if (y==0) + c = *( cp - *p++ ); + x += c; + y += 9 * c; + w += 3 * c; + c = *( cp - *p++ ); + y += 9 * c; + c = *( cp - *p ); + x += c; + y += 9 * c; + w -= 3 * c; + p += x_size - 3; + + c = *( cp - *p++ ); + x += 4 * c; + y += 4 * c; + w += 4 * c; + c = *( cp - *p++ ); + x += c; + y += 4 * c; + w += 2 * c; + c = *( cp - *p++ ); + y += 4 * c; + c = *( cp - *p++ ); + x += c; + y += 4 * c; + w -= 2 * c; + c = *( cp - *p ); + x += 4 * c; + y += 4 * c; + w -= 4 * c; + p += x_size - 5; + + c = *( cp - *p++ ); + x += 9 * c; + y += c; + w += 3 * c; + c = *( cp - *p++ ); + x += 4 * c; + y += c; + w += 2 * c; + c = *( cp - *p++ ); + x += c; + y += c; + w += c; + c = *( cp - *p++ ); + y += c; + c = *( cp - *p++ ); + x += c; + y += c; + w -= c; + c = *( cp - *p++ ); + x += 4 * c; + y += c; + w -= 2 * c; + c = *( cp - *p ); + x += 9 * c; + y += c; + w -= 3 * c; + p += x_size - 6; + + c = *( cp - *p++ ); + x += 9 * c; + c = *( cp - *p++ ); + x += 4 * c; + c = *( cp - *p ); + x += c; + p += 2; + c = *( cp - *p++ ); + x += c; + c = *( cp - *p++ ); + x += 4 * c; + c = *( cp - *p ); + x += 9 * c; + p += x_size - 6; + + c = *( cp - *p++ ); + x += 9 * c; + y += c; + w -= 3 * c; + c = *( cp - *p++ ); + x += 4 * c; + y += c; + w -= 2 * c; + c = *( cp - *p++ ); + x += c; + y += c; + w -= c; + c = *( cp - *p++ ); + y += c; + c = *( cp - *p++ ); + x += c; + y += c; + w += c; + c = *( cp - *p++ ); + x += 4 * c; + y += c; + w += 2 * c; + c = *( cp - *p ); + x += 9 * c; + y += c; + w += 3 * c; + p += x_size - 5; + + c = *( cp - *p++ ); + x += 4 * c; + y += 4 * c; + w -= 4 * c; + c = *( cp - *p++ ); + x += c; + y += 4 * c; + w -= 2 * c; + c = *( cp - *p++ ); + y += 4 * c; + c = *( cp - *p++ ); + x += c; + y += 4 * c; + w += 2 * c; + c = *( cp - *p ); + x += 4 * c; + y += 4 * c; + w += 4 * c; + p += x_size - 3; + + c = *( cp - *p++ ); + x += c; + y += 9 * c; + w -= 3 * c; + c = *( cp - *p++ ); + y += 9 * c; + c = *( cp - *p ); + x += c; + y += 9 * c; + w += 3 * c; + + if ( y == 0 ) z = 1000000.0; else - z = ((float)x) / ((float)y); - if (z < 0.5) { /* vertical */ a=0; b=1; } - else { if (z > 2.0) { /* horizontal */ a=1; b=0; } - else { /* diagonal */ if (w>0) { a=-1; b=1; } - else { a=1; b=1; }}} - if ( (m > r[(i+a)*x_size+j+b]) && (m >= r[(i-a)*x_size+j-b]) && - (m > r[(i+(2*a))*x_size+j+(2*b)]) && (m >= r[(i-(2*a))*x_size+j-(2*b)]) ) - mid[i*x_size+j] = 2; + z = ( ( float )x ) / ( ( float )y ); + if ( z < 0.5 ) { + /* vertical */ a = 0; + b = 1; + } else { + if ( z > 2.0 ) { + /* horizontal */ a = 1; + b = 0; + } else { + /* diagonal */ if ( w > 0 ) { + a = -1; + b = 1; + } else { + a = 1; + b = 1; + } + } + } + if ( ( m > r[ ( i + a )*x_size + j + b ] ) && + ( m >= r[ ( i - a )*x_size + j - b ] ) && + ( m > r[ ( i + ( 2 * a ) )*x_size + j + ( 2 * b ) ] ) && + ( m >= r[ ( i - ( 2 * a ) )*x_size + j - ( 2 * b ) ] ) ) + mid[ i * x_size + j ] = 2; } } } @@ -1218,130 +1544,182 @@ void susan_edges( uchar *in, char *r, uchar *mid, uchar *bp, } -void susan_edges_small( uchar *in, char *r, uchar *mid, uchar *bp, - int max_no, int x_size, int y_size ) +void susan_edges_small( uchar *in, char *r, uchar *mid, uchar *bp, + int max_no, int x_size, int y_size ) { float z; int do_symmetry, i, j, m, n, a, b, x, y, w; - uchar c,*p,*cp; + uchar c, *p, *cp; - susan_wccmemset(r,0,x_size * y_size); + susan_wccmemset( r, 0, x_size * y_size ); _Pragma( "loopbound min 0 max 0" ) - for (i=1;i<y_size-1;i++) { + for ( i = 1; i < y_size - 1; i++ ) { _Pragma( "loopbound min 0 max 0" ) - for (j=1;j<x_size-1;j++) { - n=100; - p=in + (i-1)*x_size + j - 1; - cp=bp + in[i*x_size+j]; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-2; - - n+=*(cp-*p); - p+=2; - n+=*(cp-*p); - p+=x_size-2; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - - if (n<=max_no) { - r[i*x_size+j] = max_no - n; - } + for ( j = 1; j < x_size - 1; j++ ) { + n = 100; + p = in + ( i - 1 ) * x_size + j - 1; + cp = bp + in[ i * x_size + j ]; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 2; + + n += *( cp - *p ); + p += 2; + n += *( cp - *p ); + p += x_size - 2; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + + if ( n <= max_no ) + r[ i * x_size + j ] = max_no - n; } } _Pragma( "loopbound min 0 max 0" ) - for (i=2;i<y_size-2;i++) { + for ( i = 2; i < y_size - 2; i++ ) { _Pragma( "loopbound min 0 max 0" ) - for (j=2;j<x_size-2;j++) { - if (r[i*x_size+j]>0) { - m=r[i*x_size+j]; - n=max_no - m; - cp=bp + in[i*x_size+j]; - - if (n>250) { - p=in + (i-1)*x_size + j - 1; - x=0;y=0; - - c=*(cp-*p++);x-=c;y-=c; - c=*(cp-*p++);y-=c; - c=*(cp-*p);x+=c;y-=c; - p+=x_size-2; - - c=*(cp-*p);x-=c; - p+=2; - c=*(cp-*p);x+=c; - p+=x_size-2; - - c=*(cp-*p++);x-=c;y+=c; - c=*(cp-*p++);y+=c; - c=*(cp-*p);x+=c;y+=c; - - z = susan_sqrtf((float)((x*x) + (y*y))); - if (z > (0.4*(float)n)) { /* 0.6 */ - do_symmetry=0; - if (x==0) - z=1000000.0; + for ( j = 2; j < x_size - 2; j++ ) { + if ( r[ i * x_size + j ] > 0 ) { + m = r[ i * x_size + j ]; + n = max_no - m; + cp = bp + in[ i * x_size + j ]; + + if ( n > 250 ) { + p = in + ( i - 1 ) * x_size + j - 1; + x = 0; + y = 0; + + c = *( cp - *p++ ); + x -= c; + y -= c; + c = *( cp - *p++ ); + y -= c; + c = *( cp - *p ); + x += c; + y -= c; + p += x_size - 2; + + c = *( cp - *p ); + x -= c; + p += 2; + c = *( cp - *p ); + x += c; + p += x_size - 2; + + c = *( cp - *p++ ); + x -= c; + y += c; + c = *( cp - *p++ ); + y += c; + c = *( cp - *p ); + x += c; + y += c; + + z = susan_sqrtf( ( float )( ( x * x ) + ( y * y ) ) ); + if ( z > ( 0.4 * ( float )n ) ) { /* 0.6 */ + do_symmetry = 0; + if ( x == 0 ) + z = 1000000.0; else - z=((float)y) / ((float)x); - if (z < 0) { z=-z; w=-1; } - else w=1; - if (z < 0.5) { /* vert_edge */ a=0; b=1; } - else { if (z > 2.0) { /* hor_edge */ a=1; b=0; } - else { /* diag_edge */ if (w>0) { a=1; b=1; } - else { a=-1; b=1; } - } - } - if ( (m > r[(i+a)*x_size+j+b]) && (m >= r[(i-a)*x_size+j-b]) ) { - mid[i*x_size+j] = 1; + z = ( ( float )y ) / ( ( float )x ); + if ( z < 0 ) { + z = -z; + w = -1; + } else w = 1; + if ( z < 0.5 ) { + /* vert_edge */ a = 0; + b = 1; + } else { + if ( z > 2.0 ) { + /* hor_edge */ a = 1; + b = 0; + } else { + /* diag_edge */ if ( w > 0 ) { + a = 1; + b = 1; + } else { + a = -1; + b = 1; + } + } } - } else { - do_symmetry=1; - } - } else { - do_symmetry=1; - } - - if (do_symmetry==1) { - p=in + (i-1)*x_size + j - 1; - x=0; y=0; w=0; + if ( ( m > r[ ( i + a )*x_size + j + b ] ) && + ( m >= r[ ( i - a )*x_size + j - b ] ) ) + mid[ i * x_size + j ] = 1; + } else + do_symmetry = 1; + } else + do_symmetry = 1; + + if ( do_symmetry == 1 ) { + p = in + ( i - 1 ) * x_size + j - 1; + x = 0; + y = 0; + w = 0; /* | \ y -x- w | \ */ - c=*(cp-*p++);x+=c;y+=c;w+=c; - c=*(cp-*p++);y+=c; - c=*(cp-*p);x+=c;y+=c;w-=c; - p+=x_size-2; - - c=*(cp-*p);x+=c; - p+=2; - c=*(cp-*p);x+=c; - p+=x_size-2; - - c=*(cp-*p++);x+=c;y+=c;w-=c; - c=*(cp-*p++);y+=c; - c=*(cp-*p);x+=c;y+=c;w+=c; - - if (y==0) + c = *( cp - *p++ ); + x += c; + y += c; + w += c; + c = *( cp - *p++ ); + y += c; + c = *( cp - *p ); + x += c; + y += c; + w -= c; + p += x_size - 2; + + c = *( cp - *p ); + x += c; + p += 2; + c = *( cp - *p ); + x += c; + p += x_size - 2; + + c = *( cp - *p++ ); + x += c; + y += c; + w -= c; + c = *( cp - *p++ ); + y += c; + c = *( cp - *p ); + x += c; + y += c; + w += c; + + if ( y == 0 ) z = 1000000.0; else - z = ((float)x) / ((float)y); - if (z < 0.5) { /* vertical */ a=0; b=1; } - else { if (z > 2.0) { /* horizontal */ a=1; b=0; } - else { /* diagonal */ if (w>0) { a=-1; b=1; } - else { a=1; b=1; } - } - } - if ( (m > r[(i+a)*x_size+j+b]) && (m >= r[(i-a)*x_size+j-b]) ) { - mid[i*x_size+j] = 2; + z = ( ( float )x ) / ( ( float )y ); + if ( z < 0.5 ) { + /* vertical */ a = 0; + b = 1; + } else { + if ( z > 2.0 ) { + /* horizontal */ a = 1; + b = 0; + } else { + /* diagonal */ if ( w > 0 ) { + a = -1; + b = 1; + } else { + a = 1; + b = 1; + } + } } + if ( ( m > r[ ( i + a )*x_size + j + b ] ) && + ( m >= r[ ( i - a )*x_size + j - b ] ) ) + mid[ i * x_size + j ] = 2; } } } @@ -1349,23 +1727,31 @@ void susan_edges_small( uchar *in, char *r, uchar *mid, uchar *bp, } -void susan_corner_draw( uchar *in, CORNER_LIST corner_list, - int x_size, int drawing_mode) +void susan_corner_draw( uchar *in, CORNER_LIST corner_list, + int x_size, int drawing_mode ) { uchar *p; - int n=0; + int n = 0; _Pragma( "loopbound min 0 max 0" ) - while(corner_list[n].info != 7) { - if (drawing_mode==0) { - p = in + (corner_list[n].y-1)*x_size + corner_list[n].x - 1; - *p++=255; *p++=255; *p=255; p+=x_size-2; - *p++=255; *p++=0; *p=255; p+=x_size-2; - *p++=255; *p++=255; *p=255; + while ( corner_list[ n ].info != 7 ) { + if ( drawing_mode == 0 ) { + p = in + ( corner_list[ n ].y - 1 ) * x_size + corner_list[ n ].x - 1; + *p++ = 255; + *p++ = 255; + *p = 255; + p += x_size - 2; + *p++ = 255; + *p++ = 0; + *p = 255; + p += x_size - 2; + *p++ = 255; + *p++ = 255; + *p = 255; n++; } else { - p = in + corner_list[n].y*x_size + corner_list[n].x; - *p=0; + p = in + corner_list[ n ].y * x_size + corner_list[ n ].x; + *p = 0; n++; } } @@ -1373,502 +1759,618 @@ void susan_corner_draw( uchar *in, CORNER_LIST corner_list, void susan_corners( uchar *in, char *r, uchar *bp, - int max_no, CORNER_LIST corner_list, int x_size, int y_size) + int max_no, CORNER_LIST corner_list, int x_size, int y_size ) { - int n,x,y,sq,xx,yy, - i,j; + int n, x, y, sq, xx, yy, + i, j; float divide; - uchar c,*p,*cp; - char *cgx,*cgy; + uchar c, *p, *cp; + char *cgx, *cgy; - susan_wccmemset(r,0,x_size * y_size); + susan_wccmemset( r, 0, x_size * y_size ); - cgx=(char *)susan_wccmalloc(x_size*y_size); - cgy=(char *)susan_wccmalloc(x_size*y_size); + cgx = ( char * )susan_wccmalloc( x_size * y_size ); + cgy = ( char * )susan_wccmalloc( x_size * y_size ); _Pragma( "loopbound min 85 max 85" ) - for (i=5;i<y_size-5;i++) { + for ( i = 5; i < y_size - 5; i++ ) { _Pragma( "loopbound min 66 max 66" ) - for (j=5;j<x_size-5;j++) { - n=100; - p=in + (i-3)*x_size + j - 1; - cp=bp + in[i*x_size+j]; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-3; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-5; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-6; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - if (n<max_no){ /* do this test early and often ONLY to save wasted computation */ - p+=2; - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p); - if (n<max_no){ - p+=x_size-6; - - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p); - if (n<max_no){ - p+=x_size-5; - - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p); - if (n<max_no){ - p+=x_size-3; - - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p); - - if (n<max_no) { - x=0;y=0; - p=in + (i-3)*x_size + j - 1; - - c=*(cp-*p++);x-=c;y-=3*c; - c=*(cp-*p++);y-=3*c; - c=*(cp-*p);x+=c;y-=3*c; - p+=x_size-3; - - c=*(cp-*p++);x-=2*c;y-=2*c; - c=*(cp-*p++);x-=c;y-=2*c; - c=*(cp-*p++);y-=2*c; - c=*(cp-*p++);x+=c;y-=2*c; - c=*(cp-*p);x+=2*c;y-=2*c; - p+=x_size-5; - - c=*(cp-*p++);x-=3*c;y-=c; - c=*(cp-*p++);x-=2*c;y-=c; - c=*(cp-*p++);x-=c;y-=c; - c=*(cp-*p++);y-=c; - c=*(cp-*p++);x+=c;y-=c; - c=*(cp-*p++);x+=2*c;y-=c; - c=*(cp-*p);x+=3*c;y-=c; - p+=x_size-6; - - c=*(cp-*p++);x-=3*c; - c=*(cp-*p++);x-=2*c; - c=*(cp-*p);x-=c; - p+=2; - c=*(cp-*p++);x+=c; - c=*(cp-*p++);x+=2*c; - c=*(cp-*p);x+=3*c; - p+=x_size-6; - - c=*(cp-*p++);x-=3*c;y+=c; - c=*(cp-*p++);x-=2*c;y+=c; - c=*(cp-*p++);x-=c;y+=c; - c=*(cp-*p++);y+=c; - c=*(cp-*p++);x+=c;y+=c; - c=*(cp-*p++);x+=2*c;y+=c; - c=*(cp-*p);x+=3*c;y+=c; - p+=x_size-5; - - c=*(cp-*p++);x-=2*c;y+=2*c; - c=*(cp-*p++);x-=c;y+=2*c; - c=*(cp-*p++);y+=2*c; - c=*(cp-*p++);x+=c;y+=2*c; - c=*(cp-*p);x+=2*c;y+=2*c; - p+=x_size-3; - - c=*(cp-*p++);x-=c;y+=3*c; - c=*(cp-*p++);y+=3*c; - c=*(cp-*p);x+=c;y+=3*c; - - xx=x*x; - yy=y*y; - sq=xx+yy; - if ( sq > ((n*n)/2) ) { - if(yy<xx) { - divide=(float)y/(float)abs(x); - sq=abs(x)/x; - sq=*(cp-in[(i+FTOI(divide))*x_size+j+sq]) + - *(cp-in[(i+FTOI(2*divide))*x_size+j+2*sq]) + - *(cp-in[(i+FTOI(3*divide))*x_size+j+3*sq]); - } else { - divide=(float)x/(float)abs(y); - sq=abs(y)/y; - sq=*(cp-in[(i+sq)*x_size+j+FTOI(divide)]) + - *(cp-in[(i+2*sq)*x_size+j+FTOI(2*divide)]) + - *(cp-in[(i+3*sq)*x_size+j+FTOI(3*divide)]); - } - - if(sq>290){ - r[i*x_size+j] = max_no-n; - cgx[i*x_size+j] = (51*x)/n; - cgy[i*x_size+j] = (51*y)/n; + for ( j = 5; j < x_size - 5; j++ ) { + n = 100; + p = in + ( i - 3 ) * x_size + j - 1; + cp = bp + in[ i * x_size + j ]; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 3; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 5; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 6; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + if ( n < max_no ) { /* do this test early and often ONLY to save wasted computation */ + p += 2; + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p ); + if ( n < max_no ) { + p += x_size - 6; + + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p ); + if ( n < max_no ) { + p += x_size - 5; + + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p ); + if ( n < max_no ) { + p += x_size - 3; + + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p ); + + if ( n < max_no ) { + x = 0; + y = 0; + p = in + ( i - 3 ) * x_size + j - 1; + + c = *( cp - *p++ ); + x -= c; + y -= 3 * c; + c = *( cp - *p++ ); + y -= 3 * c; + c = *( cp - *p ); + x += c; + y -= 3 * c; + p += x_size - 3; + + c = *( cp - *p++ ); + x -= 2 * c; + y -= 2 * c; + c = *( cp - *p++ ); + x -= c; + y -= 2 * c; + c = *( cp - *p++ ); + y -= 2 * c; + c = *( cp - *p++ ); + x += c; + y -= 2 * c; + c = *( cp - *p ); + x += 2 * c; + y -= 2 * c; + p += x_size - 5; + + c = *( cp - *p++ ); + x -= 3 * c; + y -= c; + c = *( cp - *p++ ); + x -= 2 * c; + y -= c; + c = *( cp - *p++ ); + x -= c; + y -= c; + c = *( cp - *p++ ); + y -= c; + c = *( cp - *p++ ); + x += c; + y -= c; + c = *( cp - *p++ ); + x += 2 * c; + y -= c; + c = *( cp - *p ); + x += 3 * c; + y -= c; + p += x_size - 6; + + c = *( cp - *p++ ); + x -= 3 * c; + c = *( cp - *p++ ); + x -= 2 * c; + c = *( cp - *p ); + x -= c; + p += 2; + c = *( cp - *p++ ); + x += c; + c = *( cp - *p++ ); + x += 2 * c; + c = *( cp - *p ); + x += 3 * c; + p += x_size - 6; + + c = *( cp - *p++ ); + x -= 3 * c; + y += c; + c = *( cp - *p++ ); + x -= 2 * c; + y += c; + c = *( cp - *p++ ); + x -= c; + y += c; + c = *( cp - *p++ ); + y += c; + c = *( cp - *p++ ); + x += c; + y += c; + c = *( cp - *p++ ); + x += 2 * c; + y += c; + c = *( cp - *p ); + x += 3 * c; + y += c; + p += x_size - 5; + + c = *( cp - *p++ ); + x -= 2 * c; + y += 2 * c; + c = *( cp - *p++ ); + x -= c; + y += 2 * c; + c = *( cp - *p++ ); + y += 2 * c; + c = *( cp - *p++ ); + x += c; + y += 2 * c; + c = *( cp - *p ); + x += 2 * c; + y += 2 * c; + p += x_size - 3; + + c = *( cp - *p++ ); + x -= c; + y += 3 * c; + c = *( cp - *p++ ); + y += 3 * c; + c = *( cp - *p ); + x += c; + y += 3 * c; + + xx = x * x; + yy = y * y; + sq = xx + yy; + if ( sq > ( ( n * n ) / 2 ) ) { + if ( yy < xx ) { + divide = ( float )y / ( float )abs( x ); + sq = abs( x ) / x; + sq = *( cp - in[ ( i + FTOI( divide ) ) * x_size + j + sq ] ) + + *( cp - in[ ( i + FTOI( 2 * divide ) ) * x_size + j + 2 * sq ] ) + + *( cp - in[ ( i + FTOI( 3 * divide ) ) * x_size + j + 3 * sq ] ); + } else { + divide = ( float )x / ( float )abs( y ); + sq = abs( y ) / y; + sq = *( cp - in[ ( i + sq ) * x_size + j + FTOI( divide ) ] ) + + *( cp - in[ ( i + 2 * sq ) * x_size + j + FTOI( 2 * divide ) ] ) + + *( cp - in[ ( i + 3 * sq ) * x_size + j + FTOI( 3 * divide ) ] ); + } + + if ( sq > 290 ) { + r[ i * x_size + j ] = max_no - n; + cgx[ i * x_size + j ] = ( 51 * x ) / n; + cgy[ i * x_size + j ] = ( 51 * y ) / n; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } } } } - }}}}}}}}}}}}}}}}}} + } } } - + /* to locate the local maxima */ - n=0; + n = 0; _Pragma( "loopbound min 85 max 85" ) - for (i=5;i<y_size-5;i++) { + for ( i = 5; i < y_size - 5; i++ ) { _Pragma( "loopbound min 66 max 66" ) - for (j=5;j<x_size-5;j++) { - x = r[i*x_size+j]; - if (x>0) { + for ( j = 5; j < x_size - 5; j++ ) { + x = r[ i * x_size + j ]; + if ( x > 0 ) { /* 5x5 mask */ #ifdef FIVE_SUPP - if ((x>r[(i-1)*x_size+j+2]) && - (x>r[(i )*x_size+j+1]) && - (x>r[(i )*x_size+j+2]) && - (x>r[(i+1)*x_size+j-1]) && - (x>r[(i+1)*x_size+j ]) && - (x>r[(i+1)*x_size+j+1]) && - (x>r[(i+1)*x_size+j+2]) && - (x>r[(i+2)*x_size+j-2]) && - (x>r[(i+2)*x_size+j-1]) && - (x>r[(i+2)*x_size+j ]) && - (x>r[(i+2)*x_size+j+1]) && - (x>r[(i+2)*x_size+j+2]) && - (x>=r[(i-2)*x_size+j-2]) && - (x>=r[(i-2)*x_size+j-1]) && - (x>=r[(i-2)*x_size+j ]) && - (x>=r[(i-2)*x_size+j+1]) && - (x>=r[(i-2)*x_size+j+2]) && - (x>=r[(i-1)*x_size+j-2]) && - (x>=r[(i-1)*x_size+j-1]) && - (x>=r[(i-1)*x_size+j ]) && - (x>=r[(i-1)*x_size+j+1]) && - (x>=r[(i )*x_size+j-2]) && - (x>=r[(i )*x_size+j-1]) && - (x>=r[(i+1)*x_size+j-2]) ) + if ( ( x > r[ ( i - 1 )*x_size + j + 2 ] ) && + ( x > r[ ( i )*x_size + j + 1 ] ) && + ( x > r[ ( i )*x_size + j + 2 ] ) && + ( x > r[ ( i + 1 )*x_size + j - 1 ] ) && + ( x > r[ ( i + 1 )*x_size + j ] ) && + ( x > r[ ( i + 1 )*x_size + j + 1 ] ) && + ( x > r[ ( i + 1 )*x_size + j + 2 ] ) && + ( x > r[ ( i + 2 )*x_size + j - 2 ] ) && + ( x > r[ ( i + 2 )*x_size + j - 1 ] ) && + ( x > r[ ( i + 2 )*x_size + j ] ) && + ( x > r[ ( i + 2 )*x_size + j + 1 ] ) && + ( x > r[ ( i + 2 )*x_size + j + 2 ] ) && + ( x >= r[ ( i - 2 )*x_size + j - 2 ] ) && + ( x >= r[ ( i - 2 )*x_size + j - 1 ] ) && + ( x >= r[ ( i - 2 )*x_size + j ] ) && + ( x >= r[ ( i - 2 )*x_size + j + 1 ] ) && + ( x >= r[ ( i - 2 )*x_size + j + 2 ] ) && + ( x >= r[ ( i - 1 )*x_size + j - 2 ] ) && + ( x >= r[ ( i - 1 )*x_size + j - 1 ] ) && + ( x >= r[ ( i - 1 )*x_size + j ] ) && + ( x >= r[ ( i - 1 )*x_size + j + 1 ] ) && + ( x >= r[ ( i )*x_size + j - 2 ] ) && + ( x >= r[ ( i )*x_size + j - 1 ] ) && + ( x >= r[ ( i + 1 )*x_size + j - 2 ] ) ) #endif #ifdef SEVEN_SUPP - if ((x>r[(i-3)*x_size+j-3]) && - (x>r[(i-3)*x_size+j-2]) && - (x>r[(i-3)*x_size+j-1]) && - (x>r[(i-3)*x_size+j ]) && - (x>r[(i-3)*x_size+j+1]) && - (x>r[(i-3)*x_size+j+2]) && - (x>r[(i-3)*x_size+j+3]) && - - (x>r[(i-2)*x_size+j-3]) && - (x>r[(i-2)*x_size+j-2]) && - (x>r[(i-2)*x_size+j-1]) && - (x>r[(i-2)*x_size+j ]) && - (x>r[(i-2)*x_size+j+1]) && - (x>r[(i-2)*x_size+j+2]) && - (x>r[(i-2)*x_size+j+3]) && - - (x>r[(i-1)*x_size+j-3]) && - (x>r[(i-1)*x_size+j-2]) && - (x>r[(i-1)*x_size+j-1]) && - (x>r[(i-1)*x_size+j ]) && - (x>r[(i-1)*x_size+j+1]) && - (x>r[(i-1)*x_size+j+2]) && - (x>r[(i-1)*x_size+j+3]) && - - (x>r[(i)*x_size+j-3]) && - (x>r[(i)*x_size+j-2]) && - (x>r[(i)*x_size+j-1]) && - (x>=r[(i)*x_size+j+1]) && - (x>=r[(i)*x_size+j+2]) && - (x>=r[(i)*x_size+j+3]) && - - (x>=r[(i+1)*x_size+j-3]) && - (x>=r[(i+1)*x_size+j-2]) && - (x>=r[(i+1)*x_size+j-1]) && - (x>=r[(i+1)*x_size+j ]) && - (x>=r[(i+1)*x_size+j+1]) && - (x>=r[(i+1)*x_size+j+2]) && - (x>=r[(i+1)*x_size+j+3]) && - - (x>=r[(i+2)*x_size+j-3]) && - (x>=r[(i+2)*x_size+j-2]) && - (x>=r[(i+2)*x_size+j-1]) && - (x>=r[(i+2)*x_size+j ]) && - (x>=r[(i+2)*x_size+j+1]) && - (x>=r[(i+2)*x_size+j+2]) && - (x>=r[(i+2)*x_size+j+3]) && - - (x>=r[(i+3)*x_size+j-3]) && - (x>=r[(i+3)*x_size+j-2]) && - (x>=r[(i+3)*x_size+j-1]) && - (x>=r[(i+3)*x_size+j ]) && - (x>=r[(i+3)*x_size+j+1]) && - (x>=r[(i+3)*x_size+j+2]) && - (x>=r[(i+3)*x_size+j+3]) ) + if ( ( x > r[ ( i - 3 )*x_size + j - 3 ] ) && + ( x > r[ ( i - 3 )*x_size + j - 2 ] ) && + ( x > r[ ( i - 3 )*x_size + j - 1 ] ) && + ( x > r[ ( i - 3 )*x_size + j ] ) && + ( x > r[ ( i - 3 )*x_size + j + 1 ] ) && + ( x > r[ ( i - 3 )*x_size + j + 2 ] ) && + ( x > r[ ( i - 3 )*x_size + j + 3 ] ) && + + ( x > r[ ( i - 2 )*x_size + j - 3 ] ) && + ( x > r[ ( i - 2 )*x_size + j - 2 ] ) && + ( x > r[ ( i - 2 )*x_size + j - 1 ] ) && + ( x > r[ ( i - 2 )*x_size + j ] ) && + ( x > r[ ( i - 2 )*x_size + j + 1 ] ) && + ( x > r[ ( i - 2 )*x_size + j + 2 ] ) && + ( x > r[ ( i - 2 )*x_size + j + 3 ] ) && + + ( x > r[ ( i - 1 )*x_size + j - 3 ] ) && + ( x > r[ ( i - 1 )*x_size + j - 2 ] ) && + ( x > r[ ( i - 1 )*x_size + j - 1 ] ) && + ( x > r[ ( i - 1 )*x_size + j ] ) && + ( x > r[ ( i - 1 )*x_size + j + 1 ] ) && + ( x > r[ ( i - 1 )*x_size + j + 2 ] ) && + ( x > r[ ( i - 1 )*x_size + j + 3 ] ) && + + ( x > r[ ( i )*x_size + j - 3 ] ) && + ( x > r[ ( i )*x_size + j - 2 ] ) && + ( x > r[ ( i )*x_size + j - 1 ] ) && + ( x >= r[ ( i )*x_size + j + 1 ] ) && + ( x >= r[ ( i )*x_size + j + 2 ] ) && + ( x >= r[ ( i )*x_size + j + 3 ] ) && + + ( x >= r[ ( i + 1 )*x_size + j - 3 ] ) && + ( x >= r[ ( i + 1 )*x_size + j - 2 ] ) && + ( x >= r[ ( i + 1 )*x_size + j - 1 ] ) && + ( x >= r[ ( i + 1 )*x_size + j ] ) && + ( x >= r[ ( i + 1 )*x_size + j + 1 ] ) && + ( x >= r[ ( i + 1 )*x_size + j + 2 ] ) && + ( x >= r[ ( i + 1 )*x_size + j + 3 ] ) && + + ( x >= r[ ( i + 2 )*x_size + j - 3 ] ) && + ( x >= r[ ( i + 2 )*x_size + j - 2 ] ) && + ( x >= r[ ( i + 2 )*x_size + j - 1 ] ) && + ( x >= r[ ( i + 2 )*x_size + j ] ) && + ( x >= r[ ( i + 2 )*x_size + j + 1 ] ) && + ( x >= r[ ( i + 2 )*x_size + j + 2 ] ) && + ( x >= r[ ( i + 2 )*x_size + j + 3 ] ) && + + ( x >= r[ ( i + 3 )*x_size + j - 3 ] ) && + ( x >= r[ ( i + 3 )*x_size + j - 2 ] ) && + ( x >= r[ ( i + 3 )*x_size + j - 1 ] ) && + ( x >= r[ ( i + 3 )*x_size + j ] ) && + ( x >= r[ ( i + 3 )*x_size + j + 1 ] ) && + ( x >= r[ ( i + 3 )*x_size + j + 2 ] ) && + ( x >= r[ ( i + 3 )*x_size + j + 3 ] ) ) #endif - { - corner_list[n].info=0; - corner_list[n].x=j; - corner_list[n].y=i; - corner_list[n].dx=cgx[i*x_size+j]; - corner_list[n].dy=cgy[i*x_size+j]; - corner_list[n].I=in[i*x_size+j]; - n++; - if(n==MAX_CORNERS){ - /* "Too many corners." */ + { + corner_list[ n ].info = 0; + corner_list[ n ].x = j; + corner_list[ n ].y = i; + corner_list[ n ].dx = cgx[ i * x_size + j ]; + corner_list[ n ].dy = cgy[ i * x_size + j ]; + corner_list[ n ].I = in[ i * x_size + j ]; + n++; + if ( n == MAX_CORNERS ) { + /* "Too many corners." */ + } } - } } } } - corner_list[n].info=7; + corner_list[ n ].info = 7; } -void susan_corners_quick( uchar *in, char *r, uchar *bp, - int max_no, CORNER_LIST corner_list, int x_size, int y_size ) +void susan_corners_quick( uchar *in, char *r, uchar *bp, + int max_no, CORNER_LIST corner_list, int x_size, int y_size ) { - int n,x,y,i,j; - uchar *p,*cp; + int n, x, y, i, j; + uchar *p, *cp; - susan_wccmemset(r,0,x_size * y_size); + susan_wccmemset( r, 0, x_size * y_size ); _Pragma( "loopbound min 0 max 0" ) - for (i=7;i<y_size-7;i++) { + for ( i = 7; i < y_size - 7; i++ ) { _Pragma( "loopbound min 0 max 0" ) - for (j=7;j<x_size-7;j++) { - n=100; - p=in + (i-3)*x_size + j - 1; - cp=bp + in[i*x_size+j]; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-3; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-5; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - p+=x_size-6; - - n+=*(cp-*p++); - n+=*(cp-*p++); - n+=*(cp-*p); - if (n<max_no){ - p+=2; - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p); - if (n<max_no){ - p+=x_size-6; - - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p); - if (n<max_no){ - p+=x_size-5; - - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p); - if (n<max_no){ - p+=x_size-3; - - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p++); - if (n<max_no){ - n+=*(cp-*p); - - if (n<max_no) { - r[i*x_size+j] = max_no-n; + for ( j = 7; j < x_size - 7; j++ ) { + n = 100; + p = in + ( i - 3 ) * x_size + j - 1; + cp = bp + in[ i * x_size + j ]; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 3; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 5; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + p += x_size - 6; + + n += *( cp - *p++ ); + n += *( cp - *p++ ); + n += *( cp - *p ); + if ( n < max_no ) { + p += 2; + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p ); + if ( n < max_no ) { + p += x_size - 6; + + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p ); + if ( n < max_no ) { + p += x_size - 5; + + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p ); + if ( n < max_no ) { + p += x_size - 3; + + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p++ ); + if ( n < max_no ) { + n += *( cp - *p ); + + if ( n < max_no ) + r[ i * x_size + j ] = max_no - n; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } } - }}}}}}}}}}}}}}}}}} + } } } /* to locate the local maxima */ - n=0; + n = 0; _Pragma( "loopbound min 0 max 0" ) - for (i=7;i<y_size-7;i++) { + for ( i = 7; i < y_size - 7; i++ ) { _Pragma( "loopbound min 0 max 0" ) - for (j=7;j<x_size-7;j++) { - x = r[i*x_size+j]; - if (x>0) { + for ( j = 7; j < x_size - 7; j++ ) { + x = r[ i * x_size + j ]; + if ( x > 0 ) { /* 5x5 mask */ #ifdef FIVE_SUPP - if ((x>r[(i-1)*x_size+j+2]) && - (x>r[(i )*x_size+j+1]) && - (x>r[(i )*x_size+j+2]) && - (x>r[(i+1)*x_size+j-1]) && - (x>r[(i+1)*x_size+j ]) && - (x>r[(i+1)*x_size+j+1]) && - (x>r[(i+1)*x_size+j+2]) && - (x>r[(i+2)*x_size+j-2]) && - (x>r[(i+2)*x_size+j-1]) && - (x>r[(i+2)*x_size+j ]) && - (x>r[(i+2)*x_size+j+1]) && - (x>r[(i+2)*x_size+j+2]) && - (x>=r[(i-2)*x_size+j-2]) && - (x>=r[(i-2)*x_size+j-1]) && - (x>=r[(i-2)*x_size+j ]) && - (x>=r[(i-2)*x_size+j+1]) && - (x>=r[(i-2)*x_size+j+2]) && - (x>=r[(i-1)*x_size+j-2]) && - (x>=r[(i-1)*x_size+j-1]) && - (x>=r[(i-1)*x_size+j ]) && - (x>=r[(i-1)*x_size+j+1]) && - (x>=r[(i )*x_size+j-2]) && - (x>=r[(i )*x_size+j-1]) && - (x>=r[(i+1)*x_size+j-2]) ) + if ( ( x > r[ ( i - 1 )*x_size + j + 2 ] ) && + ( x > r[ ( i )*x_size + j + 1 ] ) && + ( x > r[ ( i )*x_size + j + 2 ] ) && + ( x > r[ ( i + 1 )*x_size + j - 1 ] ) && + ( x > r[ ( i + 1 )*x_size + j ] ) && + ( x > r[ ( i + 1 )*x_size + j + 1 ] ) && + ( x > r[ ( i + 1 )*x_size + j + 2 ] ) && + ( x > r[ ( i + 2 )*x_size + j - 2 ] ) && + ( x > r[ ( i + 2 )*x_size + j - 1 ] ) && + ( x > r[ ( i + 2 )*x_size + j ] ) && + ( x > r[ ( i + 2 )*x_size + j + 1 ] ) && + ( x > r[ ( i + 2 )*x_size + j + 2 ] ) && + ( x >= r[ ( i - 2 )*x_size + j - 2 ] ) && + ( x >= r[ ( i - 2 )*x_size + j - 1 ] ) && + ( x >= r[ ( i - 2 )*x_size + j ] ) && + ( x >= r[ ( i - 2 )*x_size + j + 1 ] ) && + ( x >= r[ ( i - 2 )*x_size + j + 2 ] ) && + ( x >= r[ ( i - 1 )*x_size + j - 2 ] ) && + ( x >= r[ ( i - 1 )*x_size + j - 1 ] ) && + ( x >= r[ ( i - 1 )*x_size + j ] ) && + ( x >= r[ ( i - 1 )*x_size + j + 1 ] ) && + ( x >= r[ ( i )*x_size + j - 2 ] ) && + ( x >= r[ ( i )*x_size + j - 1 ] ) && + ( x >= r[ ( i + 1 )*x_size + j - 2 ] ) ) #endif #ifdef SEVEN_SUPP - if ((x>r[(i-3)*x_size+j-3]) && - (x>r[(i-3)*x_size+j-2]) && - (x>r[(i-3)*x_size+j-1]) && - (x>r[(i-3)*x_size+j ]) && - (x>r[(i-3)*x_size+j+1]) && - (x>r[(i-3)*x_size+j+2]) && - (x>r[(i-3)*x_size+j+3]) && - - (x>r[(i-2)*x_size+j-3]) && - (x>r[(i-2)*x_size+j-2]) && - (x>r[(i-2)*x_size+j-1]) && - (x>r[(i-2)*x_size+j ]) && - (x>r[(i-2)*x_size+j+1]) && - (x>r[(i-2)*x_size+j+2]) && - (x>r[(i-2)*x_size+j+3]) && - - (x>r[(i-1)*x_size+j-3]) && - (x>r[(i-1)*x_size+j-2]) && - (x>r[(i-1)*x_size+j-1]) && - (x>r[(i-1)*x_size+j ]) && - (x>r[(i-1)*x_size+j+1]) && - (x>r[(i-1)*x_size+j+2]) && - (x>r[(i-1)*x_size+j+3]) && - - (x>r[(i)*x_size+j-3]) && - (x>r[(i)*x_size+j-2]) && - (x>r[(i)*x_size+j-1]) && - (x>=r[(i)*x_size+j+1]) && - (x>=r[(i)*x_size+j+2]) && - (x>=r[(i)*x_size+j+3]) && - - (x>=r[(i+1)*x_size+j-3]) && - (x>=r[(i+1)*x_size+j-2]) && - (x>=r[(i+1)*x_size+j-1]) && - (x>=r[(i+1)*x_size+j ]) && - (x>=r[(i+1)*x_size+j+1]) && - (x>=r[(i+1)*x_size+j+2]) && - (x>=r[(i+1)*x_size+j+3]) && - - (x>=r[(i+2)*x_size+j-3]) && - (x>=r[(i+2)*x_size+j-2]) && - (x>=r[(i+2)*x_size+j-1]) && - (x>=r[(i+2)*x_size+j ]) && - (x>=r[(i+2)*x_size+j+1]) && - (x>=r[(i+2)*x_size+j+2]) && - (x>=r[(i+2)*x_size+j+3]) && - - (x>=r[(i+3)*x_size+j-3]) && - (x>=r[(i+3)*x_size+j-2]) && - (x>=r[(i+3)*x_size+j-1]) && - (x>=r[(i+3)*x_size+j ]) && - (x>=r[(i+3)*x_size+j+1]) && - (x>=r[(i+3)*x_size+j+2]) && - (x>=r[(i+3)*x_size+j+3]) ) + if ( ( x > r[ ( i - 3 )*x_size + j - 3 ] ) && + ( x > r[ ( i - 3 )*x_size + j - 2 ] ) && + ( x > r[ ( i - 3 )*x_size + j - 1 ] ) && + ( x > r[ ( i - 3 )*x_size + j ] ) && + ( x > r[ ( i - 3 )*x_size + j + 1 ] ) && + ( x > r[ ( i - 3 )*x_size + j + 2 ] ) && + ( x > r[ ( i - 3 )*x_size + j + 3 ] ) && + + ( x > r[ ( i - 2 )*x_size + j - 3 ] ) && + ( x > r[ ( i - 2 )*x_size + j - 2 ] ) && + ( x > r[ ( i - 2 )*x_size + j - 1 ] ) && + ( x > r[ ( i - 2 )*x_size + j ] ) && + ( x > r[ ( i - 2 )*x_size + j + 1 ] ) && + ( x > r[ ( i - 2 )*x_size + j + 2 ] ) && + ( x > r[ ( i - 2 )*x_size + j + 3 ] ) && + + ( x > r[ ( i - 1 )*x_size + j - 3 ] ) && + ( x > r[ ( i - 1 )*x_size + j - 2 ] ) && + ( x > r[ ( i - 1 )*x_size + j - 1 ] ) && + ( x > r[ ( i - 1 )*x_size + j ] ) && + ( x > r[ ( i - 1 )*x_size + j + 1 ] ) && + ( x > r[ ( i - 1 )*x_size + j + 2 ] ) && + ( x > r[ ( i - 1 )*x_size + j + 3 ] ) && + + ( x > r[ ( i )*x_size + j - 3 ] ) && + ( x > r[ ( i )*x_size + j - 2 ] ) && + ( x > r[ ( i )*x_size + j - 1 ] ) && + ( x >= r[ ( i )*x_size + j + 1 ] ) && + ( x >= r[ ( i )*x_size + j + 2 ] ) && + ( x >= r[ ( i )*x_size + j + 3 ] ) && + + ( x >= r[ ( i + 1 )*x_size + j - 3 ] ) && + ( x >= r[ ( i + 1 )*x_size + j - 2 ] ) && + ( x >= r[ ( i + 1 )*x_size + j - 1 ] ) && + ( x >= r[ ( i + 1 )*x_size + j ] ) && + ( x >= r[ ( i + 1 )*x_size + j + 1 ] ) && + ( x >= r[ ( i + 1 )*x_size + j + 2 ] ) && + ( x >= r[ ( i + 1 )*x_size + j + 3 ] ) && + + ( x >= r[ ( i + 2 )*x_size + j - 3 ] ) && + ( x >= r[ ( i + 2 )*x_size + j - 2 ] ) && + ( x >= r[ ( i + 2 )*x_size + j - 1 ] ) && + ( x >= r[ ( i + 2 )*x_size + j ] ) && + ( x >= r[ ( i + 2 )*x_size + j + 1 ] ) && + ( x >= r[ ( i + 2 )*x_size + j + 2 ] ) && + ( x >= r[ ( i + 2 )*x_size + j + 3 ] ) && + + ( x >= r[ ( i + 3 )*x_size + j - 3 ] ) && + ( x >= r[ ( i + 3 )*x_size + j - 2 ] ) && + ( x >= r[ ( i + 3 )*x_size + j - 1 ] ) && + ( x >= r[ ( i + 3 )*x_size + j ] ) && + ( x >= r[ ( i + 3 )*x_size + j + 1 ] ) && + ( x >= r[ ( i + 3 )*x_size + j + 2 ] ) && + ( x >= r[ ( i + 3 )*x_size + j + 3 ] ) ) #endif - { - corner_list[n].info=0; - corner_list[n].x=j; - corner_list[n].y=i; - x = in[(i-2)*x_size+j-2] + in[(i-2)*x_size+j-1] + in[(i-2)*x_size+j] + in[(i-2)*x_size+j+1] + in[(i-2)*x_size+j+2] + - in[(i-1)*x_size+j-2] + in[(i-1)*x_size+j-1] + in[(i-1)*x_size+j] + in[(i-1)*x_size+j+1] + in[(i-1)*x_size+j+2] + - in[(i )*x_size+j-2] + in[(i )*x_size+j-1] + in[(i )*x_size+j] + in[(i )*x_size+j+1] + in[(i )*x_size+j+2] + - in[(i+1)*x_size+j-2] + in[(i+1)*x_size+j-1] + in[(i+1)*x_size+j] + in[(i+1)*x_size+j+1] + in[(i+1)*x_size+j+2] + - in[(i+2)*x_size+j-2] + in[(i+2)*x_size+j-1] + in[(i+2)*x_size+j] + in[(i+2)*x_size+j+1] + in[(i+2)*x_size+j+2]; - - corner_list[n].I=x/25; - /*corner_list[n].I=in[i*x_size+j];*/ - x = in[(i-2)*x_size+j+2] + in[(i-1)*x_size+j+2] + in[(i)*x_size+j+2] + in[(i+1)*x_size+j+2] + in[(i+2)*x_size+j+2] - - (in[(i-2)*x_size+j-2] + in[(i-1)*x_size+j-2] + in[(i)*x_size+j-2] + in[(i+1)*x_size+j-2] + in[(i+2)*x_size+j-2]); - x += x + in[(i-2)*x_size+j+1] + in[(i-1)*x_size+j+1] + in[(i)*x_size+j+1] + in[(i+1)*x_size+j+1] + in[(i+2)*x_size+j+1] - - (in[(i-2)*x_size+j-1] + in[(i-1)*x_size+j-1] + in[(i)*x_size+j-1] + in[(i+1)*x_size+j-1] + in[(i+2)*x_size+j-1]); - - y = in[(i+2)*x_size+j-2] + in[(i+2)*x_size+j-1] + in[(i+2)*x_size+j] + in[(i+2)*x_size+j+1] + in[(i+2)*x_size+j+2] - - (in[(i-2)*x_size+j-2] + in[(i-2)*x_size+j-1] + in[(i-2)*x_size+j] + in[(i-2)*x_size+j+1] + in[(i-2)*x_size+j+2]); - y += y + in[(i+1)*x_size+j-2] + in[(i+1)*x_size+j-1] + in[(i+1)*x_size+j] + in[(i+1)*x_size+j+1] + in[(i+1)*x_size+j+2] - - (in[(i-1)*x_size+j-2] + in[(i-1)*x_size+j-1] + in[(i-1)*x_size+j] + in[(i-1)*x_size+j+1] + in[(i-1)*x_size+j+2]); - corner_list[n].dx=x/15; - corner_list[n].dy=y/15; - n++; - if(n==MAX_CORNERS){ - /* "Too many corners." */ + { + corner_list[ n ].info = 0; + corner_list[ n ].x = j; + corner_list[ n ].y = i; + x = in[ ( i - 2 ) * x_size + j - 2 ] + in[ ( i - 2 ) * x_size + j - 1 ] + in[ ( i - + 2 ) * x_size + j ] + in[ ( i - 2 ) * x_size + j + 1 ] + in[ ( i - 2 ) * x_size + j + + 2 ] + + in[ ( i - 1 ) * x_size + j - 2 ] + in[ ( i - 1 ) * x_size + j - 1 ] + in[ ( i - 1 ) * + x_size + j ] + in[ ( i - 1 ) * x_size + j + 1 ] + in[ ( i - 1 ) * x_size + j + 2 ] + + in[ ( i ) * x_size + j - 2 ] + in[ ( i ) * x_size + j - 1 ] + in[ ( i ) * x_size + + j ] + in[ ( i ) * x_size + j + 1 ] + in[ ( i ) * x_size + j + 2 ] + + in[ ( i + 1 ) * x_size + j - 2 ] + in[ ( i + 1 ) * x_size + j - 1 ] + in[ ( i + 1 ) * + x_size + j ] + in[ ( i + 1 ) * x_size + j + 1 ] + in[ ( i + 1 ) * x_size + j + 2 ] + + in[ ( i + 2 ) * x_size + j - 2 ] + in[ ( i + 2 ) * x_size + j - 1 ] + in[ ( i + 2 ) * + x_size + j ] + in[ ( i + 2 ) * x_size + j + 1 ] + in[ ( i + 2 ) * x_size + j + 2 ]; + + corner_list[ n ].I = x / 25; + /*corner_list[ n ].I=in[ i*x_size+j ];*/ + x = in[ ( i - 2 ) * x_size + j + 2 ] + in[ ( i - 1 ) * x_size + j + 2 ] + in[ ( i ) * + x_size + j + 2 ] + in[ ( i + 1 ) * x_size + j + 2 ] + in[ ( i + 2 ) * x_size + j + + 2 ] - + ( in[ ( i - 2 ) * x_size + j - 2 ] + in[ ( i - 1 ) * x_size + j - 2 ] + in[ ( i ) * + x_size + j - 2 ] + in[ ( i + 1 ) * x_size + j - 2 ] + in[ ( i + 2 ) * x_size + j - + 2 ] ); + x += x + in[ ( i - 2 ) * x_size + j + 1 ] + in[ ( i - 1 ) * x_size + j + 1 ] + + in[ ( i ) * x_size + j + 1 ] + in[ ( i + 1 ) * x_size + j + 1 ] + in[ ( i + 2 ) * + x_size + j + 1 ] - + ( in[ ( i - 2 ) * x_size + j - 1 ] + in[ ( i - 1 ) * x_size + j - 1 ] + in[ ( i ) * + x_size + j - 1 ] + in[ ( i + 1 ) * x_size + j - 1 ] + in[ ( i + 2 ) * x_size + j - + 1 ] ); + + y = in[ ( i + 2 ) * x_size + j - 2 ] + in[ ( i + 2 ) * x_size + j - 1 ] + in[ ( i + + 2 ) * x_size + j ] + in[ ( i + 2 ) * x_size + j + 1 ] + in[ ( i + 2 ) * x_size + j + + 2 ] - + ( in[ ( i - 2 ) * x_size + j - 2 ] + in[ ( i - 2 ) * x_size + j - 1 ] + in[ ( i - 2 ) + * x_size + j ] + in[ ( i - 2 ) * x_size + j + 1 ] + in[ ( i - 2 ) * x_size + j + + 2 ] ); + y += y + in[ ( i + 1 ) * x_size + j - 2 ] + in[ ( i + 1 ) * x_size + j - 1 ] + + in[ ( i + 1 ) * x_size + j ] + in[ ( i + 1 ) * x_size + j + 1 ] + in[ ( i + 1 ) * + x_size + j + 2 ] - + ( in[ ( i - 1 ) * x_size + j - 2 ] + in[ ( i - 1 ) * x_size + j - 1 ] + in[ ( i - 1 ) + * x_size + j ] + in[ ( i - 1 ) * x_size + j + 1 ] + in[ ( i - 1 ) * x_size + j + + 2 ] ); + corner_list[ n ].dx = x / 15; + corner_list[ n ].dy = y / 15; + n++; + if ( n == MAX_CORNERS ) { + /* "Too many corners." */ + } } - } } } } - corner_list[n].info=7; + corner_list[ n ].info = 7; } @@ -1880,66 +2382,67 @@ void susan_call_susan( struct wccFILE *inputFile, int mode ) CORNER_LIST corner_list; susan_get_image( inputFile, &in, &x_size, &y_size ); - - if (susan_dt<0) susan_three_by_three=1; - if ( (susan_principle_conf==1) && (mode==0) ) - mode=1; - switch (mode) { + if ( susan_dt < 0 ) susan_three_by_three = 1; + if ( ( susan_principle_conf == 1 ) && ( mode == 0 ) ) + mode = 1; + + switch ( mode ) { case 0: /* {{{ smoothing */ - susan_setup_brightness_lut(&bp,susan_bt,2); - susan_smoothing(susan_three_by_three,in,susan_dt,x_size,y_size,bp); - + susan_setup_brightness_lut( &bp, susan_bt, 2 ); + susan_smoothing( susan_three_by_three, in, susan_dt, x_size, y_size, bp ); + break; case 1: /* {{{ edges */ - r = (char *) susan_wccmalloc(x_size * y_size); - susan_setup_brightness_lut(&bp,susan_bt,6); + r = ( char * ) susan_wccmalloc( x_size * y_size ); + susan_setup_brightness_lut( &bp, susan_bt, 6 ); - if (susan_principle_conf) { - if (susan_three_by_three) - susan_principle_small(in,r,bp,susan_max_no_edges,x_size,y_size); + if ( susan_principle_conf ) { + if ( susan_three_by_three ) + susan_principle_small( in, r, bp, susan_max_no_edges, x_size, y_size ); else - susan_principle(in,r,bp,susan_max_no_edges,x_size,y_size); - susan_int_to_uchar(r,in,x_size*y_size); + susan_principle( in, r, bp, susan_max_no_edges, x_size, y_size ); + susan_int_to_uchar( r, in, x_size * y_size ); } else { - mid = (uchar *)susan_wccmalloc(x_size*y_size); - susan_wccmemset(mid,100,x_size * y_size); /* note not set to zero */ + mid = ( uchar * )susan_wccmalloc( x_size * y_size ); + susan_wccmemset( mid, 100, x_size * y_size ); /* note not set to zero */ - if (susan_three_by_three) - susan_edges_small(in,r,mid,bp,susan_max_no_edges,x_size,y_size); + if ( susan_three_by_three ) + susan_edges_small( in, r, mid, bp, susan_max_no_edges, x_size, y_size ); else - susan_edges(in,r,mid,bp,susan_max_no_edges,x_size,y_size); - if(susan_thin_post_proc) - susan_thin(r,mid,x_size,y_size); - susan_edge_draw(in,mid,x_size,y_size,susan_drawing_mode); + susan_edges( in, r, mid, bp, susan_max_no_edges, x_size, y_size ); + if ( susan_thin_post_proc ) + susan_thin( r, mid, x_size, y_size ); + susan_edge_draw( in, mid, x_size, y_size, susan_drawing_mode ); } break; case 2: /* {{{ corners */ - r = (char *) susan_wccmalloc(x_size * y_size); - susan_setup_brightness_lut(&bp,susan_bt,6); + r = ( char * ) susan_wccmalloc( x_size * y_size ); + susan_setup_brightness_lut( &bp, susan_bt, 6 ); - if (susan_principle_conf) { - susan_principle(in,r,bp,susan_max_no_corners,x_size,y_size); - susan_int_to_uchar(r,in,x_size*y_size); + if ( susan_principle_conf ) { + susan_principle( in, r, bp, susan_max_no_corners, x_size, y_size ); + susan_int_to_uchar( r, in, x_size * y_size ); } else { - if(susan_susan_quick) - susan_corners_quick(in,r,bp,susan_max_no_corners,corner_list,x_size,y_size); + if ( susan_susan_quick ) + susan_corners_quick( in, r, bp, susan_max_no_corners, corner_list, x_size, + y_size ); else - susan_corners(in,r,bp,susan_max_no_corners,corner_list,x_size,y_size); - susan_corner_draw(in,corner_list,x_size,susan_drawing_mode); + susan_corners( in, r, bp, susan_max_no_corners, corner_list, x_size, y_size ); + susan_corner_draw( in, corner_list, x_size, susan_drawing_mode ); } break; } - susan_put_image(x_size,y_size); + susan_put_image( x_size, y_size ); } void susan_init( void ) @@ -1976,14 +2479,14 @@ void susan_init( void ) // principle=1; /* Output initial enhancement image only; corners or edges mode (default is edges mode) */ // thin_post_proc=0; /* No post-processing on the binary edge map (runs much faster); edges mode */ - // drawing_mode=1; /* Mark corners/edges with single black points instead of black with white border; corners or edges mode */ - // three_by_three=1; /* Use flat 3x3 mask, edges or smoothing mode */ - // susan_quick=1; /* Use faster (and usually stabler) corner mode; edge-like corner suppression not carried out; corners mode */ - // dt=10.0; /* Distance threshold, smoothing mode, (default=4) */ + // drawing_mode=1; /* Mark corners/edges with single black points instead of black with white border; corners or edges mode */ + // three_by_three=1; /* Use flat 3x3 mask, edges or smoothing mode */ + // susan_quick=1; /* Use faster (and usually stabler) corner mode; edge-like corner suppression not carried out; corners mode */ + // dt=10.0; /* Distance threshold, smoothing mode, (default=4) */ // bt=50; /* Brightness threshold, all modes, (default=20) */ } -void susan_main( void ) +void _Pragma( "entrypoint" ) susan_main( void ) { susan_call_susan( &susan_file, 0 ); susan_wccfreeall(); diff --git a/bench/sequential/susan/wccfile.c b/bench/sequential/susan/wccfile.c old mode 100644 new mode 100755 index 094969dc77c6df948e9edf8b9dae3d093be87dfa..41429a73b0fc83b3b86cefc0a3a340515d94c2b9 --- a/bench/sequential/susan/wccfile.c +++ b/bench/sequential/susan/wccfile.c @@ -1,79 +1,79 @@ #include "wccfile.h" #define EOF -1 -size_t susan_wccfread(void* ptr, size_t size, size_t count, struct wccFILE* stream) +size_t susan_wccfread( void *ptr, size_t size, size_t count, + struct wccFILE *stream ) { - if ( susan_wccfeof( stream ) ) { + if ( susan_wccfeof( stream ) ) return EOF; - } - + unsigned i = stream->cur_pos, i2 = 0; size_t number_of_chars_to_read = stream->size - stream->cur_pos >= size * count ? size * count : stream->size - stream->cur_pos; _Pragma( "loopbound min 7220 max 7220" ) - while (i < stream->cur_pos + number_of_chars_to_read) { - ((unsigned char*)ptr)[i2++] = stream->data[i++]; - } + while ( i < stream->cur_pos + number_of_chars_to_read ) + ( ( unsigned char * )ptr )[ i2++ ] = stream->data[ i++ ]; stream->cur_pos += number_of_chars_to_read; return number_of_chars_to_read; } -int susan_wccfgetc(struct wccFILE *stream) +int susan_wccfgetc( struct wccFILE *stream ) { - if ( susan_wccfeof( stream ) ) { + if ( susan_wccfeof( stream ) ) return EOF; - } else { - return stream->data[stream->cur_pos++]; - } + + else + return stream->data[ stream->cur_pos++ ]; } -char *susan_wccfgets(char *str, int num, struct wccFILE *stream ) +char *susan_wccfgets( char *str, int num, struct wccFILE *stream ) { - if ( !stream || susan_wccfeof( stream ) || !str || num <= 0 ) { + if ( !stream || susan_wccfeof( stream ) || !str || num <= 0 ) return 0; - } - + int pos = 0; - _Pragma( "loopbound min 58 max 58" ) + _Pragma( "loopbound min 57 max 57" ) while ( pos < num - 1 && !susan_wccfeof( stream ) ) { - str[pos] = stream->data[stream->cur_pos]; - if ( str[pos] == '\n' ) { + str[ pos ] = stream->data[ stream->cur_pos ]; + if ( str[ pos ] == '\n' ) break; - } - + stream->cur_pos++; pos++; } - str[pos++] = '\0'; - + str[ pos++ ] = '\0'; + return str; } -int susan_wccfseek(struct wccFILE* stream, long int offset, enum _Origin_ origin) +int susan_wccfseek( struct wccFILE *stream, long int offset, + enum _Origin_ origin ) { - if (origin == WCCSEEK_SET) { + if ( origin == WCCSEEK_SET ) { stream->cur_pos = offset; return 0; - } else if (origin == WCCSEEK_CUR) { - stream->cur_pos += offset; - return 0; - } else if (origin == WCCSEEK_END) { - stream->cur_pos = stream->size + offset; - return 0; - } + } else + if ( origin == WCCSEEK_CUR ) { + stream->cur_pos += offset; + return 0; + } else + if ( origin == WCCSEEK_END ) { + stream->cur_pos = stream->size + offset; + return 0; + } return -1; } -int susan_wccfgetpos(struct wccFILE* stream, unsigned* position) +int susan_wccfgetpos( struct wccFILE *stream, unsigned *position ) { *position = stream->cur_pos; return 0; } -int susan_wccfeof(struct wccFILE* stream) +int susan_wccfeof( struct wccFILE *stream ) { return stream->cur_pos == stream->size ? 1 : 0; } diff --git a/bench/sequential/susan/wccfile.h b/bench/sequential/susan/wccfile.h old mode 100644 new mode 100755 index a1888d95dd30a10c731fbab6274ede12e6cf7de3..6fc2f04c10e40a6ff8d60afb1cb81d7c8cde0fc4 --- a/bench/sequential/susan/wccfile.h +++ b/bench/sequential/susan/wccfile.h @@ -8,17 +8,19 @@ typedef unsigned int size_t; #define EOF -1 struct wccFILE { - char* data; - size_t size; - unsigned cur_pos; + char *data; + size_t size; + unsigned cur_pos; }; -size_t susan_wccfread (void* ptr, size_t size, size_t count, struct wccFILE* stream); -int susan_wccfseek (struct wccFILE* stream, long int offset, Origin origin); -int susan_wccfgetpos (struct wccFILE* stream, unsigned* position); -int susan_wccfeof (struct wccFILE* stream); -int susan_wccfgetc (struct wccFILE *stream); -char *susan_wccfgets (char *str, int num, struct wccFILE *stream ); +size_t susan_wccfread ( void *ptr, size_t size, size_t count, + struct wccFILE *stream ); +int susan_wccfseek ( struct wccFILE *stream, long int offset, + Origin origin ); +int susan_wccfgetpos ( struct wccFILE *stream, unsigned *position ); +int susan_wccfeof ( struct wccFILE *stream ); +int susan_wccfgetc ( struct wccFILE *stream ); +char *susan_wccfgets ( char *str, int num, struct wccFILE *stream ); #endif diff --git a/bench/sequential/susan/wcclibm.c b/bench/sequential/susan/wcclibm.c old mode 100644 new mode 100755 index bca8907df0ce6e1ca7a87fdab3babb2b4f550475..ba07d396fb2fd858349f683bd5bb099492ea5348 --- a/bench/sequential/susan/wcclibm.c +++ b/bench/sequential/susan/wcclibm.c @@ -4,50 +4,51 @@ /* e_rem_pio2f.c -- float version of e_rem_pio2.c - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ + Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. +*/ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ #if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: e_rem_pio2f.c,v 1.5 1995/05/10 20:46:03 jtc Exp $"; +static char rcsid[ ] = + "$NetBSD: e_rem_pio2f.c,v 1.5 1995/05/10 20:46:03 jtc Exp $"; #endif /* __ieee754_rem_pio2f(x,y) - * - * return the remainder of x rem pi/2 in y[0]+y[1] - * use __kernel_rem_pio2f() - */ + + return the remainder of x rem pi/2 in y[ 0 ]+y[ 1 ] + use __kernel_rem_pio2f() +*/ /* This array is like the one in e_rem_pio2.c, but the numbers are single precision and the last 8 bits are forced to 0. */ -static const int32_t susan_npio2_hw[] = { -0x3fc90f00, 0x40490f00, 0x4096cb00, 0x40c90f00, 0x40fb5300, 0x4116cb00, -0x412fed00, 0x41490f00, 0x41623100, 0x417b5300, 0x418a3a00, 0x4196cb00, -0x41a35c00, 0x41afed00, 0x41bc7e00, 0x41c90f00, 0x41d5a000, 0x41e23100, -0x41eec200, 0x41fb5300, 0x4203f200, 0x420a3a00, 0x42108300, 0x4216cb00, -0x421d1400, 0x42235c00, 0x4229a500, 0x422fed00, 0x42363600, 0x423c7e00, -0x4242c700, 0x42490f00 +static const int32_t susan_npio2_hw[ ] = { + 0x3fc90f00, 0x40490f00, 0x4096cb00, 0x40c90f00, 0x40fb5300, 0x4116cb00, + 0x412fed00, 0x41490f00, 0x41623100, 0x417b5300, 0x418a3a00, 0x4196cb00, + 0x41a35c00, 0x41afed00, 0x41bc7e00, 0x41c90f00, 0x41d5a000, 0x41e23100, + 0x41eec200, 0x41fb5300, 0x4203f200, 0x420a3a00, 0x42108300, 0x4216cb00, + 0x421d1400, 0x42235c00, 0x4229a500, 0x422fed00, 0x42363600, 0x423c7e00, + 0x4242c700, 0x42490f00 }; /* - * invpio2: 24 bits of 2/pi - * pio2_1: first 17 bit of pi/2 - * pio2_1t: pi/2 - pio2_1 - * pio2_2: second 17 bit of pi/2 - * pio2_2t: pi/2 - (pio2_1+pio2_2) - * pio2_3: third 17 bit of pi/2 - * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3) - */ + invpio2: 24 bits of 2/pi + pio2_1: first 17 bit of pi/2 + pio2_1t: pi/2 - pio2_1 + pio2_2: second 17 bit of pi/2 + pio2_2t: pi/2 - (pio2_1+pio2_2) + pio2_3: third 17 bit of pi/2 + pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3) +*/ static const float /* zero = 0.0000000000e+00f, /\* 0x00000000 *\/ */ @@ -61,107 +62,115 @@ susan_pio2_2t = 6.0770999344e-11f, /* 0x2e85a308 */ susan_pio2_3 = 6.0770943833e-11f, /* 0x2e85a300 */ susan_pio2_3t = 6.1232342629e-17f; /* 0x248d3132 */ -int32_t susan___ieee754_rem_pio2f(float x, float *y) +int32_t susan___ieee754_rem_pio2f( float x, float *y ) { - float z,w,t,r,fn; - int32_t i,j,n,ix,hx; - - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; - if(ix<=0x3f490fd8) /* |x| ~<= pi/4 , no need for reduction */ - {y[0] = x; y[1] = 0; return 0;} - if(ix<0x4016cbe4) { /* |x| < 3pi/4, special case with n=+-1 */ - if(hx>0) { - z = x - susan_pio2_1; - if((ix&0xfffffff0)!=0x3fc90fd0) { /* 24+24 bit pi OK */ - y[0] = z - susan_pio2_1t; - y[1] = (z-y[0])-susan_pio2_1t; - } else { /* near pi/2, use 24+24+24 bit pi */ - z -= susan_pio2_2; - y[0] = z - susan_pio2_2t; - y[1] = (z-y[0])-susan_pio2_2t; - } - return 1; - } else { /* negative x */ - z = x + susan_pio2_1; - if((ix&0xfffffff0)!=0x3fc90fd0) { /* 24+24 bit pi OK */ - y[0] = z + susan_pio2_1t; - y[1] = (z-y[0])+susan_pio2_1t; - } else { /* near pi/2, use 24+24+24 bit pi */ - z += susan_pio2_2; - y[0] = z + susan_pio2_2t; - y[1] = (z-y[0])+susan_pio2_2t; - } - return -1; - } - } - if(ix<=0x43490f80) { /* |x| ~<= 2^7*(pi/2), medium size */ - t = fabsf(x); - n = (int32_t) (t*susan_invpio2+susan_half); - fn = (float)n; - r = t-fn*susan_pio2_1; - w = fn*susan_pio2_1t; /* 1st round good to 40 bit */ - if(n<32&&(int32_t)(ix&0xffffff00)!=susan_npio2_hw[n-1]) { - y[0] = r-w; /* quick check no cancellation */ - } else { - u_int32_t high; - j = ix>>23; - y[0] = r-w; - GET_FLOAT_WORD(high,y[0]); - i = j-((high>>23)&0xff); - if(i>8) { /* 2nd iteration needed, good to 57 */ - t = r; - w = fn*susan_pio2_2; - r = t-w; - w = fn*susan_pio2_2t-((t-r)-w); - y[0] = r-w; - GET_FLOAT_WORD(high,y[0]); - i = j-((high>>23)&0xff); - if(i>25) { /* 3rd iteration need, 74 bits acc */ - t = r; /* will cover all possible cases */ - w = fn*susan_pio2_3; - r = t-w; - w = fn*susan_pio2_3t-((t-r)-w); - y[0] = r-w; - } - } - } - y[1] = (r-y[0])-w; - if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;} - else return n; - } - /* - * all other (large) arguments - */ - if(ix>=0x7f800000) { /* x is inf or NaN */ - y[0]=y[1]=x-x; return 0; - } - - y[0]=y[1]=x-x; return 0; /* dummy initialisation */ - return 0; /* doesn't happen for our input */ + float z, w, t, r, fn; + int32_t i, j, n, ix, hx; + + GET_FLOAT_WORD( hx, x ); + ix = hx & 0x7fffffff; + if ( ix <= 0x3f490fd8 ) { /* |x| ~<= pi/4 , no need for reduction */ + y[ 0 ] = x; + y[ 1 ] = 0; + return 0; + } + if ( ix < 0x4016cbe4 ) { /* |x| < 3pi/4, special case with n=+-1 */ + if ( hx > 0 ) { + z = x - susan_pio2_1; + if ( ( ix & 0xfffffff0 ) != 0x3fc90fd0 ) { /* 24+24 bit pi OK */ + y[ 0 ] = z - susan_pio2_1t; + y[ 1 ] = ( z - y[ 0 ] ) - susan_pio2_1t; + } else { /* near pi/2, use 24+24+24 bit pi */ + z -= susan_pio2_2; + y[ 0 ] = z - susan_pio2_2t; + y[ 1 ] = ( z - y[ 0 ] ) - susan_pio2_2t; + } + return 1; + } else { /* negative x */ + z = x + susan_pio2_1; + if ( ( ix & 0xfffffff0 ) != 0x3fc90fd0 ) { /* 24+24 bit pi OK */ + y[ 0 ] = z + susan_pio2_1t; + y[ 1 ] = ( z - y[ 0 ] ) + susan_pio2_1t; + } else { /* near pi/2, use 24+24+24 bit pi */ + z += susan_pio2_2; + y[ 0 ] = z + susan_pio2_2t; + y[ 1 ] = ( z - y[ 0 ] ) + susan_pio2_2t; + } + return -1; + } + } + if ( ix <= 0x43490f80 ) { /* |x| ~<= 2^7*(pi/2), medium size */ + t = fabsf( x ); + n = ( int32_t ) ( t * susan_invpio2 + susan_half ); + fn = ( float )n; + r = t - fn * susan_pio2_1; + w = fn * susan_pio2_1t; /* 1st round good to 40 bit */ + if ( n < 32 && ( int32_t )( ix & 0xffffff00 ) != susan_npio2_hw[ n - 1 ] ) { + y[ 0 ] = r - w; /* quick check no cancellation */ + } else { + u_int32_t high; + j = ix >> 23; + y[ 0 ] = r - w; + GET_FLOAT_WORD( high, y[ 0 ] ); + i = j - ( ( high >> 23 ) & 0xff ); + if ( i > 8 ) { /* 2nd iteration needed, good to 57 */ + t = r; + w = fn * susan_pio2_2; + r = t - w; + w = fn * susan_pio2_2t - ( ( t - r ) - w ); + y[ 0 ] = r - w; + GET_FLOAT_WORD( high, y[ 0 ] ); + i = j - ( ( high >> 23 ) & 0xff ); + if ( i > 25 ) { /* 3rd iteration need, 74 bits acc */ + t = r; /* will cover all possible cases */ + w = fn * susan_pio2_3; + r = t - w; + w = fn * susan_pio2_3t - ( ( t - r ) - w ); + y[ 0 ] = r - w; + } + } + } + y[ 1 ] = ( r - y[ 0 ] ) - w; + if ( hx < 0 ) { + y[ 0 ] = -y[ 0 ]; + y[ 1 ] = -y[ 1 ]; + return -n; + } else return n; + } + /* + all other (large) arguments + */ + if ( ix >= 0x7f800000 ) { /* x is inf or NaN */ + y[ 0 ] = y[ 1 ] = x - x; + return 0; + } + + y[ 0 ] = y[ 1 ] = x - x; + return 0; /* dummy initialisation */ + return 0; /* doesn't happen for our input */ } /* k_cosf.c -- float version of k_cos.c - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ + Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. +*/ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ #if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: k_cosf.c,v 1.4 1995/05/10 20:46:23 jtc Exp $"; +static char rcsid[ ] = "$NetBSD: k_cosf.c,v 1.4 1995/05/10 20:46:23 jtc Exp $"; #endif -static const float +static const float /* one = 1.0000000000e+00, /\* 0x3f800000 *\/ */ susan_C1 = 4.1666667908e-02f, /* 0x3d2aaaab */ susan_C2 = -1.3888889225e-03f, /* 0xbab60b61 */ @@ -170,52 +179,54 @@ susan_C4 = -2.7557314297e-07f, /* 0xb493f27c */ susan_C5 = 2.0875723372e-09f, /* 0x310f74f6 */ susan_C6 = -1.1359647598e-11f; /* 0xad47d74e */ -float susan___kernel_cosf(float x, float y) +float susan___kernel_cosf( float x, float y ) { - float a,hz,z,r,qx; - int32_t ix; - GET_FLOAT_WORD(ix,x); - ix &= 0x7fffffff; /* ix = |x|'s high word*/ - if(ix<0x32000000) { /* if x < 2**27 */ - if(((int)x)==0) return susan_one; /* generate inexact */ - } - z = x*x; - r = z*(susan_C1+z*(susan_C2+z*(susan_C3+z*(susan_C4+z*(susan_C5+z*susan_C6))))); - if(ix < 0x3e99999a) /* if |x| < 0.3 */ - return susan_one - ((float)0.5f*z - (z*r - x*y)); - else { - if(ix > 0x3f480000) { /* x > 0.78125 */ - qx = (float)0.28125f; - } else { - SET_FLOAT_WORD(qx,ix-0x01000000); /* x/4 */ - } - hz = (float)0.5f*z-qx; - a = susan_one-qx; - return a - (hz - (z*r-x*y)); - } + float a, hz, z, r, qx; + int32_t ix; + GET_FLOAT_WORD( ix, x ); + ix &= 0x7fffffff; /* ix = |x|'s high word*/ + if ( ix < 0x32000000 ) { /* if x < 2**27 */ + if ( ( ( int )x ) == 0 ) return susan_one; /* generate inexact */ + } + z = x * x; + r = z * ( susan_C1 + z * ( susan_C2 + z * ( susan_C3 + z * ( susan_C4 + z * + ( susan_C5 + z * susan_C6 ) ) ) ) ); + if ( ix < 0x3e99999a ) /* if |x| < 0.3 */ + return susan_one - ( ( float )0.5f * z - ( z * r - x * y ) ); + else { + if ( ix > 0x3f480000 ) /* x > 0.78125 */ + qx = ( float )0.28125f; + + else { + SET_FLOAT_WORD( qx, ix - 0x01000000 ); /* x/4 */ + } + hz = ( float )0.5f * z - qx; + a = susan_one - qx; + return a - ( hz - ( z * r - x * y ) ); + } } /* k_sinf.c -- float version of k_sin.c - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ + Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. +*/ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ #if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: k_sinf.c,v 1.4 1995/05/10 20:46:33 jtc Exp $"; +static char rcsid[ ] = "$NetBSD: k_sinf.c,v 1.4 1995/05/10 20:46:33 jtc Exp $"; #endif -static const float +static const float /* half = 5.0000000000e-01f,/\* 0x3f000000 *\/ */ susan_S1 = -1.6666667163e-01f, /* 0xbe2aaaab */ susan_S2 = 8.3333337680e-03f, /* 0x3c088889 */ @@ -224,221 +235,239 @@ susan_S4 = 2.7557314297e-06f, /* 0x3638ef1b */ susan_S5 = -2.5050759689e-08f, /* 0xb2d72f34 */ susan_S6 = 1.5896910177e-10f; /* 0x2f2ec9d3 */ -float susan___kernel_sinf(float x, float y, int iy) +float susan___kernel_sinf( float x, float y, int iy ) { - float z,r,v; - int32_t ix; - GET_FLOAT_WORD(ix,x); - ix &= 0x7fffffff; /* high word of x */ - if(ix<0x32000000) /* |x| < 2**-27 */ - {if((int)x==0) return x;} /* generate inexact */ - z = x*x; - v = z*x; - r = susan_S2+z*(susan_S3+z*(susan_S4+z*(susan_S5+z*susan_S6))); - if(iy==0) return x+v*(susan_S1+z*r); - else return x-((z*(susan_half*y-v*r)-y)-v*susan_S1); + float z, r, v; + int32_t ix; + GET_FLOAT_WORD( ix, x ); + ix &= 0x7fffffff; /* high word of x */ + if ( ix < 0x32000000 ) { /* |x| < 2**-27 */ + if ( ( int )x == 0 ) return x; /* generate inexact */ + } + z = x * x; + v = z * x; + r = susan_S2 + z * ( susan_S3 + z * ( susan_S4 + z * ( susan_S5 + z * + susan_S6 ) ) ); + if ( iy == 0 ) return x + v * ( susan_S1 + z * r ); + else return x - ( ( z * ( susan_half * y - v * r ) - y ) - v * susan_S1 ); } /* s_atanf.c -- float version of s_atan.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ + Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. +*/ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ #if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_atanf.c,v 1.4 1995/05/10 20:46:47 jtc Exp $"; +static char rcsid[ ] = "$NetBSD: s_atanf.c,v 1.4 1995/05/10 20:46:47 jtc Exp $"; #endif -static const float susan_atanhi[] = { +static const float susan_atanhi[ ] = { 4.6364760399e-01f, /* atan(0.5)hi 0x3eed6338 */ 7.8539812565e-01f, /* atan(1.0)hi 0x3f490fda */ 9.8279368877e-01f, /* atan(1.5)hi 0x3f7b985e */ 1.5707962513e+00f, /* atan(inf)hi 0x3fc90fda */ }; -static const float susan_atanlo[] = { +static const float susan_atanlo[ ] = { 5.0121582440e-09f, /* atan(0.5)lo 0x31ac3769 */ 3.7748947079e-08f, /* atan(1.0)lo 0x33222168 */ 3.4473217170e-08f, /* atan(1.5)lo 0x33140fb4 */ 7.5497894159e-08f, /* atan(inf)lo 0x33a22168 */ }; -static const float susan_aT[] = { +static const float susan_aT[ ] = { 3.3333334327e-01f, /* 0x3eaaaaaa */ - -2.0000000298e-01f, /* 0xbe4ccccd */ + -2.0000000298e-01f, /* 0xbe4ccccd */ 1.4285714924e-01f, /* 0x3e124925 */ - -1.1111110449e-01f, /* 0xbde38e38 */ + -1.1111110449e-01f, /* 0xbde38e38 */ 9.0908870101e-02f, /* 0x3dba2e6e */ - -7.6918758452e-02f, /* 0xbd9d8795 */ + -7.6918758452e-02f, /* 0xbd9d8795 */ 6.6610731184e-02f, /* 0x3d886b35 */ - -5.8335702866e-02f, /* 0xbd6ef16b */ + -5.8335702866e-02f, /* 0xbd6ef16b */ 4.9768779427e-02f, /* 0x3d4bda59 */ - -3.6531571299e-02f, /* 0xbd15a221 */ + -3.6531571299e-02f, /* 0xbd15a221 */ 1.6285819933e-02f, /* 0x3c8569d7 */ }; -float susan___atanf(float x) +float susan___atanf( float x ) { - float w,s1,s2,z; - int32_t ix,hx,id; - - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; - if(ix>=0x50800000) { /* if |x| >= 2^34 */ - if(ix>0x7f800000) - return x+x; /* NaN */ - if(hx>0) return susan_atanhi[3]+susan_atanlo[3]; - else return -susan_atanhi[3]-susan_atanlo[3]; - } if (ix < 0x3ee00000) { /* |x| < 0.4375 */ - if (ix < 0x31000000) { /* |x| < 2^-29 */ - if(susan_huge+x>susan_one) return x; /* raise inexact */ - } - id = -1; - } else { - x = fabsf(x); - if (ix < 0x3f980000) { /* |x| < 1.1875 */ - if (ix < 0x3f300000) { /* 7/16 <=|x|<11/16 */ - id = 0; x = ((float)2.0f*x-susan_one)/((float)2.0f+x); - } else { /* 11/16<=|x|< 19/16 */ - id = 1; x = (x-susan_one)/(x+susan_one); - } - } else { - if (ix < 0x401c0000) { /* |x| < 2.4375 */ - id = 2; x = (x-(float)1.5f)/(susan_one+(float)1.5f*x); - } else { /* 2.4375 <= |x| < 2^66 */ - id = 3; x = -(float)1.0f/x; - } - }} - /* end of argument reduction */ - z = x*x; - w = z*z; - /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */ - s1 = z*(susan_aT[0]+w*(susan_aT[2]+w*(susan_aT[4]+w*(susan_aT[6]+w*(susan_aT[8]+w*susan_aT[10]))))); - s2 = w*(susan_aT[1]+w*(susan_aT[3]+w*(susan_aT[5]+w*(susan_aT[7]+w*susan_aT[9])))); - if (id<0) return x - x*(s1+s2); - else { - z = susan_atanhi[id] - ((x*(s1+s2) - susan_atanlo[id]) - x); - return (hx<0)? -z:z; - } + float w, s1, s2, z; + int32_t ix, hx, id; + + GET_FLOAT_WORD( hx, x ); + ix = hx & 0x7fffffff; + if ( ix >= 0x50800000 ) { /* if |x| >= 2^34 */ + if ( ix > 0x7f800000 ) + return x + x; /* NaN */ + if ( hx > 0 ) return susan_atanhi[ 3 ] + susan_atanlo[ 3 ]; + else return -susan_atanhi[ 3 ] - susan_atanlo[ 3 ]; + } + if ( ix < 0x3ee00000 ) { /* |x| < 0.4375 */ + if ( ix < 0x31000000 ) { /* |x| < 2^-29 */ + if ( susan_huge + x > susan_one ) return x; /* raise inexact */ + } + id = -1; + } else { + x = fabsf( x ); + if ( ix < 0x3f980000 ) { /* |x| < 1.1875 */ + if ( ix < 0x3f300000 ) { /* 7/16 <=|x|<11/16 */ + id = 0; + x = ( ( float )2.0f * x - susan_one ) / ( ( float )2.0f + x ); + } else { /* 11/16<=|x|< 19/16 */ + id = 1; + x = ( x - susan_one ) / ( x + susan_one ); + } + } else { + if ( ix < 0x401c0000 ) { /* |x| < 2.4375 */ + id = 2; + x = ( x - ( float )1.5f ) / ( susan_one + ( float )1.5f * x ); + } else { /* 2.4375 <= |x| < 2^66 */ + id = 3; + x = -( float )1.0f / x; + } + } + } + /* end of argument reduction */ + z = x * x; + w = z * z; + /* break sum from i=0 to 10 aT[ i ]z**(i+1) into odd and even poly */ + s1 = z * ( susan_aT[ 0 ] + w * ( susan_aT[ 2 ] + w * ( susan_aT[ 4 ] + w * + ( susan_aT[ 6 ] + w * ( susan_aT[ 8 ] + w * susan_aT[ 10 ] ) ) ) ) ); + s2 = w * ( susan_aT[ 1 ] + w * ( susan_aT[ 3 ] + w * ( susan_aT[ 5 ] + w * + ( susan_aT[ 7 ] + w * susan_aT[ 9 ] ) ) ) ); + if ( id < 0 ) return x - x * ( s1 + s2 ); + else { + z = susan_atanhi[ id ] - ( ( x * ( s1 + s2 ) - susan_atanlo[ id ] ) - x ); + return ( hx < 0 ) ? -z : z; + } } /* s_cosf.c -- float version of s_cos.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ + Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. +*/ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -float susan___cosf(float x) + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ + +float susan___cosf( float x ) { - float y[2],z=0.0f; - int32_t n,ix; + float y[ 2 ], z = 0.0f; + int32_t n, ix; - GET_FLOAT_WORD(ix,x); + GET_FLOAT_WORD( ix, x ); - /* |x| ~< pi/4 */ - ix &= 0x7fffffff; - if(ix <= 0x3f490fd8) return susan___kernel_cosf(x,z); + /* |x| ~< pi/4 */ + ix &= 0x7fffffff; + if ( ix <= 0x3f490fd8 ) return susan___kernel_cosf( x, z ); - /* cos(Inf or NaN) is NaN */ - else if (ix>=0x7f800000) return x-x; + /* cos(Inf or NaN) is NaN */ + else + if ( ix >= 0x7f800000 ) return x - x; /* argument reduction needed */ - else { - n = susan___ieee754_rem_pio2f(x,y); - switch(n&3) { - case 0: return susan___kernel_cosf(y[0],y[1]); - case 1: return -susan___kernel_sinf(y[0],y[1],1); - case 2: return -susan___kernel_cosf(y[0],y[1]); - default: - return susan___kernel_sinf(y[0],y[1],1); - } - } + else { + n = susan___ieee754_rem_pio2f( x, y ); + switch ( n & 3 ) { + case 0: + return susan___kernel_cosf( y[ 0 ], y[ 1 ] ); + case 1: + return -susan___kernel_sinf( y[ 0 ], y[ 1 ], 1 ); + case 2: + return -susan___kernel_cosf( y[ 0 ], y[ 1 ] ); + default: + return susan___kernel_sinf( y[ 0 ], y[ 1 ], 1 ); + } + } } /* s_sinf.c -- float version of s_sin.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ + Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. +*/ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -float susan___sinf(float x) + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ + +float susan___sinf( float x ) { - float y[2],z=0.0; - int32_t n, ix; + float y[ 2 ], z = 0.0; + int32_t n, ix; - GET_FLOAT_WORD(ix,x); + GET_FLOAT_WORD( ix, x ); - /* |x| ~< pi/4 */ - ix &= 0x7fffffff; - if(ix <= 0x3f490fd8) return susan___kernel_sinf(x,z,0); + /* |x| ~< pi/4 */ + ix &= 0x7fffffff; + if ( ix <= 0x3f490fd8 ) return susan___kernel_sinf( x, z, 0 ); - /* sin(Inf or NaN) is NaN */ - else if (ix>=0x7f800000) return x-x; + /* sin(Inf or NaN) is NaN */ + else + if ( ix >= 0x7f800000 ) return x - x; /* argument reduction needed */ - else { - n = susan___ieee754_rem_pio2f(x,y); - switch(n&3) { - case 0: return susan___kernel_sinf(y[0],y[1],1); - case 1: return susan___kernel_cosf(y[0],y[1]); - case 2: return -susan___kernel_sinf(y[0],y[1],1); - default: - return -susan___kernel_cosf(y[0],y[1]); - } - } + else { + n = susan___ieee754_rem_pio2f( x, y ); + switch ( n & 3 ) { + case 0: + return susan___kernel_sinf( y[ 0 ], y[ 1 ], 1 ); + case 1: + return susan___kernel_cosf( y[ 0 ], y[ 1 ] ); + case 2: + return -susan___kernel_sinf( y[ 0 ], y[ 1 ], 1 ); + default: + return -susan___kernel_cosf( y[ 0 ], y[ 1 ] ); + } + } } /* s_fabsf.c -- float version of s_fabs.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ + Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. +*/ /* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ + ==================================================== + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + ==================================================== +*/ /* - * fabsf(x) returns the absolute value of x. - */ + fabsf(x) returns the absolute value of x. +*/ -float susan___fabsf(float x) +float susan___fabsf( float x ) { - u_int32_t ix; - GET_FLOAT_WORD(ix,x); - SET_FLOAT_WORD(x,ix&0x7fffffff); - return x; + u_int32_t ix; + GET_FLOAT_WORD( ix, x ); + SET_FLOAT_WORD( x, ix & 0x7fffffff ); + return x; } diff --git a/bench/sequential/susan/wcclibm.h b/bench/sequential/susan/wcclibm.h old mode 100644 new mode 100755 index bcf4c654377bfc98112ea8f979df4b26e5ba0c59..08dd34e9995f78dac3e38b3b7efa1e825b44acaa --- a/bench/sequential/susan/wcclibm.h +++ b/bench/sequential/susan/wcclibm.h @@ -8,11 +8,11 @@ // Often used variables/consts #ifdef __STDC__ -static const float +static const float #else -static float +static float #endif -susan_one = 1.0f, +susan_one = 1.0f, susan_half = 5.0000000000e-01f, /* 0x3f000000 */ susan_zero = 0.0f, susan_huge = 1.0e30, @@ -32,22 +32,23 @@ susan_twon8 = 3.9062500000e-03f; /* 0x3b800000 */ #define log susan___ieee754_logf #define sin susan___sinf -float susan___atanf(float x); -float susan___copysignf(float x, float y); -float susan___cosf(float x); -float susan___fabsf(float x); -float susan___floorf(float x); -float susan___ieee754_acosf(float x); -float susan___ieee754_powf(float x, float y); -int32_t susan___ieee754_rem_pio2f(float x, float *y); -float susan___ieee754_sqrtf(float x); -int susan___isinff (float x); -float susan___kernel_cosf(float x, float y); -float susan___kernel_sinf(float x, float y, int iy); -int susan___kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32_t *ipio2); -float susan___scalbnf (float x, int n); -float susan___ieee754_logf(float x); -float susan___ieee754_log10f(float x); -float susan___sinf(float x); +float susan___atanf( float x ); +float susan___copysignf( float x, float y ); +float susan___cosf( float x ); +float susan___fabsf( float x ); +float susan___floorf( float x ); +float susan___ieee754_acosf( float x ); +float susan___ieee754_powf( float x, float y ); +int32_t susan___ieee754_rem_pio2f( float x, float *y ); +float susan___ieee754_sqrtf( float x ); +int susan___isinff ( float x ); +float susan___kernel_cosf( float x, float y ); +float susan___kernel_sinf( float x, float y, int iy ); +int susan___kernel_rem_pio2f( float *x, float *y, int e0, int nx, int prec, + const int32_t *ipio2 ); +float susan___scalbnf ( float x, int n ); +float susan___ieee754_logf( float x ); +float susan___ieee754_log10f( float x ); +float susan___sinf( float x ); #endif // _WCCLIBM diff --git a/bench/sequential/susan/wccmalloc.c b/bench/sequential/susan/wccmalloc.c old mode 100644 new mode 100755 index edf01cc47c9183b65d60d24decdb24867c6c12f9..7b1839f216c4d930faa8c78ba5907492b265b0f4 --- a/bench/sequential/susan/wccmalloc.c +++ b/bench/sequential/susan/wccmalloc.c @@ -3,36 +3,36 @@ // This must be redefined for each new benchmark #define HEAP_SIZE 30000 -char susan_simulated_heap[HEAP_SIZE]; +char susan_simulated_heap[ HEAP_SIZE ]; unsigned int susan_freeHeapPos; -void* susan_wccmalloc( unsigned int numberOfBytes ) +void *susan_wccmalloc( unsigned int numberOfBytes ) { // Get a 4-byte adress for alignment purposes - unsigned int offset = ( (unsigned long)susan_simulated_heap + susan_freeHeapPos ) % 4; - if ( offset ) { + unsigned int offset = ( ( unsigned long )susan_simulated_heap + + susan_freeHeapPos ) % 4; + if ( offset ) susan_freeHeapPos += 4 - offset; - } - void* currentPos = (void*)&susan_simulated_heap[susan_freeHeapPos]; + void *currentPos = ( void * )&susan_simulated_heap[ susan_freeHeapPos ]; susan_freeHeapPos += numberOfBytes; return currentPos; } -void susan_wccfreeall( void ) +void susan_wccfreeall( void ) { susan_freeHeapPos = 0; } -void* susan_wccmemcpy(void* dstpp, const void* srcpp, unsigned int len) +void *susan_wccmemcpy( void *dstpp, const void *srcpp, unsigned int len ) { - unsigned long int dstp = (long int) dstpp; - unsigned long int srcp = (long int) srcpp; + unsigned long int dstp = ( long int ) dstpp; + unsigned long int srcp = ( long int ) srcpp; - _Pragma("loopbound min 76 max 76") - while (len > 0) { - char __x = ((char *) srcp)[0]; + _Pragma( "loopbound min 76 max 76" ) + while ( len > 0 ) { + char __x = ( ( char * ) srcp )[ 0 ]; srcp += 1; len -= 1; - ((char *) dstp)[0] = __x; + ( ( char * ) dstp )[ 0 ] = __x; dstp += 1; } @@ -42,10 +42,9 @@ void* susan_wccmemcpy(void* dstpp, const void* srcpp, unsigned int len) void susan_wccmemset( void *p, int value, unsigned int num ) { unsigned long i; - char *char_ptr = (char*)p; + char *char_ptr = ( char * )p; - _Pragma( "loopbound min 7220 max 28880" ) - for ( i = 0; i < num; ++i ) { - *char_ptr++ = (unsigned char)value; - } + _Pragma( "loopbound min 7220 max 7220" ) + for ( i = 0; i < num; ++i ) + *char_ptr++ = ( unsigned char )value; } diff --git a/bench/sequential/susan/wccmalloc.h b/bench/sequential/susan/wccmalloc.h old mode 100644 new mode 100755 index dbb2ada608bf2c9116fbde45d2a8b809c4b8a02a..cbd9a5d26a08b8db5eef8cf7969a3ce0cdca8af5 --- a/bench/sequential/susan/wccmalloc.h +++ b/bench/sequential/susan/wccmalloc.h @@ -1,10 +1,10 @@ #ifndef _WCCMALLOC_H #define _WCCMALLOC_H -void* susan_wccmalloc( unsigned int numberOfBytes ); +void *susan_wccmalloc( unsigned int numberOfBytes ); //! Frees ALL allocated memory space void susan_wccfreeall( void ); -void *susan_wccmemcpy( void* dstpp, const void* srcpp, unsigned int len ); +void *susan_wccmemcpy( void *dstpp, const void *srcpp, unsigned int len ); void susan_wccmemset( void *p, int value, unsigned int num ); #endif diff --git a/bench/test/cover/ChangeLog.txt b/bench/test/cover/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/test/cover/cover.c b/bench/test/cover/cover.c old mode 100644 new mode 100755 diff --git a/bench/test/duff/changeLog.txt b/bench/test/duff/changeLog.txt old mode 100644 new mode 100755 diff --git a/bench/test/duff/duff.c b/bench/test/duff/duff.c old mode 100644 new mode 100755 index e86b2a4d9c71b5019d12d58b0dfaad02ee998638..9fb49f16be981e8799c59b72f557d73593493429 --- a/bench/test/duff/duff.c +++ b/bench/test/duff/duff.c @@ -35,8 +35,8 @@ int main( void ); Declaration of global variables */ -char duff_source[100]; -char duff_target[100]; +char duff_source[ 100 ]; +char duff_target[ 100 ]; /* @@ -54,7 +54,7 @@ void duff_init() /* Apply volatile XOR-bitmask to entire input array. */ - p = ( unsigned char * ) &duff_source[ 0 ]; + p = ( unsigned char * ) &duff_source[ 0 ]; _Pragma( "loopbound min 400 max 400" ) for ( i = 0; i < sizeof( duff_source ); ++i, ++p ) *p ^= bitmask; @@ -63,7 +63,7 @@ void duff_init() int duff_return( void ) { - return ( duff_target[28] - 72 != 0 ); + return ( duff_target[ 28 ] - 72 != 0 ); } @@ -77,7 +77,7 @@ void duff_initialize( char *arr, int length ) _Pragma( "loopbound min 100 max 100" ) for ( i = 0; i < length; i++ ) - arr[i] = length - i; + arr[ i ] = length - i; } @@ -86,9 +86,7 @@ void duff_copy( char *to, char *from, int count ) int n = ( count + 7 ) / 8; _Pragma( "marker outside" ) - switch ( count % 8 ) { - case 0: do { *to++ = *from++; diff --git a/bench/test/test3/ChangeLog.txt b/bench/test/test3/ChangeLog.txt old mode 100644 new mode 100755 diff --git a/bench/test/test3/test3.c b/bench/test/test3/test3.c old mode 100644 new mode 100755 index d2aa71427b2ec0d15d9735d339435df7c4639779..0235738493ed6419fa34e38dc11e92b118ca4c48 --- a/bench/test/test3/test3.c +++ b/bench/test/test3/test3.c @@ -192,7 +192,7 @@ void test3_initSeed() int test3_randomInteger() { test3_seed = ( ( test3_seed * 133 ) + 81 ) % 8095; - return( test3_seed ); + return ( test3_seed ); } @@ -255,7 +255,7 @@ void test3_init( void ) int test3_return( void ) { - return( test3_result ); + return ( test3_result ); } @@ -5074,5 +5074,5 @@ int main() test3_init(); test3_main(); - return( test3_return() - 1377313800 != 0 ); + return ( test3_return() - 1377313800 != 0 ); }