From 0b9db2006694ecb0a666dce5f4f9600dc11daa31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E6=98=8E=E6=B1=9F?= <246462502@qq.com> Date: Sat, 2 Mar 2024 16:05:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=BC=96=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/by_fan_control.c | 9 +- app/gl_circle.c | 163 -------- app/gl_circle.h | 24 -- app/gl_common.c | 15 - app/gl_common.h | 29 -- app/gl_cross.c | 219 ---------- app/gl_cross.h | 19 - app/gl_data.c | 95 ----- app/gl_data.h | 108 ----- app/gl_garage.c | 52 --- app/gl_garage.h | 24 -- app/gl_get_corners.c | 86 ---- app/gl_get_corners.h | 8 - app/gl_handle_img.c | 239 ----------- app/gl_handle_img.h | 15 - app/gl_headfile.h | 18 - app/gl_img_process.c | 111 ----- app/gl_img_process.h | 10 - app/gl_state.c | 4 - app/gl_state.h | 28 -- app/gl_tracking.c | 133 ------ app/gl_tracking.h | 11 - app/gl_transform_table.c | 190 --------- app/gl_transform_table.h | 14 - app/isr.c | 6 +- app/jj_blueteeth.c | 55 +-- app/jj_blueteeth.h | 8 +- app/jj_motion.c | 109 +++-- app/jj_motion.h | 36 +- app/jj_param.c | 90 ++-- app/jj_param.h | 53 ++- app/main.c | 23 +- app/page/page.c | 2 +- app/page/page.h | 2 +- app/page/page_param.c | 9 +- app/page/page_rtcam.c | 91 ----- app/page/page_ui_widget.c | 92 ++--- .../by_tiny_frame_slave_read_write.c | 17 +- libraries/sdk/Ld/Link.ld | 186 ++++++++- libraries/zf_device/zf_device_imu660ra.c | 2 +- libraries/zf_device/zf_device_imu660ra.h | 14 +- libraries/zf_driver/zf_driver_soft_iic.c | 384 +++++++++--------- libraries/zf_driver/zf_driver_soft_iic.h | 123 +++--- 43 files changed, 760 insertions(+), 2166 deletions(-) delete mode 100644 app/gl_circle.c delete mode 100644 app/gl_circle.h delete mode 100644 app/gl_common.c delete mode 100644 app/gl_common.h delete mode 100644 app/gl_cross.c delete mode 100644 app/gl_cross.h delete mode 100644 app/gl_data.c delete mode 100644 app/gl_data.h delete mode 100644 app/gl_garage.c delete mode 100644 app/gl_garage.h delete mode 100644 app/gl_get_corners.c delete mode 100644 app/gl_get_corners.h delete mode 100644 app/gl_handle_img.c delete mode 100644 app/gl_handle_img.h delete mode 100644 app/gl_headfile.h delete mode 100644 app/gl_img_process.c delete mode 100644 app/gl_img_process.h delete mode 100644 app/gl_state.c delete mode 100644 app/gl_state.h delete mode 100644 app/gl_tracking.c delete mode 100644 app/gl_tracking.h delete mode 100644 app/gl_transform_table.c delete mode 100644 app/gl_transform_table.h delete mode 100644 app/page/page_rtcam.c diff --git a/app/by_fan_control.c b/app/by_fan_control.c index 22a4463..e497d58 100644 --- a/app/by_fan_control.c +++ b/app/by_fan_control.c @@ -42,7 +42,14 @@ void by_pwm_update_duty(uint32_t update_pwm_duty1, uint32_t update_pwm_duty2) pwm_set_duty(Fan_pwm_up1, update_pwm_duty1); pwm_set_duty(Fan_pwm_up2, update_pwm_duty2); } - +/** + * @brief + * + * @param power_pwm_duty_l1 左转向风扇 + * @param power_pwm_duty_r1 右转向风扇 + * @param power_pwm_duty_l2 左驱动风扇 + * @param power_pwm_duty_r2 右驱动风扇 + */ void by_pwm_power_duty(uint32_t power_pwm_duty_l1, uint32_t power_pwm_duty_r1, uint32_t power_pwm_duty_l2, uint32_t power_pwm_duty_r2) { diff --git a/app/gl_circle.c b/app/gl_circle.c deleted file mode 100644 index 9992e58..0000000 --- a/app/gl_circle.c +++ /dev/null @@ -1,163 +0,0 @@ -#include "zf_common_headfile.h" -#include "gl_headfile.h" - -enum circle_type_e circle_type = CIRCLE_NONE; - - -int32_t Left_Border_None_Circle = 0; -int32_t Right_Border_None_Circle = 0; - -int32_t Left_Border_Have_Circle = 0; -int32_t Right_Border_Have_Circle = 0; - -int32_t Left_Border_ToLeft_Circle = 0; -int32_t Right_Border_ToLeft_Circle = 0; - -int32_t Left_Border_ToRight_Circle = 0; -int32_t Right_Border_ToRight_Circle = 0; - - -void CheckCircle() { - // 非圆环模式下,单边L角点, 单边长直道 - if (circle_type == CIRCLE_NONE && Lpt0_found && !Lpt1_found && is_straight1) { - circle_type = CIRCLE_LEFT_BEGIN; - } - if (circle_type == CIRCLE_NONE && !Lpt0_found && Lpt1_found && is_straight0) { - circle_type = CIRCLE_RIGHT_BEGIN; - } -} - - -void RunCircle() { - if (circle_type == CIRCLE_LEFT_BEGIN) // 左环开始,寻外直道右线 - { - track_type = TRACK_RIGHT; - - // 先丢左线后有线 - if (pts_resample_left_count < 0.1 / RESAMPLEDIST) { - Left_Border_None_Circle++; - } - if (pts_resample_left_count > 0.5 / RESAMPLEDIST &&Left_Border_None_Circle > FRAMENONE) { - Left_Border_Have_Circle++; - if (Left_Border_Have_Circle > FRAMENONE) { - circle_type = CIRCLE_LEFT_IN; - Left_Border_None_Circle = 0; - Left_Border_Have_Circle = 0; - } - } - } else if (circle_type == CIRCLE_LEFT_IN) // 入环,寻内圆左线 - { - track_type = TRACK_LEFT; - - if (pts_resample_right[(int32_t)(0.2 / RESAMPLEDIST)][1] - - pts_resample_right[0][1] < - -2) { - Right_Border_ToLeft_Circle++; - } - if (Right_Border_ToLeft_Circle > FRAMETOLEFT) { - circle_type = CIRCLE_LEFT_RUNNING; - Right_Border_ToLeft_Circle = 0; - } - } else if (circle_type == CIRCLE_LEFT_RUNNING) // 正常巡线,寻外圆右线 - { - // Track_Type = TRACK_RIGHT; - track_type = TRACK_LEFT; // 看看加一个如果丢线才切换 - if (Lpt1_found) { - pts_resample_right_count = mid_right_count = Lpt1_rpts1s_id; - } - if (Lpt1_found && Lpt1_rpts1s_id < 0.4 / RESAMPLEDIST) { - circle_type = CIRCLE_LEFT_OUT; - } - } else if (circle_type == CIRCLE_LEFT_OUT) // 出环,寻内圆 - { - track_type = TRACK_LEFT; - - if (is_straight1) // 右线为长直道 - { - circle_type = CIRCLE_LEFT_END; - } - } else if (circle_type == CIRCLE_LEFT_END) // 走过圆环,寻右线 - { - track_type = TRACK_RIGHT; - - if (pts_resample_left_count < 0.2 / RESAMPLEDIST) // 左线先丢后有 - { - Left_Border_None_Circle++; - } - if (pts_resample_left_count > 0.6 / RESAMPLEDIST && - Left_Border_None_Circle > FRAMENONE) { - circle_type = CIRCLE_NONE; - Left_Border_None_Circle = 0; - Left_Border_Have_Circle = 0; - Right_Border_ToLeft_Circle = 0; - Right_Border_ToRight_Circle = 0; - } - - - } else if (circle_type == CIRCLE_RIGHT_BEGIN) // 右环控制,前期寻左直道 - { - track_type = TRACK_LEFT; - - // 先丢右线后有线 - if (pts_resample_right_count < 0.3 / RESAMPLEDIST) { - Right_Border_None_Circle++; - } - if (pts_resample_right_count > 0.5 / RESAMPLEDIST && - Right_Border_None_Circle > FRAMENONE) { - Right_Border_Have_Circle++; - if (Right_Border_Have_Circle > FRAMENONE) { - circle_type = CIRCLE_RIGHT_IN; - Right_Border_None_Circle = 0; - Right_Border_Have_Circle = 0; - } - } - } else if (circle_type == CIRCLE_RIGHT_IN) // 入右环,寻右内圆环 - { - track_type = TRACK_RIGHT; - - if (pts_resample_left[(int32_t)(0.2 / RESAMPLEDIST)][1] - - pts_resample_left[0][1] > - 2) { - Left_Border_ToRight_Circle++; - } - if (Left_Border_ToRight_Circle > FRAMETORIGHT) { - circle_type = CIRCLE_RIGHT_RUNNING; - Left_Border_ToRight_Circle = 0; - } - } else if (circle_type == CIRCLE_RIGHT_RUNNING) // 正常巡线,寻外圆左线 - { - // track_type = TRACK_LEFT; - track_type = TRACK_RIGHT; // 看看加一个如果丢线才切换 - if (Lpt0_found) // 外环存在拐点,可再加拐点距离判据 (左 L 点) - { - pts_resample_left_count = mid_left_count = Lpt0_rpts0s_id; - } - if (Lpt0_found && Lpt0_rpts0s_id < 0.4 / RESAMPLEDIST) { - circle_type = CIRCLE_RIGHT_OUT; - } - } else if (circle_type == CIRCLE_RIGHT_OUT) // 出环,寻内圆 - { - track_type = TRACK_RIGHT; - - if (is_straight0) // 加个有线长度判断 - { - circle_type = CIRCLE_RIGHT_END; - } - } else if (circle_type == CIRCLE_RIGHT_END) // 走过圆环,寻左线 - { - track_type = TRACK_LEFT; - - if (pts_resample_right_count < 0.2 / RESAMPLEDIST) // 左线先丢后有 - { - Right_Border_None_Circle++; - } - if (pts_resample_right_count > 0.7 / RESAMPLEDIST && - Right_Border_None_Circle > FRAMENONE) { - circle_type = CIRCLE_NONE; - Right_Border_None_Circle = 0; - Right_Border_Have_Circle = 0; - Left_Border_ToLeft_Circle = 0; - Left_Border_ToRight_Circle = 0; - } - } -} diff --git a/app/gl_circle.h b/app/gl_circle.h deleted file mode 100644 index 1ddeb7e..0000000 --- a/app/gl_circle.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef CIRCLE -#define CIRCLE - - -enum circle_type_e { - CIRCLE_NONE, // 非圆环模式 - CIRCLE_LEFT_BEGIN, - CIRCLE_RIGHT_BEGIN, // 圆环开始,识别到单侧L角点另一侧长直道。 - CIRCLE_LEFT_IN, - CIRCLE_RIGHT_IN, // 圆环进入,即走到一侧直道,一侧圆环的位置。 - CIRCLE_LEFT_RUNNING, - CIRCLE_RIGHT_RUNNING, // 圆环内部。 - CIRCLE_LEFT_OUT, - CIRCLE_RIGHT_OUT, // 准备出圆环,即识别到出环处的L角点。 - CIRCLE_LEFT_END, - CIRCLE_RIGHT_END // 圆环结束,即再次走到单侧直道的位置。 -}; - -extern enum circle_type_e circle_type; - -void CheckCircle(void); -void RunCircle(void); - -#endif /* COMMON_H_ */ \ No newline at end of file diff --git a/app/gl_common.c b/app/gl_common.c deleted file mode 100644 index e35e349..0000000 --- a/app/gl_common.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "zf_common_headfile.h" -#include "gl_headfile.h" - - -int32_t limit(int32_t x, int32_t low, int32_t up) -{ - return x > up ? up : x < low ? low : x; -} - int clip(int x, int low, int up) { - return x > up ? up : x < low ? low : x; - } - -float fclip(float x, float low, float up) { - return x > up ? up : x < low ? low : x; - } diff --git a/app/gl_common.h b/app/gl_common.h deleted file mode 100644 index 24461e9..0000000 --- a/app/gl_common.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef COMMON_H_ -#define COMMON_H_ - -#define IMAGE_H (MT9V03X_H) -#define IMAGE_W (MT9V03X_W) -#define BEGINH_L (50) -#define BEGINH_R (50) -#define BEGINW_L (-18) -#define BEGINW_R (-12) -#define PT_MAXLEN (75) -#define GET_PIX_1C(IMG, H, W) (IMG[(H) * MT9V03X_W + (W)]) // 获取像素点的值 -#define FIX_BINTHRESHOLD (140) // 设置最开始的阈值 -#define SELFADAPT_KERNELSIZE (7) // 巡线区域核大小 -#define FILTER_KERNELSIZE (7) // 滤波核大小 -#define SELFADAPT_OFFSET (8) // 适应性块大小 -#define PIXPERMETER (56) -#define RESAMPLEDIST (0.02f) -#define ANGLEDIST (0.2f) -#define ROADWIDTH (0.45f) -#define FRAMENONE (1) -#define FRAMETOLEFT (5) -#define FRAMETORIGHT (5) -#define PIXEL_PER_METER (100) - -int32_t limit(int32_t x, int32_t low, int32_t up); -int clip(int x, int low, int up); -float fclip(float x, float low, float up); - -#endif /* COMMON_H_ */ \ No newline at end of file diff --git a/app/gl_cross.c b/app/gl_cross.c deleted file mode 100644 index fd2cbce..0000000 --- a/app/gl_cross.c +++ /dev/null @@ -1,219 +0,0 @@ -#include "zf_common_headfile.h" -#include "gl_headfile.h" - -enum cross_type_e cross_type = CROSS_NONE; -bool far_Lpt0_found, far_Lpt1_found; -int32_t Both_Boder_None_Cross; -int far_Lpt0_rpts0s_id, far_Lpt1_rpts1s_id; - -void CheckCross() { - bool Xfound = Lpt0_found && Lpt1_found; - if (cross_type == CROSS_NONE && Xfound){ - cross_type = CROSS_BEGIN; - } -} - -void RunCross() { - bool Xfound = Lpt0_found && Lpt1_found; - aim_distance = 0.4; - //检测到十字,先按照近线走 - if (cross_type == CROSS_BEGIN) { - if (Lpt0_found) { - mid_left_count = pts_resample_left_count = Lpt0_rpts0s_id; - track_type = TRACK_LEFT; - } - else if(Lpt1_found) { - mid_right_count = pts_resample_right_count = Lpt1_rpts1s_id; - track_type = TRACK_RIGHT; - } - - //近角点过少,进入远线控制 - if ((Xfound && (Lpt0_rpts0s_id < 0.2 / RESAMPLEDIST && Lpt1_rpts1s_id < 0.2 / RESAMPLEDIST)) || (pts_resample_left_count <20 && pts_resample_right_count<20)) { - cross_type = CROSS_IN; - } - - } - //远线控制进十字,begin_y渐变靠近防丢线 - if (cross_type == CROSS_IN) { - //寻远线,算法与近线相同 - cross_farline(); - - if (pts_resample_left_count < 5 && pts_resample_right_count < 5) { - Both_Boder_None_Cross++; - } - if (Both_Boder_None_Cross > 2 && pts_resample_left_count > 20 && pts_resample_right_count > 20) { - cross_type = CROSS_NONE; - Both_Boder_None_Cross = 0; - } - if (far_Lpt1_found) { track_type = TRACK_RIGHT; } - else if (far_Lpt0_found) { track_type = TRACK_LEFT; } - else if (Both_Boder_None_Cross > 0 && pts_far_resample_right_count < 5) { track_type = TRACK_RIGHT; } - else if (Both_Boder_None_Cross > 0 && pts_far_resample_left_count < 5) { track_type = TRACK_LEFT; } - - } -} - - -void cross_farline(){ - int cross_width = 4; - int far_y1 = 0, far_y2 = 0; - int far_x1 = 0, far_x2 = 0; - bool white_found = false; - pts_far_left_count = sizeof(pts_far_left) / sizeof(pts_far_left[0]); - - int w1 = IMAGE_W / 2 - BEGINW_R, h1 = BEGINH_L; - for(;w1>cross_width*2; w1--) - { - if(GET_PIX_1C(mt9v03x_image_copy[0], h1, w1 - 1) < FIX_BINTHRESHOLD) { - far_x1 = w1 - cross_width; - break; - } - } - /*如果一行全为白色没写*/ - if (far_x1 <= 20) - { - far_x1 = 20; - } - - for (; h1 > 0; h1--) { - //先黑后白,先找white - if (GET_PIX_1C(mt9v03x_image_copy[0], h1, far_x1) >= FIX_BINTHRESHOLD) { white_found = true; } - if (GET_PIX_1C(mt9v03x_image_copy[0], h1 - 1, far_x1) < FIX_BINTHRESHOLD && white_found) { - far_y1 = h1; - break; - } - } - if (GET_PIX_1C(mt9v03x_image_copy[0], far_y1, far_x1) >= FIX_BINTHRESHOLD){ - SearchLineAdaptive_Left(mt9v03x_image_copy[0], SELFADAPT_KERNELSIZE, SELFADAPT_OFFSET, far_y1, far_x1, pts_far_left, &pts_far_left_count); - } - else pts_far_left_count = 0; - - int w2 = IMAGE_W / 2 + BEGINW_L, h2 = BEGINH_R; - white_found = false; - pts_far_right_count = sizeof(pts_far_right) / sizeof(pts_far_right[0]); - for(;w2 < IMAGE_W - cross_width*2; w2++) - { - if(GET_PIX_1C(mt9v03x_image_copy[0], h2, w2 + 1) < FIX_BINTHRESHOLD) { - far_x2 = w2 + cross_width; - break; - } - } - /*如果一行全为白色没写*/ - if (far_x2 >= 100) - { - far_x2 = 100; - } - - for (; h2 > 0; h2--) { - //先黑后白,先找white - if (GET_PIX_1C(mt9v03x_image_copy[0], h2, far_x2) >= FIX_BINTHRESHOLD) { white_found = true; } - if (GET_PIX_1C(mt9v03x_image_copy[0], h2 - 1, far_x2) < FIX_BINTHRESHOLD && white_found) { - far_y2 = h2; - break; - } - } - if (GET_PIX_1C(mt9v03x_image_copy[0], far_y2, far_x2) >= FIX_BINTHRESHOLD){ - SearchLineAdaptive_Right(mt9v03x_image_copy[0], SELFADAPT_KERNELSIZE, SELFADAPT_OFFSET, far_y2, far_x2, pts_far_right, &pts_far_right_count); - } - else pts_far_right_count = 0; - - //透视变换 - for (int i = 0; i < pts_far_left_count; i++) { - pts_far_inv_l[i][1] = fclip(InverseMapW[pts_far_left[i][0]][pts_far_left[i][1]],0,IMAGE_W); - pts_far_inv_l[i][0] = fclip(InverseMapH[pts_far_left[i][0]][pts_far_left[i][1]],0,IMAGE_H); - } - pts_far_inv_l_count = pts_far_left_count; - - for (int i = 0; i < pts_far_right_count; i++) { - pts_far_inv_r[i][1] = fclip(InverseMapW[pts_far_right[i][0]][pts_far_right[i][1]],0,IMAGE_W); - pts_far_inv_r[i][0] = fclip(InverseMapH[pts_far_right[i][0]][pts_far_right[i][1]],0,IMAGE_H); - } - pts_far_inv_r_count = pts_far_right_count; - - // 边线滤波 - GetLinesFilter(pts_far_inv_l, pts_far_inv_l_count, pts_far_filter_l, (int) round(FILTER_KERNELSIZE)); - pts_far_filter_l_count = pts_far_inv_l_count; - GetLinesFilter(pts_far_inv_r, pts_far_inv_r_count, pts_far_filter_r, (int) round(FILTER_KERNELSIZE)); - pts_far_filter_r_count = pts_far_inv_r_count; - - // 边线等距采样 - pts_far_resample_left_count = sizeof(pts_far_resample_left) / sizeof(pts_far_resample_left[0]); - GetLinesResample(pts_far_filter_l, pts_far_filter_l_count, pts_far_resample_left, &pts_far_resample_left_count, RESAMPLEDIST * PIXPERMETER); - pts_far_resample_right_count = sizeof(pts_far_resample_right) / sizeof(pts_far_resample_right[0]); - GetLinesResample(pts_far_filter_r, pts_far_filter_r_count, pts_far_resample_right, &pts_far_resample_right_count, RESAMPLEDIST * PIXPERMETER); - - - int valid_far_points_count = 0; - - for (int i = 0; i < pts_far_resample_left_count; i++) { - int x = pts_far_resample_left[i][1]; - int y = pts_far_resample_left[i][0]; - - if (y < IMAGE_H-3 && x > 3 && x < IMAGE_W-3 && y>=3 ) { - pts_far_resample_left[valid_far_points_count][0] = pts_far_resample_left[i][0]; - pts_far_resample_left[valid_far_points_count][1] = pts_far_resample_left[i][1]; - valid_far_points_count++; - } - } - pts_far_resample_left_count = valid_far_points_count; - - valid_far_points_count = 0; - - for (int i = 0; i < pts_far_resample_right_count; i++) { - int x = pts_far_resample_right[i][1]; - int y = pts_far_resample_right[i][0]; - - if (y <= IMAGE_H-3 && x >= 3 && x <= IMAGE_W-3 && y>=3) { - pts_far_resample_right[valid_far_points_count][0] = pts_far_resample_right[i][0]; - pts_far_resample_right[valid_far_points_count][1] = pts_far_resample_right[i][1]; - valid_far_points_count++; - } - } - - pts_far_resample_right_count = valid_far_points_count; - - // 边线角度变化率 - local_angle_points(pts_far_resample_left, pts_far_resample_left_count, far_angle_left, (int) round(ANGLEDIST / RESAMPLEDIST)); - far_angle_left_num = pts_far_resample_left_count; - local_angle_points(pts_far_resample_right, pts_far_resample_right_count, far_angle_right, (int) round(ANGLEDIST / RESAMPLEDIST)); - far_angle_right_num = pts_far_resample_right_count; - - // 角度变化率非极大值抑制 - nms_angle(far_angle_left, far_angle_left_num, far_angle_new_left, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1); - far_angle_new_left_num = far_angle_left_num; - nms_angle(far_angle_right, far_angle_right_num, far_angle_new_right, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1); - far_angle_new_right_num = far_angle_right_num; - - // 找远线上的L角点 - far_Lpt0_found = far_Lpt1_found = false; - // is_far_straight0 = pts_far_resample_left_count > 1.0 / RESAMPLEDIST; - // is_far_straight1 = pts_far_resample_right_count > 1.0 / RESAMPLEDIST; - for (int i = 0; i < pts_far_resample_left_count; i++) { - if (far_angle_new_left[i] == 0) continue; - int im1 = clip(i - (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_far_resample_left_count - 1); - int ip1 = clip(i + (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_far_resample_left_count - 1); - float conf = fabs(far_angle_left[i]) - (fabs(far_angle_left[im1]) + fabs(far_angle_left[ip1])) / 2; - - //L角点阈值 - if (far_Lpt0_found == false && (66. / 180. * PI) < conf && conf < (140. / 180. * PI) && i < 0.7 / RESAMPLEDIST) { - far_Lpt0_rpts0s_id = i; - far_Lpt0_found = true; - } - } - - - for (int i = 0; i < pts_far_resample_right_count; i++) { - if (far_angle_new_right[i] == 0) continue; - int im1 = clip(i - (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_far_resample_right_count - 1); - int ip1 = clip(i + (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_far_resample_right_count - 1); - float conf = fabs(far_angle_right[i]) - (fabs(far_angle_right[im1]) + fabs(far_angle_right[ip1])) / 2; - - - if (far_Lpt1_found == false && (66. / 180. * PI) < conf && conf < 140. / 180. * PI && i < 0.7 / RESAMPLEDIST) { - far_Lpt1_rpts1s_id = i; - far_Lpt1_found = true; - } - - } - -} \ No newline at end of file diff --git a/app/gl_cross.h b/app/gl_cross.h deleted file mode 100644 index a0fa6eb..0000000 --- a/app/gl_cross.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef CROSS -#define CROSS - - -enum cross_type_e { - CROSS_NONE, // 非十字模式 - CROSS_BEGIN, // 找到左右两个L角点 - CROSS_IN, // 两个L角点很近,即进入十字内部(此时切换远线控制) -}; -extern enum cross_type_e cross_type; -extern int32_t Both_Boder_None_Cross; -extern int far_Lpt0_rpts0s_id, far_Lpt1_rpts1s_id; - -void CheckCross(void); -void RunCross(void); -void cross_farline(void); - - -#endif /* COMMON_H_ */ \ No newline at end of file diff --git a/app/gl_data.c b/app/gl_data.c deleted file mode 100644 index 539abc0..0000000 --- a/app/gl_data.c +++ /dev/null @@ -1,95 +0,0 @@ -#include "gl_data.h" - -uint8_t (*Img_Gray)[MT9V03X_W]; - -int32_t pts_left[PT_MAXLEN][2]; -int32_t pts_right[PT_MAXLEN][2]; -int32_t pts_left_count; -int32_t pts_right_count; -int32_t pts_far_left[PT_MAXLEN][2]; -int32_t pts_far_right[PT_MAXLEN][2]; -int32_t pts_far_left_count; -int32_t pts_far_right_count; - -float pts_inv_l[PT_MAXLEN][2]; -float pts_inv_r[PT_MAXLEN][2]; -int32_t pts_inv_l_count; -int32_t pts_inv_r_count; -float pts_far_inv_l[PT_MAXLEN][2]; -float pts_far_inv_r[PT_MAXLEN][2]; -int32_t pts_far_inv_l_count; -int32_t pts_far_inv_r_count; - -float pts_filter_l[PT_MAXLEN][2]; -float pts_filter_r[PT_MAXLEN][2]; -int32_t pts_filter_l_count; -int32_t pts_filter_r_count; -float pts_far_filter_l[PT_MAXLEN][2]; -float pts_far_filter_r[PT_MAXLEN][2]; -int32_t pts_far_filter_l_count; -int32_t pts_far_filter_r_count; - -float pts_resample_left[PT_MAXLEN][2]; -float pts_resample_right[PT_MAXLEN][2]; -int32_t pts_resample_left_count; -int32_t pts_resample_right_count; -float pts_far_resample_left[PT_MAXLEN][2]; -float pts_far_resample_right[PT_MAXLEN][2]; -int32_t pts_far_resample_left_count; -int32_t pts_far_resample_right_count; - -float mid_left[PT_MAXLEN][2]; -float mid_right[PT_MAXLEN][2]; - -int32_t mid_left_count; -int32_t mid_right_count; - -float angle_new_left[PT_MAXLEN]; -float angle_new_right[PT_MAXLEN]; -int angle_new_left_num; -int angle_new_right_num; -float far_angle_new_left[PT_MAXLEN]; -float far_angle_new_right[PT_MAXLEN]; -int far_angle_new_left_num; -int far_angle_new_right_num; - -uint8_t mt9v03x_image_copy[MT9V03X_H][MT9V03X_W]; - -float angle_left[PT_MAXLEN]; -float angle_right[PT_MAXLEN]; -int angle_left_num; -int angle_right_num; -float far_angle_left[PT_MAXLEN]; -float far_angle_right[PT_MAXLEN]; -int far_angle_left_num; -int far_angle_right_num; - -int Lpt0_rpts0s_id; -int Lpt1_rpts1s_id; -bool Lpt0_found; -bool Lpt1_found; -int Lpt1[2]; -int Lpt0[2]; -int far_Lpt1[2]; -int far_Lpt0[2]; - -int Lpt_in0_rpts0s_id; -int Lpt_in1_rpts1s_id; -bool Lpt_in0_found; -bool Lpt_in1_found; -int Lpt_in1[2]; -int Lpt_in0[2]; - -bool is_straight0; -bool is_straight1; -bool is_far_straight0; -bool is_far_straight1; - -bool is_turn0; -bool is_turn1; - -float rptsn[PT_MAXLEN][2]; -int32_t rptsn_num; -float aim_distance; - -track_type_e track_type = TRACK_RIGHT; \ No newline at end of file diff --git a/app/gl_data.h b/app/gl_data.h deleted file mode 100644 index 3048f34..0000000 --- a/app/gl_data.h +++ /dev/null @@ -1,108 +0,0 @@ -#pragma once - -#ifndef _GL_DATA_H -#define _GL_DATA_H - -#include "gl_headfile.h" - -typedef enum track_type_e { - TRACK_LEFT = 0, - TRACK_RIGHT, -} track_type_e; - -extern uint8_t (*Img_Gray)[MT9V03X_W]; -//未逆透视前边线数组 -extern int32_t pts_left[PT_MAXLEN][2]; -extern int32_t pts_right[PT_MAXLEN][2]; -extern int32_t pts_left_count; -extern int32_t pts_right_count; -extern int32_t pts_far_left[PT_MAXLEN][2]; -extern int32_t pts_far_right[PT_MAXLEN][2]; -extern int32_t pts_far_left_count; -extern int32_t pts_far_right_count; -//逆透视后边线数组 -extern float pts_inv_l[PT_MAXLEN][2]; -extern float pts_inv_r[PT_MAXLEN][2]; -extern int32_t pts_inv_l_count; -extern int32_t pts_inv_r_count; -extern float pts_far_inv_l[PT_MAXLEN][2]; -extern float pts_far_inv_r[PT_MAXLEN][2]; -extern int32_t pts_far_inv_l_count; -extern int32_t pts_far_inv_r_count; -//滤波后边线数组 -extern float pts_filter_l[PT_MAXLEN][2]; -extern float pts_filter_r[PT_MAXLEN][2]; -extern int32_t pts_filter_l_count; -extern int32_t pts_filter_r_count; -extern float pts_far_filter_l[PT_MAXLEN][2]; -extern float pts_far_filter_r[PT_MAXLEN][2]; -extern int32_t pts_far_filter_l_count; -extern int32_t pts_far_filter_r_count; - -//重采样后边线数组 -extern float pts_resample_left[PT_MAXLEN][2]; -extern float pts_resample_right[PT_MAXLEN][2]; -extern int32_t pts_resample_left_count; -extern int32_t pts_resample_right_count; -extern float pts_far_resample_left[PT_MAXLEN][2]; -extern float pts_far_resample_right[PT_MAXLEN][2]; -extern int32_t pts_far_resample_left_count; -extern int32_t pts_far_resample_right_count; - -extern float mid_left[PT_MAXLEN][2]; -extern float mid_right[PT_MAXLEN][2]; - -extern int32_t mid_left_count; -extern int32_t mid_right_count; - -extern float angle_new_left[PT_MAXLEN]; -extern float angle_new_right[PT_MAXLEN]; -extern int angle_new_left_num; -extern int angle_new_right_num; -extern float far_angle_new_left[PT_MAXLEN]; -extern float far_angle_new_right[PT_MAXLEN]; -extern int far_angle_new_left_num; -extern int far_angle_new_right_num; - -extern uint8_t mt9v03x_image_copy[MT9V03X_H][MT9V03X_W]; - -extern float angle_left[PT_MAXLEN]; -extern float angle_right[PT_MAXLEN]; -extern int angle_left_num; -extern int angle_right_num; -extern float far_angle_left[PT_MAXLEN]; -extern float far_angle_right[PT_MAXLEN]; -extern int far_angle_left_num; -extern int far_angle_right_num; - -extern int Lpt0_rpts0s_id; -extern int Lpt1_rpts1s_id; -extern bool Lpt0_found; -extern bool Lpt1_found; -extern int Lpt1[2]; -extern int Lpt0[2]; -extern int far_Lpt1[2]; -extern int far_Lpt0[2]; - -extern int Lpt_in0_rpts0s_id; -extern int Lpt_in1_rpts1s_id; -extern bool Lpt_in0_found; -extern bool Lpt_in1_found; -extern int Lpt_in1[2]; -extern int Lpt_in0[2]; - -extern bool is_straight0; -extern bool is_straight1; -extern bool is_far_straight0; -extern bool is_far_straight1; - -extern bool is_turn0; -extern bool is_turn1; - -extern float rptsn[PT_MAXLEN][2]; -extern int32_t rptsn_num; -extern float aim_distance; - -extern track_type_e track_type; - -#endif diff --git a/app/gl_garage.c b/app/gl_garage.c deleted file mode 100644 index 981af4f..0000000 --- a/app/gl_garage.c +++ /dev/null @@ -1,52 +0,0 @@ -#include "zf_common_headfile.h" -#include "math.h" -#include "gl_headfile.h" - -enum garage_type_e garage_type = GARAGE_NONE; - -float (*garage_rpts)[2]; -int garage_rpts_num; - -float calculate_vector_angle(float x1, float y1, float x2, float y2) { - float dx = x2 - x1; - float dy = y2 - y1; - - float vector_length = sqrt(dx*dx + dy*dy); - float angle_radians = acos(dx / vector_length); - float angle_degrees = angle_radians * 180 / M_PI; - - return angle_degrees; -} - -void CheckGarage() { - int change_num = 0; - int check_garage_h = 60; - for (int check_garage_w = 30; check_garage_w < IMAGE_W - 30; check_garage_w++) - { - if ((GET_PIX_1C(mt9v03x_image_copy[0], check_garage_h, check_garage_w) < FIX_BINTHRESHOLD && GET_PIX_1C(mt9v03x_image_copy[0], check_garage_h, check_garage_w + 1) >= FIX_BINTHRESHOLD) || - (GET_PIX_1C(mt9v03x_image_copy[0], check_garage_h, check_garage_w) >= FIX_BINTHRESHOLD && GET_PIX_1C(mt9v03x_image_copy[0], check_garage_h, check_garage_w + 1) < FIX_BINTHRESHOLD)) - { - change_num++; - } - - } - - - if (change_num > 7) - { - garage_type = GARAGE_FOUND; - //printf("跳变点的数量为:%d\r\n", change_num); - } - - change_num = 0; - -} - -void RunGarage(){ - - if (garage_type == GARAGE_FOUND) - { - printf("识别到车库\r\n"); - } - -} \ No newline at end of file diff --git a/app/gl_garage.h b/app/gl_garage.h deleted file mode 100644 index 947a4d4..0000000 --- a/app/gl_garage.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef GARAGE -#define GARAGE - - -enum garage_type_e { - GARAGE_NONE, // 非车库模式 - GARAGE_FOUND, - GARAGE_OUT_LEFT, - GARAGE_OUT_RIGHT, // 出库,陀螺仪转过45°,即出库完毕 - GARAGE_FOUND_LEFT, - GARAGE_FOUND_RIGHT, // 发现车库,即斑马线+单侧L角点(未使用) - GARAGE_IN_LEFT, - GARAGE_IN_RIGHT, // 进库,发现车库后判断第几次,从而决定是否进库 - GARAGE_PASS_LEFT, - GARAGE_PASS_RIGHT, // 不进库,发现车库后判断第几次,从而决定是否进库 - GARAGE_STOP // 进库完毕,停车 -}; -extern enum garage_type_e garage_type; - -float calculate_vector_angle(float x1, float y1, float x2, float y2);\ -void CheckGarage(void); -void RunGarage(void); - -#endif /* COMMON_H_ */ \ No newline at end of file diff --git a/app/gl_get_corners.c b/app/gl_get_corners.c deleted file mode 100644 index 6eedf5c..0000000 --- a/app/gl_get_corners.c +++ /dev/null @@ -1,86 +0,0 @@ -#include "zf_common_headfile.h" -#include "math.h" -#include "gl_headfile.h" - - - -void get_corners() { - Lpt0_found = Lpt1_found = false; - Lpt_in0_found = Lpt_in1_found = false; - is_straight0 = pts_resample_left_count > 1.0 / RESAMPLEDIST; - is_straight1 = pts_resample_right_count > 1.0 / RESAMPLEDIST; - for (int i = 0; i < pts_resample_left_count; i++) { - if (angle_new_left[i] == 0) continue; - int im1 = clip(i - (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_resample_left_count - 1); - int ip1 = clip(i + (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_resample_left_count - 1); - float conf = fabs(angle_left[i]) - (fabs(angle_left[im1]) + fabs(angle_left[ip1])) / 2; - - //L角点阈值 - if (Lpt0_found == false && (66. / 180. * PI) < conf && conf < (140. / 180. * PI) && i < 0.5 / RESAMPLEDIST) { - Lpt0_rpts0s_id = i; - Lpt0_found = true; - transform(pts_resample_left[Lpt0_rpts0s_id][1],pts_resample_left[Lpt0_rpts0s_id][0],&Lpt0[1],&Lpt0[0]); - } - //长直道阈值 - if (conf > (7. / 180. * PI) && i < 0.8 / RESAMPLEDIST) is_straight0 = false; - if (Lpt0_found == true && is_straight0 == false) break; - } - // if(Lpt0_found){ - // float angle1 = calculate_vector_angle(pts_resample_left[Lpt0_rpts0s_id][1],pts_resample_left[Lpt0_rpts0s_id][0],pts_resample_left[Lpt0_rpts0s_id+5][1],pts_resample_left[Lpt0_rpts0s_id+5][0]); - // if(angle1 < 85.) { - // Lpt_in0_found = true; - // Lpt0_found = false; - // Lpt_in0_rpts0s_id = Lpt0_rpts0s_id; - // } - // } - // else{ - // is_turn0 = is_curve(angle_left ,clip(angle_left_num - 10, 0,angle_left_num),0.05); - // if(is_turn0){ - // state_type = TURN_STATE; - // } - // } - if(is_straight0){ - state_type = STRAIGHT_STATE; - } - - - - - for (int i = 0; i < pts_resample_right_count; i++) { - if (angle_new_right[i] == 0) continue; - int im1 = clip(i - (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_resample_right_count - 1); - int ip1 = clip(i + (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_resample_right_count - 1); - float conf = fabs(angle_right[i]) - (fabs(angle_right[im1]) + fabs(angle_right[ip1])) / 2; - - - if (Lpt1_found == false && (66. / 180. * PI) < conf && conf < 140. / 180. * PI && i < 0.5 / RESAMPLEDIST) { - Lpt1_rpts1s_id = i; - Lpt1_found = true; - transform(pts_resample_right[Lpt1_rpts1s_id][1],pts_resample_right[Lpt1_rpts1s_id][0],&Lpt1[1],&Lpt1[0]); - } - - if (conf > (7. / 180. * PI) && i < 0.8 / RESAMPLEDIST) is_straight1 = false; - if (Lpt1_found == true && is_straight1 == false) break; - } - // if(Lpt1_found){ - // float angle2 = calculate_vector_angle(pts_resample_right[Lpt1_rpts1s_id][1],pts_resample_right[Lpt1_rpts1s_id][0],pts_resample_right[Lpt1_rpts1s_id+5][1],pts_resample_right[Lpt1_rpts1s_id+5][0]); - // if(angle2 > 100.) { - // Lpt_in1_found = true; - // Lpt1_found = false; - // Lpt_in1_rpts1s_id = Lpt1_rpts1s_id; - // } - // } - //else{ - // is_turn1 = is_curve(angle_right, clip(angle_right_num - 10,0 ,angle_right_num), 0.05); - // if(is_turn1){ - // state_type = TURN_STATE; - // } - //} - if(is_straight1){ - state_type = STRAIGHT_STATE; - } - - -} - - diff --git a/app/gl_get_corners.h b/app/gl_get_corners.h deleted file mode 100644 index aff31b2..0000000 --- a/app/gl_get_corners.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef GET_CORNERS -#define GET_CORNERS - - -void get_corners(void); - - -#endif /* COMMON_H_ */ \ No newline at end of file diff --git a/app/gl_handle_img.c b/app/gl_handle_img.c deleted file mode 100644 index a8292d2..0000000 --- a/app/gl_handle_img.c +++ /dev/null @@ -1,239 +0,0 @@ -#include "zf_common_headfile.h" -#include "math.h" -#include "gl_headfile.h" - - - - -const int32_t direction_front[4][2] = {{0, -1},{1, 0},{0, 1},{-1, 0}}; -const int32_t direction_frontleft[4][2] = {{-1, -1},{1, -1},{1, 1},{-1, 1}}; -const int32_t direction_frontright[4][2] ={{1, -1},{1, 1},{-1, 1},{-1, -1}}; - - -void SearchLineAdaptive_Left(uint8_t img_gray[], int32_t block_size, int32_t down_value, int32_t h, int32_t w, int32_t pts[][2], int32_t* line_num) -{ - const int32_t half = block_size / 2; - int step = 0; - int dir = 0; - int turn = 0; - printf("shuzhi: %d\r\n", half); - while (step < *line_num && half < w && w < IMAGE_W - half -1 && half < h && h < IMAGE_H - half -1 && turn < 4) { - int local_thres = 0; - for (int dh = -1 * half; dh <= half; dh++) { - for (int dw = -1 * half; dw <= half; dw++) { - local_thres += GET_PIX_1C(img_gray, h + dh, w + dw); - } - } - local_thres /= block_size * block_size; - local_thres -= down_value; - - int front_value = GET_PIX_1C(img_gray, h+direction_front[dir][1], w + direction_front[dir][0]); - int frontleft_value = GET_PIX_1C(img_gray, h + direction_frontleft[dir][1], w + direction_frontleft[dir][0]); - if (front_value < local_thres) { - dir = (dir + 1) % 4; - turn++; - } else if (frontleft_value < local_thres) { - w += direction_front[dir][0]; - h += direction_front[dir][1]; - pts[step][1] = w; - pts[step][0] = h; - step++; - turn = 0; - } else { - - w += direction_frontleft[dir][0]; - h += direction_frontleft[dir][1]; - dir = (dir + 3) % 4; - pts[step][1] = w; - pts[step][0] = h; - step++; - turn = 0; - - } - - - } - *line_num = step; -} - -void SearchLineAdaptive_Right(uint8_t img_gray[], int32_t block_size, int32_t down_value, int32_t h, int32_t w, int32_t pts[][2], int32_t* line_num) -{ - int half = block_size / 2; - int step = 0, dir = 0, turn = 0; - while (step < *line_num && 0 < w && w < IMAGE_W - 1 && 0 < h && h < IMAGE_H -1 && turn < 4) { - int local_thres = 0; - for (int dh = -half; dh <= half; dh++) { - for (int dw = -half; dw <= half; dw++) { - local_thres += GET_PIX_1C(img_gray, h + dh, w + dw); - } - } - local_thres /= block_size * block_size; - local_thres -= down_value; - - - int front_value = GET_PIX_1C(img_gray, h + direction_front[dir][1], w + direction_front[dir][0]); - int frontright_value = GET_PIX_1C(img_gray, h + direction_frontright[dir][1], w + direction_frontright[dir][0]); - if (front_value < local_thres) { - dir = (dir + 3) % 4; - turn++; - } else if (frontright_value < local_thres) { - w += direction_front[dir][0]; - h += direction_front[dir][1]; - pts[step][1] = w; - pts[step][0] = h; - step++; - turn = 0; - - - } else { - w += direction_frontright[dir][0]; - h += direction_frontright[dir][1]; - dir = (dir + 1) % 4; - pts[step][1] = w; - pts[step][0] = h; - step++; - turn = 0; - - - } - - } - *line_num = step; -} - - - -void GetLinesFilter(float pts_in[][2], int32_t pts_in_count, float pts_out[][2], int32_t kernelsize) -{ - int half = kernelsize / 2; - for (int i = 0; i < pts_in_count; i++) { - pts_out[i][0] = 0; - pts_out[i][1] = 0; - for (int j = -half; j <= half; j++) { - pts_out[i][0] += pts_in[clip(i + j, 0, pts_in_count - 1)][0] * (half + 1 - abs(j)); - pts_out[i][1] += pts_in[clip(i + j, 0, pts_in_count - 1)][1] * (half + 1 - abs(j)); - } - pts_out[i][0] /= (2 * half + 2) * (half + 1) / 2; - pts_out[i][1] /= (2 * half + 2) * (half + 1) / 2; - } -} - -void GetLinesResample(float pts_in[][2], int32_t num1, float pts_out[][2], int32_t* num2, float dist) -{ - if (num1 < 0) { - *num2 = 0; - return; - } - pts_out[0][0] = pts_in[0][0]; - pts_out[0][1] = pts_in[0][1]; - int len = 1; - for (int i = 0; i < num1 - 1 && len < *num2; i++) { - float x0 = pts_in[i][1]; - float y0 = pts_in[i][0]; - float x1 = pts_in[i + 1][1]; - float y1 = pts_in[i + 1][0]; - - do { - float x = pts_out[len - 1][1]; - float y = pts_out[len - 1][0]; - - float dx0 = x0 - x; - float dy0 = y0 - y; - float dx1 = x1 - x; - float dy1 = y1 - y; - - float dist0 = sqrt(dx0 * dx0 + dy0 * dy0); - float dist1 = sqrt(dx1 * dx1 + dy1 * dy1); - - float r0 = (dist1 - dist) / (dist1 - dist0); - float r1 = 1 - r0; - - if (r0 < 0 || r1 < 0) break; - x0 = x0 * r0 + x1 * r1; - y0 = y0 * r0 + y1 * r1; - pts_out[len][1] = x0; - pts_out[len][0] = y0; - len++; - } while (len < *num2); - - } - *num2 = len; -} - - -void local_angle_points(float pts_in[][2], int num, float angle_out[], int dist) { - for (int i = 0; i < num; i++) { - if (i <= 0 || i >= num - 1) { - angle_out[i] = 0; - continue; - } - float dx1 = pts_in[i][0] - pts_in[clip(i - dist, 0, num - 1)][0]; - float dy1 = pts_in[i][1] - pts_in[clip(i - dist, 0, num - 1)][1]; - float dn1 = sqrtf(dx1 * dx1 + dy1 * dy1); - float dx2 = pts_in[clip(i + dist, 0, num - 1)][0] - pts_in[i][0]; - float dy2 = pts_in[clip(i + dist, 0, num - 1)][1] - pts_in[i][1]; - float dn2 = sqrtf(dx2 * dx2 + dy2 * dy2); - float c1 = dx1 / dn1; - float s1 = dy1 / dn1; - float c2 = dx2 / dn2; - float s2 = dy2 / dn2; - angle_out[i] = atan2f(c1 * s2 - c2 * s1, c2 * c1 + s2 * s1); //得到弧度 类似angle_out = 0.3491 - } -} - -void nms_angle(float angle_in[], int num, float angle_out[], int kernel) { - - int half = kernel / 2; - for (int i = 0; i < num; i++) { - angle_out[i] = angle_in[i]; - for (int j = -half; j <= half; j++) { - if (fabs(angle_in[clip(i + j, 0, num - 1)]) > fabs(angle_out[i])) { - angle_out[i] = 0; - break; - } - } - } -} - -void GetMidLine_Left(float pts_left[][2], int32_t pts_left_count, float mid_left[][2], int32_t approx_num, float dist) -{ - for (int i = 0; i < pts_left_count; i++) { - float dx = pts_left[clip(i + approx_num, 0, pts_left_count - 1)][1] - pts_left[clip(i - approx_num, 0, pts_left_count - 1)][1]; - float dy = pts_left[clip(i + approx_num, 0, pts_left_count - 1)][0] - pts_left[clip(i - approx_num, 0, pts_left_count - 1)][0]; - float dn = sqrt(dx * dx + dy * dy); - dx /= dn; - dy /= dn; - mid_left[i][0] = pts_left[i][0] + dx * dist; - mid_left[i][1] = pts_left[i][1] - dy * dist; - } - -} - - -void GetMidLine_Right(float pts_right[][2], int32_t pts_right_count, float mid_right[][2], int32_t approx_num, float dist) -{ - for (int i = 0; i < pts_right_count; i++) { - float dx = pts_right[clip(i + approx_num, 0, pts_right_count -1)][1] - pts_right[clip(i - approx_num, 0, pts_right_count -1 )][1]; - float dy = pts_right[clip(i + approx_num, 0, pts_right_count -1)][0] - pts_right[clip(i - approx_num, 0, pts_right_count -1)][0]; - float dn = sqrt(dx * dx + dy * dy); - dx /= dn;//sin - dy /= dn;//cos - mid_right[i][0] = pts_right[i][0] - dx * dist; - mid_right[i][1] = pts_right[i][1] + dy * dist; - - - } -} - - -int is_curve(float angle[], int n, float threshold) { - for (int i = 1; i < n - 1; i++) { - float da = fabs(angle[i] - angle[i-1]); - float db = fabs(angle[i+1] - angle[i]); - if (da > threshold && db > threshold) { - return 1; // 是弯道 - } - } - return 0; // 不是弯道 -} - diff --git a/app/gl_handle_img.h b/app/gl_handle_img.h deleted file mode 100644 index 2707caa..0000000 --- a/app/gl_handle_img.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef HANDLE_IMG -#define HANDLE_IMG - - - -void SearchStartPoint_Left(uint8_t img_gray[], int32_t* h_start, int32_t* w_start, uint8_t threshold); -void GetLinesFilter(float pts_in[][2], int32_t pts_in_count, float pts_out[][2], int32_t kernelsize); -void GetLinesResample(float pts_in[][2], int32_t num1, float pts_out[][2], int32_t* num2, float dist); -void local_angle_points(float pts_in[][2], int num, float angle_out[], int dist); -void nms_angle(float angle_in[], int num, float angle_out[], int kernel); -void GetMidLine_Left(float pts_left[][2], int32_t pts_left_count, float mid_left[][2], int32_t approx_num, float dist); -void GetMidLine_Right(float pts_right[][2], int32_t pts_right_count, float mid_right[][2], int32_t approx_num, float dist); -int is_curve(float angle[], int n, float threshold) ; - -#endif /* COMMON_H_ */ \ No newline at end of file diff --git a/app/gl_headfile.h b/app/gl_headfile.h deleted file mode 100644 index 1482de7..0000000 --- a/app/gl_headfile.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef GL_HEADFILE -#define GL_HEADFILE - -#include "gl_state.h" -#include "gl_img_process.h" -#include "gl_common.h" -#include "main.h" -#include "gl_handle_img.h" -#include "gl_transform_table.h" -#include "gl_get_corners.h" -#include "gl_garage.h" -#include "gl_tracking.h" -#include "gl_circle.h" -#include "gl_cross.h" -#include "gl_data.h" -#include "math.h" - -#endif /* STATE_H_ */ \ No newline at end of file diff --git a/app/gl_img_process.c b/app/gl_img_process.c deleted file mode 100644 index e999138..0000000 --- a/app/gl_img_process.c +++ /dev/null @@ -1,111 +0,0 @@ -#include "zf_common_headfile.h" -#include "math.h" -#include "gl_headfile.h" -/*******************************边线处理****************************************/ -/* - @author: glz - @brief: -*/ - - - -void img_processing() { - - - int w1 = IMAGE_W / 2 - BEGINW_R, h1 = BEGINH_L; - pts_left_count = sizeof(pts_left) / sizeof(pts_left[0]); - for (; w1 > 0; w1--) { - if (GET_PIX_1C(mt9v03x_image_copy[0], h1, w1 - 1) < FIX_BINTHRESHOLD) - break; - } - - if (GET_PIX_1C(mt9v03x_image_copy[0], h1, w1) >= FIX_BINTHRESHOLD){ - SearchLineAdaptive_Left(mt9v03x_image_copy[0], SELFADAPT_KERNELSIZE, SELFADAPT_OFFSET, h1, w1, pts_left, &pts_left_count); - } - else pts_left_count = 0; - - int w2 = IMAGE_W / 2 + BEGINW_L, h2 = BEGINH_R; - pts_right_count = sizeof(pts_right) / sizeof(pts_right[0]); - for (; w2 < IMAGE_W - 1; w2++) { - if (GET_PIX_1C(mt9v03x_image_copy[0], h2, w2 + 1) < FIX_BINTHRESHOLD) - break; - } - - if (GET_PIX_1C(mt9v03x_image_copy[0], h2, w2) >= FIX_BINTHRESHOLD){ - SearchLineAdaptive_Right(mt9v03x_image_copy[0], SELFADAPT_KERNELSIZE, SELFADAPT_OFFSET, h2, w2, pts_right, &pts_right_count); - } - else pts_right_count = 0; - - //透视变换 - for (int i = 0; i < pts_left_count; i++) { - pts_inv_l[i][1] = fclip(InverseMapW[pts_left[i][0]][pts_left[i][1]],0,IMAGE_W); - pts_inv_l[i][0] = fclip(InverseMapH[pts_left[i][0]][pts_left[i][1]],0,IMAGE_H); - } - pts_inv_l_count = pts_left_count; - - for (int i = 0; i < pts_right_count; i++) { - pts_inv_r[i][1] = fclip(InverseMapW[pts_right[i][0]][pts_right[i][1]],0,IMAGE_W); - pts_inv_r[i][0] = fclip(InverseMapH[pts_right[i][0]][pts_right[i][1]],0,IMAGE_H); - } - pts_inv_r_count = pts_right_count; - - // 边线滤波 - GetLinesFilter(pts_inv_l, pts_inv_l_count, pts_filter_l, (int) round(FILTER_KERNELSIZE)); - pts_filter_l_count = pts_inv_l_count; - GetLinesFilter(pts_inv_r, pts_inv_r_count, pts_filter_r, (int) round(FILTER_KERNELSIZE)); - pts_filter_r_count = pts_inv_r_count; - - // 边线等距采样 - pts_resample_left_count = sizeof(pts_resample_left) / sizeof(pts_resample_left[0]); - GetLinesResample(pts_filter_l, pts_filter_l_count, pts_resample_left, &pts_resample_left_count, RESAMPLEDIST * PIXPERMETER); - pts_resample_right_count = sizeof(pts_resample_right) / sizeof(pts_resample_right[0]); - GetLinesResample(pts_filter_r, pts_filter_r_count, pts_resample_right, &pts_resample_right_count, RESAMPLEDIST * PIXPERMETER); - - int valid_points_count = 0; - - for (int i = 0; i < pts_resample_left_count; i++) { - int x = pts_resample_left[i][1]; - int y = pts_resample_left[i][0]; - - if (y < IMAGE_H-3 && x > 3 && x < IMAGE_W-3 && y>=3 ) { - pts_resample_left[valid_points_count][0] = pts_resample_left[i][0]; - pts_resample_left[valid_points_count][1] = pts_resample_left[i][1]; - valid_points_count++; - } - } - pts_resample_left_count = valid_points_count; - valid_points_count = 0; - - for (int i = 0; i < pts_resample_right_count; i++) { - int x = pts_resample_right[i][1]; - int y = pts_resample_right[i][0]; - - if (y <= IMAGE_H-3 && x >= 3 && x <= IMAGE_W-3 && y>=3) { - pts_resample_right[valid_points_count][0] = pts_resample_right[i][0]; - pts_resample_right[valid_points_count][1] = pts_resample_right[i][1]; - valid_points_count++; - } - } - - pts_resample_right_count = valid_points_count; - - // 边线角度变化率 - local_angle_points(pts_resample_left, pts_resample_left_count, angle_left, (int) round(ANGLEDIST / RESAMPLEDIST)); - angle_left_num = pts_resample_left_count; - local_angle_points(pts_resample_right, pts_resample_right_count, angle_right, (int) round(ANGLEDIST / RESAMPLEDIST)); - angle_right_num = pts_resample_right_count; - - // 角度变化率非极大值抑制 - nms_angle(angle_left, angle_left_num, angle_new_left, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1); - angle_new_left_num = angle_left_num; - nms_angle(angle_right, angle_right_num, angle_new_right, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1); - angle_new_right_num = angle_right_num; - - // 左右中线跟踪 - GetMidLine_Left(pts_resample_left, pts_resample_left_count, mid_left, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2); - mid_left_count = pts_resample_left_count; - GetMidLine_Right(pts_resample_right, pts_resample_right_count, mid_right, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2); - mid_right_count = pts_resample_right_count; - - -} \ No newline at end of file diff --git a/app/gl_img_process.h b/app/gl_img_process.h deleted file mode 100644 index e745ce1..0000000 --- a/app/gl_img_process.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef IMG_PROCESS -#define IMG_PROCESS - -#include "zf_common_headfile.h" - -void img_processing(void); -void SearchLineAdaptive_Left(uint8_t img_gray[], int32_t block_size, int32_t down_value, int32_t h, int32_t w, int32_t pts[][2], int32_t* line_num); -void SearchLineAdaptive_Right(uint8_t img_gray[], int32_t block_size, int32_t down_value, int32_t h, int32_t w, int32_t pts[][2], int32_t* line_num); - -#endif /* STATE_H_ */ diff --git a/app/gl_state.c b/app/gl_state.c deleted file mode 100644 index 04f94c8..0000000 --- a/app/gl_state.c +++ /dev/null @@ -1,4 +0,0 @@ -#include "gl_state.h" -#include "gl_headfile.h" - -enum state_type_e state_type =0; diff --git a/app/gl_state.h b/app/gl_state.h deleted file mode 100644 index dc762c0..0000000 --- a/app/gl_state.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef STATE_H_ -#define STATE_H_ - -enum state_type_e { - COMMON_STATE = 0, - CROSS_STATE, - HALF_STATE, - CIRCLE_IN_STATE, - CIRCLE_BEGIN_STATE, - CIRCLE_RUNNING_STATE, - CIRCLE_OUT_STATE, - TURN_STATE, - STRAIGHT_STATE, - BREAK_STATE, - BAR_STATE, - RAMP_STATE, - GARAGE_OUT_STATE, - GARAGE_IN_STATE, - GARAGE_STOP_STATE, - GARAGE_PASS_STATE, -}; - -extern enum state_type_e state_type; - -#define CROSS_AIM (0.49f) -#define COMMON_AIM (0.31f) - -#endif /* STATE_H_ */ diff --git a/app/gl_tracking.c b/app/gl_tracking.c deleted file mode 100644 index cc609db..0000000 --- a/app/gl_tracking.c +++ /dev/null @@ -1,133 +0,0 @@ -#include "zf_common_headfile.h" -#include "gl_headfile.h" - -float (*mid_track)[2]; -int32_t mid_track_count; -float near_angle; -float pure_angle; -float (*rpts)[2]; -int rpts_num; - - - -void tracking(){ - - if (pts_resample_left_count < pts_resample_right_count / 2 && pts_resample_left_count < 50) { - track_type = TRACK_RIGHT; - } else if (pts_resample_right_count < pts_resample_left_count / 2 && pts_resample_right_count < 58) { - track_type = TRACK_LEFT; - } else if (pts_resample_left_count < 20 && pts_resample_right_count > pts_resample_left_count) { - track_type = TRACK_RIGHT; - } else if (pts_resample_right_count < 20 && pts_resample_left_count > pts_resample_right_count) { - track_type = TRACK_LEFT; - } - -} - - - -void ElementJudge() { - CheckGarage(); - if (garage_type == GARAGE_NONE) { - CheckCross(); - if (cross_type == CROSS_NONE) { - CheckCircle(); - } - } - - if (garage_type != GARAGE_NONE) - { - cross_type = CROSS_NONE; - circle_type = CIRCLE_NONE; - } - -} - -void ElementRun() { - if (garage_type != GARAGE_NONE) { - RunGarage(); - } - - else if (cross_type != CROSS_NONE) { - RunCross(); - } - - else if (circle_type != CIRCLE_NONE) { - RunCircle(); - } -} - -void MidLineTrack() { - if (cross_type == CROSS_IN) { - if (track_type == TRACK_LEFT) { - mid_track = mid_left; // 这是为了预先分配内存 - GetMidLine_Left(pts_far_resample_left + far_Lpt0_rpts0s_id, pts_far_resample_left_count - far_Lpt0_rpts0s_id, mid_left, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2); - mid_track_count = pts_far_resample_left_count - far_Lpt0_rpts0s_id; - } else { - mid_track = mid_right; // 这是为了预先分配内存 - GetMidLine_Right(pts_far_resample_right + far_Lpt1_rpts1s_id, pts_far_resample_right_count - far_Lpt1_rpts1s_id, mid_right, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2); - mid_track_count =pts_far_resample_right_count - far_Lpt1_rpts1s_id; - } - } else { - if (track_type == TRACK_LEFT) { - mid_track = mid_left; - mid_track_count = mid_left_count; - } else { - mid_track = mid_right; - mid_track_count = mid_right_count; - } - } - - // 车轮对应点 (纯跟踪起始点) - float cx = InverseMapW[(int) (IMAGE_H * 0.75f)][94]; - float cy = InverseMapH[(int) (IMAGE_H * 0.75f)][94]; - - // 找最近点 (起始点中线归一化) - float min_dist = 1e10; - - int begin_id = -1; - for (int i = 0; i < mid_track_count; i++) { - float dx = mid_track[i][1] - cx; - float dy = mid_track[i][0] - cy; - float dist = sqrt(dx * dx + dy * dy); - if (dist < min_dist) { - min_dist = dist; - begin_id = i; - } - } - - if (begin_id >= 0 && mid_track_count - begin_id >= 3){ - // 归一化中线 - mid_track[begin_id][0] = cy; - mid_track[begin_id][1] = cx; - rptsn_num = sizeof(rptsn) / sizeof(rptsn[0]); - GetLinesResample(mid_track + begin_id, mid_track_count - begin_id, rptsn, &rptsn_num, RESAMPLEDIST * PIXPERMETER ); - - // 远预锚点位置 - int aim_idx = clip(round(aim_distance / RESAMPLEDIST), 0, rptsn_num - 1); - - //近锚点位置 - int aim_idx_near = clip(round(0.25 / RESAMPLEDIST), 0, rptsn_num - 1); - - // 计算远锚点偏差值 - float dx = rptsn[aim_idx][1] - cx; - float dy = cy - rptsn[aim_idx][0] + 0.2 * PIXPERMETER; - float dn = sqrt(dx * dx + dy * dy); - //float error = -atan2f(dx, dy) * 180 / PI; - - // 计算近锚点偏差值 - float dx_near = rptsn[aim_idx_near][1] - cx; - float dy_near = cy - rptsn[aim_idx_near][0] + 0.2 * PIXPERMETER; - float dn_near = sqrt(dx_near * dx_near + dy_near * dy_near); - //float error_near = -atan2f(dx_near, dy_near) * 180 / PI; - - //考虑近点 - near_angle = -atanf(PIXPERMETER * 2 * 0.2 * dx_near / dn_near / dn_near) / PI * 180 ; - //考虑远点 - pure_angle = -atanf(PIXPERMETER * 2 * 0.2 * dx/ dn / dn) / PI * 180 ; - - - - } -} - diff --git a/app/gl_tracking.h b/app/gl_tracking.h deleted file mode 100644 index e9f6cb3..0000000 --- a/app/gl_tracking.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef TRACKING -#define TRACKING - - -void tracking(void); -void ElementJudge(void); -void ElementRun(void); -void MidLineTrack(void); - - -#endif /* STATE_H_ */ diff --git a/app/gl_transform_table.c b/app/gl_transform_table.c deleted file mode 100644 index 6950f3c..0000000 --- a/app/gl_transform_table.c +++ /dev/null @@ -1,190 +0,0 @@ -#include "zf_common_headfile.h" -#include "gl_headfile.h" - - -float H_inv[3][3] = {{0.092, -0.116, 7.559}, - {0.002, 0, 2.415}, - {0, -0.001, 0.161}}; - -// 逆变换,俯视->原图 -void transform(float X, float Y, int* x, int* y) { - // Apply inverse transformation - double p[3] = {X, Y, 1.0}; - double q[3] = {0.0, 0.0, 0.0}; - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - q[i] += H_inv[i][j] * p[j]; - } - } - - *x =(int) (q[0] / q[2]); - *y = (int) (q[1] / q[2]); -} - - -const float InverseMapH[80][140] = { -{-17.59, -17.51, -17.44, -17.36, -17.29, -17.21, -17.14, -17.07, -16.99, -16.92, -16.84, -16.77, -16.70, -16.62, -16.55, -16.48, -16.41, -16.34, -16.26, -16.19, -16.12, -16.05, -15.98, -15.91, -15.84, -15.77, -15.70, -15.63, -15.56, -15.49, -15.42, -15.35, -15.28, -15.21, -15.14, -15.07, -15.01, -14.94, -14.87, -14.80, -14.73, -14.67, -14.60, -14.53, -14.47, -14.40, -14.33, -14.27, -14.20, -14.13, -14.07, -14.00, -13.94, -13.87, -13.81, -13.74, -13.68, -13.61, -13.55, -13.49, -13.42, -13.36, -13.29, -13.23, -13.17, -13.10, -13.04, -12.98, -12.92, -12.85, -12.79, -12.73, -12.67, -12.61, -12.54, -12.48, -12.42, -12.36, -12.30, -12.24, -12.18, -12.12, -12.06, -12.00, -11.94, -11.88, -11.82, -11.76, -11.70, -11.64, -11.58, -11.52, -11.46, -11.40, -11.35, -11.29, -11.23, -11.17, -11.11, -11.06, -11.00, -10.94, -10.88, -10.83, -10.77, -10.71, -10.66, -10.60, -10.54, -10.49, -10.43, -10.37, -10.32, -10.26, -10.21, -10.15, -10.10, -10.04, -9.99, -9.93, -9.88, -9.82, -9.77, -9.71, -9.66, -9.61, -9.55, -9.50, -9.44, -9.39, -9.34, -9.28, -9.23, -9.18, -9.13, -9.07, -9.02, -8.97, -8.92, -8.86}, -{-12.23, -12.17, -12.10, -12.04, -11.98, -11.91, -11.85, -11.78, -11.72, -11.66, -11.59, -11.53, -11.47, -11.40, -11.34, -11.28, -11.22, -11.16, -11.09, -11.03, -10.97, -10.91, -10.85, -10.79, -10.73, -10.66, -10.60, -10.54, -10.48, -10.42, -10.36, -10.30, -10.24, -10.18, -10.12, -10.07, -10.01, -9.95, -9.89, -9.83, -9.77, -9.71, -9.66, -9.60, -9.54, -9.48, -9.43, -9.37, -9.31, -9.25, -9.20, -9.14, -9.08, -9.03, -8.97, -8.92, -8.86, -8.80, -8.75, -8.69, -8.64, -8.58, -8.53, -8.47, -8.42, -8.36, -8.31, -8.25, -8.20, -8.15, -8.09, -8.04, -7.98, -7.93, -7.88, -7.82, -7.77, -7.72, -7.66, -7.61, -7.56, -7.51, -7.45, -7.40, -7.35, -7.30, -7.25, -7.19, -7.14, -7.09, -7.04, -6.99, -6.94, -6.89, -6.84, -6.79, -6.74, -6.68, -6.63, -6.58, -6.53, -6.48, -6.43, -6.38, -6.34, -6.29, -6.24, -6.19, -6.14, -6.09, -6.04, -5.99, -5.94, -5.89, -5.85, -5.80, -5.75, -5.70, -5.65, -5.61, -5.56, -5.51, -5.46, -5.42, -5.37, -5.32, -5.28, -5.23, -5.18, -5.14, -5.09, -5.04, -5.00, -4.95, -4.90, -4.86, -4.81, -4.77, -4.72, -4.67}, -{-7.29, -7.23, -7.18, -7.12, -7.07, -7.01, -6.96, -6.90, -6.85, -6.79, -6.74, -6.68, -6.63, -6.58, -6.52, -6.47, -6.42, -6.36, -6.31, -6.26, -6.20, -6.15, -6.10, -6.04, -5.99, -5.94, -5.89, -5.84, -5.78, -5.73, -5.68, -5.63, -5.58, -5.53, -5.47, -5.42, -5.37, -5.32, -5.27, -5.22, -5.17, -5.12, -5.07, -5.02, -4.97, -4.92, -4.87, -4.82, -4.77, -4.72, -4.67, -4.63, -4.58, -4.53, -4.48, -4.43, -4.38, -4.33, -4.29, -4.24, -4.19, -4.14, -4.10, -4.05, -4.00, -3.95, -3.91, -3.86, -3.81, -3.77, -3.72, -3.67, -3.63, -3.58, -3.53, -3.49, -3.44, -3.40, -3.35, -3.30, -3.26, -3.21, -3.17, -3.12, -3.08, -3.03, -2.99, -2.94, -2.90, -2.85, -2.81, -2.77, -2.72, -2.68, -2.63, -2.59, -2.55, -2.50, -2.46, -2.41, -2.37, -2.33, -2.28, -2.24, -2.20, -2.16, -2.11, -2.07, -2.03, -1.99, -1.94, -1.90, -1.86, -1.82, -1.77, -1.73, -1.69, -1.65, -1.61, -1.57, -1.52, -1.48, -1.44, -1.40, -1.36, -1.32, -1.28, -1.24, -1.20, -1.16, -1.12, -1.08, -1.04, -1.00, -0.96, -0.92, -0.88, -0.84, -0.80, -0.76}, -{-2.71, -2.66, -2.61, -2.57, -2.52, -2.47, -2.43, -2.38, -2.33, -2.28, -2.24, -2.19, -2.14, -2.10, -2.05, -2.01, -1.96, -1.91, -1.87, -1.82, -1.78, -1.73, -1.69, -1.64, -1.60, -1.55, -1.51, -1.46, -1.42, -1.37, -1.33, -1.28, -1.24, -1.20, -1.15, -1.11, -1.07, -1.02, -0.98, -0.94, -0.89, -0.85, -0.81, -0.76, -0.72, -0.68, -0.63, -0.59, -0.55, -0.51, -0.47, -0.42, -0.38, -0.34, -0.30, -0.26, -0.21, -0.17, -0.13, -0.09, -0.05, -0.01, 0.03, 0.07, 0.12, 0.16, 0.20, 0.24, 0.28, 0.32, 0.36, 0.40, 0.44, 0.48, 0.52, 0.56, 0.60, 0.64, 0.68, 0.72, 0.75, 0.79, 0.83, 0.87, 0.91, 0.95, 0.99, 1.03, 1.07, 1.10, 1.14, 1.18, 1.22, 1.26, 1.29, 1.33, 1.37, 1.41, 1.45, 1.48, 1.52, 1.56, 1.60, 1.63, 1.67, 1.71, 1.74, 1.78, 1.82, 1.85, 1.89, 1.93, 1.96, 2.00, 2.04, 2.07, 2.11, 2.15, 2.18, 2.22, 2.25, 2.29, 2.32, 2.36, 2.40, 2.43, 2.47, 2.50, 2.54, 2.57, 2.61, 2.64, 2.68, 2.71, 2.75, 2.78, 2.81, 2.85, 2.88, 2.92}, -{1.54, 1.59, 1.63, 1.67, 1.71, 1.75, 1.79, 1.83, 1.87, 1.91, 1.95, 1.99, 2.03, 2.07, 2.11, 2.15, 2.18, 2.22, 2.26, 2.30, 2.34, 2.38, 2.42, 2.46, 2.49, 2.53, 2.57, 2.61, 2.65, 2.69, 2.72, 2.76, 2.80, 2.84, 2.87, 2.91, 2.95, 2.99, 3.02, 3.06, 3.10, 3.13, 3.17, 3.21, 3.25, 3.28, 3.32, 3.35, 3.39, 3.43, 3.46, 3.50, 3.54, 3.57, 3.61, 3.64, 3.68, 3.71, 3.75, 3.78, 3.82, 3.86, 3.89, 3.93, 3.96, 4.00, 4.03, 4.06, 4.10, 4.13, 4.17, 4.20, 4.24, 4.27, 4.31, 4.34, 4.37, 4.41, 4.44, 4.48, 4.51, 4.54, 4.58, 4.61, 4.64, 4.68, 4.71, 4.74, 4.78, 4.81, 4.84, 4.87, 4.91, 4.94, 4.97, 5.01, 5.04, 5.07, 5.10, 5.14, 5.17, 5.20, 5.23, 5.26, 5.30, 5.33, 5.36, 5.39, 5.42, 5.45, 5.49, 5.52, 5.55, 5.58, 5.61, 5.64, 5.67, 5.70, 5.74, 5.77, 5.80, 5.83, 5.86, 5.89, 5.92, 5.95, 5.98, 6.01, 6.04, 6.07, 6.10, 6.13, 6.16, 6.19, 6.22, 6.25, 6.28, 6.31, 6.34, 6.37}, -{5.51, 5.54, 5.58, 5.61, 5.65, 5.68, 5.71, 5.75, 5.78, 5.82, 5.85, 5.88, 5.92, 5.95, 5.98, 6.02, 6.05, 6.08, 6.12, 6.15, 6.18, 6.22, 6.25, 6.28, 6.31, 6.35, 6.38, 6.41, 6.44, 6.48, 6.51, 6.54, 6.57, 6.60, 6.64, 6.67, 6.70, 6.73, 6.76, 6.79, 6.83, 6.86, 6.89, 6.92, 6.95, 6.98, 7.01, 7.04, 7.08, 7.11, 7.14, 7.17, 7.20, 7.23, 7.26, 7.29, 7.32, 7.35, 7.38, 7.41, 7.44, 7.47, 7.50, 7.53, 7.56, 7.59, 7.62, 7.65, 7.68, 7.71, 7.74, 7.77, 7.80, 7.83, 7.86, 7.88, 7.91, 7.94, 7.97, 8.00, 8.03, 8.06, 8.09, 8.11, 8.14, 8.17, 8.20, 8.23, 8.26, 8.28, 8.31, 8.34, 8.37, 8.40, 8.42, 8.45, 8.48, 8.51, 8.54, 8.56, 8.59, 8.62, 8.65, 8.67, 8.70, 8.73, 8.75, 8.78, 8.81, 8.84, 8.86, 8.89, 8.92, 8.94, 8.97, 9.00, 9.02, 9.05, 9.08, 9.10, 9.13, 9.16, 9.18, 9.21, 9.23, 9.26, 9.29, 9.31, 9.34, 9.36, 9.39, 9.42, 9.44, 9.47, 9.49, 9.52, 9.54, 9.57, 9.59, 9.62}, -{9.21, 9.24, 9.27, 9.29, 9.32, 9.35, 9.38, 9.41, 9.44, 9.47, 9.49, 9.52, 9.55, 9.58, 9.61, 9.64, 9.66, 9.69, 9.72, 9.75, 9.78, 9.80, 9.83, 9.86, 9.89, 9.91, 9.94, 9.97, 10.00, 10.02, 10.05, 10.08, 10.10, 10.13, 10.16, 10.19, 10.21, 10.24, 10.27, 10.29, 10.32, 10.35, 10.37, 10.40, 10.42, 10.45, 10.48, 10.50, 10.53, 10.56, 10.58, 10.61, 10.63, 10.66, 10.68, 10.71, 10.74, 10.76, 10.79, 10.81, 10.84, 10.86, 10.89, 10.91, 10.94, 10.96, 10.99, 11.01, 11.04, 11.06, 11.09, 11.11, 11.14, 11.16, 11.19, 11.21, 11.24, 11.26, 11.29, 11.31, 11.33, 11.36, 11.38, 11.41, 11.43, 11.46, 11.48, 11.50, 11.53, 11.55, 11.57, 11.60, 11.62, 11.65, 11.67, 11.69, 11.72, 11.74, 11.76, 11.79, 11.81, 11.83, 11.86, 11.88, 11.90, 11.93, 11.95, 11.97, 12.00, 12.02, 12.04, 12.06, 12.09, 12.11, 12.13, 12.15, 12.18, 12.20, 12.22, 12.24, 12.27, 12.29, 12.31, 12.33, 12.36, 12.38, 12.40, 12.42, 12.44, 12.47, 12.49, 12.51, 12.53, 12.55, 12.58, 12.60, 12.62, 12.64, 12.66, 12.68}, -{12.67, 12.69, 12.72, 12.74, 12.77, 12.79, 12.81, 12.84, 12.86, 12.89, 12.91, 12.93, 12.96, 12.98, 13.00, 13.03, 13.05, 13.07, 13.10, 13.12, 13.14, 13.17, 13.19, 13.21, 13.24, 13.26, 13.28, 13.30, 13.33, 13.35, 13.37, 13.40, 13.42, 13.44, 13.46, 13.49, 13.51, 13.53, 13.55, 13.57, 13.60, 13.62, 13.64, 13.66, 13.68, 13.71, 13.73, 13.75, 13.77, 13.79, 13.82, 13.84, 13.86, 13.88, 13.90, 13.92, 13.94, 13.97, 13.99, 14.01, 14.03, 14.05, 14.07, 14.09, 14.11, 14.14, 14.16, 14.18, 14.20, 14.22, 14.24, 14.26, 14.28, 14.30, 14.32, 14.34, 14.36, 14.38, 14.41, 14.43, 14.45, 14.47, 14.49, 14.51, 14.53, 14.55, 14.57, 14.59, 14.61, 14.63, 14.65, 14.67, 14.69, 14.71, 14.73, 14.75, 14.77, 14.79, 14.81, 14.83, 14.84, 14.86, 14.88, 14.90, 14.92, 14.94, 14.96, 14.98, 15.00, 15.02, 15.04, 15.06, 15.08, 15.10, 15.11, 15.13, 15.15, 15.17, 15.19, 15.21, 15.23, 15.25, 15.26, 15.28, 15.30, 15.32, 15.34, 15.36, 15.38, 15.39, 15.41, 15.43, 15.45, 15.47, 15.49, 15.50, 15.52, 15.54, 15.56, 15.58}, -{15.92, 15.94, 15.96, 15.98, 16.00, 16.02, 16.04, 16.05, 16.07, 16.09, 16.11, 16.13, 16.15, 16.17, 16.19, 16.21, 16.23, 16.25, 16.27, 16.29, 16.31, 16.32, 16.34, 16.36, 16.38, 16.40, 16.42, 16.44, 16.46, 16.48, 16.49, 16.51, 16.53, 16.55, 16.57, 16.59, 16.61, 16.62, 16.64, 16.66, 16.68, 16.70, 16.72, 16.73, 16.75, 16.77, 16.79, 16.81, 16.82, 16.84, 16.86, 16.88, 16.90, 16.91, 16.93, 16.95, 16.97, 16.98, 17.00, 17.02, 17.04, 17.05, 17.07, 17.09, 17.11, 17.12, 17.14, 17.16, 17.18, 17.19, 17.21, 17.23, 17.24, 17.26, 17.28, 17.29, 17.31, 17.33, 17.35, 17.36, 17.38, 17.40, 17.41, 17.43, 17.45, 17.46, 17.48, 17.50, 17.51, 17.53, 17.55, 17.56, 17.58, 17.59, 17.61, 17.63, 17.64, 17.66, 17.68, 17.69, 17.71, 17.72, 17.74, 17.76, 17.77, 17.79, 17.81, 17.82, 17.84, 17.85, 17.87, 17.88, 17.90, 17.92, 17.93, 17.95, 17.96, 17.98, 17.99, 18.01, 18.03, 18.04, 18.06, 18.07, 18.09, 18.10, 18.12, 18.13, 18.15, 18.16, 18.18, 18.19, 18.21, 18.22, 18.24, 18.25, 18.27, 18.29, 18.30, 18.32}, -{18.97, 18.98, 19.00, 19.02, 19.03, 19.05, 19.06, 19.08, 19.09, 19.11, 19.13, 19.14, 19.16, 19.17, 19.19, 19.20, 19.22, 19.24, 19.25, 19.27, 19.28, 19.30, 19.31, 19.33, 19.34, 19.36, 19.37, 19.39, 19.40, 19.42, 19.43, 19.45, 19.46, 19.48, 19.49, 19.51, 19.52, 19.54, 19.55, 19.57, 19.58, 19.60, 19.61, 19.63, 19.64, 19.66, 19.67, 19.69, 19.70, 19.71, 19.73, 19.74, 19.76, 19.77, 19.79, 19.80, 19.82, 19.83, 19.84, 19.86, 19.87, 19.89, 19.90, 19.91, 19.93, 19.94, 19.96, 19.97, 19.98, 20.00, 20.01, 20.03, 20.04, 20.05, 20.07, 20.08, 20.10, 20.11, 20.12, 20.14, 20.15, 20.16, 20.18, 20.19, 20.20, 20.22, 20.23, 20.24, 20.26, 20.27, 20.28, 20.30, 20.31, 20.32, 20.34, 20.35, 20.36, 20.38, 20.39, 20.40, 20.42, 20.43, 20.44, 20.46, 20.47, 20.48, 20.49, 20.51, 20.52, 20.53, 20.55, 20.56, 20.57, 20.58, 20.60, 20.61, 20.62, 20.64, 20.65, 20.66, 20.67, 20.69, 20.70, 20.71, 20.72, 20.74, 20.75, 20.76, 20.77, 20.79, 20.80, 20.81, 20.82, 20.84, 20.85, 20.86, 20.87, 20.88, 20.90, 20.91}, -{21.84, 21.85, 21.87, 21.88, 21.89, 21.90, 21.91, 21.93, 21.94, 21.95, 21.96, 21.98, 21.99, 22.00, 22.01, 22.03, 22.04, 22.05, 22.06, 22.07, 22.09, 22.10, 22.11, 22.12, 22.13, 22.15, 22.16, 22.17, 22.18, 22.19, 22.21, 22.22, 22.23, 22.24, 22.25, 22.27, 22.28, 22.29, 22.30, 22.31, 22.32, 22.34, 22.35, 22.36, 22.37, 22.38, 22.39, 22.40, 22.42, 22.43, 22.44, 22.45, 22.46, 22.47, 22.48, 22.50, 22.51, 22.52, 22.53, 22.54, 22.55, 22.56, 22.57, 22.58, 22.60, 22.61, 22.62, 22.63, 22.64, 22.65, 22.66, 22.67, 22.68, 22.69, 22.71, 22.72, 22.73, 22.74, 22.75, 22.76, 22.77, 22.78, 22.79, 22.80, 22.81, 22.82, 22.83, 22.84, 22.86, 22.87, 22.88, 22.89, 22.90, 22.91, 22.92, 22.93, 22.94, 22.95, 22.96, 22.97, 22.98, 22.99, 23.00, 23.01, 23.02, 23.03, 23.04, 23.05, 23.06, 23.07, 23.08, 23.09, 23.10, 23.11, 23.12, 23.13, 23.14, 23.15, 23.16, 23.17, 23.18, 23.19, 23.20, 23.21, 23.22, 23.23, 23.24, 23.25, 23.26, 23.27, 23.28, 23.29, 23.30, 23.31, 23.32, 23.33, 23.34, 23.35, 23.36, 23.37}, -{24.55, 24.56, 24.57, 24.58, 24.59, 24.60, 24.61, 24.61, 24.62, 24.63, 24.64, 24.65, 24.66, 24.67, 24.68, 24.69, 24.70, 24.71, 24.72, 24.73, 24.74, 24.74, 24.75, 24.76, 24.77, 24.78, 24.79, 24.80, 24.81, 24.82, 24.83, 24.83, 24.84, 24.85, 24.86, 24.87, 24.88, 24.89, 24.90, 24.91, 24.91, 24.92, 24.93, 24.94, 24.95, 24.96, 24.97, 24.98, 24.98, 24.99, 25.00, 25.01, 25.02, 25.03, 25.04, 25.04, 25.05, 25.06, 25.07, 25.08, 25.09, 25.10, 25.10, 25.11, 25.12, 25.13, 25.14, 25.15, 25.15, 25.16, 25.17, 25.18, 25.19, 25.20, 25.20, 25.21, 25.22, 25.23, 25.24, 25.24, 25.25, 25.26, 25.27, 25.28, 25.29, 25.29, 25.30, 25.31, 25.32, 25.33, 25.33, 25.34, 25.35, 25.36, 25.37, 25.37, 25.38, 25.39, 25.40, 25.40, 25.41, 25.42, 25.43, 25.44, 25.44, 25.45, 25.46, 25.47, 25.48, 25.48, 25.49, 25.50, 25.51, 25.51, 25.52, 25.53, 25.54, 25.54, 25.55, 25.56, 25.57, 25.57, 25.58, 25.59, 25.60, 25.60, 25.61, 25.62, 25.63, 25.63, 25.64, 25.65, 25.66, 25.66, 25.67, 25.68, 25.69, 25.69, 25.70, 25.71}, -{27.11, 27.11, 27.12, 27.13, 27.13, 27.14, 27.15, 27.15, 27.16, 27.17, 27.17, 27.18, 27.19, 27.19, 27.20, 27.21, 27.21, 27.22, 27.23, 27.23, 27.24, 27.25, 27.25, 27.26, 27.27, 27.27, 27.28, 27.29, 27.29, 27.30, 27.30, 27.31, 27.32, 27.32, 27.33, 27.34, 27.34, 27.35, 27.35, 27.36, 27.37, 27.37, 27.38, 27.39, 27.39, 27.40, 27.40, 27.41, 27.42, 27.42, 27.43, 27.44, 27.44, 27.45, 27.45, 27.46, 27.47, 27.47, 27.48, 27.48, 27.49, 27.50, 27.50, 27.51, 27.51, 27.52, 27.53, 27.53, 27.54, 27.54, 27.55, 27.56, 27.56, 27.57, 27.57, 27.58, 27.58, 27.59, 27.60, 27.60, 27.61, 27.61, 27.62, 27.63, 27.63, 27.64, 27.64, 27.65, 27.65, 27.66, 27.67, 27.67, 27.68, 27.68, 27.69, 27.69, 27.70, 27.71, 27.71, 27.72, 27.72, 27.73, 27.73, 27.74, 27.74, 27.75, 27.76, 27.76, 27.77, 27.77, 27.78, 27.78, 27.79, 27.79, 27.80, 27.80, 27.81, 27.82, 27.82, 27.83, 27.83, 27.84, 27.84, 27.85, 27.85, 27.86, 27.86, 27.87, 27.87, 27.88, 27.89, 27.89, 27.90, 27.90, 27.91, 27.91, 27.92, 27.92, 27.93, 27.93}, -{29.53, 29.53, 29.54, 29.54, 29.55, 29.55, 29.55, 29.56, 29.56, 29.57, 29.57, 29.58, 29.58, 29.58, 29.59, 29.59, 29.60, 29.60, 29.60, 29.61, 29.61, 29.62, 29.62, 29.62, 29.63, 29.63, 29.64, 29.64, 29.64, 29.65, 29.65, 29.66, 29.66, 29.66, 29.67, 29.67, 29.68, 29.68, 29.68, 29.69, 29.69, 29.70, 29.70, 29.70, 29.71, 29.71, 29.72, 29.72, 29.72, 29.73, 29.73, 29.74, 29.74, 29.74, 29.75, 29.75, 29.76, 29.76, 29.76, 29.77, 29.77, 29.77, 29.78, 29.78, 29.79, 29.79, 29.79, 29.80, 29.80, 29.80, 29.81, 29.81, 29.82, 29.82, 29.82, 29.83, 29.83, 29.83, 29.84, 29.84, 29.85, 29.85, 29.85, 29.86, 29.86, 29.86, 29.87, 29.87, 29.87, 29.88, 29.88, 29.89, 29.89, 29.89, 29.90, 29.90, 29.90, 29.91, 29.91, 29.91, 29.92, 29.92, 29.92, 29.93, 29.93, 29.94, 29.94, 29.94, 29.95, 29.95, 29.95, 29.96, 29.96, 29.96, 29.97, 29.97, 29.97, 29.98, 29.98, 29.98, 29.99, 29.99, 29.99, 30.00, 30.00, 30.00, 30.01, 30.01, 30.01, 30.02, 30.02, 30.02, 30.03, 30.03, 30.03, 30.04, 30.04, 30.04, 30.05, 30.05}, -{31.82, 31.83, 31.83, 31.83, 31.83, 31.83, 31.84, 31.84, 31.84, 31.84, 31.84, 31.84, 31.85, 31.85, 31.85, 31.85, 31.85, 31.86, 31.86, 31.86, 31.86, 31.86, 31.87, 31.87, 31.87, 31.87, 31.87, 31.88, 31.88, 31.88, 31.88, 31.88, 31.89, 31.89, 31.89, 31.89, 31.89, 31.90, 31.90, 31.90, 31.90, 31.90, 31.90, 31.91, 31.91, 31.91, 31.91, 31.91, 31.92, 31.92, 31.92, 31.92, 31.92, 31.92, 31.93, 31.93, 31.93, 31.93, 31.93, 31.94, 31.94, 31.94, 31.94, 31.94, 31.94, 31.95, 31.95, 31.95, 31.95, 31.95, 31.96, 31.96, 31.96, 31.96, 31.96, 31.96, 31.97, 31.97, 31.97, 31.97, 31.97, 31.98, 31.98, 31.98, 31.98, 31.98, 31.98, 31.99, 31.99, 31.99, 31.99, 31.99, 31.99, 32.00, 32.00, 32.00, 32.00, 32.00, 32.00, 32.01, 32.01, 32.01, 32.01, 32.01, 32.01, 32.02, 32.02, 32.02, 32.02, 32.02, 32.02, 32.03, 32.03, 32.03, 32.03, 32.03, 32.03, 32.04, 32.04, 32.04, 32.04, 32.04, 32.04, 32.05, 32.05, 32.05, 32.05, 32.05, 32.05, 32.06, 32.06, 32.06, 32.06, 32.06, 32.06, 32.07, 32.07, 32.07, 32.07, 32.07}, -{34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00}, -{36.07, 36.07, 36.06, 36.06, 36.06, 36.06, 36.06, 36.06, 36.05, 36.05, 36.05, 36.05, 36.05, 36.05, 36.04, 36.04, 36.04, 36.04, 36.04, 36.03, 36.03, 36.03, 36.03, 36.03, 36.03, 36.02, 36.02, 36.02, 36.02, 36.02, 36.02, 36.01, 36.01, 36.01, 36.01, 36.01, 36.00, 36.00, 36.00, 36.00, 36.00, 36.00, 35.99, 35.99, 35.99, 35.99, 35.99, 35.99, 35.98, 35.98, 35.98, 35.98, 35.98, 35.98, 35.97, 35.97, 35.97, 35.97, 35.97, 35.97, 35.96, 35.96, 35.96, 35.96, 35.96, 35.96, 35.95, 35.95, 35.95, 35.95, 35.95, 35.95, 35.95, 35.94, 35.94, 35.94, 35.94, 35.94, 35.94, 35.93, 35.93, 35.93, 35.93, 35.93, 35.93, 35.92, 35.92, 35.92, 35.92, 35.92, 35.92, 35.92, 35.91, 35.91, 35.91, 35.91, 35.91, 35.91, 35.90, 35.90, 35.90, 35.90, 35.90, 35.90, 35.89, 35.89, 35.89, 35.89, 35.89, 35.89, 35.89, 35.88, 35.88, 35.88, 35.88, 35.88, 35.88, 35.88, 35.87, 35.87, 35.87, 35.87, 35.87, 35.87, 35.86, 35.86, 35.86, 35.86, 35.86, 35.86, 35.86, 35.85, 35.85, 35.85, 35.85, 35.85, 35.85, 35.85, 35.84, 35.84}, -{38.04, 38.03, 38.03, 38.03, 38.02, 38.02, 38.02, 38.01, 38.01, 38.01, 38.00, 38.00, 38.00, 37.99, 37.99, 37.99, 37.98, 37.98, 37.98, 37.97, 37.97, 37.96, 37.96, 37.96, 37.95, 37.95, 37.95, 37.94, 37.94, 37.94, 37.94, 37.93, 37.93, 37.93, 37.92, 37.92, 37.92, 37.91, 37.91, 37.91, 37.90, 37.90, 37.90, 37.89, 37.89, 37.89, 37.88, 37.88, 37.88, 37.87, 37.87, 37.87, 37.86, 37.86, 37.86, 37.85, 37.85, 37.85, 37.84, 37.84, 37.84, 37.84, 37.83, 37.83, 37.83, 37.82, 37.82, 37.82, 37.81, 37.81, 37.81, 37.80, 37.80, 37.80, 37.80, 37.79, 37.79, 37.79, 37.78, 37.78, 37.78, 37.77, 37.77, 37.77, 37.76, 37.76, 37.76, 37.76, 37.75, 37.75, 37.75, 37.74, 37.74, 37.74, 37.73, 37.73, 37.73, 37.73, 37.72, 37.72, 37.72, 37.71, 37.71, 37.71, 37.71, 37.70, 37.70, 37.70, 37.69, 37.69, 37.69, 37.68, 37.68, 37.68, 37.68, 37.67, 37.67, 37.67, 37.66, 37.66, 37.66, 37.66, 37.65, 37.65, 37.65, 37.64, 37.64, 37.64, 37.64, 37.63, 37.63, 37.63, 37.63, 37.62, 37.62, 37.62, 37.61, 37.61, 37.61, 37.61}, -{39.91, 39.91, 39.90, 39.90, 39.89, 39.89, 39.88, 39.88, 39.87, 39.87, 39.86, 39.86, 39.85, 39.85, 39.84, 39.84, 39.83, 39.83, 39.82, 39.82, 39.81, 39.81, 39.80, 39.80, 39.79, 39.79, 39.78, 39.78, 39.78, 39.77, 39.77, 39.76, 39.76, 39.75, 39.75, 39.74, 39.74, 39.73, 39.73, 39.72, 39.72, 39.71, 39.71, 39.71, 39.70, 39.70, 39.69, 39.69, 39.68, 39.68, 39.67, 39.67, 39.66, 39.66, 39.65, 39.65, 39.65, 39.64, 39.64, 39.63, 39.63, 39.62, 39.62, 39.61, 39.61, 39.61, 39.60, 39.60, 39.59, 39.59, 39.58, 39.58, 39.57, 39.57, 39.57, 39.56, 39.56, 39.55, 39.55, 39.54, 39.54, 39.53, 39.53, 39.53, 39.52, 39.52, 39.51, 39.51, 39.50, 39.50, 39.50, 39.49, 39.49, 39.48, 39.48, 39.47, 39.47, 39.47, 39.46, 39.46, 39.45, 39.45, 39.45, 39.44, 39.44, 39.43, 39.43, 39.42, 39.42, 39.42, 39.41, 39.41, 39.40, 39.40, 39.40, 39.39, 39.39, 39.38, 39.38, 39.37, 39.37, 39.37, 39.36, 39.36, 39.35, 39.35, 39.35, 39.34, 39.34, 39.33, 39.33, 39.33, 39.32, 39.32, 39.31, 39.31, 39.31, 39.30, 39.30, 39.29}, -{41.70, 41.69, 41.69, 41.68, 41.67, 41.67, 41.66, 41.65, 41.65, 41.64, 41.64, 41.63, 41.62, 41.62, 41.61, 41.61, 41.60, 41.59, 41.59, 41.58, 41.57, 41.57, 41.56, 41.56, 41.55, 41.54, 41.54, 41.53, 41.53, 41.52, 41.51, 41.51, 41.50, 41.50, 41.49, 41.48, 41.48, 41.47, 41.47, 41.46, 41.45, 41.45, 41.44, 41.44, 41.43, 41.42, 41.42, 41.41, 41.41, 41.40, 41.40, 41.39, 41.38, 41.38, 41.37, 41.37, 41.36, 41.36, 41.35, 41.34, 41.34, 41.33, 41.33, 41.32, 41.32, 41.31, 41.30, 41.30, 41.29, 41.29, 41.28, 41.28, 41.27, 41.26, 41.26, 41.25, 41.25, 41.24, 41.24, 41.23, 41.23, 41.22, 41.21, 41.21, 41.20, 41.20, 41.19, 41.19, 41.18, 41.18, 41.17, 41.16, 41.16, 41.15, 41.15, 41.14, 41.14, 41.13, 41.13, 41.12, 41.12, 41.11, 41.10, 41.10, 41.09, 41.09, 41.08, 41.08, 41.07, 41.07, 41.06, 41.06, 41.05, 41.05, 41.04, 41.04, 41.03, 41.03, 41.02, 41.01, 41.01, 41.00, 41.00, 40.99, 40.99, 40.98, 40.98, 40.97, 40.97, 40.96, 40.96, 40.95, 40.95, 40.94, 40.94, 40.93, 40.93, 40.92, 40.92, 40.91}, -{43.41, 43.40, 43.39, 43.38, 43.38, 43.37, 43.36, 43.35, 43.35, 43.34, 43.33, 43.32, 43.32, 43.31, 43.30, 43.29, 43.29, 43.28, 43.27, 43.26, 43.26, 43.25, 43.24, 43.24, 43.23, 43.22, 43.21, 43.21, 43.20, 43.19, 43.18, 43.18, 43.17, 43.16, 43.16, 43.15, 43.14, 43.13, 43.13, 43.12, 43.11, 43.11, 43.10, 43.09, 43.09, 43.08, 43.07, 43.06, 43.06, 43.05, 43.04, 43.04, 43.03, 43.02, 43.02, 43.01, 43.00, 42.99, 42.99, 42.98, 42.97, 42.97, 42.96, 42.95, 42.95, 42.94, 42.93, 42.93, 42.92, 42.91, 42.91, 42.90, 42.89, 42.89, 42.88, 42.87, 42.87, 42.86, 42.85, 42.85, 42.84, 42.83, 42.83, 42.82, 42.81, 42.81, 42.80, 42.79, 42.79, 42.78, 42.77, 42.77, 42.76, 42.75, 42.75, 42.74, 42.73, 42.73, 42.72, 42.71, 42.71, 42.70, 42.70, 42.69, 42.68, 42.68, 42.67, 42.66, 42.66, 42.65, 42.64, 42.64, 42.63, 42.62, 42.62, 42.61, 42.61, 42.60, 42.59, 42.59, 42.58, 42.57, 42.57, 42.56, 42.56, 42.55, 42.54, 42.54, 42.53, 42.52, 42.52, 42.51, 42.51, 42.50, 42.49, 42.49, 42.48, 42.48, 42.47, 42.46}, -{45.04, 45.03, 45.02, 45.01, 45.00, 44.99, 44.99, 44.98, 44.97, 44.96, 44.95, 44.94, 44.93, 44.93, 44.92, 44.91, 44.90, 44.89, 44.88, 44.87, 44.87, 44.86, 44.85, 44.84, 44.83, 44.82, 44.82, 44.81, 44.80, 44.79, 44.78, 44.78, 44.77, 44.76, 44.75, 44.74, 44.73, 44.73, 44.72, 44.71, 44.70, 44.69, 44.69, 44.68, 44.67, 44.66, 44.65, 44.64, 44.64, 44.63, 44.62, 44.61, 44.60, 44.60, 44.59, 44.58, 44.57, 44.56, 44.56, 44.55, 44.54, 44.53, 44.53, 44.52, 44.51, 44.50, 44.49, 44.49, 44.48, 44.47, 44.46, 44.46, 44.45, 44.44, 44.43, 44.42, 44.42, 44.41, 44.40, 44.39, 44.39, 44.38, 44.37, 44.36, 44.36, 44.35, 44.34, 44.33, 44.32, 44.32, 44.31, 44.30, 44.29, 44.29, 44.28, 44.27, 44.26, 44.26, 44.25, 44.24, 44.23, 44.23, 44.22, 44.21, 44.21, 44.20, 44.19, 44.18, 44.18, 44.17, 44.16, 44.15, 44.15, 44.14, 44.13, 44.12, 44.12, 44.11, 44.10, 44.10, 44.09, 44.08, 44.07, 44.07, 44.06, 44.05, 44.05, 44.04, 44.03, 44.02, 44.02, 44.01, 44.00, 44.00, 43.99, 43.98, 43.97, 43.97, 43.96, 43.95}, -{46.60, 46.59, 46.58, 46.57, 46.56, 46.55, 46.54, 46.53, 46.52, 46.51, 46.50, 46.49, 46.48, 46.47, 46.46, 46.45, 46.44, 46.44, 46.43, 46.42, 46.41, 46.40, 46.39, 46.38, 46.37, 46.36, 46.35, 46.34, 46.33, 46.32, 46.31, 46.30, 46.30, 46.29, 46.28, 46.27, 46.26, 46.25, 46.24, 46.23, 46.22, 46.21, 46.20, 46.20, 46.19, 46.18, 46.17, 46.16, 46.15, 46.14, 46.13, 46.12, 46.11, 46.11, 46.10, 46.09, 46.08, 46.07, 46.06, 46.05, 46.04, 46.03, 46.03, 46.02, 46.01, 46.00, 45.99, 45.98, 45.97, 45.96, 45.96, 45.95, 45.94, 45.93, 45.92, 45.91, 45.90, 45.90, 45.89, 45.88, 45.87, 45.86, 45.85, 45.84, 45.84, 45.83, 45.82, 45.81, 45.80, 45.79, 45.78, 45.78, 45.77, 45.76, 45.75, 45.74, 45.73, 45.73, 45.72, 45.71, 45.70, 45.69, 45.68, 45.68, 45.67, 45.66, 45.65, 45.64, 45.63, 45.63, 45.62, 45.61, 45.60, 45.59, 45.59, 45.58, 45.57, 45.56, 45.55, 45.54, 45.54, 45.53, 45.52, 45.51, 45.50, 45.50, 45.49, 45.48, 45.47, 45.46, 45.46, 45.45, 45.44, 45.43, 45.42, 45.42, 45.41, 45.40, 45.39, 45.38}, -{48.09, 48.08, 48.07, 48.06, 48.05, 48.04, 48.03, 48.02, 48.01, 48.00, 47.99, 47.98, 47.97, 47.96, 47.94, 47.93, 47.92, 47.91, 47.90, 47.89, 47.88, 47.87, 47.86, 47.85, 47.84, 47.83, 47.82, 47.81, 47.80, 47.79, 47.78, 47.77, 47.76, 47.75, 47.74, 47.73, 47.72, 47.71, 47.70, 47.69, 47.68, 47.67, 47.66, 47.65, 47.64, 47.63, 47.62, 47.61, 47.60, 47.59, 47.58, 47.57, 47.56, 47.55, 47.54, 47.53, 47.52, 47.51, 47.50, 47.49, 47.48, 47.47, 47.47, 47.46, 47.45, 47.44, 47.43, 47.42, 47.41, 47.40, 47.39, 47.38, 47.37, 47.36, 47.35, 47.34, 47.33, 47.32, 47.31, 47.30, 47.29, 47.28, 47.27, 47.27, 47.26, 47.25, 47.24, 47.23, 47.22, 47.21, 47.20, 47.19, 47.18, 47.17, 47.16, 47.15, 47.14, 47.14, 47.13, 47.12, 47.11, 47.10, 47.09, 47.08, 47.07, 47.06, 47.05, 47.04, 47.04, 47.03, 47.02, 47.01, 47.00, 46.99, 46.98, 46.97, 46.96, 46.95, 46.95, 46.94, 46.93, 46.92, 46.91, 46.90, 46.89, 46.88, 46.87, 46.87, 46.86, 46.85, 46.84, 46.83, 46.82, 46.81, 46.80, 46.80, 46.79, 46.78, 46.77, 46.76}, -{49.52, 49.51, 49.50, 49.49, 49.48, 49.47, 49.46, 49.44, 49.43, 49.42, 49.41, 49.40, 49.39, 49.38, 49.37, 49.35, 49.34, 49.33, 49.32, 49.31, 49.30, 49.29, 49.28, 49.27, 49.25, 49.24, 49.23, 49.22, 49.21, 49.20, 49.19, 49.18, 49.17, 49.16, 49.15, 49.13, 49.12, 49.11, 49.10, 49.09, 49.08, 49.07, 49.06, 49.05, 49.04, 49.03, 49.02, 49.01, 48.99, 48.98, 48.97, 48.96, 48.95, 48.94, 48.93, 48.92, 48.91, 48.90, 48.89, 48.88, 48.87, 48.86, 48.85, 48.84, 48.83, 48.82, 48.81, 48.80, 48.79, 48.77, 48.76, 48.75, 48.74, 48.73, 48.72, 48.71, 48.70, 48.69, 48.68, 48.67, 48.66, 48.65, 48.64, 48.63, 48.62, 48.61, 48.60, 48.59, 48.58, 48.57, 48.56, 48.55, 48.54, 48.53, 48.52, 48.51, 48.50, 48.49, 48.48, 48.47, 48.46, 48.45, 48.44, 48.43, 48.42, 48.41, 48.40, 48.39, 48.38, 48.37, 48.36, 48.35, 48.34, 48.33, 48.32, 48.31, 48.30, 48.30, 48.29, 48.28, 48.27, 48.26, 48.25, 48.24, 48.23, 48.22, 48.21, 48.20, 48.19, 48.18, 48.17, 48.16, 48.15, 48.14, 48.13, 48.12, 48.11, 48.10, 48.09, 48.09}, -{50.90, 50.89, 50.87, 50.86, 50.85, 50.84, 50.82, 50.81, 50.80, 50.79, 50.78, 50.76, 50.75, 50.74, 50.73, 50.72, 50.70, 50.69, 50.68, 50.67, 50.66, 50.65, 50.63, 50.62, 50.61, 50.60, 50.59, 50.58, 50.56, 50.55, 50.54, 50.53, 50.52, 50.51, 50.49, 50.48, 50.47, 50.46, 50.45, 50.44, 50.42, 50.41, 50.40, 50.39, 50.38, 50.37, 50.36, 50.34, 50.33, 50.32, 50.31, 50.30, 50.29, 50.28, 50.27, 50.25, 50.24, 50.23, 50.22, 50.21, 50.20, 50.19, 50.18, 50.16, 50.15, 50.14, 50.13, 50.12, 50.11, 50.10, 50.09, 50.08, 50.07, 50.05, 50.04, 50.03, 50.02, 50.01, 50.00, 49.99, 49.98, 49.97, 49.96, 49.95, 49.93, 49.92, 49.91, 49.90, 49.89, 49.88, 49.87, 49.86, 49.85, 49.84, 49.83, 49.82, 49.81, 49.79, 49.78, 49.77, 49.76, 49.75, 49.74, 49.73, 49.72, 49.71, 49.70, 49.69, 49.68, 49.67, 49.66, 49.65, 49.64, 49.63, 49.62, 49.61, 49.60, 49.59, 49.57, 49.56, 49.55, 49.54, 49.53, 49.52, 49.51, 49.50, 49.49, 49.48, 49.47, 49.46, 49.45, 49.44, 49.43, 49.42, 49.41, 49.40, 49.39, 49.38, 49.37, 49.36}, -{52.22, 52.20, 52.19, 52.18, 52.17, 52.15, 52.14, 52.13, 52.11, 52.10, 52.09, 52.08, 52.06, 52.05, 52.04, 52.03, 52.01, 52.00, 51.99, 51.98, 51.96, 51.95, 51.94, 51.93, 51.91, 51.90, 51.89, 51.88, 51.86, 51.85, 51.84, 51.83, 51.81, 51.80, 51.79, 51.78, 51.77, 51.75, 51.74, 51.73, 51.72, 51.70, 51.69, 51.68, 51.67, 51.66, 51.64, 51.63, 51.62, 51.61, 51.60, 51.58, 51.57, 51.56, 51.55, 51.54, 51.52, 51.51, 51.50, 51.49, 51.48, 51.47, 51.45, 51.44, 51.43, 51.42, 51.41, 51.39, 51.38, 51.37, 51.36, 51.35, 51.34, 51.32, 51.31, 51.30, 51.29, 51.28, 51.27, 51.26, 51.24, 51.23, 51.22, 51.21, 51.20, 51.19, 51.17, 51.16, 51.15, 51.14, 51.13, 51.12, 51.11, 51.10, 51.08, 51.07, 51.06, 51.05, 51.04, 51.03, 51.02, 51.01, 50.99, 50.98, 50.97, 50.96, 50.95, 50.94, 50.93, 50.92, 50.91, 50.89, 50.88, 50.87, 50.86, 50.85, 50.84, 50.83, 50.82, 50.81, 50.80, 50.78, 50.77, 50.76, 50.75, 50.74, 50.73, 50.72, 50.71, 50.70, 50.69, 50.68, 50.67, 50.65, 50.64, 50.63, 50.62, 50.61, 50.60, 50.59}, -{53.48, 53.47, 53.46, 53.44, 53.43, 53.42, 53.40, 53.39, 53.38, 53.36, 53.35, 53.34, 53.32, 53.31, 53.30, 53.28, 53.27, 53.26, 53.24, 53.23, 53.22, 53.21, 53.19, 53.18, 53.17, 53.15, 53.14, 53.13, 53.11, 53.10, 53.09, 53.08, 53.06, 53.05, 53.04, 53.02, 53.01, 53.00, 52.99, 52.97, 52.96, 52.95, 52.93, 52.92, 52.91, 52.90, 52.88, 52.87, 52.86, 52.85, 52.83, 52.82, 52.81, 52.80, 52.78, 52.77, 52.76, 52.75, 52.73, 52.72, 52.71, 52.70, 52.68, 52.67, 52.66, 52.65, 52.63, 52.62, 52.61, 52.60, 52.58, 52.57, 52.56, 52.55, 52.54, 52.52, 52.51, 52.50, 52.49, 52.47, 52.46, 52.45, 52.44, 52.43, 52.41, 52.40, 52.39, 52.38, 52.37, 52.35, 52.34, 52.33, 52.32, 52.31, 52.29, 52.28, 52.27, 52.26, 52.25, 52.24, 52.22, 52.21, 52.20, 52.19, 52.18, 52.17, 52.15, 52.14, 52.13, 52.12, 52.11, 52.10, 52.08, 52.07, 52.06, 52.05, 52.04, 52.03, 52.01, 52.00, 51.99, 51.98, 51.97, 51.96, 51.95, 51.93, 51.92, 51.91, 51.90, 51.89, 51.88, 51.87, 51.85, 51.84, 51.83, 51.82, 51.81, 51.80, 51.79, 51.78}, -{54.70, 54.69, 54.67, 54.66, 54.65, 54.63, 54.62, 54.60, 54.59, 54.58, 54.56, 54.55, 54.54, 54.52, 54.51, 54.49, 54.48, 54.47, 54.45, 54.44, 54.43, 54.41, 54.40, 54.38, 54.37, 54.36, 54.34, 54.33, 54.32, 54.30, 54.29, 54.28, 54.26, 54.25, 54.24, 54.22, 54.21, 54.20, 54.18, 54.17, 54.16, 54.14, 54.13, 54.12, 54.10, 54.09, 54.08, 54.06, 54.05, 54.04, 54.02, 54.01, 54.00, 53.98, 53.97, 53.96, 53.95, 53.93, 53.92, 53.91, 53.89, 53.88, 53.87, 53.85, 53.84, 53.83, 53.82, 53.80, 53.79, 53.78, 53.76, 53.75, 53.74, 53.73, 53.71, 53.70, 53.69, 53.68, 53.66, 53.65, 53.64, 53.62, 53.61, 53.60, 53.59, 53.57, 53.56, 53.55, 53.54, 53.52, 53.51, 53.50, 53.49, 53.47, 53.46, 53.45, 53.44, 53.42, 53.41, 53.40, 53.39, 53.38, 53.36, 53.35, 53.34, 53.33, 53.31, 53.30, 53.29, 53.28, 53.27, 53.25, 53.24, 53.23, 53.22, 53.21, 53.19, 53.18, 53.17, 53.16, 53.14, 53.13, 53.12, 53.11, 53.10, 53.08, 53.07, 53.06, 53.05, 53.04, 53.03, 53.01, 53.00, 52.99, 52.98, 52.97, 52.95, 52.94, 52.93, 52.92}, -{55.88, 55.86, 55.85, 55.83, 55.82, 55.80, 55.79, 55.77, 55.76, 55.75, 55.73, 55.72, 55.70, 55.69, 55.67, 55.66, 55.65, 55.63, 55.62, 55.60, 55.59, 55.57, 55.56, 55.55, 55.53, 55.52, 55.50, 55.49, 55.48, 55.46, 55.45, 55.43, 55.42, 55.41, 55.39, 55.38, 55.36, 55.35, 55.34, 55.32, 55.31, 55.29, 55.28, 55.27, 55.25, 55.24, 55.23, 55.21, 55.20, 55.19, 55.17, 55.16, 55.14, 55.13, 55.12, 55.10, 55.09, 55.08, 55.06, 55.05, 55.04, 55.02, 55.01, 55.00, 54.98, 54.97, 54.96, 54.94, 54.93, 54.92, 54.90, 54.89, 54.88, 54.86, 54.85, 54.84, 54.82, 54.81, 54.80, 54.78, 54.77, 54.76, 54.74, 54.73, 54.72, 54.70, 54.69, 54.68, 54.67, 54.65, 54.64, 54.63, 54.61, 54.60, 54.59, 54.58, 54.56, 54.55, 54.54, 54.52, 54.51, 54.50, 54.49, 54.47, 54.46, 54.45, 54.43, 54.42, 54.41, 54.40, 54.38, 54.37, 54.36, 54.35, 54.33, 54.32, 54.31, 54.30, 54.28, 54.27, 54.26, 54.25, 54.23, 54.22, 54.21, 54.20, 54.18, 54.17, 54.16, 54.15, 54.13, 54.12, 54.11, 54.10, 54.08, 54.07, 54.06, 54.05, 54.04, 54.02}, -{57.01, 56.99, 56.98, 56.96, 56.95, 56.93, 56.92, 56.90, 56.89, 56.87, 56.86, 56.84, 56.83, 56.81, 56.80, 56.78, 56.77, 56.75, 56.74, 56.72, 56.71, 56.69, 56.68, 56.66, 56.65, 56.64, 56.62, 56.61, 56.59, 56.58, 56.56, 56.55, 56.53, 56.52, 56.51, 56.49, 56.48, 56.46, 56.45, 56.43, 56.42, 56.41, 56.39, 56.38, 56.36, 56.35, 56.33, 56.32, 56.31, 56.29, 56.28, 56.26, 56.25, 56.24, 56.22, 56.21, 56.19, 56.18, 56.17, 56.15, 56.14, 56.12, 56.11, 56.10, 56.08, 56.07, 56.05, 56.04, 56.03, 56.01, 56.00, 55.99, 55.97, 55.96, 55.94, 55.93, 55.92, 55.90, 55.89, 55.88, 55.86, 55.85, 55.84, 55.82, 55.81, 55.80, 55.78, 55.77, 55.76, 55.74, 55.73, 55.71, 55.70, 55.69, 55.67, 55.66, 55.65, 55.63, 55.62, 55.61, 55.60, 55.58, 55.57, 55.56, 55.54, 55.53, 55.52, 55.50, 55.49, 55.48, 55.46, 55.45, 55.44, 55.42, 55.41, 55.40, 55.39, 55.37, 55.36, 55.35, 55.33, 55.32, 55.31, 55.29, 55.28, 55.27, 55.26, 55.24, 55.23, 55.22, 55.21, 55.19, 55.18, 55.17, 55.15, 55.14, 55.13, 55.12, 55.10, 55.09}, -{58.09, 58.08, 58.06, 58.05, 58.03, 58.02, 58.00, 57.99, 57.97, 57.96, 57.94, 57.93, 57.91, 57.89, 57.88, 57.86, 57.85, 57.83, 57.82, 57.80, 57.79, 57.77, 57.76, 57.74, 57.73, 57.71, 57.70, 57.68, 57.67, 57.65, 57.64, 57.62, 57.61, 57.59, 57.58, 57.57, 57.55, 57.54, 57.52, 57.51, 57.49, 57.48, 57.46, 57.45, 57.43, 57.42, 57.40, 57.39, 57.37, 57.36, 57.35, 57.33, 57.32, 57.30, 57.29, 57.27, 57.26, 57.24, 57.23, 57.22, 57.20, 57.19, 57.17, 57.16, 57.14, 57.13, 57.12, 57.10, 57.09, 57.07, 57.06, 57.04, 57.03, 57.02, 57.00, 56.99, 56.97, 56.96, 56.95, 56.93, 56.92, 56.90, 56.89, 56.88, 56.86, 56.85, 56.83, 56.82, 56.81, 56.79, 56.78, 56.77, 56.75, 56.74, 56.72, 56.71, 56.70, 56.68, 56.67, 56.66, 56.64, 56.63, 56.61, 56.60, 56.59, 56.57, 56.56, 56.55, 56.53, 56.52, 56.51, 56.49, 56.48, 56.47, 56.45, 56.44, 56.43, 56.41, 56.40, 56.39, 56.37, 56.36, 56.35, 56.33, 56.32, 56.31, 56.29, 56.28, 56.27, 56.25, 56.24, 56.23, 56.21, 56.20, 56.19, 56.17, 56.16, 56.15, 56.14, 56.12}, -{59.14, 59.13, 59.11, 59.10, 59.08, 59.07, 59.05, 59.03, 59.02, 59.00, 58.99, 58.97, 58.96, 58.94, 58.92, 58.91, 58.89, 58.88, 58.86, 58.85, 58.83, 58.82, 58.80, 58.79, 58.77, 58.75, 58.74, 58.72, 58.71, 58.69, 58.68, 58.66, 58.65, 58.63, 58.62, 58.60, 58.59, 58.57, 58.56, 58.54, 58.53, 58.51, 58.50, 58.48, 58.47, 58.45, 58.44, 58.42, 58.41, 58.39, 58.38, 58.36, 58.35, 58.33, 58.32, 58.30, 58.29, 58.27, 58.26, 58.24, 58.23, 58.21, 58.20, 58.18, 58.17, 58.16, 58.14, 58.13, 58.11, 58.10, 58.08, 58.07, 58.05, 58.04, 58.02, 58.01, 58.00, 57.98, 57.97, 57.95, 57.94, 57.92, 57.91, 57.89, 57.88, 57.87, 57.85, 57.84, 57.82, 57.81, 57.80, 57.78, 57.77, 57.75, 57.74, 57.72, 57.71, 57.70, 57.68, 57.67, 57.65, 57.64, 57.63, 57.61, 57.60, 57.58, 57.57, 57.56, 57.54, 57.53, 57.51, 57.50, 57.49, 57.47, 57.46, 57.45, 57.43, 57.42, 57.40, 57.39, 57.38, 57.36, 57.35, 57.34, 57.32, 57.31, 57.30, 57.28, 57.27, 57.25, 57.24, 57.23, 57.21, 57.20, 57.19, 57.17, 57.16, 57.15, 57.13, 57.12}, -{60.16, 60.14, 60.12, 60.11, 60.09, 60.08, 60.06, 60.04, 60.03, 60.01, 60.00, 59.98, 59.96, 59.95, 59.93, 59.92, 59.90, 59.88, 59.87, 59.85, 59.84, 59.82, 59.81, 59.79, 59.77, 59.76, 59.74, 59.73, 59.71, 59.70, 59.68, 59.66, 59.65, 59.63, 59.62, 59.60, 59.59, 59.57, 59.56, 59.54, 59.53, 59.51, 59.49, 59.48, 59.46, 59.45, 59.43, 59.42, 59.40, 59.39, 59.37, 59.36, 59.34, 59.33, 59.31, 59.30, 59.28, 59.27, 59.25, 59.24, 59.22, 59.21, 59.19, 59.18, 59.16, 59.15, 59.13, 59.12, 59.10, 59.09, 59.07, 59.06, 59.04, 59.03, 59.01, 59.00, 58.98, 58.97, 58.95, 58.94, 58.92, 58.91, 58.89, 58.88, 58.86, 58.85, 58.84, 58.82, 58.81, 58.79, 58.78, 58.76, 58.75, 58.73, 58.72, 58.70, 58.69, 58.68, 58.66, 58.65, 58.63, 58.62, 58.60, 58.59, 58.58, 58.56, 58.55, 58.53, 58.52, 58.50, 58.49, 58.48, 58.46, 58.45, 58.43, 58.42, 58.41, 58.39, 58.38, 58.36, 58.35, 58.34, 58.32, 58.31, 58.29, 58.28, 58.27, 58.25, 58.24, 58.22, 58.21, 58.20, 58.18, 58.17, 58.15, 58.14, 58.13, 58.11, 58.10, 58.09}, -{61.14, 61.12, 61.10, 61.09, 61.07, 61.05, 61.04, 61.02, 61.00, 60.99, 60.97, 60.96, 60.94, 60.92, 60.91, 60.89, 60.87, 60.86, 60.84, 60.83, 60.81, 60.79, 60.78, 60.76, 60.75, 60.73, 60.71, 60.70, 60.68, 60.67, 60.65, 60.63, 60.62, 60.60, 60.59, 60.57, 60.55, 60.54, 60.52, 60.51, 60.49, 60.48, 60.46, 60.44, 60.43, 60.41, 60.40, 60.38, 60.37, 60.35, 60.33, 60.32, 60.30, 60.29, 60.27, 60.26, 60.24, 60.23, 60.21, 60.20, 60.18, 60.16, 60.15, 60.13, 60.12, 60.10, 60.09, 60.07, 60.06, 60.04, 60.03, 60.01, 60.00, 59.98, 59.97, 59.95, 59.94, 59.92, 59.91, 59.89, 59.88, 59.86, 59.85, 59.83, 59.82, 59.80, 59.79, 59.77, 59.76, 59.74, 59.73, 59.71, 59.70, 59.68, 59.67, 59.65, 59.64, 59.62, 59.61, 59.59, 59.58, 59.57, 59.55, 59.54, 59.52, 59.51, 59.49, 59.48, 59.46, 59.45, 59.43, 59.42, 59.41, 59.39, 59.38, 59.36, 59.35, 59.33, 59.32, 59.30, 59.29, 59.28, 59.26, 59.25, 59.23, 59.22, 59.20, 59.19, 59.18, 59.16, 59.15, 59.13, 59.12, 59.10, 59.09, 59.08, 59.06, 59.05, 59.03, 59.02}, -{62.08, 62.06, 62.05, 62.03, 62.01, 62.00, 61.98, 61.96, 61.95, 61.93, 61.91, 61.90, 61.88, 61.86, 61.85, 61.83, 61.81, 61.80, 61.78, 61.77, 61.75, 61.73, 61.72, 61.70, 61.68, 61.67, 61.65, 61.63, 61.62, 61.60, 61.59, 61.57, 61.55, 61.54, 61.52, 61.51, 61.49, 61.47, 61.46, 61.44, 61.42, 61.41, 61.39, 61.38, 61.36, 61.35, 61.33, 61.31, 61.30, 61.28, 61.27, 61.25, 61.23, 61.22, 61.20, 61.19, 61.17, 61.16, 61.14, 61.12, 61.11, 61.09, 61.08, 61.06, 61.05, 61.03, 61.01, 61.00, 60.98, 60.97, 60.95, 60.94, 60.92, 60.91, 60.89, 60.88, 60.86, 60.84, 60.83, 60.81, 60.80, 60.78, 60.77, 60.75, 60.74, 60.72, 60.71, 60.69, 60.68, 60.66, 60.65, 60.63, 60.62, 60.60, 60.59, 60.57, 60.56, 60.54, 60.53, 60.51, 60.50, 60.48, 60.47, 60.45, 60.44, 60.42, 60.41, 60.39, 60.38, 60.36, 60.35, 60.33, 60.32, 60.30, 60.29, 60.27, 60.26, 60.24, 60.23, 60.22, 60.20, 60.19, 60.17, 60.16, 60.14, 60.13, 60.11, 60.10, 60.08, 60.07, 60.06, 60.04, 60.03, 60.01, 60.00, 59.98, 59.97, 59.95, 59.94, 59.93}, -{62.99, 62.98, 62.96, 62.94, 62.93, 62.91, 62.89, 62.88, 62.86, 62.84, 62.83, 62.81, 62.79, 62.77, 62.76, 62.74, 62.72, 62.71, 62.69, 62.67, 62.66, 62.64, 62.62, 62.61, 62.59, 62.57, 62.56, 62.54, 62.53, 62.51, 62.49, 62.48, 62.46, 62.44, 62.43, 62.41, 62.39, 62.38, 62.36, 62.34, 62.33, 62.31, 62.30, 62.28, 62.26, 62.25, 62.23, 62.21, 62.20, 62.18, 62.17, 62.15, 62.13, 62.12, 62.10, 62.09, 62.07, 62.05, 62.04, 62.02, 62.01, 61.99, 61.97, 61.96, 61.94, 61.93, 61.91, 61.90, 61.88, 61.86, 61.85, 61.83, 61.82, 61.80, 61.79, 61.77, 61.75, 61.74, 61.72, 61.71, 61.69, 61.68, 61.66, 61.65, 61.63, 61.61, 61.60, 61.58, 61.57, 61.55, 61.54, 61.52, 61.51, 61.49, 61.48, 61.46, 61.45, 61.43, 61.42, 61.40, 61.38, 61.37, 61.35, 61.34, 61.32, 61.31, 61.29, 61.28, 61.26, 61.25, 61.23, 61.22, 61.20, 61.19, 61.17, 61.16, 61.14, 61.13, 61.11, 61.10, 61.08, 61.07, 61.05, 61.04, 61.02, 61.01, 60.99, 60.98, 60.97, 60.95, 60.94, 60.92, 60.91, 60.89, 60.88, 60.86, 60.85, 60.83, 60.82, 60.80}, -{63.88, 63.86, 63.84, 63.83, 63.81, 63.79, 63.78, 63.76, 63.74, 63.72, 63.71, 63.69, 63.67, 63.66, 63.64, 63.62, 63.60, 63.59, 63.57, 63.55, 63.54, 63.52, 63.50, 63.49, 63.47, 63.45, 63.44, 63.42, 63.40, 63.39, 63.37, 63.35, 63.34, 63.32, 63.30, 63.29, 63.27, 63.25, 63.24, 63.22, 63.20, 63.19, 63.17, 63.15, 63.14, 63.12, 63.10, 63.09, 63.07, 63.06, 63.04, 63.02, 63.01, 62.99, 62.97, 62.96, 62.94, 62.93, 62.91, 62.89, 62.88, 62.86, 62.84, 62.83, 62.81, 62.80, 62.78, 62.76, 62.75, 62.73, 62.72, 62.70, 62.68, 62.67, 62.65, 62.64, 62.62, 62.60, 62.59, 62.57, 62.56, 62.54, 62.53, 62.51, 62.49, 62.48, 62.46, 62.45, 62.43, 62.42, 62.40, 62.38, 62.37, 62.35, 62.34, 62.32, 62.31, 62.29, 62.28, 62.26, 62.25, 62.23, 62.21, 62.20, 62.18, 62.17, 62.15, 62.14, 62.12, 62.11, 62.09, 62.08, 62.06, 62.05, 62.03, 62.02, 62.00, 61.98, 61.97, 61.95, 61.94, 61.92, 61.91, 61.89, 61.88, 61.86, 61.85, 61.83, 61.82, 61.80, 61.79, 61.77, 61.76, 61.74, 61.73, 61.71, 61.70, 61.69, 61.67, 61.66}, -{64.73, 64.72, 64.70, 64.68, 64.66, 64.65, 64.63, 64.61, 64.59, 64.58, 64.56, 64.54, 64.53, 64.51, 64.49, 64.47, 64.46, 64.44, 64.42, 64.41, 64.39, 64.37, 64.35, 64.34, 64.32, 64.30, 64.29, 64.27, 64.25, 64.24, 64.22, 64.20, 64.18, 64.17, 64.15, 64.13, 64.12, 64.10, 64.08, 64.07, 64.05, 64.03, 64.02, 64.00, 63.98, 63.97, 63.95, 63.93, 63.92, 63.90, 63.88, 63.87, 63.85, 63.83, 63.82, 63.80, 63.78, 63.77, 63.75, 63.74, 63.72, 63.70, 63.69, 63.67, 63.65, 63.64, 63.62, 63.61, 63.59, 63.57, 63.56, 63.54, 63.52, 63.51, 63.49, 63.48, 63.46, 63.44, 63.43, 63.41, 63.40, 63.38, 63.36, 63.35, 63.33, 63.32, 63.30, 63.28, 63.27, 63.25, 63.24, 63.22, 63.21, 63.19, 63.17, 63.16, 63.14, 63.13, 63.11, 63.10, 63.08, 63.06, 63.05, 63.03, 63.02, 63.00, 62.99, 62.97, 62.95, 62.94, 62.92, 62.91, 62.89, 62.88, 62.86, 62.85, 62.83, 62.82, 62.80, 62.78, 62.77, 62.75, 62.74, 62.72, 62.71, 62.69, 62.68, 62.66, 62.65, 62.63, 62.62, 62.60, 62.59, 62.57, 62.56, 62.54, 62.53, 62.51, 62.50, 62.48}, -{65.56, 65.54, 65.53, 65.51, 65.49, 65.47, 65.46, 65.44, 65.42, 65.40, 65.39, 65.37, 65.35, 65.33, 65.32, 65.30, 65.28, 65.26, 65.25, 65.23, 65.21, 65.20, 65.18, 65.16, 65.14, 65.13, 65.11, 65.09, 65.08, 65.06, 65.04, 65.02, 65.01, 64.99, 64.97, 64.96, 64.94, 64.92, 64.90, 64.89, 64.87, 64.85, 64.84, 64.82, 64.80, 64.79, 64.77, 64.75, 64.74, 64.72, 64.70, 64.69, 64.67, 64.65, 64.64, 64.62, 64.60, 64.59, 64.57, 64.55, 64.54, 64.52, 64.50, 64.49, 64.47, 64.45, 64.44, 64.42, 64.40, 64.39, 64.37, 64.36, 64.34, 64.32, 64.31, 64.29, 64.27, 64.26, 64.24, 64.23, 64.21, 64.19, 64.18, 64.16, 64.14, 64.13, 64.11, 64.10, 64.08, 64.06, 64.05, 64.03, 64.02, 64.00, 63.98, 63.97, 63.95, 63.94, 63.92, 63.90, 63.89, 63.87, 63.86, 63.84, 63.83, 63.81, 63.79, 63.78, 63.76, 63.75, 63.73, 63.72, 63.70, 63.68, 63.67, 63.65, 63.64, 63.62, 63.61, 63.59, 63.57, 63.56, 63.54, 63.53, 63.51, 63.50, 63.48, 63.47, 63.45, 63.44, 63.42, 63.41, 63.39, 63.37, 63.36, 63.34, 63.33, 63.31, 63.30, 63.28}, -{66.36, 66.35, 66.33, 66.31, 66.29, 66.28, 66.26, 66.24, 66.22, 66.21, 66.19, 66.17, 66.15, 66.13, 66.12, 66.10, 66.08, 66.06, 66.05, 66.03, 66.01, 65.99, 65.98, 65.96, 65.94, 65.92, 65.91, 65.89, 65.87, 65.86, 65.84, 65.82, 65.80, 65.79, 65.77, 65.75, 65.74, 65.72, 65.70, 65.68, 65.67, 65.65, 65.63, 65.62, 65.60, 65.58, 65.56, 65.55, 65.53, 65.51, 65.50, 65.48, 65.46, 65.45, 65.43, 65.41, 65.40, 65.38, 65.36, 65.35, 65.33, 65.31, 65.30, 65.28, 65.26, 65.25, 65.23, 65.21, 65.20, 65.18, 65.16, 65.15, 65.13, 65.11, 65.10, 65.08, 65.06, 65.05, 65.03, 65.01, 65.00, 64.98, 64.97, 64.95, 64.93, 64.92, 64.90, 64.88, 64.87, 64.85, 64.84, 64.82, 64.80, 64.79, 64.77, 64.75, 64.74, 64.72, 64.71, 64.69, 64.67, 64.66, 64.64, 64.63, 64.61, 64.59, 64.58, 64.56, 64.55, 64.53, 64.51, 64.50, 64.48, 64.47, 64.45, 64.44, 64.42, 64.40, 64.39, 64.37, 64.36, 64.34, 64.33, 64.31, 64.29, 64.28, 64.26, 64.25, 64.23, 64.22, 64.20, 64.19, 64.17, 64.15, 64.14, 64.12, 64.11, 64.09, 64.08, 64.06}, -{67.14, 67.12, 67.11, 67.09, 67.07, 67.05, 67.04, 67.02, 67.00, 66.98, 66.96, 66.95, 66.93, 66.91, 66.89, 66.88, 66.86, 66.84, 66.82, 66.80, 66.79, 66.77, 66.75, 66.73, 66.72, 66.70, 66.68, 66.66, 66.65, 66.63, 66.61, 66.59, 66.58, 66.56, 66.54, 66.52, 66.51, 66.49, 66.47, 66.46, 66.44, 66.42, 66.40, 66.39, 66.37, 66.35, 66.34, 66.32, 66.30, 66.28, 66.27, 66.25, 66.23, 66.22, 66.20, 66.18, 66.17, 66.15, 66.13, 66.11, 66.10, 66.08, 66.06, 66.05, 66.03, 66.01, 66.00, 65.98, 65.96, 65.95, 65.93, 65.91, 65.90, 65.88, 65.86, 65.85, 65.83, 65.81, 65.80, 65.78, 65.76, 65.75, 65.73, 65.71, 65.70, 65.68, 65.66, 65.65, 65.63, 65.62, 65.60, 65.58, 65.57, 65.55, 65.53, 65.52, 65.50, 65.49, 65.47, 65.45, 65.44, 65.42, 65.40, 65.39, 65.37, 65.36, 65.34, 65.32, 65.31, 65.29, 65.28, 65.26, 65.24, 65.23, 65.21, 65.20, 65.18, 65.16, 65.15, 65.13, 65.12, 65.10, 65.08, 65.07, 65.05, 65.04, 65.02, 65.01, 64.99, 64.97, 64.96, 64.94, 64.93, 64.91, 64.90, 64.88, 64.86, 64.85, 64.83, 64.82}, -{67.90, 67.88, 67.86, 67.84, 67.82, 67.81, 67.79, 67.77, 67.75, 67.73, 67.72, 67.70, 67.68, 67.66, 67.65, 67.63, 67.61, 67.59, 67.57, 67.56, 67.54, 67.52, 67.50, 67.49, 67.47, 67.45, 67.43, 67.41, 67.40, 67.38, 67.36, 67.34, 67.33, 67.31, 67.29, 67.27, 67.26, 67.24, 67.22, 67.20, 67.19, 67.17, 67.15, 67.14, 67.12, 67.10, 67.08, 67.07, 67.05, 67.03, 67.01, 67.00, 66.98, 66.96, 66.95, 66.93, 66.91, 66.89, 66.88, 66.86, 66.84, 66.83, 66.81, 66.79, 66.78, 66.76, 66.74, 66.73, 66.71, 66.69, 66.67, 66.66, 66.64, 66.62, 66.61, 66.59, 66.57, 66.56, 66.54, 66.52, 66.51, 66.49, 66.47, 66.46, 66.44, 66.42, 66.41, 66.39, 66.37, 66.36, 66.34, 66.32, 66.31, 66.29, 66.28, 66.26, 66.24, 66.23, 66.21, 66.19, 66.18, 66.16, 66.14, 66.13, 66.11, 66.10, 66.08, 66.06, 66.05, 66.03, 66.01, 66.00, 65.98, 65.97, 65.95, 65.93, 65.92, 65.90, 65.89, 65.87, 65.85, 65.84, 65.82, 65.81, 65.79, 65.77, 65.76, 65.74, 65.73, 65.71, 65.69, 65.68, 65.66, 65.65, 65.63, 65.62, 65.60, 65.58, 65.57, 65.55}, -{68.63, 68.61, 68.59, 68.57, 68.56, 68.54, 68.52, 68.50, 68.48, 68.47, 68.45, 68.43, 68.41, 68.39, 68.38, 68.36, 68.34, 68.32, 68.30, 68.29, 68.27, 68.25, 68.23, 68.21, 68.20, 68.18, 68.16, 68.14, 68.13, 68.11, 68.09, 68.07, 68.06, 68.04, 68.02, 68.00, 67.98, 67.97, 67.95, 67.93, 67.91, 67.90, 67.88, 67.86, 67.84, 67.83, 67.81, 67.79, 67.78, 67.76, 67.74, 67.72, 67.71, 67.69, 67.67, 67.65, 67.64, 67.62, 67.60, 67.59, 67.57, 67.55, 67.53, 67.52, 67.50, 67.48, 67.47, 67.45, 67.43, 67.41, 67.40, 67.38, 67.36, 67.35, 67.33, 67.31, 67.30, 67.28, 67.26, 67.25, 67.23, 67.21, 67.20, 67.18, 67.16, 67.15, 67.13, 67.11, 67.10, 67.08, 67.06, 67.05, 67.03, 67.01, 67.00, 66.98, 66.96, 66.95, 66.93, 66.91, 66.90, 66.88, 66.86, 66.85, 66.83, 66.81, 66.80, 66.78, 66.77, 66.75, 66.73, 66.72, 66.70, 66.68, 66.67, 66.65, 66.64, 66.62, 66.60, 66.59, 66.57, 66.55, 66.54, 66.52, 66.51, 66.49, 66.47, 66.46, 66.44, 66.43, 66.41, 66.39, 66.38, 66.36, 66.35, 66.33, 66.31, 66.30, 66.28, 66.27}, -{69.34, 69.32, 69.30, 69.28, 69.27, 69.25, 69.23, 69.21, 69.19, 69.18, 69.16, 69.14, 69.12, 69.10, 69.08, 69.07, 69.05, 69.03, 69.01, 68.99, 68.98, 68.96, 68.94, 68.92, 68.90, 68.89, 68.87, 68.85, 68.83, 68.82, 68.80, 68.78, 68.76, 68.74, 68.73, 68.71, 68.69, 68.67, 68.66, 68.64, 68.62, 68.60, 68.59, 68.57, 68.55, 68.53, 68.52, 68.50, 68.48, 68.46, 68.45, 68.43, 68.41, 68.39, 68.38, 68.36, 68.34, 68.32, 68.31, 68.29, 68.27, 68.26, 68.24, 68.22, 68.20, 68.19, 68.17, 68.15, 68.14, 68.12, 68.10, 68.08, 68.07, 68.05, 68.03, 68.02, 68.00, 67.98, 67.96, 67.95, 67.93, 67.91, 67.90, 67.88, 67.86, 67.85, 67.83, 67.81, 67.80, 67.78, 67.76, 67.75, 67.73, 67.71, 67.70, 67.68, 67.66, 67.65, 67.63, 67.61, 67.60, 67.58, 67.56, 67.55, 67.53, 67.51, 67.50, 67.48, 67.46, 67.45, 67.43, 67.41, 67.40, 67.38, 67.37, 67.35, 67.33, 67.32, 67.30, 67.28, 67.27, 67.25, 67.24, 67.22, 67.20, 67.19, 67.17, 67.15, 67.14, 67.12, 67.11, 67.09, 67.07, 67.06, 67.04, 67.03, 67.01, 66.99, 66.98, 66.96}, -{70.03, 70.01, 69.99, 69.97, 69.96, 69.94, 69.92, 69.90, 69.88, 69.86, 69.85, 69.83, 69.81, 69.79, 69.77, 69.76, 69.74, 69.72, 69.70, 69.68, 69.66, 69.65, 69.63, 69.61, 69.59, 69.57, 69.56, 69.54, 69.52, 69.50, 69.49, 69.47, 69.45, 69.43, 69.41, 69.40, 69.38, 69.36, 69.34, 69.32, 69.31, 69.29, 69.27, 69.25, 69.24, 69.22, 69.20, 69.18, 69.17, 69.15, 69.13, 69.11, 69.10, 69.08, 69.06, 69.04, 69.03, 69.01, 68.99, 68.97, 68.96, 68.94, 68.92, 68.90, 68.89, 68.87, 68.85, 68.84, 68.82, 68.80, 68.78, 68.77, 68.75, 68.73, 68.72, 68.70, 68.68, 68.66, 68.65, 68.63, 68.61, 68.60, 68.58, 68.56, 68.55, 68.53, 68.51, 68.49, 68.48, 68.46, 68.44, 68.43, 68.41, 68.39, 68.38, 68.36, 68.34, 68.33, 68.31, 68.29, 68.28, 68.26, 68.24, 68.23, 68.21, 68.19, 68.18, 68.16, 68.14, 68.13, 68.11, 68.09, 68.08, 68.06, 68.04, 68.03, 68.01, 68.00, 67.98, 67.96, 67.95, 67.93, 67.91, 67.90, 67.88, 67.86, 67.85, 67.83, 67.82, 67.80, 67.78, 67.77, 67.75, 67.73, 67.72, 67.70, 67.69, 67.67, 67.65, 67.64}, -{70.70, 70.68, 70.66, 70.64, 70.63, 70.61, 70.59, 70.57, 70.55, 70.53, 70.52, 70.50, 70.48, 70.46, 70.44, 70.42, 70.41, 70.39, 70.37, 70.35, 70.33, 70.32, 70.30, 70.28, 70.26, 70.24, 70.22, 70.21, 70.19, 70.17, 70.15, 70.14, 70.12, 70.10, 70.08, 70.06, 70.05, 70.03, 70.01, 69.99, 69.97, 69.96, 69.94, 69.92, 69.90, 69.89, 69.87, 69.85, 69.83, 69.82, 69.80, 69.78, 69.76, 69.74, 69.73, 69.71, 69.69, 69.67, 69.66, 69.64, 69.62, 69.60, 69.59, 69.57, 69.55, 69.54, 69.52, 69.50, 69.48, 69.47, 69.45, 69.43, 69.41, 69.40, 69.38, 69.36, 69.35, 69.33, 69.31, 69.29, 69.28, 69.26, 69.24, 69.23, 69.21, 69.19, 69.17, 69.16, 69.14, 69.12, 69.11, 69.09, 69.07, 69.06, 69.04, 69.02, 69.01, 68.99, 68.97, 68.96, 68.94, 68.92, 68.90, 68.89, 68.87, 68.85, 68.84, 68.82, 68.80, 68.79, 68.77, 68.75, 68.74, 68.72, 68.71, 68.69, 68.67, 68.66, 68.64, 68.62, 68.61, 68.59, 68.57, 68.56, 68.54, 68.52, 68.51, 68.49, 68.48, 68.46, 68.44, 68.43, 68.41, 68.39, 68.38, 68.36, 68.35, 68.33, 68.31, 68.30}, -{71.35, 71.33, 71.31, 71.30, 71.28, 71.26, 71.24, 71.22, 71.20, 71.18, 71.17, 71.15, 71.13, 71.11, 71.09, 71.07, 71.06, 71.04, 71.02, 71.00, 70.98, 70.97, 70.95, 70.93, 70.91, 70.89, 70.87, 70.86, 70.84, 70.82, 70.80, 70.78, 70.77, 70.75, 70.73, 70.71, 70.69, 70.68, 70.66, 70.64, 70.62, 70.61, 70.59, 70.57, 70.55, 70.53, 70.52, 70.50, 70.48, 70.46, 70.45, 70.43, 70.41, 70.39, 70.37, 70.36, 70.34, 70.32, 70.30, 70.29, 70.27, 70.25, 70.23, 70.22, 70.20, 70.18, 70.16, 70.15, 70.13, 70.11, 70.10, 70.08, 70.06, 70.04, 70.03, 70.01, 69.99, 69.97, 69.96, 69.94, 69.92, 69.91, 69.89, 69.87, 69.85, 69.84, 69.82, 69.80, 69.79, 69.77, 69.75, 69.73, 69.72, 69.70, 69.68, 69.67, 69.65, 69.63, 69.62, 69.60, 69.58, 69.57, 69.55, 69.53, 69.52, 69.50, 69.48, 69.47, 69.45, 69.43, 69.41, 69.40, 69.38, 69.36, 69.35, 69.33, 69.32, 69.30, 69.28, 69.27, 69.25, 69.23, 69.22, 69.20, 69.18, 69.17, 69.15, 69.13, 69.12, 69.10, 69.08, 69.07, 69.05, 69.04, 69.02, 69.00, 68.99, 68.97, 68.95, 68.94}, -{71.98, 71.97, 71.95, 71.93, 71.91, 71.89, 71.87, 71.85, 71.84, 71.82, 71.80, 71.78, 71.76, 71.74, 71.73, 71.71, 71.69, 71.67, 71.65, 71.63, 71.62, 71.60, 71.58, 71.56, 71.54, 71.52, 71.51, 71.49, 71.47, 71.45, 71.43, 71.42, 71.40, 71.38, 71.36, 71.34, 71.33, 71.31, 71.29, 71.27, 71.25, 71.24, 71.22, 71.20, 71.18, 71.16, 71.15, 71.13, 71.11, 71.09, 71.08, 71.06, 71.04, 71.02, 71.01, 70.99, 70.97, 70.95, 70.93, 70.92, 70.90, 70.88, 70.86, 70.85, 70.83, 70.81, 70.79, 70.78, 70.76, 70.74, 70.72, 70.71, 70.69, 70.67, 70.65, 70.64, 70.62, 70.60, 70.59, 70.57, 70.55, 70.53, 70.52, 70.50, 70.48, 70.47, 70.45, 70.43, 70.41, 70.40, 70.38, 70.36, 70.35, 70.33, 70.31, 70.29, 70.28, 70.26, 70.24, 70.23, 70.21, 70.19, 70.18, 70.16, 70.14, 70.13, 70.11, 70.09, 70.07, 70.06, 70.04, 70.02, 70.01, 69.99, 69.97, 69.96, 69.94, 69.92, 69.91, 69.89, 69.87, 69.86, 69.84, 69.82, 69.81, 69.79, 69.78, 69.76, 69.74, 69.73, 69.71, 69.69, 69.68, 69.66, 69.64, 69.63, 69.61, 69.59, 69.58, 69.56}, -{72.60, 72.58, 72.56, 72.54, 72.53, 72.51, 72.49, 72.47, 72.45, 72.43, 72.41, 72.40, 72.38, 72.36, 72.34, 72.32, 72.30, 72.29, 72.27, 72.25, 72.23, 72.21, 72.19, 72.18, 72.16, 72.14, 72.12, 72.10, 72.08, 72.07, 72.05, 72.03, 72.01, 71.99, 71.98, 71.96, 71.94, 71.92, 71.90, 71.89, 71.87, 71.85, 71.83, 71.81, 71.80, 71.78, 71.76, 71.74, 71.73, 71.71, 71.69, 71.67, 71.65, 71.64, 71.62, 71.60, 71.58, 71.57, 71.55, 71.53, 71.51, 71.49, 71.48, 71.46, 71.44, 71.42, 71.41, 71.39, 71.37, 71.35, 71.34, 71.32, 71.30, 71.28, 71.27, 71.25, 71.23, 71.22, 71.20, 71.18, 71.16, 71.15, 71.13, 71.11, 71.09, 71.08, 71.06, 71.04, 71.03, 71.01, 70.99, 70.97, 70.96, 70.94, 70.92, 70.91, 70.89, 70.87, 70.85, 70.84, 70.82, 70.80, 70.79, 70.77, 70.75, 70.74, 70.72, 70.70, 70.69, 70.67, 70.65, 70.63, 70.62, 70.60, 70.58, 70.57, 70.55, 70.53, 70.52, 70.50, 70.48, 70.47, 70.45, 70.43, 70.42, 70.40, 70.38, 70.37, 70.35, 70.33, 70.32, 70.30, 70.28, 70.27, 70.25, 70.24, 70.22, 70.20, 70.19, 70.17}, -{73.20, 73.18, 73.16, 73.14, 73.13, 73.11, 73.09, 73.07, 73.05, 73.03, 73.01, 73.00, 72.98, 72.96, 72.94, 72.92, 72.90, 72.88, 72.87, 72.85, 72.83, 72.81, 72.79, 72.77, 72.76, 72.74, 72.72, 72.70, 72.68, 72.67, 72.65, 72.63, 72.61, 72.59, 72.57, 72.56, 72.54, 72.52, 72.50, 72.48, 72.47, 72.45, 72.43, 72.41, 72.39, 72.38, 72.36, 72.34, 72.32, 72.30, 72.29, 72.27, 72.25, 72.23, 72.22, 72.20, 72.18, 72.16, 72.14, 72.13, 72.11, 72.09, 72.07, 72.06, 72.04, 72.02, 72.00, 71.99, 71.97, 71.95, 71.93, 71.92, 71.90, 71.88, 71.86, 71.85, 71.83, 71.81, 71.79, 71.78, 71.76, 71.74, 71.72, 71.71, 71.69, 71.67, 71.66, 71.64, 71.62, 71.60, 71.59, 71.57, 71.55, 71.54, 71.52, 71.50, 71.48, 71.47, 71.45, 71.43, 71.42, 71.40, 71.38, 71.36, 71.35, 71.33, 71.31, 71.30, 71.28, 71.26, 71.25, 71.23, 71.21, 71.20, 71.18, 71.16, 71.14, 71.13, 71.11, 71.09, 71.08, 71.06, 71.04, 71.03, 71.01, 70.99, 70.98, 70.96, 70.94, 70.93, 70.91, 70.89, 70.88, 70.86, 70.85, 70.83, 70.81, 70.80, 70.78, 70.76}, -{73.78, 73.76, 73.75, 73.73, 73.71, 73.69, 73.67, 73.65, 73.63, 73.62, 73.60, 73.58, 73.56, 73.54, 73.52, 73.50, 73.49, 73.47, 73.45, 73.43, 73.41, 73.39, 73.38, 73.36, 73.34, 73.32, 73.30, 73.28, 73.27, 73.25, 73.23, 73.21, 73.19, 73.17, 73.16, 73.14, 73.12, 73.10, 73.08, 73.07, 73.05, 73.03, 73.01, 72.99, 72.98, 72.96, 72.94, 72.92, 72.90, 72.89, 72.87, 72.85, 72.83, 72.82, 72.80, 72.78, 72.76, 72.74, 72.73, 72.71, 72.69, 72.67, 72.66, 72.64, 72.62, 72.60, 72.58, 72.57, 72.55, 72.53, 72.51, 72.50, 72.48, 72.46, 72.44, 72.43, 72.41, 72.39, 72.37, 72.36, 72.34, 72.32, 72.31, 72.29, 72.27, 72.25, 72.24, 72.22, 72.20, 72.18, 72.17, 72.15, 72.13, 72.12, 72.10, 72.08, 72.06, 72.05, 72.03, 72.01, 72.00, 71.98, 71.96, 71.94, 71.93, 71.91, 71.89, 71.88, 71.86, 71.84, 71.83, 71.81, 71.79, 71.77, 71.76, 71.74, 71.72, 71.71, 71.69, 71.67, 71.66, 71.64, 71.62, 71.61, 71.59, 71.57, 71.56, 71.54, 71.52, 71.51, 71.49, 71.47, 71.46, 71.44, 71.42, 71.41, 71.39, 71.37, 71.36, 71.34}, -{74.35, 74.33, 74.31, 74.30, 74.28, 74.26, 74.24, 74.22, 74.20, 74.18, 74.16, 74.15, 74.13, 74.11, 74.09, 74.07, 74.05, 74.04, 74.02, 74.00, 73.98, 73.96, 73.94, 73.92, 73.91, 73.89, 73.87, 73.85, 73.83, 73.82, 73.80, 73.78, 73.76, 73.74, 73.72, 73.71, 73.69, 73.67, 73.65, 73.63, 73.62, 73.60, 73.58, 73.56, 73.54, 73.53, 73.51, 73.49, 73.47, 73.45, 73.44, 73.42, 73.40, 73.38, 73.36, 73.35, 73.33, 73.31, 73.29, 73.28, 73.26, 73.24, 73.22, 73.20, 73.19, 73.17, 73.15, 73.13, 73.12, 73.10, 73.08, 73.06, 73.05, 73.03, 73.01, 72.99, 72.98, 72.96, 72.94, 72.92, 72.91, 72.89, 72.87, 72.85, 72.84, 72.82, 72.80, 72.78, 72.77, 72.75, 72.73, 72.72, 72.70, 72.68, 72.66, 72.65, 72.63, 72.61, 72.59, 72.58, 72.56, 72.54, 72.53, 72.51, 72.49, 72.48, 72.46, 72.44, 72.42, 72.41, 72.39, 72.37, 72.36, 72.34, 72.32, 72.31, 72.29, 72.27, 72.26, 72.24, 72.22, 72.20, 72.19, 72.17, 72.15, 72.14, 72.12, 72.10, 72.09, 72.07, 72.05, 72.04, 72.02, 72.00, 71.99, 71.97, 71.95, 71.94, 71.92, 71.90}, -{74.90, 74.89, 74.87, 74.85, 74.83, 74.81, 74.79, 74.77, 74.76, 74.74, 74.72, 74.70, 74.68, 74.66, 74.64, 74.63, 74.61, 74.59, 74.57, 74.55, 74.53, 74.51, 74.50, 74.48, 74.46, 74.44, 74.42, 74.40, 74.39, 74.37, 74.35, 74.33, 74.31, 74.30, 74.28, 74.26, 74.24, 74.22, 74.20, 74.19, 74.17, 74.15, 74.13, 74.11, 74.10, 74.08, 74.06, 74.04, 74.02, 74.01, 73.99, 73.97, 73.95, 73.93, 73.92, 73.90, 73.88, 73.86, 73.85, 73.83, 73.81, 73.79, 73.77, 73.76, 73.74, 73.72, 73.70, 73.69, 73.67, 73.65, 73.63, 73.62, 73.60, 73.58, 73.56, 73.55, 73.53, 73.51, 73.49, 73.48, 73.46, 73.44, 73.42, 73.41, 73.39, 73.37, 73.35, 73.34, 73.32, 73.30, 73.28, 73.27, 73.25, 73.23, 73.22, 73.20, 73.18, 73.16, 73.15, 73.13, 73.11, 73.09, 73.08, 73.06, 73.04, 73.03, 73.01, 72.99, 72.98, 72.96, 72.94, 72.92, 72.91, 72.89, 72.87, 72.86, 72.84, 72.82, 72.81, 72.79, 72.77, 72.76, 72.74, 72.72, 72.70, 72.69, 72.67, 72.65, 72.64, 72.62, 72.60, 72.59, 72.57, 72.55, 72.54, 72.52, 72.50, 72.49, 72.47, 72.45}, -{75.44, 75.43, 75.41, 75.39, 75.37, 75.35, 75.33, 75.31, 75.29, 75.28, 75.26, 75.24, 75.22, 75.20, 75.18, 75.16, 75.15, 75.13, 75.11, 75.09, 75.07, 75.05, 75.04, 75.02, 75.00, 74.98, 74.96, 74.94, 74.93, 74.91, 74.89, 74.87, 74.85, 74.83, 74.82, 74.80, 74.78, 74.76, 74.74, 74.73, 74.71, 74.69, 74.67, 74.65, 74.63, 74.62, 74.60, 74.58, 74.56, 74.55, 74.53, 74.51, 74.49, 74.47, 74.46, 74.44, 74.42, 74.40, 74.38, 74.37, 74.35, 74.33, 74.31, 74.30, 74.28, 74.26, 74.24, 74.22, 74.21, 74.19, 74.17, 74.15, 74.14, 74.12, 74.10, 74.08, 74.07, 74.05, 74.03, 74.01, 74.00, 73.98, 73.96, 73.94, 73.93, 73.91, 73.89, 73.87, 73.86, 73.84, 73.82, 73.80, 73.79, 73.77, 73.75, 73.74, 73.72, 73.70, 73.68, 73.67, 73.65, 73.63, 73.62, 73.60, 73.58, 73.56, 73.55, 73.53, 73.51, 73.50, 73.48, 73.46, 73.44, 73.43, 73.41, 73.39, 73.38, 73.36, 73.34, 73.33, 73.31, 73.29, 73.28, 73.26, 73.24, 73.23, 73.21, 73.19, 73.17, 73.16, 73.14, 73.12, 73.11, 73.09, 73.07, 73.06, 73.04, 73.02, 73.01, 72.99}, -{75.97, 75.95, 75.93, 75.91, 75.89, 75.88, 75.86, 75.84, 75.82, 75.80, 75.78, 75.76, 75.75, 75.73, 75.71, 75.69, 75.67, 75.65, 75.63, 75.62, 75.60, 75.58, 75.56, 75.54, 75.52, 75.51, 75.49, 75.47, 75.45, 75.43, 75.41, 75.40, 75.38, 75.36, 75.34, 75.32, 75.31, 75.29, 75.27, 75.25, 75.23, 75.21, 75.20, 75.18, 75.16, 75.14, 75.12, 75.11, 75.09, 75.07, 75.05, 75.03, 75.02, 75.00, 74.98, 74.96, 74.95, 74.93, 74.91, 74.89, 74.87, 74.86, 74.84, 74.82, 74.80, 74.79, 74.77, 74.75, 74.73, 74.71, 74.70, 74.68, 74.66, 74.64, 74.63, 74.61, 74.59, 74.57, 74.56, 74.54, 74.52, 74.50, 74.49, 74.47, 74.45, 74.43, 74.42, 74.40, 74.38, 74.36, 74.35, 74.33, 74.31, 74.30, 74.28, 74.26, 74.24, 74.23, 74.21, 74.19, 74.17, 74.16, 74.14, 74.12, 74.11, 74.09, 74.07, 74.05, 74.04, 74.02, 74.00, 73.99, 73.97, 73.95, 73.94, 73.92, 73.90, 73.88, 73.87, 73.85, 73.83, 73.82, 73.80, 73.78, 73.77, 73.75, 73.73, 73.72, 73.70, 73.68, 73.67, 73.65, 73.63, 73.62, 73.60, 73.58, 73.57, 73.55, 73.53, 73.52}, -{76.48, 76.46, 76.44, 76.43, 76.41, 76.39, 76.37, 76.35, 76.33, 76.31, 76.30, 76.28, 76.26, 76.24, 76.22, 76.20, 76.18, 76.17, 76.15, 76.13, 76.11, 76.09, 76.07, 76.06, 76.04, 76.02, 76.00, 75.98, 75.96, 75.95, 75.93, 75.91, 75.89, 75.87, 75.85, 75.84, 75.82, 75.80, 75.78, 75.76, 75.75, 75.73, 75.71, 75.69, 75.67, 75.66, 75.64, 75.62, 75.60, 75.58, 75.57, 75.55, 75.53, 75.51, 75.49, 75.48, 75.46, 75.44, 75.42, 75.40, 75.39, 75.37, 75.35, 75.33, 75.32, 75.30, 75.28, 75.26, 75.24, 75.23, 75.21, 75.19, 75.17, 75.16, 75.14, 75.12, 75.10, 75.09, 75.07, 75.05, 75.03, 75.02, 75.00, 74.98, 74.96, 74.95, 74.93, 74.91, 74.89, 74.88, 74.86, 74.84, 74.82, 74.81, 74.79, 74.77, 74.76, 74.74, 74.72, 74.70, 74.69, 74.67, 74.65, 74.64, 74.62, 74.60, 74.58, 74.57, 74.55, 74.53, 74.52, 74.50, 74.48, 74.46, 74.45, 74.43, 74.41, 74.40, 74.38, 74.36, 74.35, 74.33, 74.31, 74.30, 74.28, 74.26, 74.24, 74.23, 74.21, 74.19, 74.18, 74.16, 74.14, 74.13, 74.11, 74.09, 74.08, 74.06, 74.04, 74.03}, -{76.98, 76.96, 76.94, 76.93, 76.91, 76.89, 76.87, 76.85, 76.83, 76.81, 76.80, 76.78, 76.76, 76.74, 76.72, 76.70, 76.68, 76.67, 76.65, 76.63, 76.61, 76.59, 76.57, 76.56, 76.54, 76.52, 76.50, 76.48, 76.46, 76.45, 76.43, 76.41, 76.39, 76.37, 76.35, 76.34, 76.32, 76.30, 76.28, 76.26, 76.25, 76.23, 76.21, 76.19, 76.17, 76.16, 76.14, 76.12, 76.10, 76.08, 76.07, 76.05, 76.03, 76.01, 75.99, 75.98, 75.96, 75.94, 75.92, 75.90, 75.89, 75.87, 75.85, 75.83, 75.82, 75.80, 75.78, 75.76, 75.74, 75.73, 75.71, 75.69, 75.67, 75.66, 75.64, 75.62, 75.60, 75.59, 75.57, 75.55, 75.53, 75.52, 75.50, 75.48, 75.46, 75.45, 75.43, 75.41, 75.39, 75.38, 75.36, 75.34, 75.33, 75.31, 75.29, 75.27, 75.26, 75.24, 75.22, 75.20, 75.19, 75.17, 75.15, 75.14, 75.12, 75.10, 75.08, 75.07, 75.05, 75.03, 75.02, 75.00, 74.98, 74.96, 74.95, 74.93, 74.91, 74.90, 74.88, 74.86, 74.85, 74.83, 74.81, 74.80, 74.78, 74.76, 74.74, 74.73, 74.71, 74.69, 74.68, 74.66, 74.64, 74.63, 74.61, 74.59, 74.58, 74.56, 74.54, 74.53}, -{77.47, 77.45, 77.43, 77.41, 77.39, 77.38, 77.36, 77.34, 77.32, 77.30, 77.28, 77.26, 77.25, 77.23, 77.21, 77.19, 77.17, 77.15, 77.14, 77.12, 77.10, 77.08, 77.06, 77.04, 77.03, 77.01, 76.99, 76.97, 76.95, 76.93, 76.92, 76.90, 76.88, 76.86, 76.84, 76.82, 76.81, 76.79, 76.77, 76.75, 76.73, 76.72, 76.70, 76.68, 76.66, 76.64, 76.63, 76.61, 76.59, 76.57, 76.55, 76.54, 76.52, 76.50, 76.48, 76.46, 76.45, 76.43, 76.41, 76.39, 76.38, 76.36, 76.34, 76.32, 76.30, 76.29, 76.27, 76.25, 76.23, 76.22, 76.20, 76.18, 76.16, 76.15, 76.13, 76.11, 76.09, 76.08, 76.06, 76.04, 76.02, 76.01, 75.99, 75.97, 75.95, 75.94, 75.92, 75.90, 75.88, 75.87, 75.85, 75.83, 75.81, 75.80, 75.78, 75.76, 75.74, 75.73, 75.71, 75.69, 75.68, 75.66, 75.64, 75.62, 75.61, 75.59, 75.57, 75.56, 75.54, 75.52, 75.50, 75.49, 75.47, 75.45, 75.44, 75.42, 75.40, 75.39, 75.37, 75.35, 75.33, 75.32, 75.30, 75.28, 75.27, 75.25, 75.23, 75.22, 75.20, 75.18, 75.17, 75.15, 75.13, 75.12, 75.10, 75.08, 75.07, 75.05, 75.03, 75.02}, -{77.95, 77.93, 77.91, 77.89, 77.87, 77.85, 77.83, 77.82, 77.80, 77.78, 77.76, 77.74, 77.72, 77.70, 77.69, 77.67, 77.65, 77.63, 77.61, 77.59, 77.57, 77.56, 77.54, 77.52, 77.50, 77.48, 77.46, 77.45, 77.43, 77.41, 77.39, 77.37, 77.36, 77.34, 77.32, 77.30, 77.28, 77.26, 77.25, 77.23, 77.21, 77.19, 77.17, 77.16, 77.14, 77.12, 77.10, 77.08, 77.07, 77.05, 77.03, 77.01, 76.99, 76.98, 76.96, 76.94, 76.92, 76.91, 76.89, 76.87, 76.85, 76.83, 76.82, 76.80, 76.78, 76.76, 76.75, 76.73, 76.71, 76.69, 76.68, 76.66, 76.64, 76.62, 76.60, 76.59, 76.57, 76.55, 76.53, 76.52, 76.50, 76.48, 76.46, 76.45, 76.43, 76.41, 76.39, 76.38, 76.36, 76.34, 76.33, 76.31, 76.29, 76.27, 76.26, 76.24, 76.22, 76.20, 76.19, 76.17, 76.15, 76.14, 76.12, 76.10, 76.08, 76.07, 76.05, 76.03, 76.02, 76.00, 75.98, 75.96, 75.95, 75.93, 75.91, 75.90, 75.88, 75.86, 75.85, 75.83, 75.81, 75.79, 75.78, 75.76, 75.74, 75.73, 75.71, 75.69, 75.68, 75.66, 75.64, 75.63, 75.61, 75.59, 75.58, 75.56, 75.54, 75.53, 75.51, 75.49}, -{78.41, 78.39, 78.37, 78.35, 78.34, 78.32, 78.30, 78.28, 78.26, 78.24, 78.22, 78.21, 78.19, 78.17, 78.15, 78.13, 78.11, 78.10, 78.08, 78.06, 78.04, 78.02, 78.00, 77.99, 77.97, 77.95, 77.93, 77.91, 77.89, 77.88, 77.86, 77.84, 77.82, 77.80, 77.78, 77.77, 77.75, 77.73, 77.71, 77.69, 77.68, 77.66, 77.64, 77.62, 77.60, 77.59, 77.57, 77.55, 77.53, 77.51, 77.50, 77.48, 77.46, 77.44, 77.42, 77.41, 77.39, 77.37, 77.35, 77.34, 77.32, 77.30, 77.28, 77.26, 77.25, 77.23, 77.21, 77.19, 77.18, 77.16, 77.14, 77.12, 77.11, 77.09, 77.07, 77.05, 77.04, 77.02, 77.00, 76.98, 76.97, 76.95, 76.93, 76.91, 76.90, 76.88, 76.86, 76.84, 76.83, 76.81, 76.79, 76.77, 76.76, 76.74, 76.72, 76.71, 76.69, 76.67, 76.65, 76.64, 76.62, 76.60, 76.58, 76.57, 76.55, 76.53, 76.52, 76.50, 76.48, 76.47, 76.45, 76.43, 76.41, 76.40, 76.38, 76.36, 76.35, 76.33, 76.31, 76.30, 76.28, 76.26, 76.24, 76.23, 76.21, 76.19, 76.18, 76.16, 76.14, 76.13, 76.11, 76.09, 76.08, 76.06, 76.04, 76.03, 76.01, 75.99, 75.98, 75.96}, -{78.86, 78.85, 78.83, 78.81, 78.79, 78.77, 78.75, 78.73, 78.72, 78.70, 78.68, 78.66, 78.64, 78.62, 78.60, 78.59, 78.57, 78.55, 78.53, 78.51, 78.49, 78.48, 78.46, 78.44, 78.42, 78.40, 78.38, 78.37, 78.35, 78.33, 78.31, 78.29, 78.28, 78.26, 78.24, 78.22, 78.20, 78.19, 78.17, 78.15, 78.13, 78.11, 78.09, 78.08, 78.06, 78.04, 78.02, 78.01, 77.99, 77.97, 77.95, 77.93, 77.92, 77.90, 77.88, 77.86, 77.84, 77.83, 77.81, 77.79, 77.77, 77.76, 77.74, 77.72, 77.70, 77.68, 77.67, 77.65, 77.63, 77.61, 77.60, 77.58, 77.56, 77.54, 77.53, 77.51, 77.49, 77.47, 77.46, 77.44, 77.42, 77.40, 77.39, 77.37, 77.35, 77.33, 77.32, 77.30, 77.28, 77.26, 77.25, 77.23, 77.21, 77.20, 77.18, 77.16, 77.14, 77.13, 77.11, 77.09, 77.08, 77.06, 77.04, 77.02, 77.01, 76.99, 76.97, 76.96, 76.94, 76.92, 76.90, 76.89, 76.87, 76.85, 76.84, 76.82, 76.80, 76.79, 76.77, 76.75, 76.73, 76.72, 76.70, 76.68, 76.67, 76.65, 76.63, 76.62, 76.60, 76.58, 76.57, 76.55, 76.53, 76.52, 76.50, 76.48, 76.47, 76.45, 76.43, 76.42}, -{79.31, 79.29, 79.27, 79.25, 79.23, 79.21, 79.20, 79.18, 79.16, 79.14, 79.12, 79.10, 79.09, 79.07, 79.05, 79.03, 79.01, 78.99, 78.97, 78.96, 78.94, 78.92, 78.90, 78.88, 78.87, 78.85, 78.83, 78.81, 78.79, 78.77, 78.76, 78.74, 78.72, 78.70, 78.68, 78.67, 78.65, 78.63, 78.61, 78.59, 78.58, 78.56, 78.54, 78.52, 78.50, 78.49, 78.47, 78.45, 78.43, 78.41, 78.40, 78.38, 78.36, 78.34, 78.32, 78.31, 78.29, 78.27, 78.25, 78.24, 78.22, 78.20, 78.18, 78.17, 78.15, 78.13, 78.11, 78.09, 78.08, 78.06, 78.04, 78.02, 78.01, 77.99, 77.97, 77.95, 77.94, 77.92, 77.90, 77.88, 77.87, 77.85, 77.83, 77.81, 77.80, 77.78, 77.76, 77.74, 77.73, 77.71, 77.69, 77.68, 77.66, 77.64, 77.62, 77.61, 77.59, 77.57, 77.56, 77.54, 77.52, 77.50, 77.49, 77.47, 77.45, 77.44, 77.42, 77.40, 77.38, 77.37, 77.35, 77.33, 77.32, 77.30, 77.28, 77.26, 77.25, 77.23, 77.21, 77.20, 77.18, 77.16, 77.15, 77.13, 77.11, 77.10, 77.08, 77.06, 77.05, 77.03, 77.01, 77.00, 76.98, 76.96, 76.94, 76.93, 76.91, 76.89, 76.88, 76.86}, -{79.74, 79.72, 79.70, 79.68, 79.67, 79.65, 79.63, 79.61, 79.59, 79.57, 79.56, 79.54, 79.52, 79.50, 79.48, 79.46, 79.45, 79.43, 79.41, 79.39, 79.37, 79.35, 79.34, 79.32, 79.30, 79.28, 79.26, 79.24, 79.23, 79.21, 79.19, 79.17, 79.15, 79.14, 79.12, 79.10, 79.08, 79.06, 79.05, 79.03, 79.01, 78.99, 78.97, 78.96, 78.94, 78.92, 78.90, 78.88, 78.87, 78.85, 78.83, 78.81, 78.79, 78.78, 78.76, 78.74, 78.72, 78.71, 78.69, 78.67, 78.65, 78.64, 78.62, 78.60, 78.58, 78.56, 78.55, 78.53, 78.51, 78.49, 78.48, 78.46, 78.44, 78.42, 78.41, 78.39, 78.37, 78.35, 78.34, 78.32, 78.30, 78.28, 78.27, 78.25, 78.23, 78.22, 78.20, 78.18, 78.16, 78.15, 78.13, 78.11, 78.09, 78.08, 78.06, 78.04, 78.03, 78.01, 77.99, 77.97, 77.96, 77.94, 77.92, 77.91, 77.89, 77.87, 77.85, 77.84, 77.82, 77.80, 77.79, 77.77, 77.75, 77.73, 77.72, 77.70, 77.68, 77.67, 77.65, 77.63, 77.62, 77.60, 77.58, 77.57, 77.55, 77.53, 77.52, 77.50, 77.48, 77.46, 77.45, 77.43, 77.41, 77.40, 77.38, 77.36, 77.35, 77.33, 77.31, 77.30}, -{80.16, 80.14, 80.13, 80.11, 80.09, 80.07, 80.05, 80.03, 80.02, 80.00, 79.98, 79.96, 79.94, 79.92, 79.91, 79.89, 79.87, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.74, 79.72, 79.70, 79.69, 79.67, 79.65, 79.63, 79.61, 79.60, 79.58, 79.56, 79.54, 79.52, 79.51, 79.49, 79.47, 79.45, 79.43, 79.42, 79.40, 79.38, 79.36, 79.34, 79.33, 79.31, 79.29, 79.27, 79.26, 79.24, 79.22, 79.20, 79.18, 79.17, 79.15, 79.13, 79.11, 79.10, 79.08, 79.06, 79.04, 79.03, 79.01, 78.99, 78.97, 78.96, 78.94, 78.92, 78.90, 78.88, 78.87, 78.85, 78.83, 78.81, 78.80, 78.78, 78.76, 78.75, 78.73, 78.71, 78.69, 78.68, 78.66, 78.64, 78.62, 78.61, 78.59, 78.57, 78.55, 78.54, 78.52, 78.50, 78.49, 78.47, 78.45, 78.43, 78.42, 78.40, 78.38, 78.37, 78.35, 78.33, 78.31, 78.30, 78.28, 78.26, 78.25, 78.23, 78.21, 78.20, 78.18, 78.16, 78.14, 78.13, 78.11, 78.09, 78.08, 78.06, 78.04, 78.03, 78.01, 77.99, 77.98, 77.96, 77.94, 77.93, 77.91, 77.89, 77.88, 77.86, 77.84, 77.83, 77.81, 77.79, 77.78, 77.76, 77.74, 77.73}, -{80.58, 80.56, 80.54, 80.52, 80.50, 80.48, 80.47, 80.45, 80.43, 80.41, 80.39, 80.37, 80.36, 80.34, 80.32, 80.30, 80.28, 80.27, 80.25, 80.23, 80.21, 80.19, 80.17, 80.16, 80.14, 80.12, 80.10, 80.08, 80.07, 80.05, 80.03, 80.01, 79.99, 79.98, 79.96, 79.94, 79.92, 79.90, 79.89, 79.87, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.74, 79.72, 79.71, 79.69, 79.67, 79.65, 79.64, 79.62, 79.60, 79.58, 79.56, 79.55, 79.53, 79.51, 79.49, 79.48, 79.46, 79.44, 79.42, 79.41, 79.39, 79.37, 79.35, 79.34, 79.32, 79.30, 79.28, 79.27, 79.25, 79.23, 79.21, 79.20, 79.18, 79.16, 79.14, 79.13, 79.11, 79.09, 79.08, 79.06, 79.04, 79.02, 79.01, 78.99, 78.97, 78.95, 78.94, 78.92, 78.90, 78.89, 78.87, 78.85, 78.83, 78.82, 78.80, 78.78, 78.77, 78.75, 78.73, 78.71, 78.70, 78.68, 78.66, 78.65, 78.63, 78.61, 78.60, 78.58, 78.56, 78.55, 78.53, 78.51, 78.49, 78.48, 78.46, 78.44, 78.43, 78.41, 78.39, 78.38, 78.36, 78.34, 78.33, 78.31, 78.29, 78.28, 78.26, 78.24, 78.23, 78.21, 78.19, 78.18, 78.16, 78.14}, -{80.98, 80.96, 80.94, 80.93, 80.91, 80.89, 80.87, 80.85, 80.83, 80.82, 80.80, 80.78, 80.76, 80.74, 80.73, 80.71, 80.69, 80.67, 80.65, 80.63, 80.62, 80.60, 80.58, 80.56, 80.54, 80.53, 80.51, 80.49, 80.47, 80.45, 80.44, 80.42, 80.40, 80.38, 80.36, 80.35, 80.33, 80.31, 80.29, 80.27, 80.26, 80.24, 80.22, 80.20, 80.18, 80.17, 80.15, 80.13, 80.11, 80.10, 80.08, 80.06, 80.04, 80.02, 80.01, 79.99, 79.97, 79.95, 79.94, 79.92, 79.90, 79.88, 79.87, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.74, 79.73, 79.71, 79.69, 79.67, 79.66, 79.64, 79.62, 79.60, 79.59, 79.57, 79.55, 79.53, 79.52, 79.50, 79.48, 79.47, 79.45, 79.43, 79.41, 79.40, 79.38, 79.36, 79.35, 79.33, 79.31, 79.29, 79.28, 79.26, 79.24, 79.23, 79.21, 79.19, 79.17, 79.16, 79.14, 79.12, 79.11, 79.09, 79.07, 79.06, 79.04, 79.02, 79.00, 78.99, 78.97, 78.95, 78.94, 78.92, 78.90, 78.89, 78.87, 78.85, 78.84, 78.82, 78.80, 78.79, 78.77, 78.75, 78.74, 78.72, 78.70, 78.69, 78.67, 78.65, 78.64, 78.62, 78.60, 78.59, 78.57, 78.55}, -{81.38, 81.36, 81.34, 81.32, 81.30, 81.29, 81.27, 81.25, 81.23, 81.21, 81.19, 81.18, 81.16, 81.14, 81.12, 81.10, 81.08, 81.07, 81.05, 81.03, 81.01, 80.99, 80.98, 80.96, 80.94, 80.92, 80.90, 80.89, 80.87, 80.85, 80.83, 80.81, 80.80, 80.78, 80.76, 80.74, 80.72, 80.71, 80.69, 80.67, 80.65, 80.64, 80.62, 80.60, 80.58, 80.56, 80.55, 80.53, 80.51, 80.49, 80.48, 80.46, 80.44, 80.42, 80.41, 80.39, 80.37, 80.35, 80.33, 80.32, 80.30, 80.28, 80.26, 80.25, 80.23, 80.21, 80.19, 80.18, 80.16, 80.14, 80.12, 80.11, 80.09, 80.07, 80.06, 80.04, 80.02, 80.00, 79.99, 79.97, 79.95, 79.93, 79.92, 79.90, 79.88, 79.86, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.74, 79.73, 79.71, 79.69, 79.68, 79.66, 79.64, 79.62, 79.61, 79.59, 79.57, 79.56, 79.54, 79.52, 79.51, 79.49, 79.47, 79.46, 79.44, 79.42, 79.40, 79.39, 79.37, 79.35, 79.34, 79.32, 79.30, 79.29, 79.27, 79.25, 79.24, 79.22, 79.20, 79.19, 79.17, 79.15, 79.14, 79.12, 79.10, 79.09, 79.07, 79.05, 79.04, 79.02, 79.00, 78.99, 78.97, 78.95}, -{81.76, 81.75, 81.73, 81.71, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.58, 81.56, 81.55, 81.53, 81.51, 81.49, 81.47, 81.45, 81.44, 81.42, 81.40, 81.38, 81.36, 81.35, 81.33, 81.31, 81.29, 81.27, 81.26, 81.24, 81.22, 81.20, 81.18, 81.17, 81.15, 81.13, 81.11, 81.10, 81.08, 81.06, 81.04, 81.02, 81.01, 80.99, 80.97, 80.95, 80.94, 80.92, 80.90, 80.88, 80.87, 80.85, 80.83, 80.81, 80.79, 80.78, 80.76, 80.74, 80.72, 80.71, 80.69, 80.67, 80.65, 80.64, 80.62, 80.60, 80.58, 80.57, 80.55, 80.53, 80.51, 80.50, 80.48, 80.46, 80.45, 80.43, 80.41, 80.39, 80.38, 80.36, 80.34, 80.32, 80.31, 80.29, 80.27, 80.26, 80.24, 80.22, 80.20, 80.19, 80.17, 80.15, 80.14, 80.12, 80.10, 80.08, 80.07, 80.05, 80.03, 80.02, 80.00, 79.98, 79.97, 79.95, 79.93, 79.91, 79.90, 79.88, 79.86, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.75, 79.73, 79.71, 79.70, 79.68, 79.66, 79.64, 79.63, 79.61, 79.59, 79.58, 79.56, 79.54, 79.53, 79.51, 79.49, 79.48, 79.46, 79.44, 79.43, 79.41, 79.40, 79.38, 79.36, 79.35}, -{82.14, 82.12, 82.11, 82.09, 82.07, 82.05, 82.03, 82.02, 82.00, 81.98, 81.96, 81.94, 81.92, 81.91, 81.89, 81.87, 81.85, 81.83, 81.82, 81.80, 81.78, 81.76, 81.74, 81.73, 81.71, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.58, 81.57, 81.55, 81.53, 81.51, 81.49, 81.48, 81.46, 81.44, 81.42, 81.41, 81.39, 81.37, 81.35, 81.33, 81.32, 81.30, 81.28, 81.26, 81.25, 81.23, 81.21, 81.19, 81.18, 81.16, 81.14, 81.12, 81.11, 81.09, 81.07, 81.05, 81.04, 81.02, 81.00, 80.98, 80.97, 80.95, 80.93, 80.91, 80.90, 80.88, 80.86, 80.84, 80.83, 80.81, 80.79, 80.78, 80.76, 80.74, 80.72, 80.71, 80.69, 80.67, 80.66, 80.64, 80.62, 80.60, 80.59, 80.57, 80.55, 80.54, 80.52, 80.50, 80.48, 80.47, 80.45, 80.43, 80.42, 80.40, 80.38, 80.37, 80.35, 80.33, 80.31, 80.30, 80.28, 80.26, 80.25, 80.23, 80.21, 80.20, 80.18, 80.16, 80.15, 80.13, 80.11, 80.10, 80.08, 80.06, 80.05, 80.03, 80.01, 80.00, 79.98, 79.96, 79.95, 79.93, 79.91, 79.90, 79.88, 79.86, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.75, 79.73}, -{82.51, 82.50, 82.48, 82.46, 82.44, 82.42, 82.40, 82.39, 82.37, 82.35, 82.33, 82.31, 82.30, 82.28, 82.26, 82.24, 82.22, 82.21, 82.19, 82.17, 82.15, 82.13, 82.12, 82.10, 82.08, 82.06, 82.04, 82.03, 82.01, 81.99, 81.97, 81.96, 81.94, 81.92, 81.90, 81.88, 81.87, 81.85, 81.83, 81.81, 81.80, 81.78, 81.76, 81.74, 81.73, 81.71, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.58, 81.57, 81.55, 81.53, 81.51, 81.50, 81.48, 81.46, 81.44, 81.43, 81.41, 81.39, 81.37, 81.36, 81.34, 81.32, 81.31, 81.29, 81.27, 81.25, 81.24, 81.22, 81.20, 81.18, 81.17, 81.15, 81.13, 81.12, 81.10, 81.08, 81.06, 81.05, 81.03, 81.01, 81.00, 80.98, 80.96, 80.94, 80.93, 80.91, 80.89, 80.88, 80.86, 80.84, 80.83, 80.81, 80.79, 80.77, 80.76, 80.74, 80.72, 80.71, 80.69, 80.67, 80.66, 80.64, 80.62, 80.61, 80.59, 80.57, 80.56, 80.54, 80.52, 80.50, 80.49, 80.47, 80.45, 80.44, 80.42, 80.40, 80.39, 80.37, 80.35, 80.34, 80.32, 80.30, 80.29, 80.27, 80.26, 80.24, 80.22, 80.21, 80.19, 80.17, 80.16, 80.14, 80.12, 80.11}, -{82.88, 82.86, 82.84, 82.82, 82.80, 82.79, 82.77, 82.75, 82.73, 82.71, 82.70, 82.68, 82.66, 82.64, 82.62, 82.61, 82.59, 82.57, 82.55, 82.53, 82.52, 82.50, 82.48, 82.46, 82.44, 82.43, 82.41, 82.39, 82.37, 82.36, 82.34, 82.32, 82.30, 82.28, 82.27, 82.25, 82.23, 82.21, 82.20, 82.18, 82.16, 82.14, 82.13, 82.11, 82.09, 82.07, 82.06, 82.04, 82.02, 82.00, 81.98, 81.97, 81.95, 81.93, 81.92, 81.90, 81.88, 81.86, 81.85, 81.83, 81.81, 81.79, 81.78, 81.76, 81.74, 81.72, 81.71, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.59, 81.57, 81.55, 81.53, 81.52, 81.50, 81.48, 81.47, 81.45, 81.43, 81.41, 81.40, 81.38, 81.36, 81.35, 81.33, 81.31, 81.29, 81.28, 81.26, 81.24, 81.23, 81.21, 81.19, 81.18, 81.16, 81.14, 81.13, 81.11, 81.09, 81.07, 81.06, 81.04, 81.02, 81.01, 80.99, 80.97, 80.96, 80.94, 80.92, 80.91, 80.89, 80.87, 80.86, 80.84, 80.82, 80.81, 80.79, 80.77, 80.76, 80.74, 80.72, 80.71, 80.69, 80.67, 80.66, 80.64, 80.62, 80.61, 80.59, 80.57, 80.56, 80.54, 80.53, 80.51, 80.49, 80.48}, -{83.23, 83.21, 83.20, 83.18, 83.16, 83.14, 83.12, 83.11, 83.09, 83.07, 83.05, 83.03, 83.02, 83.00, 82.98, 82.96, 82.94, 82.93, 82.91, 82.89, 82.87, 82.85, 82.84, 82.82, 82.80, 82.78, 82.77, 82.75, 82.73, 82.71, 82.69, 82.68, 82.66, 82.64, 82.62, 82.61, 82.59, 82.57, 82.55, 82.54, 82.52, 82.50, 82.48, 82.47, 82.45, 82.43, 82.41, 82.40, 82.38, 82.36, 82.34, 82.33, 82.31, 82.29, 82.27, 82.26, 82.24, 82.22, 82.20, 82.19, 82.17, 82.15, 82.13, 82.12, 82.10, 82.08, 82.07, 82.05, 82.03, 82.01, 82.00, 81.98, 81.96, 81.94, 81.93, 81.91, 81.89, 81.88, 81.86, 81.84, 81.82, 81.81, 81.79, 81.77, 81.76, 81.74, 81.72, 81.71, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.59, 81.57, 81.55, 81.54, 81.52, 81.50, 81.49, 81.47, 81.45, 81.44, 81.42, 81.40, 81.38, 81.37, 81.35, 81.33, 81.32, 81.30, 81.28, 81.27, 81.25, 81.23, 81.22, 81.20, 81.18, 81.17, 81.15, 81.13, 81.12, 81.10, 81.08, 81.07, 81.05, 81.04, 81.02, 81.00, 80.99, 80.97, 80.95, 80.94, 80.92, 80.90, 80.89, 80.87, 80.85, 80.84}, -{83.58, 83.56, 83.54, 83.53, 83.51, 83.49, 83.47, 83.45, 83.44, 83.42, 83.40, 83.38, 83.36, 83.35, 83.33, 83.31, 83.29, 83.28, 83.26, 83.24, 83.22, 83.20, 83.19, 83.17, 83.15, 83.13, 83.12, 83.10, 83.08, 83.06, 83.04, 83.03, 83.01, 82.99, 82.97, 82.96, 82.94, 82.92, 82.90, 82.89, 82.87, 82.85, 82.83, 82.82, 82.80, 82.78, 82.76, 82.75, 82.73, 82.71, 82.69, 82.68, 82.66, 82.64, 82.62, 82.61, 82.59, 82.57, 82.55, 82.54, 82.52, 82.50, 82.49, 82.47, 82.45, 82.43, 82.42, 82.40, 82.38, 82.37, 82.35, 82.33, 82.31, 82.30, 82.28, 82.26, 82.25, 82.23, 82.21, 82.19, 82.18, 82.16, 82.14, 82.13, 82.11, 82.09, 82.08, 82.06, 82.04, 82.02, 82.01, 81.99, 81.97, 81.96, 81.94, 81.92, 81.91, 81.89, 81.87, 81.86, 81.84, 81.82, 81.81, 81.79, 81.77, 81.75, 81.74, 81.72, 81.70, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.59, 81.57, 81.55, 81.54, 81.52, 81.50, 81.49, 81.47, 81.46, 81.44, 81.42, 81.41, 81.39, 81.37, 81.36, 81.34, 81.32, 81.31, 81.29, 81.27, 81.26, 81.24, 81.22, 81.21, 81.19}, -{83.92, 83.90, 83.89, 83.87, 83.85, 83.83, 83.81, 83.80, 83.78, 83.76, 83.74, 83.72, 83.71, 83.69, 83.67, 83.65, 83.63, 83.62, 83.60, 83.58, 83.56, 83.55, 83.53, 83.51, 83.49, 83.48, 83.46, 83.44, 83.42, 83.40, 83.39, 83.37, 83.35, 83.33, 83.32, 83.30, 83.28, 83.26, 83.25, 83.23, 83.21, 83.19, 83.18, 83.16, 83.14, 83.12, 83.11, 83.09, 83.07, 83.05, 83.04, 83.02, 83.00, 82.99, 82.97, 82.95, 82.93, 82.92, 82.90, 82.88, 82.86, 82.85, 82.83, 82.81, 82.80, 82.78, 82.76, 82.74, 82.73, 82.71, 82.69, 82.68, 82.66, 82.64, 82.62, 82.61, 82.59, 82.57, 82.56, 82.54, 82.52, 82.51, 82.49, 82.47, 82.45, 82.44, 82.42, 82.40, 82.39, 82.37, 82.35, 82.34, 82.32, 82.30, 82.29, 82.27, 82.25, 82.24, 82.22, 82.20, 82.18, 82.17, 82.15, 82.13, 82.12, 82.10, 82.08, 82.07, 82.05, 82.03, 82.02, 82.00, 81.98, 81.97, 81.95, 81.93, 81.92, 81.90, 81.89, 81.87, 81.85, 81.84, 81.82, 81.80, 81.79, 81.77, 81.75, 81.74, 81.72, 81.70, 81.69, 81.67, 81.65, 81.64, 81.62, 81.61, 81.59, 81.57, 81.56, 81.54}, -{84.26, 84.24, 84.22, 84.20, 84.18, 84.17, 84.15, 84.13, 84.11, 84.09, 84.08, 84.06, 84.04, 84.02, 84.01, 83.99, 83.97, 83.95, 83.93, 83.92, 83.90, 83.88, 83.86, 83.85, 83.83, 83.81, 83.79, 83.78, 83.76, 83.74, 83.72, 83.71, 83.69, 83.67, 83.65, 83.64, 83.62, 83.60, 83.58, 83.57, 83.55, 83.53, 83.51, 83.50, 83.48, 83.46, 83.44, 83.43, 83.41, 83.39, 83.37, 83.36, 83.34, 83.32, 83.31, 83.29, 83.27, 83.25, 83.24, 83.22, 83.20, 83.18, 83.17, 83.15, 83.13, 83.12, 83.10, 83.08, 83.07, 83.05, 83.03, 83.01, 83.00, 82.98, 82.96, 82.95, 82.93, 82.91, 82.89, 82.88, 82.86, 82.84, 82.83, 82.81, 82.79, 82.78, 82.76, 82.74, 82.73, 82.71, 82.69, 82.68, 82.66, 82.64, 82.62, 82.61, 82.59, 82.57, 82.56, 82.54, 82.52, 82.51, 82.49, 82.47, 82.46, 82.44, 82.42, 82.41, 82.39, 82.37, 82.36, 82.34, 82.32, 82.31, 82.29, 82.28, 82.26, 82.24, 82.23, 82.21, 82.19, 82.18, 82.16, 82.14, 82.13, 82.11, 82.09, 82.08, 82.06, 82.04, 82.03, 82.01, 82.00, 81.98, 81.96, 81.95, 81.93, 81.91, 81.90, 81.88}, -{84.58, 84.56, 84.55, 84.53, 84.51, 84.49, 84.48, 84.46, 84.44, 84.42, 84.40, 84.39, 84.37, 84.35, 84.33, 84.32, 84.30, 84.28, 84.26, 84.25, 84.23, 84.21, 84.19, 84.18, 84.16, 84.14, 84.12, 84.10, 84.09, 84.07, 84.05, 84.03, 84.02, 84.00, 83.98, 83.96, 83.95, 83.93, 83.91, 83.90, 83.88, 83.86, 83.84, 83.83, 83.81, 83.79, 83.77, 83.76, 83.74, 83.72, 83.70, 83.69, 83.67, 83.65, 83.64, 83.62, 83.60, 83.58, 83.57, 83.55, 83.53, 83.52, 83.50, 83.48, 83.46, 83.45, 83.43, 83.41, 83.40, 83.38, 83.36, 83.35, 83.33, 83.31, 83.29, 83.28, 83.26, 83.24, 83.23, 83.21, 83.19, 83.18, 83.16, 83.14, 83.13, 83.11, 83.09, 83.07, 83.06, 83.04, 83.02, 83.01, 82.99, 82.97, 82.96, 82.94, 82.92, 82.91, 82.89, 82.87, 82.86, 82.84, 82.82, 82.81, 82.79, 82.77, 82.76, 82.74, 82.72, 82.71, 82.69, 82.67, 82.66, 82.64, 82.63, 82.61, 82.59, 82.58, 82.56, 82.54, 82.53, 82.51, 82.49, 82.48, 82.46, 82.44, 82.43, 82.41, 82.40, 82.38, 82.36, 82.35, 82.33, 82.31, 82.30, 82.28, 82.26, 82.25, 82.23, 82.22}, -{84.90, 84.89, 84.87, 84.85, 84.83, 84.81, 84.80, 84.78, 84.76, 84.74, 84.73, 84.71, 84.69, 84.67, 84.66, 84.64, 84.62, 84.60, 84.59, 84.57, 84.55, 84.53, 84.51, 84.50, 84.48, 84.46, 84.44, 84.43, 84.41, 84.39, 84.38, 84.36, 84.34, 84.32, 84.31, 84.29, 84.27, 84.25, 84.24, 84.22, 84.20, 84.18, 84.17, 84.15, 84.13, 84.11, 84.10, 84.08, 84.06, 84.05, 84.03, 84.01, 83.99, 83.98, 83.96, 83.94, 83.93, 83.91, 83.89, 83.87, 83.86, 83.84, 83.82, 83.81, 83.79, 83.77, 83.76, 83.74, 83.72, 83.70, 83.69, 83.67, 83.65, 83.64, 83.62, 83.60, 83.59, 83.57, 83.55, 83.54, 83.52, 83.50, 83.48, 83.47, 83.45, 83.43, 83.42, 83.40, 83.38, 83.37, 83.35, 83.33, 83.32, 83.30, 83.28, 83.27, 83.25, 83.23, 83.22, 83.20, 83.18, 83.17, 83.15, 83.13, 83.12, 83.10, 83.08, 83.07, 83.05, 83.03, 83.02, 83.00, 82.99, 82.97, 82.95, 82.94, 82.92, 82.90, 82.89, 82.87, 82.85, 82.84, 82.82, 82.80, 82.79, 82.77, 82.76, 82.74, 82.72, 82.71, 82.69, 82.67, 82.66, 82.64, 82.63, 82.61, 82.59, 82.58, 82.56, 82.54}, -{85.22, 85.20, 85.18, 85.16, 85.15, 85.13, 85.11, 85.09, 85.08, 85.06, 85.04, 85.02, 85.01, 84.99, 84.97, 84.95, 84.94, 84.92, 84.90, 84.88, 84.87, 84.85, 84.83, 84.81, 84.80, 84.78, 84.76, 84.74, 84.73, 84.71, 84.69, 84.67, 84.66, 84.64, 84.62, 84.60, 84.59, 84.57, 84.55, 84.54, 84.52, 84.50, 84.48, 84.47, 84.45, 84.43, 84.42, 84.40, 84.38, 84.36, 84.35, 84.33, 84.31, 84.30, 84.28, 84.26, 84.24, 84.23, 84.21, 84.19, 84.18, 84.16, 84.14, 84.12, 84.11, 84.09, 84.07, 84.06, 84.04, 84.02, 84.01, 83.99, 83.97, 83.96, 83.94, 83.92, 83.91, 83.89, 83.87, 83.85, 83.84, 83.82, 83.80, 83.79, 83.77, 83.75, 83.74, 83.72, 83.70, 83.69, 83.67, 83.65, 83.64, 83.62, 83.60, 83.59, 83.57, 83.55, 83.54, 83.52, 83.50, 83.49, 83.47, 83.45, 83.44, 83.42, 83.41, 83.39, 83.37, 83.36, 83.34, 83.32, 83.31, 83.29, 83.27, 83.26, 83.24, 83.22, 83.21, 83.19, 83.18, 83.16, 83.14, 83.13, 83.11, 83.09, 83.08, 83.06, 83.04, 83.03, 83.01, 83.00, 82.98, 82.96, 82.95, 82.93, 82.92, 82.90, 82.88, 82.87}, -{85.53, 85.51, 85.49, 85.47, 85.46, 85.44, 85.42, 85.40, 85.39, 85.37, 85.35, 85.33, 85.32, 85.30, 85.28, 85.26, 85.25, 85.23, 85.21, 85.19, 85.18, 85.16, 85.14, 85.12, 85.11, 85.09, 85.07, 85.05, 85.04, 85.02, 85.00, 84.98, 84.97, 84.95, 84.93, 84.92, 84.90, 84.88, 84.86, 84.85, 84.83, 84.81, 84.80, 84.78, 84.76, 84.74, 84.73, 84.71, 84.69, 84.68, 84.66, 84.64, 84.62, 84.61, 84.59, 84.57, 84.56, 84.54, 84.52, 84.51, 84.49, 84.47, 84.45, 84.44, 84.42, 84.40, 84.39, 84.37, 84.35, 84.34, 84.32, 84.30, 84.29, 84.27, 84.25, 84.23, 84.22, 84.20, 84.18, 84.17, 84.15, 84.13, 84.12, 84.10, 84.08, 84.07, 84.05, 84.03, 84.02, 84.00, 83.98, 83.97, 83.95, 83.93, 83.92, 83.90, 83.88, 83.87, 83.85, 83.84, 83.82, 83.80, 83.79, 83.77, 83.75, 83.74, 83.72, 83.70, 83.69, 83.67, 83.65, 83.64, 83.62, 83.60, 83.59, 83.57, 83.56, 83.54, 83.52, 83.51, 83.49, 83.47, 83.46, 83.44, 83.43, 83.41, 83.39, 83.38, 83.36, 83.34, 83.33, 83.31, 83.30, 83.28, 83.26, 83.25, 83.23, 83.22, 83.20, 83.18} -}; - - -const float InverseMapW[80][140] = { -{-43.41, -41.64, -39.87, -38.10, -36.34, -34.58, -32.83, -31.09, -29.34, -27.61, -25.88, -24.15, -22.43, -20.72, -19.00, -17.30, -15.60, -13.90, -12.21, -10.52, -8.84, -7.16, -5.49, -3.82, -2.16, -0.50, 1.15, 2.80, 4.44, 6.08, 7.72, 9.35, 10.97, 12.60, 14.21, 15.82, 17.43, 19.04, 20.63, 22.23, 23.82, 25.40, 26.99, 28.56, 30.13, 31.70, 33.27, 34.83, 36.38, 37.93, 39.48, 41.02, 42.56, 44.10, 45.63, 47.15, 48.67, 50.19, 51.70, 53.21, 54.72, 56.22, 57.72, 59.21, 60.70, 62.19, 63.67, 65.15, 66.62, 68.09, 69.55, 71.02, 72.47, 73.93, 75.38, 76.82, 78.27, 79.71, 81.14, 82.57, 84.00, 85.42, 86.84, 88.26, 89.67, 91.08, 92.49, 93.89, 95.29, 96.68, 98.07, 99.46, 100.84, 102.22, 103.60, 104.97, 106.34, 107.71, 109.07, 110.43, 111.78, 113.14, 114.48, 115.83, 117.17, 118.51, 119.84, 121.18, 122.50, 123.83, 125.15, 126.47, 127.78, 129.10, 130.40, 131.71, 133.01, 134.31, 135.60, 136.90, 138.18, 139.47, 140.75, 142.03, 143.31, 144.58, 145.85, 147.12, 148.38, 149.64, 150.90, 152.15, 153.40, 154.65, 155.90, 157.14, 158.38, 159.61, 160.84, 162.07}, -{-38.86, -37.16, -35.46, -33.77, -32.09, -30.41, -28.73, -27.06, -25.39, -23.73, -22.07, -20.42, -18.77, -17.13, -15.49, -13.85, -12.22, -10.60, -8.97, -7.36, -5.75, -4.14, -2.53, -0.93, 0.66, 2.25, 3.84, 5.42, 7.00, 8.57, 10.14, 11.70, 13.27, 14.82, 16.37, 17.92, 19.47, 21.01, 22.54, 24.07, 25.60, 27.13, 28.65, 30.16, 31.67, 33.18, 34.68, 36.18, 37.68, 39.17, 40.66, 42.14, 43.62, 45.10, 46.57, 48.04, 49.50, 50.96, 52.42, 53.87, 55.32, 56.77, 58.21, 59.65, 61.08, 62.51, 63.94, 65.36, 66.78, 68.20, 69.61, 71.02, 72.43, 73.83, 75.23, 76.62, 78.01, 79.40, 80.78, 82.16, 83.54, 84.92, 86.29, 87.65, 89.02, 90.37, 91.73, 93.08, 94.43, 95.78, 97.12, 98.46, 99.80, 101.13, 102.46, 103.79, 105.11, 106.43, 107.75, 109.06, 110.37, 111.68, 112.98, 114.28, 115.58, 116.87, 118.16, 119.45, 120.73, 122.01, 123.29, 124.57, 125.84, 127.11, 128.37, 129.64, 130.90, 132.15, 133.41, 134.66, 135.90, 137.15, 138.39, 139.63, 140.86, 142.10, 143.33, 144.55, 145.78, 147.00, 148.22, 149.43, 150.64, 151.85, 153.06, 154.26, 155.46, 156.66, 157.86, 159.05}, -{-34.65, -33.02, -31.39, -29.77, -28.16, -26.55, -24.94, -23.34, -21.74, -20.14, -18.55, -16.97, -15.38, -13.81, -12.23, -10.66, -9.10, -7.54, -5.98, -4.43, -2.88, -1.34, 0.20, 1.74, 3.27, 4.80, 6.33, 7.85, 9.36, 10.87, 12.38, 13.89, 15.39, 16.89, 18.38, 19.87, 21.35, 22.83, 24.31, 25.79, 27.26, 28.72, 30.18, 31.64, 33.10, 34.55, 36.00, 37.44, 38.88, 40.32, 41.75, 43.18, 44.61, 46.03, 47.45, 48.86, 50.27, 51.68, 53.09, 54.49, 55.88, 57.28, 58.67, 60.06, 61.44, 62.82, 64.20, 65.57, 66.94, 68.30, 69.67, 71.03, 72.38, 73.74, 75.09, 76.43, 77.78, 79.12, 80.45, 81.79, 83.12, 84.44, 85.77, 87.09, 88.40, 89.72, 91.03, 92.33, 93.64, 94.94, 96.24, 97.53, 98.82, 100.11, 101.40, 102.68, 103.96, 105.24, 106.51, 107.78, 109.05, 110.31, 111.57, 112.83, 114.09, 115.34, 116.59, 117.84, 119.08, 120.32, 121.56, 122.79, 124.02, 125.25, 126.48, 127.70, 128.92, 130.14, 131.35, 132.57, 133.77, 134.98, 136.18, 137.38, 138.58, 139.78, 140.97, 142.16, 143.35, 144.53, 145.71, 146.89, 148.07, 149.24, 150.41, 151.58, 152.74, 153.90, 155.06, 156.22}, -{-30.75, -29.19, -27.63, -26.07, -24.52, -22.97, -21.43, -19.89, -18.35, -16.82, -15.29, -13.77, -12.24, -10.73, -9.22, -7.71, -6.20, -4.70, -3.20, -1.71, -0.22, 1.26, 2.75, 4.22, 5.70, 7.17, 8.64, 10.10, 11.56, 13.02, 14.47, 15.92, 17.36, 18.80, 20.24, 21.68, 23.11, 24.53, 25.96, 27.38, 28.79, 30.21, 31.62, 33.02, 34.43, 35.82, 37.22, 38.61, 40.00, 41.39, 42.77, 44.15, 45.52, 46.90, 48.26, 49.63, 50.99, 52.35, 53.71, 55.06, 56.41, 57.75, 59.09, 60.43, 61.77, 63.10, 64.43, 65.76, 67.08, 68.40, 69.72, 71.03, 72.34, 73.65, 74.96, 76.26, 77.55, 78.85, 80.14, 81.43, 82.72, 84.00, 85.28, 86.56, 87.83, 89.10, 90.37, 91.63, 92.90, 94.16, 95.41, 96.67, 97.92, 99.16, 100.41, 101.65, 102.89, 104.12, 105.36, 106.59, 107.81, 109.04, 110.26, 111.48, 112.70, 113.91, 115.12, 116.33, 117.53, 118.73, 119.93, 121.13, 122.32, 123.52, 124.70, 125.89, 127.07, 128.25, 129.43, 130.61, 131.78, 132.95, 134.12, 135.28, 136.44, 137.60, 138.76, 139.92, 141.07, 142.22, 143.36, 144.51, 145.65, 146.79, 147.92, 149.06, 150.19, 151.32, 152.45, 153.57}, -{-27.13, -25.62, -24.12, -22.63, -21.13, -19.64, -18.16, -16.68, -15.20, -13.73, -12.26, -10.79, -9.32, -7.87, -6.41, -4.96, -3.51, -2.06, -0.62, 0.82, 2.25, 3.68, 5.11, 6.54, 7.96, 9.37, 10.79, 12.20, 13.61, 15.01, 16.41, 17.81, 19.20, 20.59, 21.98, 23.36, 24.74, 26.12, 27.49, 28.86, 30.23, 31.59, 32.95, 34.31, 35.66, 37.01, 38.36, 39.71, 41.05, 42.38, 43.72, 45.05, 46.38, 47.70, 49.03, 50.35, 51.66, 52.97, 54.28, 55.59, 56.90, 58.20, 59.49, 60.79, 62.08, 63.37, 64.65, 65.94, 67.22, 68.49, 69.77, 71.04, 72.31, 73.57, 74.83, 76.09, 77.35, 78.60, 79.85, 81.10, 82.34, 83.59, 84.83, 86.06, 87.30, 88.53, 89.75, 90.98, 92.20, 93.42, 94.64, 95.85, 97.06, 98.27, 99.48, 100.68, 101.88, 103.08, 104.28, 105.47, 106.66, 107.85, 109.03, 110.21, 111.39, 112.57, 113.74, 114.91, 116.08, 117.25, 118.41, 119.57, 120.73, 121.89, 123.04, 124.19, 125.34, 126.49, 127.63, 128.77, 129.91, 131.05, 132.18, 133.31, 134.44, 135.56, 136.69, 137.81, 138.93, 140.04, 141.16, 142.27, 143.38, 144.49, 145.59, 146.69, 147.79, 148.89, 149.98, 151.08}, -{-23.75, -22.31, -20.86, -19.42, -17.98, -16.55, -15.12, -13.69, -12.26, -10.84, -9.43, -8.01, -6.60, -5.20, -3.79, -2.39, -0.99, 0.40, 1.79, 3.18, 4.56, 5.94, 7.32, 8.69, 10.06, 11.43, 12.80, 14.16, 15.52, 16.87, 18.22, 19.57, 20.92, 22.26, 23.60, 24.93, 26.27, 27.60, 28.92, 30.25, 31.57, 32.89, 34.20, 35.51, 36.82, 38.13, 39.43, 40.73, 42.02, 43.32, 44.61, 45.89, 47.18, 48.46, 49.74, 51.02, 52.29, 53.56, 54.83, 56.09, 57.35, 58.61, 59.87, 61.12, 62.37, 63.62, 64.86, 66.10, 67.34, 68.58, 69.81, 71.04, 72.27, 73.50, 74.72, 75.94, 77.15, 78.37, 79.58, 80.79, 82.00, 83.20, 84.40, 85.60, 86.79, 87.99, 89.18, 90.37, 91.55, 92.73, 93.91, 95.09, 96.27, 97.44, 98.61, 99.77, 100.94, 102.10, 103.26, 104.42, 105.57, 106.72, 107.87, 109.02, 110.17, 111.31, 112.45, 113.59, 114.72, 115.85, 116.98, 118.11, 119.24, 120.36, 121.48, 122.60, 123.71, 124.83, 125.94, 127.04, 128.15, 129.25, 130.36, 131.46, 132.55, 133.65, 134.74, 135.83, 136.92, 138.00, 139.08, 140.17, 141.24, 142.32, 143.39, 144.47, 145.54, 146.60, 147.67, 148.73}, -{-20.61, -19.21, -17.82, -16.43, -15.04, -13.65, -12.27, -10.90, -9.52, -8.15, -6.78, -5.42, -4.06, -2.70, -1.34, 0.01, 1.36, 2.70, 4.04, 5.38, 6.72, 8.05, 9.39, 10.71, 12.04, 13.36, 14.68, 15.99, 17.30, 18.61, 19.92, 21.22, 22.52, 23.82, 25.12, 26.41, 27.70, 28.98, 30.27, 31.55, 32.82, 34.10, 35.37, 36.64, 37.90, 39.17, 40.43, 41.68, 42.94, 44.19, 45.44, 46.69, 47.93, 49.17, 50.41, 51.64, 52.88, 54.11, 55.33, 56.56, 57.78, 59.00, 60.22, 61.43, 62.64, 63.85, 65.06, 66.26, 67.46, 68.66, 69.85, 71.05, 72.24, 73.42, 74.61, 75.79, 76.97, 78.15, 79.33, 80.50, 81.67, 82.84, 84.00, 85.16, 86.32, 87.48, 88.64, 89.79, 90.94, 92.09, 93.23, 94.37, 95.51, 96.65, 97.79, 98.92, 100.05, 101.18, 102.31, 103.43, 104.55, 105.67, 106.79, 107.90, 109.01, 110.12, 111.23, 112.34, 113.44, 114.54, 115.64, 116.73, 117.83, 118.92, 120.01, 121.09, 122.18, 123.26, 124.34, 125.42, 126.49, 127.57, 128.64, 129.71, 130.77, 131.84, 132.90, 133.96, 135.02, 136.08, 137.13, 138.18, 139.23, 140.28, 141.32, 142.37, 143.41, 144.45, 145.48, 146.52}, -{-17.66, -16.31, -14.96, -13.62, -12.28, -10.95, -9.61, -8.28, -6.95, -5.63, -4.31, -2.99, -1.67, -0.36, 0.95, 2.25, 3.56, 4.86, 6.16, 7.45, 8.74, 10.03, 11.32, 12.60, 13.89, 15.16, 16.44, 17.71, 18.98, 20.25, 21.51, 22.77, 24.03, 25.29, 26.54, 27.79, 29.04, 30.28, 31.52, 32.76, 34.00, 35.24, 36.47, 37.70, 38.92, 40.14, 41.37, 42.58, 43.80, 45.01, 46.22, 47.43, 48.63, 49.84, 51.04, 52.23, 53.43, 54.62, 55.81, 57.00, 58.18, 59.37, 60.55, 61.72, 62.90, 64.07, 65.24, 66.41, 67.57, 68.73, 69.89, 71.05, 72.21, 73.36, 74.51, 75.66, 76.80, 77.94, 79.08, 80.22, 81.36, 82.49, 83.62, 84.75, 85.88, 87.00, 88.12, 89.24, 90.36, 91.48, 92.59, 93.70, 94.81, 95.91, 97.02, 98.12, 99.22, 100.31, 101.41, 102.50, 103.59, 104.68, 105.76, 106.85, 107.93, 109.01, 110.08, 111.16, 112.23, 113.30, 114.37, 115.43, 116.50, 117.56, 118.62, 119.68, 120.73, 121.78, 122.84, 123.88, 124.93, 125.98, 127.02, 128.06, 129.10, 130.13, 131.17, 132.20, 133.23, 134.26, 135.29, 136.31, 137.33, 138.35, 139.37, 140.39, 141.40, 142.41, 143.42, 144.43}, -{-14.89, -13.59, -12.29, -10.99, -9.70, -8.40, -7.12, -5.83, -4.55, -3.26, -1.99, -0.71, 0.56, 1.83, 3.10, 4.36, 5.63, 6.88, 8.14, 9.39, 10.65, 11.89, 13.14, 14.38, 15.62, 16.86, 18.09, 19.33, 20.56, 21.78, 23.01, 24.23, 25.45, 26.66, 27.88, 29.09, 30.30, 31.51, 32.71, 33.91, 35.11, 36.30, 37.50, 38.69, 39.88, 41.06, 42.25, 43.43, 44.61, 45.78, 46.96, 48.13, 49.30, 50.46, 51.63, 52.79, 53.95, 55.11, 56.26, 57.41, 58.56, 59.71, 60.85, 62.00, 63.14, 64.28, 65.41, 66.54, 67.68, 68.80, 69.93, 71.05, 72.18, 73.30, 74.41, 75.53, 76.64, 77.75, 78.86, 79.96, 81.07, 82.17, 83.27, 84.37, 85.46, 86.55, 87.64, 88.73, 89.82, 90.90, 91.98, 93.06, 94.14, 95.21, 96.29, 97.36, 98.43, 99.49, 100.56, 101.62, 102.68, 103.74, 104.80, 105.85, 106.90, 107.95, 109.00, 110.04, 111.09, 112.13, 113.17, 114.21, 115.24, 116.28, 117.31, 118.34, 119.36, 120.39, 121.41, 122.43, 123.45, 124.47, 125.49, 126.50, 127.51, 128.52, 129.53, 130.54, 131.54, 132.54, 133.54, 134.54, 135.53, 136.53, 137.52, 138.51, 139.50, 140.49, 141.47, 142.45}, -{-12.30, -11.04, -9.78, -8.52, -7.27, -6.02, -4.77, -3.52, -2.28, -1.04, 0.20, 1.43, 2.67, 3.90, 5.12, 6.35, 7.57, 8.79, 10.01, 11.22, 12.43, 13.64, 14.85, 16.05, 17.26, 18.46, 19.65, 20.85, 22.04, 23.23, 24.42, 25.60, 26.78, 27.96, 29.14, 30.31, 31.49, 32.66, 33.82, 34.99, 36.15, 37.31, 38.47, 39.63, 40.78, 41.93, 43.08, 44.23, 45.37, 46.51, 47.65, 48.79, 49.92, 51.06, 52.19, 53.31, 54.44, 55.56, 56.68, 57.80, 58.92, 60.03, 61.15, 62.26, 63.36, 64.47, 65.57, 66.67, 67.77, 68.87, 69.97, 71.06, 72.15, 73.24, 74.32, 75.41, 76.49, 77.57, 78.64, 79.72, 80.79, 81.86, 82.93, 84.00, 85.06, 86.13, 87.19, 88.25, 89.30, 90.36, 91.41, 92.46, 93.51, 94.55, 95.60, 96.64, 97.68, 98.72, 99.76, 100.79, 101.82, 102.85, 103.88, 104.91, 105.93, 106.95, 107.97, 108.99, 110.01, 111.02, 112.04, 113.05, 114.06, 115.06, 116.07, 117.07, 118.07, 119.07, 120.07, 121.06, 122.06, 123.05, 124.04, 125.03, 126.01, 127.00, 127.98, 128.96, 129.94, 130.91, 131.89, 132.86, 133.83, 134.80, 135.77, 136.74, 137.70, 138.66, 139.62, 140.58}, -{-9.85, -8.63, -7.41, -6.19, -4.98, -3.77, -2.56, -1.35, -0.15, 1.06, 2.26, 3.45, 4.65, 5.84, 7.03, 8.22, 9.40, 10.59, 11.77, 12.94, 14.12, 15.29, 16.46, 17.63, 18.80, 19.96, 21.12, 22.28, 23.44, 24.59, 25.74, 26.89, 28.04, 29.19, 30.33, 31.47, 32.61, 33.74, 34.88, 36.01, 37.14, 38.26, 39.39, 40.51, 41.63, 42.75, 43.87, 44.98, 46.09, 47.20, 48.31, 49.41, 50.51, 51.62, 52.71, 53.81, 54.90, 56.00, 57.09, 58.17, 59.26, 60.34, 61.42, 62.50, 63.58, 64.65, 65.73, 66.80, 67.87, 68.93, 70.00, 71.06, 72.12, 73.18, 74.24, 75.29, 76.34, 77.39, 78.44, 79.49, 80.53, 81.58, 82.62, 83.65, 84.69, 85.73, 86.76, 87.79, 88.82, 89.84, 90.87, 91.89, 92.91, 93.93, 94.95, 95.96, 96.98, 97.99, 99.00, 100.00, 101.01, 102.01, 103.01, 104.01, 105.01, 106.01, 107.00, 108.00, 108.99, 109.97, 110.96, 111.95, 112.93, 113.91, 114.89, 115.87, 116.84, 117.82, 118.79, 119.76, 120.73, 121.70, 122.66, 123.63, 124.59, 125.55, 126.51, 127.46, 128.42, 129.37, 130.32, 131.27, 132.22, 133.16, 134.11, 135.05, 135.99, 136.93, 137.87, 138.80}, -{-7.55, -6.36, -5.18, -4.00, -2.82, -1.65, -0.47, 0.70, 1.87, 3.03, 4.20, 5.36, 6.52, 7.68, 8.83, 9.98, 11.13, 12.28, 13.43, 14.57, 15.71, 16.85, 17.99, 19.12, 20.25, 21.38, 22.51, 23.64, 24.76, 25.88, 27.00, 28.12, 29.23, 30.34, 31.45, 32.56, 33.67, 34.77, 35.87, 36.97, 38.07, 39.16, 40.26, 41.35, 42.44, 43.52, 44.61, 45.69, 46.77, 47.85, 48.93, 50.00, 51.07, 52.14, 53.21, 54.28, 55.34, 56.40, 57.46, 58.52, 59.58, 60.63, 61.68, 62.73, 63.78, 64.83, 65.87, 66.92, 67.96, 68.99, 70.03, 71.06, 72.10, 73.13, 74.16, 75.18, 76.21, 77.23, 78.25, 79.27, 80.29, 81.30, 82.32, 83.33, 84.34, 85.34, 86.35, 87.35, 88.36, 89.36, 90.35, 91.35, 92.35, 93.34, 94.33, 95.32, 96.31, 97.29, 98.28, 99.26, 100.24, 101.22, 102.19, 103.17, 104.14, 105.11, 106.08, 107.05, 108.02, 108.98, 109.94, 110.90, 111.86, 112.82, 113.78, 114.73, 115.68, 116.63, 117.58, 118.53, 119.47, 120.42, 121.36, 122.30, 123.24, 124.17, 125.11, 126.04, 126.97, 127.90, 128.83, 129.76, 130.69, 131.61, 132.53, 133.45, 134.37, 135.29, 136.20, 137.12}, -{-5.37, -4.22, -3.07, -1.93, -0.78, 0.36, 1.50, 2.64, 3.77, 4.90, 6.03, 7.16, 8.29, 9.41, 10.53, 11.65, 12.77, 13.88, 15.00, 16.11, 17.22, 18.32, 19.43, 20.53, 21.63, 22.73, 23.82, 24.92, 26.01, 27.10, 28.19, 29.27, 30.36, 31.44, 32.52, 33.59, 34.67, 35.74, 36.81, 37.88, 38.95, 40.02, 41.08, 42.14, 43.20, 44.26, 45.31, 46.37, 47.42, 48.47, 49.51, 50.56, 51.60, 52.64, 53.68, 54.72, 55.76, 56.79, 57.82, 58.85, 59.88, 60.91, 61.93, 62.95, 63.98, 64.99, 66.01, 67.03, 68.04, 69.05, 70.06, 71.07, 72.07, 73.08, 74.08, 75.08, 76.08, 77.07, 78.07, 79.06, 80.05, 81.04, 82.03, 83.02, 84.00, 84.98, 85.96, 86.94, 87.92, 88.89, 89.87, 90.84, 91.81, 92.78, 93.74, 94.71, 95.67, 96.63, 97.59, 98.55, 99.51, 100.46, 101.41, 102.36, 103.31, 104.26, 105.21, 106.15, 107.09, 108.03, 108.97, 109.91, 110.85, 111.78, 112.72, 113.65, 114.58, 115.50, 116.43, 117.35, 118.28, 119.20, 120.12, 121.04, 121.95, 122.87, 123.78, 124.69, 125.60, 126.51, 127.42, 128.32, 129.23, 130.13, 131.03, 131.93, 132.83, 133.72, 134.62, 135.51}, -{-3.31, -2.19, -1.08, 0.04, 1.15, 2.26, 3.36, 4.47, 5.57, 6.67, 7.77, 8.87, 9.96, 11.05, 12.14, 13.23, 14.32, 15.40, 16.48, 17.56, 18.64, 19.72, 20.79, 21.86, 22.93, 24.00, 25.07, 26.13, 27.19, 28.25, 29.31, 30.37, 31.42, 32.47, 33.52, 34.57, 35.62, 36.66, 37.71, 38.75, 39.79, 40.82, 41.86, 42.89, 43.92, 44.95, 45.98, 47.00, 48.03, 49.05, 50.07, 51.09, 52.10, 53.12, 54.13, 55.14, 56.15, 57.16, 58.16, 59.17, 60.17, 61.17, 62.17, 63.16, 64.16, 65.15, 66.14, 67.13, 68.12, 69.10, 70.09, 71.07, 72.05, 73.03, 74.01, 74.98, 75.95, 76.93, 77.90, 78.86, 79.83, 80.80, 81.76, 82.72, 83.68, 84.64, 85.59, 86.55, 87.50, 88.45, 89.40, 90.35, 91.30, 92.24, 93.19, 94.13, 95.07, 96.00, 96.94, 97.88, 98.81, 99.74, 100.67, 101.60, 102.53, 103.45, 104.37, 105.30, 106.22, 107.14, 108.05, 108.97, 109.88, 110.80, 111.71, 112.62, 113.52, 114.43, 115.33, 116.24, 117.14, 118.04, 118.94, 119.83, 120.73, 121.62, 122.52, 123.41, 124.30, 125.18, 126.07, 126.96, 127.84, 128.72, 129.60, 130.48, 131.36, 132.23, 133.11, 133.98}, -{-1.36, -0.27, 0.81, 1.90, 2.98, 4.06, 5.13, 6.21, 7.28, 8.35, 9.42, 10.48, 11.55, 12.61, 13.67, 14.73, 15.79, 16.84, 17.89, 18.94, 19.99, 21.04, 22.09, 23.13, 24.17, 25.21, 26.25, 27.28, 28.32, 29.35, 30.38, 31.41, 32.43, 33.46, 34.48, 35.50, 36.52, 37.54, 38.55, 39.57, 40.58, 41.59, 42.60, 43.60, 44.61, 45.61, 46.61, 47.61, 48.61, 49.61, 50.60, 51.59, 52.58, 53.57, 54.56, 55.54, 56.53, 57.51, 58.49, 59.47, 60.44, 61.42, 62.39, 63.36, 64.33, 65.30, 66.27, 67.23, 68.19, 69.16, 70.11, 71.07, 72.03, 72.98, 73.94, 74.89, 75.84, 76.79, 77.73, 78.68, 79.62, 80.56, 81.50, 82.44, 83.38, 84.31, 85.24, 86.18, 87.11, 88.04, 88.96, 89.89, 90.81, 91.73, 92.66, 93.57, 94.49, 95.41, 96.32, 97.24, 98.15, 99.06, 99.96, 100.87, 101.78, 102.68, 103.58, 104.48, 105.38, 106.28, 107.18, 108.07, 108.96, 109.86, 110.75, 111.63, 112.52, 113.41, 114.29, 115.17, 116.05, 116.93, 117.81, 118.69, 119.57, 120.44, 121.31, 122.18, 123.05, 123.92, 124.79, 125.65, 126.52, 127.38, 128.24, 129.10, 129.96, 130.81, 131.67, 132.52}, -{0.50, 1.55, 2.61, 3.66, 4.71, 5.76, 6.81, 7.86, 8.90, 9.94, 10.98, 12.02, 13.05, 14.09, 15.12, 16.15, 17.18, 18.21, 19.23, 20.26, 21.28, 22.30, 23.32, 24.33, 25.35, 26.36, 27.37, 28.38, 29.39, 30.39, 31.39, 32.40, 33.40, 34.39, 35.39, 36.39, 37.38, 38.37, 39.36, 40.35, 41.33, 42.32, 43.30, 44.28, 45.26, 46.24, 47.22, 48.19, 49.16, 50.13, 51.10, 52.07, 53.04, 54.00, 54.96, 55.92, 56.88, 57.84, 58.80, 59.75, 60.70, 61.65, 62.60, 63.55, 64.50, 65.44, 66.38, 67.33, 68.27, 69.20, 70.14, 71.08, 72.01, 72.94, 73.87, 74.80, 75.73, 76.65, 77.58, 78.50, 79.42, 80.34, 81.26, 82.17, 83.09, 84.00, 84.91, 85.82, 86.73, 87.64, 88.54, 89.45, 90.35, 91.25, 92.15, 93.05, 93.94, 94.84, 95.73, 96.62, 97.51, 98.40, 99.29, 100.18, 101.06, 101.95, 102.83, 103.71, 104.59, 105.46, 106.34, 107.21, 108.09, 108.96, 109.83, 110.70, 111.57, 112.43, 113.30, 114.16, 115.02, 115.88, 116.74, 117.60, 118.45, 119.31, 120.16, 121.01, 121.86, 122.71, 123.56, 124.41, 125.25, 126.10, 126.94, 127.78, 128.62, 129.46, 130.30, 131.13}, -{2.26, 3.29, 4.31, 5.34, 6.36, 7.38, 8.40, 9.42, 10.44, 11.45, 12.47, 13.48, 14.49, 15.50, 16.50, 17.51, 18.51, 19.51, 20.51, 21.50, 22.50, 23.49, 24.49, 25.48, 26.46, 27.45, 28.44, 29.42, 30.40, 31.38, 32.36, 33.34, 34.31, 35.29, 36.26, 37.23, 38.20, 39.16, 40.13, 41.09, 42.05, 43.01, 43.97, 44.93, 45.88, 46.84, 47.79, 48.74, 49.69, 50.64, 51.58, 52.53, 53.47, 54.41, 55.35, 56.29, 57.22, 58.16, 59.09, 60.02, 60.95, 61.88, 62.81, 63.73, 64.66, 65.58, 66.50, 67.42, 68.33, 69.25, 70.17, 71.08, 71.99, 72.90, 73.81, 74.71, 75.62, 76.52, 77.43, 78.33, 79.23, 80.13, 81.02, 81.92, 82.81, 83.70, 84.59, 85.48, 86.37, 87.26, 88.14, 89.03, 89.91, 90.79, 91.67, 92.54, 93.42, 94.30, 95.17, 96.04, 96.91, 97.78, 98.65, 99.52, 100.38, 101.24, 102.11, 102.97, 103.83, 104.68, 105.54, 106.40, 107.25, 108.10, 108.95, 109.80, 110.65, 111.50, 112.35, 113.19, 114.03, 114.87, 115.72, 116.55, 117.39, 118.23, 119.06, 119.90, 120.73, 121.56, 122.39, 123.22, 124.05, 124.87, 125.70, 126.52, 127.34, 128.16, 128.98, 129.80}, -{3.93, 4.94, 5.94, 6.94, 7.93, 8.93, 9.92, 10.92, 11.91, 12.89, 13.88, 14.87, 15.85, 16.83, 17.81, 18.79, 19.77, 20.75, 21.72, 22.69, 23.66, 24.63, 25.60, 26.56, 27.53, 28.49, 29.45, 30.41, 31.37, 32.33, 33.28, 34.23, 35.18, 36.13, 37.08, 38.03, 38.97, 39.92, 40.86, 41.80, 42.74, 43.67, 44.61, 45.54, 46.48, 47.41, 48.34, 49.26, 50.19, 51.11, 52.04, 52.96, 53.88, 54.80, 55.72, 56.63, 57.55, 58.46, 59.37, 60.28, 61.19, 62.09, 63.00, 63.90, 64.81, 65.71, 66.61, 67.50, 68.40, 69.29, 70.19, 71.08, 71.97, 72.86, 73.75, 74.63, 75.52, 76.40, 77.28, 78.17, 79.04, 79.92, 80.80, 81.67, 82.55, 83.42, 84.29, 85.16, 86.03, 86.89, 87.76, 88.62, 89.49, 90.35, 91.21, 92.06, 92.92, 93.78, 94.63, 95.48, 96.34, 97.19, 98.04, 98.88, 99.73, 100.57, 101.42, 102.26, 103.10, 103.94, 104.78, 105.62, 106.45, 107.29, 108.12, 108.95, 109.78, 110.61, 111.44, 112.26, 113.09, 113.91, 114.74, 115.56, 116.38, 117.20, 118.01, 118.83, 119.64, 120.46, 121.27, 122.08, 122.89, 123.70, 124.51, 125.32, 126.12, 126.92, 127.73, 128.53}, -{5.53, 6.51, 7.48, 8.46, 9.43, 10.40, 11.37, 12.34, 13.30, 14.27, 15.23, 16.19, 17.15, 18.11, 19.07, 20.02, 20.97, 21.93, 22.88, 23.82, 24.77, 25.72, 26.66, 27.60, 28.54, 29.48, 30.42, 31.36, 32.29, 33.23, 34.16, 35.09, 36.02, 36.94, 37.87, 38.79, 39.71, 40.64, 41.56, 42.47, 43.39, 44.30, 45.22, 46.13, 47.04, 47.95, 48.86, 49.76, 50.67, 51.57, 52.47, 53.37, 54.27, 55.17, 56.07, 56.96, 57.85, 58.75, 59.64, 60.53, 61.41, 62.30, 63.18, 64.07, 64.95, 65.83, 66.71, 67.59, 68.46, 69.34, 70.21, 71.08, 71.95, 72.82, 73.69, 74.56, 75.42, 76.29, 77.15, 78.01, 78.87, 79.73, 80.59, 81.44, 82.30, 83.15, 84.00, 84.85, 85.70, 86.55, 87.39, 88.24, 89.08, 89.92, 90.77, 91.61, 92.44, 93.28, 94.12, 94.95, 95.79, 96.62, 97.45, 98.28, 99.11, 99.93, 100.76, 101.58, 102.41, 103.23, 104.05, 104.87, 105.69, 106.50, 107.32, 108.13, 108.95, 109.76, 110.57, 111.38, 112.19, 112.99, 113.80, 114.60, 115.41, 116.21, 117.01, 117.81, 118.61, 119.40, 120.20, 120.99, 121.79, 122.58, 123.37, 124.16, 124.95, 125.74, 126.52, 127.31}, -{7.05, 8.00, 8.96, 9.91, 10.86, 11.80, 12.75, 13.69, 14.64, 15.58, 16.52, 17.45, 18.39, 19.33, 20.26, 21.19, 22.12, 23.05, 23.98, 24.91, 25.83, 26.75, 27.67, 28.59, 29.51, 30.43, 31.35, 32.26, 33.17, 34.08, 34.99, 35.90, 36.81, 37.72, 38.62, 39.52, 40.42, 41.32, 42.22, 43.12, 44.01, 44.91, 45.80, 46.69, 47.58, 48.47, 49.36, 50.24, 51.13, 52.01, 52.89, 53.77, 54.65, 55.53, 56.40, 57.28, 58.15, 59.02, 59.89, 60.76, 61.63, 62.50, 63.36, 64.22, 65.09, 65.95, 66.81, 67.67, 68.52, 69.38, 70.23, 71.08, 71.94, 72.79, 73.64, 74.48, 75.33, 76.17, 77.02, 77.86, 78.70, 79.54, 80.38, 81.22, 82.05, 82.89, 83.72, 84.55, 85.39, 86.22, 87.04, 87.87, 88.70, 89.52, 90.34, 91.17, 91.99, 92.81, 93.63, 94.44, 95.26, 96.07, 96.89, 97.70, 98.51, 99.32, 100.13, 100.94, 101.74, 102.55, 103.35, 104.15, 104.95, 105.75, 106.55, 107.35, 108.15, 108.94, 109.74, 110.53, 111.32, 112.11, 112.90, 113.69, 114.48, 115.26, 116.05, 116.83, 117.61, 118.39, 119.17, 119.95, 120.73, 121.51, 122.28, 123.06, 123.83, 124.60, 125.37, 126.14}, -{8.50, 9.43, 10.36, 11.29, 12.22, 13.14, 14.07, 14.99, 15.91, 16.83, 17.74, 18.66, 19.58, 20.49, 21.40, 22.31, 23.22, 24.13, 25.03, 25.94, 26.84, 27.74, 28.64, 29.54, 30.44, 31.34, 32.23, 33.12, 34.02, 34.91, 35.80, 36.68, 37.57, 38.45, 39.34, 40.22, 41.10, 41.98, 42.86, 43.73, 44.61, 45.48, 46.36, 47.23, 48.10, 48.97, 49.83, 50.70, 51.56, 52.43, 53.29, 54.15, 55.01, 55.87, 56.72, 57.58, 58.43, 59.29, 60.14, 60.99, 61.84, 62.68, 63.53, 64.37, 65.22, 66.06, 66.90, 67.74, 68.58, 69.42, 70.25, 71.09, 71.92, 72.75, 73.58, 74.41, 75.24, 76.07, 76.89, 77.72, 78.54, 79.36, 80.19, 81.01, 81.82, 82.64, 83.46, 84.27, 85.09, 85.90, 86.71, 87.52, 88.33, 89.13, 89.94, 90.75, 91.55, 92.35, 93.15, 93.95, 94.75, 95.55, 96.35, 97.14, 97.94, 98.73, 99.52, 100.31, 101.10, 101.89, 102.68, 103.47, 104.25, 105.04, 105.82, 106.60, 107.38, 108.16, 108.94, 109.71, 110.49, 111.27, 112.04, 112.81, 113.58, 114.35, 115.12, 115.89, 116.66, 117.42, 118.19, 118.95, 119.71, 120.48, 121.24, 122.00, 122.75, 123.51, 124.27, 125.02}, -{9.89, 10.80, 11.71, 12.61, 13.52, 14.42, 15.33, 16.23, 17.13, 18.02, 18.92, 19.81, 20.71, 21.60, 22.49, 23.38, 24.27, 25.16, 26.04, 26.93, 27.81, 28.69, 29.57, 30.45, 31.33, 32.20, 33.08, 33.95, 34.82, 35.69, 36.56, 37.43, 38.30, 39.16, 40.02, 40.89, 41.75, 42.61, 43.47, 44.32, 45.18, 46.04, 46.89, 47.74, 48.59, 49.44, 50.29, 51.14, 51.98, 52.83, 53.67, 54.51, 55.35, 56.19, 57.03, 57.87, 58.70, 59.54, 60.37, 61.20, 62.03, 62.86, 63.69, 64.52, 65.34, 66.17, 66.99, 67.81, 68.63, 69.45, 70.27, 71.09, 71.90, 72.72, 73.53, 74.35, 75.16, 75.97, 76.78, 77.58, 78.39, 79.19, 80.00, 80.80, 81.60, 82.40, 83.20, 84.00, 84.80, 85.59, 86.39, 87.18, 87.97, 88.76, 89.55, 90.34, 91.13, 91.92, 92.70, 93.49, 94.27, 95.05, 95.83, 96.61, 97.39, 98.17, 98.94, 99.72, 100.49, 101.27, 102.04, 102.81, 103.58, 104.35, 105.11, 105.88, 106.65, 107.41, 108.17, 108.93, 109.69, 110.45, 111.21, 111.97, 112.73, 113.48, 114.24, 114.99, 115.74, 116.49, 117.24, 117.99, 118.74, 119.49, 120.23, 120.98, 121.72, 122.46, 123.21, 123.95}, -{11.22, 12.11, 13.00, 13.88, 14.77, 15.65, 16.53, 17.41, 18.29, 19.17, 20.04, 20.92, 21.79, 22.66, 23.54, 24.41, 25.27, 26.14, 27.01, 27.87, 28.73, 29.60, 30.46, 31.32, 32.17, 33.03, 33.89, 34.74, 35.59, 36.44, 37.29, 38.14, 38.99, 39.84, 40.68, 41.53, 42.37, 43.21, 44.05, 44.89, 45.73, 46.56, 47.40, 48.23, 49.07, 49.90, 50.73, 51.56, 52.38, 53.21, 54.04, 54.86, 55.68, 56.50, 57.33, 58.14, 58.96, 59.78, 60.59, 61.41, 62.22, 63.03, 63.85, 64.66, 65.46, 66.27, 67.08, 67.88, 68.69, 69.49, 70.29, 71.09, 71.89, 72.69, 73.48, 74.28, 75.08, 75.87, 76.66, 77.45, 78.24, 79.03, 79.82, 80.60, 81.39, 82.17, 82.96, 83.74, 84.52, 85.30, 86.08, 86.86, 87.63, 88.41, 89.18, 89.96, 90.73, 91.50, 92.27, 93.04, 93.80, 94.57, 95.34, 96.10, 96.86, 97.63, 98.39, 99.15, 99.91, 100.66, 101.42, 102.18, 102.93, 103.69, 104.44, 105.19, 105.94, 106.69, 107.44, 108.18, 108.93, 109.68, 110.42, 111.16, 111.91, 112.65, 113.39, 114.12, 114.86, 115.60, 116.34, 117.07, 117.80, 118.54, 119.27, 120.00, 120.73, 121.46, 122.19, 122.91}, -{12.49, 13.36, 14.23, 15.09, 15.96, 16.82, 17.68, 18.54, 19.40, 20.26, 21.12, 21.98, 22.83, 23.68, 24.54, 25.39, 26.24, 27.08, 27.93, 28.78, 29.62, 30.46, 31.31, 32.15, 32.99, 33.82, 34.66, 35.50, 36.33, 37.17, 38.00, 38.83, 39.66, 40.49, 41.31, 42.14, 42.96, 43.79, 44.61, 45.43, 46.25, 47.07, 47.89, 48.70, 49.52, 50.33, 51.15, 51.96, 52.77, 53.58, 54.39, 55.19, 56.00, 56.80, 57.61, 58.41, 59.21, 60.01, 60.81, 61.61, 62.40, 63.20, 63.99, 64.79, 65.58, 66.37, 67.16, 67.95, 68.74, 69.52, 70.31, 71.09, 71.88, 72.66, 73.44, 74.22, 75.00, 75.77, 76.55, 77.33, 78.10, 78.87, 79.65, 80.42, 81.19, 81.96, 82.72, 83.49, 84.26, 85.02, 85.78, 86.55, 87.31, 88.07, 88.83, 89.58, 90.34, 91.10, 91.85, 92.61, 93.36, 94.11, 94.86, 95.61, 96.36, 97.11, 97.85, 98.60, 99.34, 100.09, 100.83, 101.57, 102.31, 103.05, 103.79, 104.53, 105.26, 106.00, 106.73, 107.46, 108.20, 108.93, 109.66, 110.39, 111.11, 111.84, 112.57, 113.29, 114.02, 114.74, 115.46, 116.18, 116.90, 117.62, 118.34, 119.06, 119.78, 120.49, 121.21, 121.92}, -{13.71, 14.56, 15.41, 16.26, 17.10, 17.95, 18.79, 19.63, 20.47, 21.31, 22.15, 22.99, 23.83, 24.66, 25.49, 26.33, 27.16, 27.99, 28.82, 29.65, 30.47, 31.30, 32.12, 32.94, 33.77, 34.59, 35.41, 36.22, 37.04, 37.86, 38.67, 39.49, 40.30, 41.11, 41.92, 42.73, 43.54, 44.34, 45.15, 45.95, 46.75, 47.56, 48.36, 49.16, 49.96, 50.75, 51.55, 52.34, 53.14, 53.93, 54.72, 55.51, 56.30, 57.09, 57.88, 58.66, 59.45, 60.23, 61.02, 61.80, 62.58, 63.36, 64.14, 64.91, 65.69, 66.47, 67.24, 68.01, 68.79, 69.56, 70.33, 71.09, 71.86, 72.63, 73.39, 74.16, 74.92, 75.68, 76.45, 77.21, 77.96, 78.72, 79.48, 80.24, 80.99, 81.74, 82.50, 83.25, 84.00, 84.75, 85.50, 86.25, 86.99, 87.74, 88.48, 89.23, 89.97, 90.71, 91.45, 92.19, 92.93, 93.67, 94.40, 95.14, 95.87, 96.61, 97.34, 98.07, 98.80, 99.53, 100.26, 100.99, 101.71, 102.44, 103.16, 103.89, 104.61, 105.33, 106.05, 106.77, 107.49, 108.21, 108.92, 109.64, 110.35, 111.07, 111.78, 112.49, 113.20, 113.91, 114.62, 115.33, 116.04, 116.74, 117.45, 118.15, 118.86, 119.56, 120.26, 120.96}, -{14.88, 15.71, 16.54, 17.37, 18.20, 19.03, 19.85, 20.68, 21.50, 22.32, 23.14, 23.96, 24.78, 25.60, 26.41, 27.23, 28.04, 28.86, 29.67, 30.48, 31.29, 32.10, 32.90, 33.71, 34.51, 35.32, 36.12, 36.92, 37.72, 38.52, 39.32, 40.12, 40.91, 41.71, 42.50, 43.29, 44.08, 44.87, 45.66, 46.45, 47.24, 48.02, 48.81, 49.59, 50.37, 51.16, 51.94, 52.71, 53.49, 54.27, 55.05, 55.82, 56.59, 57.37, 58.14, 58.91, 59.68, 60.45, 61.22, 61.98, 62.75, 63.51, 64.27, 65.04, 65.80, 66.56, 67.32, 68.07, 68.83, 69.59, 70.34, 71.10, 71.85, 72.60, 73.35, 74.10, 74.85, 75.60, 76.34, 77.09, 77.83, 78.58, 79.32, 80.06, 80.80, 81.54, 82.28, 83.02, 83.75, 84.49, 85.22, 85.96, 86.69, 87.42, 88.15, 88.88, 89.61, 90.34, 91.07, 91.79, 92.52, 93.24, 93.96, 94.68, 95.41, 96.13, 96.84, 97.56, 98.28, 99.00, 99.71, 100.42, 101.14, 101.85, 102.56, 103.27, 103.98, 104.69, 105.40, 106.10, 106.81, 107.51, 108.22, 108.92, 109.62, 110.32, 111.02, 111.72, 112.42, 113.12, 113.81, 114.51, 115.21, 115.90, 116.59, 117.28, 117.97, 118.66, 119.35, 120.04}, -{16.00, 16.82, 17.63, 18.44, 19.25, 20.06, 20.87, 21.68, 22.48, 23.29, 24.09, 24.90, 25.70, 26.50, 27.30, 28.10, 28.89, 29.69, 30.49, 31.28, 32.07, 32.86, 33.66, 34.44, 35.23, 36.02, 36.81, 37.59, 38.38, 39.16, 39.94, 40.72, 41.50, 42.28, 43.06, 43.84, 44.61, 45.38, 46.16, 46.93, 47.70, 48.47, 49.24, 50.01, 50.78, 51.54, 52.31, 53.07, 53.83, 54.60, 55.36, 56.12, 56.88, 57.63, 58.39, 59.15, 59.90, 60.65, 61.41, 62.16, 62.91, 63.66, 64.41, 65.15, 65.90, 66.65, 67.39, 68.13, 68.88, 69.62, 70.36, 71.10, 71.84, 72.57, 73.31, 74.05, 74.78, 75.51, 76.25, 76.98, 77.71, 78.44, 79.17, 79.89, 80.62, 81.35, 82.07, 82.80, 83.52, 84.24, 84.96, 85.68, 86.40, 87.12, 87.84, 88.55, 89.27, 89.98, 90.69, 91.41, 92.12, 92.83, 93.54, 94.25, 94.96, 95.66, 96.37, 97.07, 97.78, 98.48, 99.18, 99.88, 100.58, 101.28, 101.98, 102.68, 103.38, 104.07, 104.77, 105.46, 106.15, 106.85, 107.54, 108.23, 108.92, 109.61, 110.29, 110.98, 111.67, 112.35, 113.04, 113.72, 114.40, 115.08, 115.76, 116.44, 117.12, 117.80, 118.48, 119.15}, -{17.08, 17.88, 18.68, 19.47, 20.27, 21.06, 21.85, 22.64, 23.43, 24.22, 25.01, 25.79, 26.58, 27.37, 28.15, 28.93, 29.71, 30.49, 31.27, 32.05, 32.83, 33.60, 34.38, 35.15, 35.92, 36.70, 37.47, 38.24, 39.01, 39.77, 40.54, 41.31, 42.07, 42.83, 43.60, 44.36, 45.12, 45.88, 46.64, 47.39, 48.15, 48.90, 49.66, 50.41, 51.16, 51.91, 52.67, 53.41, 54.16, 54.91, 55.66, 56.40, 57.15, 57.89, 58.63, 59.37, 60.11, 60.85, 61.59, 62.33, 63.06, 63.80, 64.53, 65.27, 66.00, 66.73, 67.46, 68.19, 68.92, 69.65, 70.37, 71.10, 71.82, 72.55, 73.27, 73.99, 74.71, 75.43, 76.15, 76.87, 77.59, 78.30, 79.02, 79.73, 80.45, 81.16, 81.87, 82.58, 83.29, 84.00, 84.71, 85.41, 86.12, 86.83, 87.53, 88.23, 88.94, 89.64, 90.34, 91.04, 91.74, 92.43, 93.13, 93.83, 94.52, 95.22, 95.91, 96.60, 97.29, 97.98, 98.67, 99.36, 100.05, 100.74, 101.42, 102.11, 102.79, 103.48, 104.16, 104.84, 105.52, 106.20, 106.88, 107.56, 108.24, 108.91, 109.59, 110.27, 110.94, 111.61, 112.29, 112.96, 113.63, 114.30, 114.97, 115.63, 116.30, 116.97, 117.63, 118.30}, -{18.12, 18.90, 19.68, 20.46, 21.24, 22.02, 22.79, 23.57, 24.34, 25.12, 25.89, 26.66, 27.43, 28.20, 28.97, 29.73, 30.50, 31.26, 32.03, 32.79, 33.55, 34.31, 35.07, 35.83, 36.59, 37.35, 38.10, 38.86, 39.61, 40.36, 41.12, 41.87, 42.62, 43.36, 44.11, 44.86, 45.61, 46.35, 47.09, 47.84, 48.58, 49.32, 50.06, 50.80, 51.54, 52.27, 53.01, 53.74, 54.48, 55.21, 55.94, 56.68, 57.41, 58.13, 58.86, 59.59, 60.32, 61.04, 61.77, 62.49, 63.21, 63.93, 64.66, 65.38, 66.09, 66.81, 67.53, 68.25, 68.96, 69.67, 70.39, 71.10, 71.81, 72.52, 73.23, 73.94, 74.65, 75.36, 76.06, 76.77, 77.47, 78.17, 78.88, 79.58, 80.28, 80.98, 81.68, 82.38, 83.07, 83.77, 84.46, 85.16, 85.85, 86.54, 87.24, 87.93, 88.62, 89.31, 89.99, 90.68, 91.37, 92.05, 92.74, 93.42, 94.10, 94.79, 95.47, 96.15, 96.83, 97.51, 98.18, 98.86, 99.54, 100.21, 100.89, 101.56, 102.23, 102.90, 103.57, 104.24, 104.91, 105.58, 106.25, 106.92, 107.58, 108.25, 108.91, 109.58, 110.24, 110.90, 111.56, 112.22, 112.88, 113.54, 114.20, 114.85, 115.51, 116.16, 116.82, 117.47}, -{19.12, 19.88, 20.65, 21.41, 22.18, 22.94, 23.70, 24.46, 25.22, 25.98, 26.73, 27.49, 28.25, 29.00, 29.75, 30.51, 31.26, 32.01, 32.76, 33.50, 34.25, 35.00, 35.74, 36.49, 37.23, 37.97, 38.71, 39.45, 40.19, 40.93, 41.67, 42.41, 43.14, 43.88, 44.61, 45.34, 46.08, 46.81, 47.54, 48.27, 48.99, 49.72, 50.45, 51.17, 51.90, 52.62, 53.34, 54.06, 54.78, 55.50, 56.22, 56.94, 57.66, 58.37, 59.09, 59.80, 60.51, 61.23, 61.94, 62.65, 63.36, 64.07, 64.77, 65.48, 66.19, 66.89, 67.60, 68.30, 69.00, 69.70, 70.40, 71.10, 71.80, 72.50, 73.20, 73.89, 74.59, 75.28, 75.97, 76.67, 77.36, 78.05, 78.74, 79.43, 80.12, 80.80, 81.49, 82.18, 82.86, 83.54, 84.23, 84.91, 85.59, 86.27, 86.95, 87.63, 88.31, 88.98, 89.66, 90.34, 91.01, 91.68, 92.36, 93.03, 93.70, 94.37, 95.04, 95.71, 96.38, 97.04, 97.71, 98.38, 99.04, 99.70, 100.37, 101.03, 101.69, 102.35, 103.01, 103.67, 104.33, 104.98, 105.64, 106.30, 106.95, 107.60, 108.26, 108.91, 109.56, 110.21, 110.86, 111.51, 112.16, 112.81, 113.45, 114.10, 114.74, 115.39, 116.03, 116.68}, -{20.08, 20.83, 21.58, 22.33, 23.08, 23.83, 24.57, 25.32, 26.06, 26.81, 27.55, 28.29, 29.03, 29.77, 30.51, 31.25, 31.99, 32.72, 33.46, 34.19, 34.92, 35.66, 36.39, 37.12, 37.85, 38.58, 39.30, 40.03, 40.76, 41.48, 42.20, 42.93, 43.65, 44.37, 45.09, 45.81, 46.53, 47.25, 47.96, 48.68, 49.39, 50.11, 50.82, 51.53, 52.24, 52.95, 53.66, 54.37, 55.08, 55.78, 56.49, 57.19, 57.90, 58.60, 59.30, 60.00, 60.70, 61.40, 62.10, 62.80, 63.50, 64.19, 64.89, 65.58, 66.27, 66.97, 67.66, 68.35, 69.04, 69.73, 70.42, 71.10, 71.79, 72.48, 73.16, 73.84, 74.53, 75.21, 75.89, 76.57, 77.25, 77.93, 78.61, 79.28, 79.96, 80.64, 81.31, 81.98, 82.66, 83.33, 84.00, 84.67, 85.34, 86.01, 86.68, 87.34, 88.01, 88.68, 89.34, 90.00, 90.67, 91.33, 91.99, 92.65, 93.31, 93.97, 94.63, 95.29, 95.94, 96.60, 97.25, 97.91, 98.56, 99.21, 99.86, 100.52, 101.17, 101.82, 102.46, 103.11, 103.76, 104.40, 105.05, 105.69, 106.34, 106.98, 107.62, 108.27, 108.91, 109.55, 110.19, 110.82, 111.46, 112.10, 112.74, 113.37, 114.01, 114.64, 115.27, 115.91}, -{21.01, 21.74, 22.48, 23.21, 23.95, 24.68, 25.42, 26.15, 26.88, 27.61, 28.34, 29.06, 29.79, 30.52, 31.24, 31.97, 32.69, 33.41, 34.13, 34.85, 35.57, 36.29, 37.01, 37.73, 38.44, 39.16, 39.87, 40.59, 41.30, 42.01, 42.72, 43.43, 44.14, 44.85, 45.55, 46.26, 46.97, 47.67, 48.37, 49.08, 49.78, 50.48, 51.18, 51.88, 52.58, 53.27, 53.97, 54.67, 55.36, 56.05, 56.75, 57.44, 58.13, 58.82, 59.51, 60.20, 60.89, 61.57, 62.26, 62.95, 63.63, 64.31, 65.00, 65.68, 66.36, 67.04, 67.72, 68.40, 69.08, 69.75, 70.43, 71.10, 71.78, 72.45, 73.13, 73.80, 74.47, 75.14, 75.81, 76.48, 77.15, 77.81, 78.48, 79.14, 79.81, 80.47, 81.14, 81.80, 82.46, 83.12, 83.78, 84.44, 85.10, 85.75, 86.41, 87.07, 87.72, 88.38, 89.03, 89.68, 90.33, 90.99, 91.64, 92.29, 92.93, 93.58, 94.23, 94.88, 95.52, 96.17, 96.81, 97.45, 98.10, 98.74, 99.38, 100.02, 100.66, 101.30, 101.94, 102.57, 103.21, 103.85, 104.48, 105.11, 105.75, 106.38, 107.01, 107.64, 108.27, 108.90, 109.53, 110.16, 110.79, 111.42, 112.04, 112.67, 113.29, 113.92, 114.54, 115.16}, -{21.90, 22.62, 23.35, 24.07, 24.79, 25.51, 26.23, 26.95, 27.66, 28.38, 29.09, 29.81, 30.52, 31.24, 31.95, 32.66, 33.37, 34.08, 34.79, 35.49, 36.20, 36.91, 37.61, 38.31, 39.02, 39.72, 40.42, 41.12, 41.82, 42.52, 43.22, 43.91, 44.61, 45.31, 46.00, 46.69, 47.39, 48.08, 48.77, 49.46, 50.15, 50.84, 51.53, 52.21, 52.90, 53.58, 54.27, 54.95, 55.63, 56.32, 57.00, 57.68, 58.36, 59.03, 59.71, 60.39, 61.06, 61.74, 62.41, 63.09, 63.76, 64.43, 65.10, 65.77, 66.44, 67.11, 67.78, 68.45, 69.11, 69.78, 70.44, 71.11, 71.77, 72.43, 73.09, 73.75, 74.41, 75.07, 75.73, 76.39, 77.04, 77.70, 78.36, 79.01, 79.66, 80.32, 80.97, 81.62, 82.27, 82.92, 83.57, 84.22, 84.86, 85.51, 86.16, 86.80, 87.44, 88.09, 88.73, 89.37, 90.01, 90.65, 91.29, 91.93, 92.57, 93.21, 93.85, 94.48, 95.12, 95.75, 96.38, 97.02, 97.65, 98.28, 98.91, 99.54, 100.17, 100.80, 101.43, 102.05, 102.68, 103.31, 103.93, 104.55, 105.18, 105.80, 106.42, 107.04, 107.66, 108.28, 108.90, 109.52, 110.14, 110.75, 111.37, 111.99, 112.60, 113.21, 113.83, 114.44}, -{22.76, 23.47, 24.18, 24.89, 25.60, 26.30, 27.01, 27.72, 28.42, 29.12, 29.83, 30.53, 31.23, 31.93, 32.63, 33.33, 34.02, 34.72, 35.42, 36.11, 36.80, 37.50, 38.19, 38.88, 39.57, 40.26, 40.95, 41.64, 42.33, 43.01, 43.70, 44.38, 45.07, 45.75, 46.43, 47.11, 47.79, 48.47, 49.15, 49.83, 50.51, 51.19, 51.86, 52.54, 53.21, 53.88, 54.56, 55.23, 55.90, 56.57, 57.24, 57.91, 58.57, 59.24, 59.91, 60.57, 61.24, 61.90, 62.56, 63.22, 63.89, 64.55, 65.21, 65.86, 66.52, 67.18, 67.84, 68.49, 69.15, 69.80, 70.45, 71.11, 71.76, 72.41, 73.06, 73.71, 74.36, 75.01, 75.65, 76.30, 76.95, 77.59, 78.24, 78.88, 79.52, 80.16, 80.81, 81.45, 82.09, 82.72, 83.36, 84.00, 84.64, 85.27, 85.91, 86.54, 87.18, 87.81, 88.44, 89.07, 89.70, 90.33, 90.96, 91.59, 92.22, 92.85, 93.47, 94.10, 94.72, 95.35, 95.97, 96.59, 97.22, 97.84, 98.46, 99.08, 99.70, 100.32, 100.93, 101.55, 102.17, 102.78, 103.40, 104.01, 104.62, 105.24, 105.85, 106.46, 107.07, 107.68, 108.29, 108.90, 109.51, 110.11, 110.72, 111.33, 111.93, 112.54, 113.14, 113.74}, -{23.59, 24.29, 24.99, 25.68, 26.38, 27.07, 27.77, 28.46, 29.15, 29.84, 30.53, 31.22, 31.91, 32.60, 33.29, 33.97, 34.66, 35.34, 36.02, 36.71, 37.39, 38.07, 38.75, 39.43, 40.11, 40.79, 41.46, 42.14, 42.81, 43.49, 44.16, 44.84, 45.51, 46.18, 46.85, 47.52, 48.19, 48.86, 49.52, 50.19, 50.86, 51.52, 52.18, 52.85, 53.51, 54.17, 54.83, 55.49, 56.15, 56.81, 57.47, 58.13, 58.78, 59.44, 60.09, 60.75, 61.40, 62.05, 62.71, 63.36, 64.01, 64.66, 65.30, 65.95, 66.60, 67.25, 67.89, 68.54, 69.18, 69.82, 70.47, 71.11, 71.75, 72.39, 73.03, 73.67, 74.31, 74.94, 75.58, 76.22, 76.85, 77.49, 78.12, 78.75, 79.39, 80.02, 80.65, 81.28, 81.91, 82.54, 83.16, 83.79, 84.42, 85.04, 85.67, 86.29, 86.92, 87.54, 88.16, 88.78, 89.40, 90.02, 90.64, 91.26, 91.88, 92.50, 93.11, 93.73, 94.34, 94.96, 95.57, 96.18, 96.80, 97.41, 98.02, 98.63, 99.24, 99.85, 100.46, 101.06, 101.67, 102.28, 102.88, 103.49, 104.09, 104.69, 105.30, 105.90, 106.50, 107.10, 107.70, 108.30, 108.90, 109.50, 110.09, 110.69, 111.28, 111.88, 112.47, 113.07}, -{24.40, 25.08, 25.77, 26.45, 27.14, 27.82, 28.50, 29.18, 29.86, 30.54, 31.22, 31.89, 32.57, 33.25, 33.92, 34.59, 35.27, 35.94, 36.61, 37.28, 37.95, 38.62, 39.29, 39.96, 40.63, 41.29, 41.96, 42.62, 43.29, 43.95, 44.61, 45.27, 45.93, 46.59, 47.25, 47.91, 48.57, 49.23, 49.88, 50.54, 51.19, 51.85, 52.50, 53.15, 53.80, 54.45, 55.10, 55.75, 56.40, 57.05, 57.69, 58.34, 58.99, 59.63, 60.28, 60.92, 61.56, 62.20, 62.84, 63.48, 64.12, 64.76, 65.40, 66.04, 66.67, 67.31, 67.95, 68.58, 69.21, 69.85, 70.48, 71.11, 71.74, 72.37, 73.00, 73.63, 74.26, 74.88, 75.51, 76.14, 76.76, 77.38, 78.01, 78.63, 79.25, 79.88, 80.50, 81.12, 81.74, 82.35, 82.97, 83.59, 84.21, 84.82, 85.44, 86.05, 86.66, 87.28, 87.89, 88.50, 89.11, 89.72, 90.33, 90.94, 91.55, 92.16, 92.76, 93.37, 93.98, 94.58, 95.18, 95.79, 96.39, 96.99, 97.59, 98.20, 98.80, 99.39, 99.99, 100.59, 101.19, 101.79, 102.38, 102.98, 103.57, 104.17, 104.76, 105.35, 105.94, 106.54, 107.13, 107.72, 108.31, 108.90, 109.48, 110.07, 110.66, 111.24, 111.83, 112.41}, -{25.18, 25.85, 26.52, 27.20, 27.87, 28.54, 29.21, 29.88, 30.54, 31.21, 31.88, 32.54, 33.21, 33.87, 34.54, 35.20, 35.86, 36.52, 37.18, 37.84, 38.50, 39.16, 39.81, 40.47, 41.13, 41.78, 42.44, 43.09, 43.74, 44.39, 45.05, 45.70, 46.35, 46.99, 47.64, 48.29, 48.94, 49.58, 50.23, 50.87, 51.52, 52.16, 52.80, 53.44, 54.08, 54.72, 55.36, 56.00, 56.64, 57.28, 57.91, 58.55, 59.18, 59.82, 60.45, 61.08, 61.72, 62.35, 62.98, 63.61, 64.24, 64.87, 65.49, 66.12, 66.75, 67.37, 68.00, 68.62, 69.24, 69.87, 70.49, 71.11, 71.73, 72.35, 72.97, 73.59, 74.21, 74.82, 75.44, 76.06, 76.67, 77.29, 77.90, 78.51, 79.13, 79.74, 80.35, 80.96, 81.57, 82.18, 82.79, 83.39, 84.00, 84.61, 85.21, 85.82, 86.42, 87.02, 87.63, 88.23, 88.83, 89.43, 90.03, 90.63, 91.23, 91.83, 92.43, 93.02, 93.62, 94.21, 94.81, 95.40, 96.00, 96.59, 97.18, 97.77, 98.37, 98.96, 99.55, 100.13, 100.72, 101.31, 101.90, 102.48, 103.07, 103.66, 104.24, 104.82, 105.41, 105.99, 106.57, 107.15, 107.73, 108.31, 108.89, 109.47, 110.05, 110.63, 111.20, 111.78}, -{25.93, 26.59, 27.25, 27.91, 28.57, 29.23, 29.89, 30.55, 31.20, 31.86, 32.52, 33.17, 33.82, 34.48, 35.13, 35.78, 36.43, 37.08, 37.73, 38.38, 39.03, 39.67, 40.32, 40.97, 41.61, 42.26, 42.90, 43.54, 44.18, 44.83, 45.47, 46.11, 46.74, 47.38, 48.02, 48.66, 49.29, 49.93, 50.56, 51.20, 51.83, 52.46, 53.09, 53.73, 54.36, 54.99, 55.61, 56.24, 56.87, 57.50, 58.12, 58.75, 59.37, 60.00, 60.62, 61.24, 61.87, 62.49, 63.11, 63.73, 64.35, 64.97, 65.58, 66.20, 66.82, 67.43, 68.05, 68.66, 69.28, 69.89, 70.50, 71.11, 71.72, 72.33, 72.94, 73.55, 74.16, 74.77, 75.37, 75.98, 76.59, 77.19, 77.80, 78.40, 79.00, 79.60, 80.21, 80.81, 81.41, 82.01, 82.61, 83.20, 83.80, 84.40, 84.99, 85.59, 86.18, 86.78, 87.37, 87.97, 88.56, 89.15, 89.74, 90.33, 90.92, 91.51, 92.10, 92.69, 93.27, 93.86, 94.45, 95.03, 95.62, 96.20, 96.78, 97.37, 97.95, 98.53, 99.11, 99.69, 100.27, 100.85, 101.43, 102.01, 102.58, 103.16, 103.74, 104.31, 104.89, 105.46, 106.03, 106.61, 107.18, 107.75, 108.32, 108.89, 109.46, 110.03, 110.60, 111.17}, -{26.66, 27.31, 27.96, 28.61, 29.26, 29.91, 30.55, 31.20, 31.85, 32.49, 33.13, 33.78, 34.42, 35.06, 35.71, 36.35, 36.99, 37.63, 38.26, 38.90, 39.54, 40.18, 40.81, 41.45, 42.08, 42.71, 43.35, 43.98, 44.61, 45.24, 45.87, 46.50, 47.13, 47.76, 48.39, 49.01, 49.64, 50.26, 50.89, 51.51, 52.13, 52.76, 53.38, 54.00, 54.62, 55.24, 55.86, 56.48, 57.09, 57.71, 58.33, 58.94, 59.56, 60.17, 60.79, 61.40, 62.01, 62.62, 63.23, 63.84, 64.45, 65.06, 65.67, 66.28, 66.88, 67.49, 68.10, 68.70, 69.30, 69.91, 70.51, 71.11, 71.71, 72.32, 72.92, 73.52, 74.11, 74.71, 75.31, 75.91, 76.50, 77.10, 77.69, 78.29, 78.88, 79.47, 80.07, 80.66, 81.25, 81.84, 82.43, 83.02, 83.61, 84.20, 84.78, 85.37, 85.96, 86.54, 87.13, 87.71, 88.29, 88.88, 89.46, 90.04, 90.62, 91.20, 91.78, 92.36, 92.94, 93.52, 94.09, 94.67, 95.25, 95.82, 96.40, 96.97, 97.54, 98.12, 98.69, 99.26, 99.83, 100.40, 100.97, 101.54, 102.11, 102.68, 103.25, 103.81, 104.38, 104.95, 105.51, 106.08, 106.64, 107.20, 107.77, 108.33, 108.89, 109.45, 110.01, 110.57}, -{27.36, 28.00, 28.64, 29.28, 29.92, 30.56, 31.19, 31.83, 32.47, 33.10, 33.73, 34.37, 35.00, 35.63, 36.26, 36.89, 37.52, 38.15, 38.78, 39.41, 40.03, 40.66, 41.29, 41.91, 42.54, 43.16, 43.78, 44.40, 45.03, 45.65, 46.27, 46.89, 47.50, 48.12, 48.74, 49.36, 49.97, 50.59, 51.20, 51.82, 52.43, 53.04, 53.65, 54.27, 54.88, 55.49, 56.10, 56.70, 57.31, 57.92, 58.53, 59.13, 59.74, 60.34, 60.95, 61.55, 62.15, 62.75, 63.36, 63.96, 64.56, 65.16, 65.75, 66.35, 66.95, 67.55, 68.14, 68.74, 69.33, 69.93, 70.52, 71.11, 71.71, 72.30, 72.89, 73.48, 74.07, 74.66, 75.25, 75.84, 76.42, 77.01, 77.60, 78.18, 78.77, 79.35, 79.93, 80.52, 81.10, 81.68, 82.26, 82.84, 83.42, 84.00, 84.58, 85.16, 85.73, 86.31, 86.89, 87.46, 88.04, 88.61, 89.18, 89.76, 90.33, 90.90, 91.47, 92.04, 92.61, 93.18, 93.75, 94.32, 94.89, 95.46, 96.02, 96.59, 97.15, 97.72, 98.28, 98.84, 99.41, 99.97, 100.53, 101.09, 101.65, 102.21, 102.77, 103.33, 103.89, 104.45, 105.00, 105.56, 106.12, 106.67, 107.23, 107.78, 108.33, 108.89, 109.44, 109.99}, -{28.05, 28.68, 29.30, 29.93, 30.56, 31.19, 31.82, 32.44, 33.07, 33.69, 34.31, 34.94, 35.56, 36.18, 36.80, 37.42, 38.04, 38.66, 39.28, 39.90, 40.52, 41.13, 41.75, 42.36, 42.98, 43.59, 44.20, 44.82, 45.43, 46.04, 46.65, 47.26, 47.87, 48.48, 49.08, 49.69, 50.30, 50.90, 51.51, 52.11, 52.72, 53.32, 53.92, 54.52, 55.12, 55.73, 56.32, 56.92, 57.52, 58.12, 58.72, 59.31, 59.91, 60.51, 61.10, 61.69, 62.29, 62.88, 63.47, 64.07, 64.66, 65.25, 65.84, 66.43, 67.01, 67.60, 68.19, 68.78, 69.36, 69.95, 70.53, 71.12, 71.70, 72.28, 72.86, 73.45, 74.03, 74.61, 75.19, 75.77, 76.34, 76.92, 77.50, 78.08, 78.65, 79.23, 79.80, 80.38, 80.95, 81.52, 82.10, 82.67, 83.24, 83.81, 84.38, 84.95, 85.52, 86.09, 86.65, 87.22, 87.79, 88.35, 88.92, 89.48, 90.05, 90.61, 91.17, 91.74, 92.30, 92.86, 93.42, 93.98, 94.54, 95.10, 95.66, 96.22, 96.77, 97.33, 97.88, 98.44, 99.00, 99.55, 100.10, 100.66, 101.21, 101.76, 102.31, 102.86, 103.41, 103.96, 104.51, 105.06, 105.61, 106.16, 106.70, 107.25, 107.80, 108.34, 108.89, 109.43}, -{28.71, 29.33, 29.95, 30.57, 31.18, 31.80, 32.42, 33.03, 33.65, 34.26, 34.88, 35.49, 36.10, 36.72, 37.33, 37.94, 38.55, 39.16, 39.77, 40.37, 40.98, 41.59, 42.19, 42.80, 43.40, 44.01, 44.61, 45.21, 45.82, 46.42, 47.02, 47.62, 48.22, 48.82, 49.42, 50.01, 50.61, 51.21, 51.80, 52.40, 52.99, 53.59, 54.18, 54.77, 55.37, 55.96, 56.55, 57.14, 57.73, 58.32, 58.90, 59.49, 60.08, 60.67, 61.25, 61.84, 62.42, 63.00, 63.59, 64.17, 64.75, 65.33, 65.92, 66.50, 67.08, 67.65, 68.23, 68.81, 69.39, 69.96, 70.54, 71.12, 71.69, 72.27, 72.84, 73.41, 73.98, 74.56, 75.13, 75.70, 76.27, 76.84, 77.41, 77.97, 78.54, 79.11, 79.68, 80.24, 80.81, 81.37, 81.94, 82.50, 83.06, 83.63, 84.19, 84.75, 85.31, 85.87, 86.43, 86.99, 87.55, 88.10, 88.66, 89.22, 89.77, 90.33, 90.88, 91.44, 91.99, 92.55, 93.10, 93.65, 94.20, 94.75, 95.30, 95.85, 96.40, 96.95, 97.50, 98.05, 98.59, 99.14, 99.69, 100.23, 100.78, 101.32, 101.86, 102.41, 102.95, 103.49, 104.03, 104.58, 105.12, 105.66, 106.19, 106.73, 107.27, 107.81, 108.35, 108.88}, -{29.35, 29.96, 30.57, 31.18, 31.79, 32.39, 33.00, 33.61, 34.21, 34.82, 35.42, 36.03, 36.63, 37.23, 37.83, 38.44, 39.04, 39.64, 40.24, 40.83, 41.43, 42.03, 42.63, 43.22, 43.82, 44.41, 45.01, 45.60, 46.19, 46.79, 47.38, 47.97, 48.56, 49.15, 49.74, 50.33, 50.92, 51.50, 52.09, 52.68, 53.26, 53.85, 54.43, 55.02, 55.60, 56.18, 56.76, 57.34, 57.93, 58.51, 59.09, 59.66, 60.24, 60.82, 61.40, 61.97, 62.55, 63.12, 63.70, 64.27, 64.85, 65.42, 65.99, 66.56, 67.14, 67.71, 68.28, 68.85, 69.41, 69.98, 70.55, 71.12, 71.68, 72.25, 72.81, 73.38, 73.94, 74.51, 75.07, 75.63, 76.19, 76.76, 77.32, 77.88, 78.44, 78.99, 79.55, 80.11, 80.67, 81.23, 81.78, 82.34, 82.89, 83.45, 84.00, 84.55, 85.11, 85.66, 86.21, 86.76, 87.31, 87.86, 88.41, 88.96, 89.51, 90.06, 90.60, 91.15, 91.70, 92.24, 92.79, 93.33, 93.87, 94.42, 94.96, 95.50, 96.04, 96.58, 97.13, 97.67, 98.20, 98.74, 99.28, 99.82, 100.36, 100.89, 101.43, 101.97, 102.50, 103.04, 103.57, 104.10, 104.64, 105.17, 105.70, 106.23, 106.76, 107.29, 107.82, 108.35}, -{29.97, 30.57, 31.17, 31.77, 32.37, 32.97, 33.57, 34.17, 34.76, 35.36, 35.95, 36.55, 37.14, 37.73, 38.33, 38.92, 39.51, 40.10, 40.69, 41.28, 41.87, 42.46, 43.05, 43.63, 44.22, 44.81, 45.39, 45.98, 46.56, 47.14, 47.73, 48.31, 48.89, 49.47, 50.05, 50.63, 51.21, 51.79, 52.37, 52.95, 53.52, 54.10, 54.68, 55.25, 55.83, 56.40, 56.97, 57.55, 58.12, 58.69, 59.26, 59.83, 60.40, 60.97, 61.54, 62.11, 62.67, 63.24, 63.81, 64.37, 64.94, 65.50, 66.07, 66.63, 67.19, 67.76, 68.32, 68.88, 69.44, 70.00, 70.56, 71.12, 71.68, 72.23, 72.79, 73.35, 73.90, 74.46, 75.01, 75.57, 76.12, 76.68, 77.23, 77.78, 78.33, 78.88, 79.43, 79.98, 80.53, 81.08, 81.63, 82.18, 82.73, 83.27, 83.82, 84.36, 84.91, 85.45, 86.00, 86.54, 87.08, 87.63, 88.17, 88.71, 89.25, 89.79, 90.33, 90.87, 91.41, 91.94, 92.48, 93.02, 93.55, 94.09, 94.63, 95.16, 95.69, 96.23, 96.76, 97.29, 97.83, 98.36, 98.89, 99.42, 99.95, 100.48, 101.01, 101.54, 102.06, 102.59, 103.12, 103.64, 104.17, 104.70, 105.22, 105.74, 106.27, 106.79, 107.31, 107.84}, -{30.58, 31.17, 31.76, 32.35, 32.94, 33.53, 34.12, 34.71, 35.29, 35.88, 36.47, 37.05, 37.64, 38.22, 38.81, 39.39, 39.97, 40.55, 41.14, 41.72, 42.30, 42.88, 43.46, 44.03, 44.61, 45.19, 45.77, 46.34, 46.92, 47.49, 48.07, 48.64, 49.21, 49.79, 50.36, 50.93, 51.50, 52.07, 52.64, 53.21, 53.78, 54.35, 54.91, 55.48, 56.05, 56.61, 57.18, 57.74, 58.30, 58.87, 59.43, 59.99, 60.55, 61.12, 61.68, 62.24, 62.80, 63.35, 63.91, 64.47, 65.03, 65.58, 66.14, 66.70, 67.25, 67.80, 68.36, 68.91, 69.46, 70.02, 70.57, 71.12, 71.67, 72.22, 72.77, 73.32, 73.87, 74.41, 74.96, 75.51, 76.05, 76.60, 77.14, 77.69, 78.23, 78.78, 79.32, 79.86, 80.40, 80.94, 81.48, 82.02, 82.56, 83.10, 83.64, 84.18, 84.72, 85.25, 85.79, 86.33, 86.86, 87.40, 87.93, 88.46, 89.00, 89.53, 90.06, 90.59, 91.12, 91.66, 92.19, 92.72, 93.24, 93.77, 94.30, 94.83, 95.36, 95.88, 96.41, 96.93, 97.46, 97.98, 98.51, 99.03, 99.55, 100.08, 100.60, 101.12, 101.64, 102.16, 102.68, 103.20, 103.72, 104.24, 104.75, 105.27, 105.79, 106.30, 106.82, 107.34}, -{31.16, 31.75, 32.33, 32.91, 33.49, 34.07, 34.65, 35.23, 35.81, 36.39, 36.97, 37.54, 38.12, 38.70, 39.27, 39.85, 40.42, 40.99, 41.57, 42.14, 42.71, 43.28, 43.85, 44.42, 44.99, 45.56, 46.13, 46.70, 47.26, 47.83, 48.40, 48.96, 49.53, 50.09, 50.65, 51.22, 51.78, 52.34, 52.90, 53.46, 54.02, 54.58, 55.14, 55.70, 56.26, 56.82, 57.37, 57.93, 58.49, 59.04, 59.60, 60.15, 60.70, 61.26, 61.81, 62.36, 62.91, 63.46, 64.01, 64.56, 65.11, 65.66, 66.21, 66.76, 67.31, 67.85, 68.40, 68.94, 69.49, 70.03, 70.58, 71.12, 71.66, 72.20, 72.75, 73.29, 73.83, 74.37, 74.91, 75.45, 75.99, 76.52, 77.06, 77.60, 78.13, 78.67, 79.21, 79.74, 80.27, 80.81, 81.34, 81.87, 82.41, 82.94, 83.47, 84.00, 84.53, 85.06, 85.59, 86.12, 86.65, 87.17, 87.70, 88.23, 88.75, 89.28, 89.80, 90.33, 90.85, 91.38, 91.90, 92.42, 92.94, 93.46, 93.98, 94.51, 95.03, 95.54, 96.06, 96.58, 97.10, 97.62, 98.13, 98.65, 99.17, 99.68, 100.20, 100.71, 101.23, 101.74, 102.25, 102.76, 103.28, 103.79, 104.30, 104.81, 105.32, 105.83, 106.34, 106.85}, -{31.74, 32.31, 32.88, 33.46, 34.03, 34.60, 35.17, 35.74, 36.31, 36.88, 37.45, 38.02, 38.59, 39.16, 39.72, 40.29, 40.85, 41.42, 41.98, 42.55, 43.11, 43.67, 44.24, 44.80, 45.36, 45.92, 46.48, 47.04, 47.60, 48.16, 48.72, 49.27, 49.83, 50.39, 50.94, 51.50, 52.05, 52.61, 53.16, 53.71, 54.26, 54.82, 55.37, 55.92, 56.47, 57.02, 57.57, 58.12, 58.66, 59.21, 59.76, 60.30, 60.85, 61.40, 61.94, 62.48, 63.03, 63.57, 64.11, 64.66, 65.20, 65.74, 66.28, 66.82, 67.36, 67.90, 68.44, 68.97, 69.51, 70.05, 70.58, 71.12, 71.66, 72.19, 72.72, 73.26, 73.79, 74.32, 74.86, 75.39, 75.92, 76.45, 76.98, 77.51, 78.04, 78.57, 79.10, 79.62, 80.15, 80.68, 81.20, 81.73, 82.25, 82.78, 83.30, 83.83, 84.35, 84.87, 85.39, 85.91, 86.44, 86.96, 87.48, 88.00, 88.51, 89.03, 89.55, 90.07, 90.59, 91.10, 91.62, 92.13, 92.65, 93.16, 93.68, 94.19, 94.70, 95.22, 95.73, 96.24, 96.75, 97.26, 97.77, 98.28, 98.79, 99.30, 99.81, 100.32, 100.82, 101.33, 101.84, 102.34, 102.85, 103.35, 103.86, 104.36, 104.86, 105.37, 105.87, 106.37}, -{32.29, 32.86, 33.42, 33.99, 34.55, 35.11, 35.68, 36.24, 36.80, 37.36, 37.92, 38.48, 39.04, 39.60, 40.16, 40.72, 41.28, 41.83, 42.39, 42.95, 43.50, 44.06, 44.61, 45.17, 45.72, 46.27, 46.82, 47.38, 47.93, 48.48, 49.03, 49.58, 50.13, 50.67, 51.22, 51.77, 52.32, 52.86, 53.41, 53.95, 54.50, 55.04, 55.58, 56.13, 56.67, 57.21, 57.75, 58.29, 58.84, 59.38, 59.91, 60.45, 60.99, 61.53, 62.07, 62.60, 63.14, 63.68, 64.21, 64.75, 65.28, 65.81, 66.35, 66.88, 67.41, 67.94, 68.47, 69.00, 69.53, 70.06, 70.59, 71.12, 71.65, 72.18, 72.70, 73.23, 73.76, 74.28, 74.81, 75.33, 75.86, 76.38, 76.90, 77.42, 77.95, 78.47, 78.99, 79.51, 80.03, 80.55, 81.07, 81.59, 82.10, 82.62, 83.14, 83.66, 84.17, 84.69, 85.20, 85.72, 86.23, 86.75, 87.26, 87.77, 88.28, 88.79, 89.31, 89.82, 90.33, 90.84, 91.35, 91.85, 92.36, 92.87, 93.38, 93.89, 94.39, 94.90, 95.40, 95.91, 96.41, 96.92, 97.42, 97.92, 98.43, 98.93, 99.43, 99.93, 100.43, 100.93, 101.43, 101.93, 102.43, 102.93, 103.43, 103.92, 104.42, 104.92, 105.41, 105.91}, -{32.83, 33.39, 33.94, 34.50, 35.06, 35.61, 36.17, 36.72, 37.28, 37.83, 38.38, 38.94, 39.49, 40.04, 40.59, 41.14, 41.69, 42.24, 42.79, 43.34, 43.88, 44.43, 44.98, 45.52, 46.07, 46.61, 47.16, 47.70, 48.24, 48.79, 49.33, 49.87, 50.41, 50.95, 51.49, 52.03, 52.57, 53.11, 53.65, 54.19, 54.72, 55.26, 55.80, 56.33, 56.87, 57.40, 57.94, 58.47, 59.00, 59.53, 60.07, 60.60, 61.13, 61.66, 62.19, 62.72, 63.25, 63.78, 64.30, 64.83, 65.36, 65.89, 66.41, 66.94, 67.46, 67.99, 68.51, 69.03, 69.56, 70.08, 70.60, 71.12, 71.64, 72.16, 72.68, 73.20, 73.72, 74.24, 74.76, 75.28, 75.79, 76.31, 76.83, 77.34, 77.86, 78.37, 78.89, 79.40, 79.91, 80.42, 80.94, 81.45, 81.96, 82.47, 82.98, 83.49, 84.00, 84.51, 85.02, 85.53, 86.03, 86.54, 87.05, 87.55, 88.06, 88.56, 89.07, 89.57, 90.07, 90.58, 91.08, 91.58, 92.08, 92.59, 93.09, 93.59, 94.09, 94.59, 95.09, 95.58, 96.08, 96.58, 97.08, 97.57, 98.07, 98.57, 99.06, 99.56, 100.05, 100.54, 101.04, 101.53, 102.02, 102.52, 103.01, 103.50, 103.99, 104.48, 104.97, 105.46}, -{33.35, 33.90, 34.45, 35.00, 35.55, 36.10, 36.64, 37.19, 37.74, 38.28, 38.83, 39.37, 39.92, 40.46, 41.00, 41.55, 42.09, 42.63, 43.17, 43.71, 44.25, 44.79, 45.33, 45.87, 46.41, 46.94, 47.48, 48.02, 48.55, 49.09, 49.62, 50.16, 50.69, 51.23, 51.76, 52.29, 52.82, 53.35, 53.88, 54.41, 54.94, 55.47, 56.00, 56.53, 57.06, 57.59, 58.11, 58.64, 59.17, 59.69, 60.22, 60.74, 61.26, 61.79, 62.31, 62.83, 63.35, 63.88, 64.40, 64.92, 65.44, 65.96, 66.47, 66.99, 67.51, 68.03, 68.55, 69.06, 69.58, 70.09, 70.61, 71.12, 71.64, 72.15, 72.66, 73.18, 73.69, 74.20, 74.71, 75.22, 75.73, 76.24, 76.75, 77.26, 77.77, 78.28, 78.78, 79.29, 79.80, 80.30, 80.81, 81.31, 81.82, 82.32, 82.83, 83.33, 83.83, 84.33, 84.84, 85.34, 85.84, 86.34, 86.84, 87.34, 87.84, 88.34, 88.83, 89.33, 89.83, 90.33, 90.82, 91.32, 91.81, 92.31, 92.80, 93.30, 93.79, 94.28, 94.78, 95.27, 95.76, 96.25, 96.74, 97.23, 97.72, 98.21, 98.70, 99.19, 99.68, 100.17, 100.65, 101.14, 101.63, 102.11, 102.60, 103.08, 103.57, 104.05, 104.54, 105.02}, -{33.86, 34.41, 34.95, 35.49, 36.03, 36.57, 37.11, 37.65, 38.19, 38.73, 39.26, 39.80, 40.34, 40.87, 41.41, 41.94, 42.48, 43.01, 43.55, 44.08, 44.61, 45.14, 45.68, 46.21, 46.74, 47.27, 47.80, 48.33, 48.85, 49.38, 49.91, 50.44, 50.96, 51.49, 52.02, 52.54, 53.07, 53.59, 54.11, 54.64, 55.16, 55.68, 56.20, 56.72, 57.25, 57.77, 58.29, 58.80, 59.32, 59.84, 60.36, 60.88, 61.39, 61.91, 62.43, 62.94, 63.46, 63.97, 64.49, 65.00, 65.51, 66.02, 66.54, 67.05, 67.56, 68.07, 68.58, 69.09, 69.60, 70.11, 70.62, 71.12, 71.63, 72.14, 72.64, 73.15, 73.66, 74.16, 74.67, 75.17, 75.67, 76.18, 76.68, 77.18, 77.68, 78.18, 78.69, 79.19, 79.69, 80.19, 80.68, 81.18, 81.68, 82.18, 82.68, 83.17, 83.67, 84.17, 84.66, 85.16, 85.65, 86.14, 86.64, 87.13, 87.62, 88.12, 88.61, 89.10, 89.59, 90.08, 90.57, 91.06, 91.55, 92.04, 92.53, 93.01, 93.50, 93.99, 94.48, 94.96, 95.45, 95.93, 96.42, 96.90, 97.39, 97.87, 98.35, 98.83, 99.32, 99.80, 100.28, 100.76, 101.24, 101.72, 102.20, 102.68, 103.16, 103.64, 104.11, 104.59}, -{34.36, 34.89, 35.43, 35.96, 36.50, 37.03, 37.56, 38.09, 38.62, 39.16, 39.69, 40.22, 40.75, 41.27, 41.80, 42.33, 42.86, 43.38, 43.91, 44.44, 44.96, 45.49, 46.01, 46.54, 47.06, 47.58, 48.10, 48.63, 49.15, 49.67, 50.19, 50.71, 51.23, 51.75, 52.27, 52.79, 53.30, 53.82, 54.34, 54.85, 55.37, 55.88, 56.40, 56.91, 57.43, 57.94, 58.45, 58.97, 59.48, 59.99, 60.50, 61.01, 61.52, 62.03, 62.54, 63.05, 63.56, 64.06, 64.57, 65.08, 65.59, 66.09, 66.60, 67.10, 67.61, 68.11, 68.61, 69.12, 69.62, 70.12, 70.62, 71.12, 71.63, 72.13, 72.63, 73.13, 73.62, 74.12, 74.62, 75.12, 75.62, 76.11, 76.61, 77.10, 77.60, 78.10, 78.59, 79.08, 79.58, 80.07, 80.56, 81.06, 81.55, 82.04, 82.53, 83.02, 83.51, 84.00, 84.49, 84.98, 85.47, 85.95, 86.44, 86.93, 87.42, 87.90, 88.39, 88.87, 89.36, 89.84, 90.33, 90.81, 91.29, 91.77, 92.26, 92.74, 93.22, 93.70, 94.18, 94.66, 95.14, 95.62, 96.10, 96.58, 97.06, 97.53, 98.01, 98.49, 98.96, 99.44, 99.91, 100.39, 100.86, 101.34, 101.81, 102.29, 102.76, 103.23, 103.70, 104.17}, -{34.84, 35.37, 35.90, 36.42, 36.95, 37.48, 38.00, 38.53, 39.05, 39.57, 40.10, 40.62, 41.14, 41.66, 42.19, 42.71, 43.23, 43.75, 44.27, 44.79, 45.30, 45.82, 46.34, 46.86, 47.37, 47.89, 48.40, 48.92, 49.43, 49.95, 50.46, 50.97, 51.49, 52.00, 52.51, 53.02, 53.53, 54.04, 54.55, 55.06, 55.57, 56.08, 56.59, 57.10, 57.60, 58.11, 58.62, 59.12, 59.63, 60.13, 60.64, 61.14, 61.64, 62.15, 62.65, 63.15, 63.65, 64.16, 64.66, 65.16, 65.66, 66.16, 66.65, 67.15, 67.65, 68.15, 68.65, 69.14, 69.64, 70.14, 70.63, 71.13, 71.62, 72.11, 72.61, 73.10, 73.59, 74.09, 74.58, 75.07, 75.56, 76.05, 76.54, 77.03, 77.52, 78.01, 78.50, 78.98, 79.47, 79.96, 80.45, 80.93, 81.42, 81.90, 82.39, 82.87, 83.36, 83.84, 84.32, 84.80, 85.29, 85.77, 86.25, 86.73, 87.21, 87.69, 88.17, 88.65, 89.13, 89.61, 90.09, 90.56, 91.04, 91.52, 91.99, 92.47, 92.95, 93.42, 93.90, 94.37, 94.84, 95.32, 95.79, 96.26, 96.73, 97.21, 97.68, 98.15, 98.62, 99.09, 99.56, 100.03, 100.50, 100.97, 101.43, 101.90, 102.37, 102.83, 103.30, 103.77}, -{35.31, 35.83, 36.36, 36.87, 37.39, 37.91, 38.43, 38.95, 39.47, 39.98, 40.50, 41.01, 41.53, 42.04, 42.56, 43.07, 43.59, 44.10, 44.61, 45.12, 45.64, 46.15, 46.66, 47.17, 47.68, 48.19, 48.70, 49.20, 49.71, 50.22, 50.73, 51.23, 51.74, 52.24, 52.75, 53.25, 53.76, 54.26, 54.77, 55.27, 55.77, 56.27, 56.78, 57.28, 57.78, 58.28, 58.78, 59.28, 59.77, 60.27, 60.77, 61.27, 61.77, 62.26, 62.76, 63.25, 63.75, 64.24, 64.74, 65.23, 65.73, 66.22, 66.71, 67.20, 67.70, 68.19, 68.68, 69.17, 69.66, 70.15, 70.64, 71.13, 71.61, 72.10, 72.59, 73.08, 73.56, 74.05, 74.53, 75.02, 75.50, 75.99, 76.47, 76.96, 77.44, 77.92, 78.40, 78.89, 79.37, 79.85, 80.33, 80.81, 81.29, 81.77, 82.25, 82.73, 83.20, 83.68, 84.16, 84.64, 85.11, 85.59, 86.06, 86.54, 87.01, 87.49, 87.96, 88.44, 88.91, 89.38, 89.85, 90.32, 90.80, 91.27, 91.74, 92.21, 92.68, 93.15, 93.62, 94.08, 94.55, 95.02, 95.49, 95.95, 96.42, 96.89, 97.35, 97.82, 98.28, 98.75, 99.21, 99.67, 100.14, 100.60, 101.06, 101.53, 101.99, 102.45, 102.91, 103.37}, -{35.77, 36.29, 36.80, 37.31, 37.83, 38.34, 38.85, 39.36, 39.87, 40.38, 40.89, 41.40, 41.91, 42.42, 42.92, 43.43, 43.94, 44.44, 44.95, 45.45, 45.96, 46.46, 46.97, 47.47, 47.98, 48.48, 48.98, 49.48, 49.98, 50.48, 50.98, 51.48, 51.98, 52.48, 52.98, 53.48, 53.98, 54.48, 54.97, 55.47, 55.97, 56.46, 56.96, 57.45, 57.94, 58.44, 58.93, 59.43, 59.92, 60.41, 60.90, 61.39, 61.88, 62.37, 62.86, 63.35, 63.84, 64.33, 64.82, 65.31, 65.79, 66.28, 66.77, 67.25, 67.74, 68.22, 68.71, 69.19, 69.68, 70.16, 70.64, 71.13, 71.61, 72.09, 72.57, 73.05, 73.53, 74.01, 74.49, 74.97, 75.45, 75.93, 76.41, 76.89, 77.36, 77.84, 78.32, 78.79, 79.27, 79.74, 80.22, 80.69, 81.17, 81.64, 82.11, 82.58, 83.06, 83.53, 84.00, 84.47, 84.94, 85.41, 85.88, 86.35, 86.82, 87.29, 87.76, 88.22, 88.69, 89.16, 89.63, 90.09, 90.56, 91.02, 91.49, 91.95, 92.42, 92.88, 93.34, 93.81, 94.27, 94.73, 95.19, 95.65, 96.12, 96.58, 97.04, 97.50, 97.95, 98.41, 98.87, 99.33, 99.79, 100.25, 100.70, 101.16, 101.62, 102.07, 102.53, 102.98}, -{36.22, 36.73, 37.23, 37.74, 38.25, 38.75, 39.26, 39.76, 40.26, 40.77, 41.27, 41.77, 42.28, 42.78, 43.28, 43.78, 44.28, 44.78, 45.28, 45.78, 46.28, 46.77, 47.27, 47.77, 48.27, 48.76, 49.26, 49.75, 50.25, 50.74, 51.24, 51.73, 52.22, 52.72, 53.21, 53.70, 54.19, 54.68, 55.17, 55.66, 56.15, 56.64, 57.13, 57.62, 58.11, 58.60, 59.08, 59.57, 60.06, 60.54, 61.03, 61.51, 62.00, 62.48, 62.97, 63.45, 63.93, 64.42, 64.90, 65.38, 65.86, 66.34, 66.82, 67.30, 67.78, 68.26, 68.74, 69.22, 69.70, 70.17, 70.65, 71.13, 71.60, 72.08, 72.56, 73.03, 73.50, 73.98, 74.45, 74.93, 75.40, 75.87, 76.34, 76.82, 77.29, 77.76, 78.23, 78.70, 79.17, 79.64, 80.11, 80.58, 81.04, 81.51, 81.98, 82.45, 82.91, 83.38, 83.84, 84.31, 84.78, 85.24, 85.70, 86.17, 86.63, 87.09, 87.56, 88.02, 88.48, 88.94, 89.40, 89.86, 90.32, 90.78, 91.24, 91.70, 92.16, 92.62, 93.08, 93.53, 93.99, 94.45, 94.90, 95.36, 95.82, 96.27, 96.73, 97.18, 97.63, 98.09, 98.54, 98.99, 99.45, 99.90, 100.35, 100.80, 101.25, 101.70, 102.15, 102.60}, -{36.66, 37.16, 37.66, 38.16, 38.66, 39.16, 39.65, 40.15, 40.65, 41.15, 41.64, 42.14, 42.63, 43.13, 43.62, 44.12, 44.61, 45.11, 45.60, 46.09, 46.58, 47.08, 47.57, 48.06, 48.55, 49.04, 49.53, 50.02, 50.51, 50.99, 51.48, 51.97, 52.46, 52.94, 53.43, 53.92, 54.40, 54.89, 55.37, 55.85, 56.34, 56.82, 57.30, 57.79, 58.27, 58.75, 59.23, 59.71, 60.19, 60.67, 61.15, 61.63, 62.11, 62.59, 63.07, 63.54, 64.02, 64.50, 64.97, 65.45, 65.93, 66.40, 66.87, 67.35, 67.82, 68.30, 68.77, 69.24, 69.71, 70.19, 70.66, 71.13, 71.60, 72.07, 72.54, 73.01, 73.48, 73.95, 74.41, 74.88, 75.35, 75.82, 76.28, 76.75, 77.21, 77.68, 78.14, 78.61, 79.07, 79.54, 80.00, 80.46, 80.93, 81.39, 81.85, 82.31, 82.77, 83.23, 83.69, 84.15, 84.61, 85.07, 85.53, 85.99, 86.45, 86.90, 87.36, 87.82, 88.27, 88.73, 89.19, 89.64, 90.10, 90.55, 91.01, 91.46, 91.91, 92.37, 92.82, 93.27, 93.72, 94.17, 94.62, 95.07, 95.53, 95.98, 96.42, 96.87, 97.32, 97.77, 98.22, 98.67, 99.11, 99.56, 100.01, 100.45, 100.90, 101.34, 101.79, 102.23}, -{37.08, 37.58, 38.07, 38.56, 39.06, 39.55, 40.04, 40.53, 41.02, 41.51, 42.00, 42.49, 42.98, 43.47, 43.96, 44.45, 44.94, 45.42, 45.91, 46.40, 46.88, 47.37, 47.86, 48.34, 48.82, 49.31, 49.79, 50.27, 50.76, 51.24, 51.72, 52.20, 52.68, 53.17, 53.65, 54.13, 54.60, 55.08, 55.56, 56.04, 56.52, 57.00, 57.47, 57.95, 58.43, 58.90, 59.38, 59.85, 60.33, 60.80, 61.27, 61.75, 62.22, 62.69, 63.16, 63.64, 64.11, 64.58, 65.05, 65.52, 65.99, 66.46, 66.93, 67.39, 67.86, 68.33, 68.80, 69.26, 69.73, 70.20, 70.66, 71.13, 71.59, 72.06, 72.52, 72.99, 73.45, 73.91, 74.37, 74.84, 75.30, 75.76, 76.22, 76.68, 77.14, 77.60, 78.06, 78.52, 78.98, 79.44, 79.90, 80.35, 80.81, 81.27, 81.72, 82.18, 82.64, 83.09, 83.55, 84.00, 84.45, 84.91, 85.36, 85.81, 86.27, 86.72, 87.17, 87.62, 88.07, 88.52, 88.97, 89.42, 89.87, 90.32, 90.77, 91.22, 91.67, 92.12, 92.56, 93.01, 93.46, 93.90, 94.35, 94.80, 95.24, 95.69, 96.13, 96.57, 97.02, 97.46, 97.90, 98.35, 98.79, 99.23, 99.67, 100.11, 100.55, 100.99, 101.43, 101.87}, -{37.50, 37.99, 38.47, 38.96, 39.45, 39.93, 40.42, 40.90, 41.39, 41.87, 42.36, 42.84, 43.33, 43.81, 44.29, 44.77, 45.25, 45.74, 46.22, 46.70, 47.18, 47.66, 48.14, 48.62, 49.09, 49.57, 50.05, 50.53, 51.00, 51.48, 51.96, 52.43, 52.91, 53.38, 53.86, 54.33, 54.80, 55.28, 55.75, 56.22, 56.69, 57.17, 57.64, 58.11, 58.58, 59.05, 59.52, 59.99, 60.46, 60.92, 61.39, 61.86, 62.33, 62.79, 63.26, 63.73, 64.19, 64.66, 65.12, 65.59, 66.05, 66.51, 66.98, 67.44, 67.90, 68.36, 68.83, 69.29, 69.75, 70.21, 70.67, 71.13, 71.59, 72.05, 72.51, 72.96, 73.42, 73.88, 74.34, 74.79, 75.25, 75.71, 76.16, 76.62, 77.07, 77.53, 77.98, 78.43, 78.89, 79.34, 79.79, 80.25, 80.70, 81.15, 81.60, 82.05, 82.50, 82.95, 83.40, 83.85, 84.30, 84.75, 85.20, 85.64, 86.09, 86.54, 86.98, 87.43, 87.88, 88.32, 88.77, 89.21, 89.66, 90.10, 90.54, 90.99, 91.43, 91.87, 92.32, 92.76, 93.20, 93.64, 94.08, 94.52, 94.96, 95.40, 95.84, 96.28, 96.72, 97.16, 97.60, 98.03, 98.47, 98.91, 99.34, 99.78, 100.22, 100.65, 101.09, 101.52}, -{37.90, 38.38, 38.87, 39.35, 39.83, 40.31, 40.79, 41.27, 41.75, 42.23, 42.70, 43.18, 43.66, 44.14, 44.61, 45.09, 45.56, 46.04, 46.51, 46.99, 47.46, 47.94, 48.41, 48.88, 49.36, 49.83, 50.30, 50.77, 51.24, 51.71, 52.18, 52.65, 53.12, 53.59, 54.06, 54.53, 55.00, 55.46, 55.93, 56.40, 56.86, 57.33, 57.80, 58.26, 58.73, 59.19, 59.65, 60.12, 60.58, 61.04, 61.51, 61.97, 62.43, 62.89, 63.35, 63.81, 64.27, 64.73, 65.19, 65.65, 66.11, 66.57, 67.03, 67.48, 67.94, 68.40, 68.85, 69.31, 69.77, 70.22, 70.68, 71.13, 71.58, 72.04, 72.49, 72.94, 73.40, 73.85, 74.30, 74.75, 75.20, 75.65, 76.10, 76.55, 77.00, 77.45, 77.90, 78.35, 78.80, 79.25, 79.69, 80.14, 80.59, 81.03, 81.48, 81.93, 82.37, 82.82, 83.26, 83.70, 84.15, 84.59, 85.03, 85.48, 85.92, 86.36, 86.80, 87.24, 87.69, 88.13, 88.57, 89.01, 89.44, 89.88, 90.32, 90.76, 91.20, 91.64, 92.07, 92.51, 92.95, 93.38, 93.82, 94.26, 94.69, 95.13, 95.56, 95.99, 96.43, 96.86, 97.29, 97.73, 98.16, 98.59, 99.02, 99.45, 99.89, 100.32, 100.75, 101.18}, -{38.30, 38.77, 39.25, 39.73, 40.20, 40.67, 41.15, 41.62, 42.10, 42.57, 43.04, 43.51, 43.98, 44.46, 44.93, 45.40, 45.87, 46.34, 46.81, 47.27, 47.74, 48.21, 48.68, 49.15, 49.61, 50.08, 50.55, 51.01, 51.48, 51.94, 52.41, 52.87, 53.34, 53.80, 54.26, 54.72, 55.19, 55.65, 56.11, 56.57, 57.03, 57.49, 57.95, 58.41, 58.87, 59.33, 59.79, 60.25, 60.70, 61.16, 61.62, 62.08, 62.53, 62.99, 63.44, 63.90, 64.35, 64.81, 65.26, 65.72, 66.17, 66.62, 67.07, 67.53, 67.98, 68.43, 68.88, 69.33, 69.78, 70.23, 70.68, 71.13, 71.58, 72.03, 72.48, 72.92, 73.37, 73.82, 74.26, 74.71, 75.16, 75.60, 76.05, 76.49, 76.94, 77.38, 77.82, 78.27, 78.71, 79.15, 79.60, 80.04, 80.48, 80.92, 81.36, 81.80, 82.24, 82.68, 83.12, 83.56, 84.00, 84.44, 84.88, 85.31, 85.75, 86.19, 86.63, 87.06, 87.50, 87.93, 88.37, 88.80, 89.24, 89.67, 90.11, 90.54, 90.97, 91.41, 91.84, 92.27, 92.70, 93.13, 93.56, 93.99, 94.43, 94.86, 95.28, 95.71, 96.14, 96.57, 97.00, 97.43, 97.86, 98.28, 98.71, 99.14, 99.56, 99.99, 100.41, 100.84}, -{38.68, 39.15, 39.62, 40.09, 40.56, 41.03, 41.50, 41.97, 42.44, 42.90, 43.37, 43.84, 44.30, 44.77, 45.23, 45.70, 46.16, 46.63, 47.09, 47.55, 48.02, 48.48, 48.94, 49.40, 49.86, 50.33, 50.79, 51.25, 51.71, 52.17, 52.62, 53.08, 53.54, 54.00, 54.46, 54.91, 55.37, 55.83, 56.28, 56.74, 57.20, 57.65, 58.11, 58.56, 59.01, 59.47, 59.92, 60.37, 60.83, 61.28, 61.73, 62.18, 62.63, 63.08, 63.53, 63.98, 64.43, 64.88, 65.33, 65.78, 66.23, 66.67, 67.12, 67.57, 68.01, 68.46, 68.91, 69.35, 69.80, 70.24, 70.69, 71.13, 71.57, 72.02, 72.46, 72.90, 73.35, 73.79, 74.23, 74.67, 75.11, 75.55, 75.99, 76.43, 76.87, 77.31, 77.75, 78.19, 78.63, 79.06, 79.50, 79.94, 80.37, 80.81, 81.25, 81.68, 82.12, 82.55, 82.99, 83.42, 83.86, 84.29, 84.72, 85.15, 85.59, 86.02, 86.45, 86.88, 87.31, 87.74, 88.18, 88.61, 89.04, 89.46, 89.89, 90.32, 90.75, 91.18, 91.61, 92.03, 92.46, 92.89, 93.31, 93.74, 94.17, 94.59, 95.02, 95.44, 95.86, 96.29, 96.71, 97.14, 97.56, 97.98, 98.40, 98.83, 99.25, 99.67, 100.09, 100.51}, -{39.06, 39.53, 39.99, 40.45, 40.92, 41.38, 41.84, 42.31, 42.77, 43.23, 43.69, 44.15, 44.61, 45.07, 45.53, 45.99, 46.45, 46.91, 47.37, 47.83, 48.28, 48.74, 49.20, 49.65, 50.11, 50.56, 51.02, 51.48, 51.93, 52.38, 52.84, 53.29, 53.74, 54.20, 54.65, 55.10, 55.55, 56.00, 56.45, 56.91, 57.36, 57.81, 58.25, 58.70, 59.15, 59.60, 60.05, 60.50, 60.94, 61.39, 61.84, 62.28, 62.73, 63.17, 63.62, 64.06, 64.51, 64.95, 65.40, 65.84, 66.28, 66.73, 67.17, 67.61, 68.05, 68.49, 68.93, 69.37, 69.81, 70.25, 70.69, 71.13, 71.57, 72.01, 72.45, 72.88, 73.32, 73.76, 74.20, 74.63, 75.07, 75.50, 75.94, 76.37, 76.81, 77.24, 77.68, 78.11, 78.54, 78.98, 79.41, 79.84, 80.27, 80.70, 81.13, 81.57, 82.00, 82.43, 82.86, 83.29, 83.71, 84.14, 84.57, 85.00, 85.43, 85.85, 86.28, 86.71, 87.13, 87.56, 87.99, 88.41, 88.84, 89.26, 89.69, 90.11, 90.53, 90.96, 91.38, 91.80, 92.23, 92.65, 93.07, 93.49, 93.91, 94.33, 94.75, 95.17, 95.59, 96.01, 96.43, 96.85, 97.27, 97.69, 98.10, 98.52, 98.94, 99.36, 99.77, 100.19}, -{39.43, 39.89, 40.35, 40.81, 41.26, 41.72, 42.18, 42.64, 43.09, 43.55, 44.01, 44.46, 44.92, 45.37, 45.83, 46.28, 46.73, 47.19, 47.64, 48.09, 48.54, 49.00, 49.45, 49.90, 50.35, 50.80, 51.25, 51.70, 52.15, 52.60, 53.05, 53.49, 53.94, 54.39, 54.84, 55.28, 55.73, 56.18, 56.62, 57.07, 57.51, 57.96, 58.40, 58.84, 59.29, 59.73, 60.17, 60.62, 61.06, 61.50, 61.94, 62.38, 62.82, 63.26, 63.70, 64.14, 64.58, 65.02, 65.46, 65.90, 66.34, 66.77, 67.21, 67.65, 68.09, 68.52, 68.96, 69.39, 69.83, 70.26, 70.70, 71.13, 71.57, 72.00, 72.43, 72.87, 73.30, 73.73, 74.16, 74.59, 75.02, 75.46, 75.89, 76.32, 76.75, 77.17, 77.60, 78.03, 78.46, 78.89, 79.32, 79.74, 80.17, 80.60, 81.02, 81.45, 81.88, 82.30, 82.73, 83.15, 83.58, 84.00, 84.42, 84.85, 85.27, 85.69, 86.12, 86.54, 86.96, 87.38, 87.80, 88.22, 88.64, 89.06, 89.48, 89.90, 90.32, 90.74, 91.16, 91.58, 92.00, 92.41, 92.83, 93.25, 93.66, 94.08, 94.50, 94.91, 95.33, 95.74, 96.16, 96.57, 96.98, 97.40, 97.81, 98.22, 98.64, 99.05, 99.46, 99.87}, -{39.79, 40.24, 40.70, 41.15, 41.60, 42.06, 42.51, 42.96, 43.41, 43.86, 44.31, 44.76, 45.21, 45.66, 46.11, 46.56, 47.01, 47.46, 47.90, 48.35, 48.80, 49.25, 49.69, 50.14, 50.58, 51.03, 51.47, 51.92, 52.36, 52.81, 53.25, 53.69, 54.13, 54.58, 55.02, 55.46, 55.90, 56.34, 56.78, 57.22, 57.66, 58.10, 58.54, 58.98, 59.42, 59.86, 60.30, 60.73, 61.17, 61.61, 62.04, 62.48, 62.92, 63.35, 63.79, 64.22, 64.66, 65.09, 65.52, 65.96, 66.39, 66.82, 67.26, 67.69, 68.12, 68.55, 68.98, 69.41, 69.84, 70.27, 70.70, 71.13, 71.56, 71.99, 72.42, 72.85, 73.27, 73.70, 74.13, 74.56, 74.98, 75.41, 75.83, 76.26, 76.68, 77.11, 77.53, 77.96, 78.38, 78.80, 79.23, 79.65, 80.07, 80.50, 80.92, 81.34, 81.76, 82.18, 82.60, 83.02, 83.44, 83.86, 84.28, 84.70, 85.12, 85.54, 85.95, 86.37, 86.79, 87.20, 87.62, 88.04, 88.45, 88.87, 89.28, 89.70, 90.11, 90.53, 90.94, 91.36, 91.77, 92.18, 92.60, 93.01, 93.42, 93.83, 94.24, 94.65, 95.07, 95.48, 95.89, 96.30, 96.71, 97.12, 97.52, 97.93, 98.34, 98.75, 99.16, 99.57}, -{40.14, 40.59, 41.04, 41.49, 41.93, 42.38, 42.83, 43.28, 43.72, 44.17, 44.61, 45.06, 45.50, 45.95, 46.39, 46.83, 47.28, 47.72, 48.16, 48.61, 49.05, 49.49, 49.93, 50.37, 50.81, 51.25, 51.69, 52.13, 52.57, 53.01, 53.45, 53.89, 54.32, 54.76, 55.20, 55.63, 56.07, 56.51, 56.94, 57.38, 57.81, 58.25, 58.68, 59.12, 59.55, 59.98, 60.42, 60.85, 61.28, 61.71, 62.15, 62.58, 63.01, 63.44, 63.87, 64.30, 64.73, 65.16, 65.59, 66.02, 66.44, 66.87, 67.30, 67.73, 68.15, 68.58, 69.01, 69.43, 69.86, 70.28, 70.71, 71.13, 71.56, 71.98, 72.41, 72.83, 73.25, 73.67, 74.10, 74.52, 74.94, 75.36, 75.78, 76.20, 76.62, 77.04, 77.46, 77.88, 78.30, 78.72, 79.14, 79.56, 79.98, 80.39, 80.81, 81.23, 81.65, 82.06, 82.48, 82.89, 83.31, 83.72, 84.14, 84.55, 84.97, 85.38, 85.79, 86.21, 86.62, 87.03, 87.44, 87.86, 88.27, 88.68, 89.09, 89.50, 89.91, 90.32, 90.73, 91.14, 91.55, 91.96, 92.37, 92.77, 93.18, 93.59, 94.00, 94.40, 94.81, 95.22, 95.62, 96.03, 96.43, 96.84, 97.24, 97.65, 98.05, 98.46, 98.86, 99.26}, -{40.49, 40.93, 41.37, 41.82, 42.26, 42.70, 43.14, 43.58, 44.03, 44.47, 44.91, 45.35, 45.79, 46.23, 46.66, 47.10, 47.54, 47.98, 48.42, 48.85, 49.29, 49.73, 50.16, 50.60, 51.04, 51.47, 51.91, 52.34, 52.77, 53.21, 53.64, 54.08, 54.51, 54.94, 55.37, 55.80, 56.24, 56.67, 57.10, 57.53, 57.96, 58.39, 58.82, 59.25, 59.68, 60.11, 60.53, 60.96, 61.39, 61.82, 62.24, 62.67, 63.10, 63.52, 63.95, 64.37, 64.80, 65.22, 65.65, 66.07, 66.49, 66.92, 67.34, 67.76, 68.19, 68.61, 69.03, 69.45, 69.87, 70.29, 70.71, 71.13, 71.55, 71.97, 72.39, 72.81, 73.23, 73.65, 74.07, 74.48, 74.90, 75.32, 75.73, 76.15, 76.57, 76.98, 77.40, 77.81, 78.23, 78.64, 79.06, 79.47, 79.88, 80.30, 80.71, 81.12, 81.53, 81.95, 82.36, 82.77, 83.18, 83.59, 84.00, 84.41, 84.82, 85.23, 85.64, 86.05, 86.46, 86.86, 87.27, 87.68, 88.09, 88.49, 88.90, 89.31, 89.71, 90.12, 90.52, 90.93, 91.33, 91.74, 92.14, 92.55, 92.95, 93.35, 93.76, 94.16, 94.56, 94.96, 95.37, 95.77, 96.17, 96.57, 96.97, 97.37, 97.77, 98.17, 98.57, 98.97}, -{40.82, 41.26, 41.70, 42.14, 42.58, 43.01, 43.45, 43.89, 44.32, 44.76, 45.19, 45.63, 46.06, 46.50, 46.93, 47.37, 47.80, 48.23, 48.66, 49.10, 49.53, 49.96, 50.39, 50.82, 51.25, 51.69, 52.12, 52.54, 52.97, 53.40, 53.83, 54.26, 54.69, 55.12, 55.54, 55.97, 56.40, 56.82, 57.25, 57.68, 58.10, 58.53, 58.95, 59.38, 59.80, 60.23, 60.65, 61.07, 61.49, 61.92, 62.34, 62.76, 63.18, 63.60, 64.03, 64.45, 64.87, 65.29, 65.71, 66.13, 66.55, 66.96, 67.38, 67.80, 68.22, 68.64, 69.05, 69.47, 69.89, 70.30, 70.72, 71.13, 71.55, 71.96, 72.38, 72.79, 73.21, 73.62, 74.03, 74.45, 74.86, 75.27, 75.69, 76.10, 76.51, 76.92, 77.33, 77.74, 78.15, 78.56, 78.97, 79.38, 79.79, 80.20, 80.61, 81.02, 81.42, 81.83, 82.24, 82.65, 83.05, 83.46, 83.86, 84.27, 84.68, 85.08, 85.49, 85.89, 86.29, 86.70, 87.10, 87.51, 87.91, 88.31, 88.71, 89.12, 89.52, 89.92, 90.32, 90.72, 91.12, 91.52, 91.92, 92.32, 92.72, 93.12, 93.52, 93.92, 94.32, 94.71, 95.11, 95.51, 95.91, 96.30, 96.70, 97.10, 97.49, 97.89, 98.28, 98.68}, -{41.15, 41.59, 42.02, 42.45, 42.89, 43.32, 43.75, 44.18, 44.61, 45.04, 45.47, 45.90, 46.33, 46.76, 47.19, 47.62, 48.05, 48.48, 48.91, 49.34, 49.76, 50.19, 50.62, 51.04, 51.47, 51.89, 52.32, 52.75, 53.17, 53.59, 54.02, 54.44, 54.87, 55.29, 55.71, 56.13, 56.56, 56.98, 57.40, 57.82, 58.24, 58.66, 59.08, 59.50, 59.92, 60.34, 60.76, 61.18, 61.60, 62.02, 62.43, 62.85, 63.27, 63.69, 64.10, 64.52, 64.93, 65.35, 65.76, 66.18, 66.59, 67.01, 67.42, 67.84, 68.25, 68.66, 69.08, 69.49, 69.90, 70.31, 70.72, 71.13, 71.55, 71.96, 72.37, 72.78, 73.19, 73.60, 74.00, 74.41, 74.82, 75.23, 75.64, 76.05, 76.45, 76.86, 77.27, 77.67, 78.08, 78.48, 78.89, 79.30, 79.70, 80.10, 80.51, 80.91, 81.32, 81.72, 82.12, 82.53, 82.93, 83.33, 83.73, 84.13, 84.54, 84.94, 85.34, 85.74, 86.14, 86.54, 86.94, 87.34, 87.73, 88.13, 88.53, 88.93, 89.33, 89.72, 90.12, 90.52, 90.92, 91.31, 91.71, 92.10, 92.50, 92.89, 93.29, 93.68, 94.08, 94.47, 94.87, 95.26, 95.65, 96.04, 96.44, 96.83, 97.22, 97.61, 98.00, 98.40}, -{41.48, 41.90, 42.33, 42.76, 43.19, 43.62, 44.04, 44.47, 44.90, 45.32, 45.75, 46.17, 46.60, 47.03, 47.45, 47.87, 48.30, 48.72, 49.15, 49.57, 49.99, 50.41, 50.84, 51.26, 51.68, 52.10, 52.52, 52.94, 53.36, 53.78, 54.20, 54.62, 55.04, 55.46, 55.88, 56.29, 56.71, 57.13, 57.55, 57.96, 58.38, 58.80, 59.21, 59.63, 60.04, 60.46, 60.87, 61.29, 61.70, 62.11, 62.53, 62.94, 63.35, 63.76, 64.18, 64.59, 65.00, 65.41, 65.82, 66.23, 66.64, 67.05, 67.46, 67.87, 68.28, 68.69, 69.10, 69.51, 69.91, 70.32, 70.73, 71.14, 71.54, 71.95, 72.35, 72.76, 73.17, 73.57, 73.98, 74.38, 74.78, 75.19, 75.59, 76.00, 76.40, 76.80, 77.20, 77.61, 78.01, 78.41, 78.81, 79.21, 79.61, 80.01, 80.41, 80.81, 81.21, 81.61, 82.01, 82.41, 82.81, 83.20, 83.60, 84.00, 84.40, 84.79, 85.19, 85.59, 85.98, 86.38, 86.77, 87.17, 87.56, 87.96, 88.35, 88.75, 89.14, 89.53, 89.93, 90.32, 90.71, 91.11, 91.50, 91.89, 92.28, 92.67, 93.06, 93.45, 93.84, 94.23, 94.62, 95.01, 95.40, 95.79, 96.18, 96.57, 96.96, 97.34, 97.73, 98.12}, -{41.79, 42.22, 42.64, 43.06, 43.49, 43.91, 44.33, 44.75, 45.18, 45.60, 46.02, 46.44, 46.86, 47.28, 47.70, 48.12, 48.54, 48.96, 49.38, 49.80, 50.21, 50.63, 51.05, 51.47, 51.88, 52.30, 52.72, 53.13, 53.55, 53.96, 54.38, 54.79, 55.21, 55.62, 56.04, 56.45, 56.86, 57.28, 57.69, 58.10, 58.51, 58.92, 59.34, 59.75, 60.16, 60.57, 60.98, 61.39, 61.80, 62.21, 62.62, 63.02, 63.43, 63.84, 64.25, 64.66, 65.06, 65.47, 65.88, 66.28, 66.69, 67.10, 67.50, 67.91, 68.31, 68.71, 69.12, 69.52, 69.93, 70.33, 70.73, 71.14, 71.54, 71.94, 72.34, 72.74, 73.14, 73.55, 73.95, 74.35, 74.75, 75.15, 75.55, 75.95, 76.34, 76.74, 77.14, 77.54, 77.94, 78.33, 78.73, 79.13, 79.53, 79.92, 80.32, 80.71, 81.11, 81.50, 81.90, 82.29, 82.69, 83.08, 83.48, 83.87, 84.26, 84.65, 85.05, 85.44, 85.83, 86.22, 86.62, 87.01, 87.40, 87.79, 88.18, 88.57, 88.96, 89.35, 89.74, 90.13, 90.51, 90.90, 91.29, 91.68, 92.07, 92.45, 92.84, 93.23, 93.61, 94.00, 94.39, 94.77, 95.16, 95.54, 95.93, 96.31, 96.70, 97.08, 97.46, 97.85}, -{42.10, 42.52, 42.94, 43.36, 43.78, 44.19, 44.61, 45.03, 45.45, 45.87, 46.28, 46.70, 47.11, 47.53, 47.95, 48.36, 48.78, 49.19, 49.61, 50.02, 50.43, 50.85, 51.26, 51.67, 52.08, 52.50, 52.91, 53.32, 53.73, 54.14, 54.55, 54.96, 55.37, 55.78, 56.19, 56.60, 57.01, 57.42, 57.83, 58.24, 58.64, 59.05, 59.46, 59.87, 60.27, 60.68, 61.08, 61.49, 61.89, 62.30, 62.70, 63.11, 63.51, 63.92, 64.32, 64.72, 65.13, 65.53, 65.93, 66.33, 66.74, 67.14, 67.54, 67.94, 68.34, 68.74, 69.14, 69.54, 69.94, 70.34, 70.74, 71.14, 71.53, 71.93, 72.33, 72.73, 73.12, 73.52, 73.92, 74.31, 74.71, 75.11, 75.50, 75.90, 76.29, 76.69, 77.08, 77.47, 77.87, 78.26, 78.65, 79.05, 79.44, 79.83, 80.22, 80.62, 81.01, 81.40, 81.79, 82.18, 82.57, 82.96, 83.35, 83.74, 84.13, 84.52, 84.91, 85.30, 85.68, 86.07, 86.46, 86.85, 87.23, 87.62, 88.01, 88.39, 88.78, 89.16, 89.55, 89.93, 90.32, 90.70, 91.09, 91.47, 91.86, 92.24, 92.62, 93.01, 93.39, 93.77, 94.15, 94.53, 94.92, 95.30, 95.68, 96.06, 96.44, 96.82, 97.20, 97.58}, -{42.40, 42.82, 43.23, 43.65, 44.06, 44.47, 44.89, 45.30, 45.71, 46.13, 46.54, 46.95, 47.36, 47.78, 48.19, 48.60, 49.01, 49.42, 49.83, 50.24, 50.65, 51.06, 51.47, 51.87, 52.28, 52.69, 53.10, 53.50, 53.91, 54.32, 54.72, 55.13, 55.54, 55.94, 56.35, 56.75, 57.16, 57.56, 57.97, 58.37, 58.77, 59.18, 59.58, 59.98, 60.38, 60.79, 61.19, 61.59, 61.99, 62.39, 62.79, 63.19, 63.59, 63.99, 64.39, 64.79, 65.19, 65.59, 65.99, 66.38, 66.78, 67.18, 67.58, 67.97, 68.37, 68.77, 69.16, 69.56, 69.95, 70.35, 70.74, 71.14, 71.53, 71.92, 72.32, 72.71, 73.11, 73.50, 73.89, 74.28, 74.67, 75.07, 75.46, 75.85, 76.24, 76.63, 77.02, 77.41, 77.80, 78.19, 78.58, 78.97, 79.36, 79.75, 80.13, 80.52, 80.91, 81.30, 81.68, 82.07, 82.46, 82.84, 83.23, 83.61, 84.00, 84.39, 84.77, 85.15, 85.54, 85.92, 86.31, 86.69, 87.07, 87.46, 87.84, 88.22, 88.60, 88.99, 89.37, 89.75, 90.13, 90.51, 90.89, 91.27, 91.65, 92.03, 92.41, 92.79, 93.17, 93.55, 93.92, 94.30, 94.68, 95.06, 95.44, 95.81, 96.19, 96.57, 96.94, 97.32}, -{42.70, 43.11, 43.52, 43.93, 44.34, 44.75, 45.16, 45.57, 45.98, 46.38, 46.79, 47.20, 47.61, 48.02, 48.42, 48.83, 49.23, 49.64, 50.05, 50.45, 50.86, 51.26, 51.67, 52.07, 52.47, 52.88, 53.28, 53.68, 54.09, 54.49, 54.89, 55.29, 55.70, 56.10, 56.50, 56.90, 57.30, 57.70, 58.10, 58.50, 58.90, 59.30, 59.70, 60.09, 60.49, 60.89, 61.29, 61.69, 62.08, 62.48, 62.88, 63.27, 63.67, 64.06, 64.46, 64.85, 65.25, 65.64, 66.04, 66.43, 66.83, 67.22, 67.61, 68.00, 68.40, 68.79, 69.18, 69.57, 69.96, 70.36, 70.75, 71.14, 71.53, 71.92, 72.31, 72.70, 73.09, 73.47, 73.86, 74.25, 74.64, 75.03, 75.42, 75.80, 76.19, 76.58, 76.96, 77.35, 77.73, 78.12, 78.51, 78.89, 79.28, 79.66, 80.04, 80.43, 80.81, 81.20, 81.58, 81.96, 82.34, 82.73, 83.11, 83.49, 83.87, 84.25, 84.64, 85.02, 85.40, 85.78, 86.16, 86.54, 86.92, 87.30, 87.67, 88.05, 88.43, 88.81, 89.19, 89.56, 89.94, 90.32, 90.70, 91.07, 91.45, 91.83, 92.20, 92.58, 92.95, 93.33, 93.70, 94.08, 94.45, 94.82, 95.20, 95.57, 95.94, 96.32, 96.69, 97.06}, -{42.99, 43.40, 43.80, 44.21, 44.61, 45.02, 45.42, 45.83, 46.23, 46.64, 47.04, 47.44, 47.85, 48.25, 48.65, 49.06, 49.46, 49.86, 50.26, 50.66, 51.06, 51.46, 51.86, 52.26, 52.66, 53.06, 53.46, 53.86, 54.26, 54.66, 55.06, 55.45, 55.85, 56.25, 56.65, 57.04, 57.44, 57.84, 58.23, 58.63, 59.02, 59.42, 59.81, 60.21, 60.60, 60.99, 61.39, 61.78, 62.17, 62.57, 62.96, 63.35, 63.74, 64.13, 64.53, 64.92, 65.31, 65.70, 66.09, 66.48, 66.87, 67.26, 67.65, 68.04, 68.42, 68.81, 69.20, 69.59, 69.98, 70.36, 70.75, 71.14, 71.52, 71.91, 72.30, 72.68, 73.07, 73.45, 73.84, 74.22, 74.61, 74.99, 75.37, 75.76, 76.14, 76.52, 76.91, 77.29, 77.67, 78.05, 78.43, 78.82, 79.20, 79.58, 79.96, 80.34, 80.72, 81.10, 81.48, 81.86, 82.24, 82.61, 82.99, 83.37, 83.75, 84.13, 84.50, 84.88, 85.26, 85.63, 86.01, 86.39, 86.76, 87.14, 87.51, 87.89, 88.26, 88.64, 89.01, 89.39, 89.76, 90.13, 90.51, 90.88, 91.25, 91.62, 92.00, 92.37, 92.74, 93.11, 93.48, 93.85, 94.22, 94.59, 94.96, 95.33, 95.70, 96.07, 96.44, 96.81}, -{43.27, 43.68, 44.08, 44.48, 44.88, 45.28, 45.68, 46.08, 46.48, 46.88, 47.28, 47.68, 48.08, 48.48, 48.88, 49.28, 49.68, 50.07, 50.47, 50.87, 51.26, 51.66, 52.06, 52.45, 52.85, 53.24, 53.64, 54.03, 54.43, 54.82, 55.22, 55.61, 56.00, 56.40, 56.79, 57.18, 57.58, 57.97, 58.36, 58.75, 59.14, 59.53, 59.92, 60.32, 60.71, 61.10, 61.48, 61.87, 62.26, 62.65, 63.04, 63.43, 63.82, 64.20, 64.59, 64.98, 65.37, 65.75, 66.14, 66.53, 66.91, 67.30, 67.68, 68.07, 68.45, 68.84, 69.22, 69.60, 69.99, 70.37, 70.76, 71.14, 71.52, 71.90, 72.29, 72.67, 73.05, 73.43, 73.81, 74.19, 74.57, 74.95, 75.33, 75.71, 76.09, 76.47, 76.85, 77.23, 77.61, 77.98, 78.36, 78.74, 79.12, 79.49, 79.87, 80.25, 80.62, 81.00, 81.38, 81.75, 82.13, 82.50, 82.88, 83.25, 83.63, 84.00, 84.37, 84.75, 85.12, 85.49, 85.87, 86.24, 86.61, 86.98, 87.35, 87.73, 88.10, 88.47, 88.84, 89.21, 89.58, 89.95, 90.32, 90.69, 91.06, 91.43, 91.80, 92.16, 92.53, 92.90, 93.27, 93.63, 94.00, 94.37, 94.74, 95.10, 95.47, 95.83, 96.20, 96.56}, -{43.55, 43.95, 44.35, 44.75, 45.14, 45.54, 45.94, 46.33, 46.73, 47.13, 47.52, 47.92, 48.31, 48.71, 49.10, 49.49, 49.89, 50.28, 50.68, 51.07, 51.46, 51.85, 52.25, 52.64, 53.03, 53.42, 53.81, 54.20, 54.59, 54.98, 55.38, 55.76, 56.15, 56.54, 56.93, 57.32, 57.71, 58.10, 58.49, 58.87, 59.26, 59.65, 60.04, 60.42, 60.81, 61.19, 61.58, 61.97, 62.35, 62.74, 63.12, 63.50, 63.89, 64.27, 64.66, 65.04, 65.42, 65.81, 66.19, 66.57, 66.95, 67.33, 67.72, 68.10, 68.48, 68.86, 69.24, 69.62, 70.00, 70.38, 70.76, 71.14, 71.52, 71.90, 72.27, 72.65, 73.03, 73.41, 73.79, 74.16, 74.54, 74.92, 75.29, 75.67, 76.04, 76.42, 76.79, 77.17, 77.54, 77.92, 78.29, 78.67, 79.04, 79.41, 79.79, 80.16, 80.53, 80.91, 81.28, 81.65, 82.02, 82.39, 82.76, 83.14, 83.51, 83.88, 84.25, 84.62, 84.99, 85.36, 85.73, 86.09, 86.46, 86.83, 87.20, 87.57, 87.93, 88.30, 88.67, 89.04, 89.40, 89.77, 90.14, 90.50, 90.87, 91.23, 91.60, 91.96, 92.33, 92.69, 93.06, 93.42, 93.78, 94.15, 94.51, 94.87, 95.24, 95.60, 95.96, 96.32}, -{43.82, 44.22, 44.61, 45.01, 45.40, 45.79, 46.19, 46.58, 46.97, 47.36, 47.75, 48.15, 48.54, 48.93, 49.32, 49.71, 50.10, 50.49, 50.88, 51.27, 51.66, 52.04, 52.43, 52.82, 53.21, 53.60, 53.98, 54.37, 54.76, 55.14, 55.53, 55.92, 56.30, 56.69, 57.07, 57.46, 57.84, 58.23, 58.61, 58.99, 59.38, 59.76, 60.14, 60.53, 60.91, 61.29, 61.67, 62.06, 62.44, 62.82, 63.20, 63.58, 63.96, 64.34, 64.72, 65.10, 65.48, 65.86, 66.24, 66.62, 66.99, 67.37, 67.75, 68.13, 68.50, 68.88, 69.26, 69.64, 70.01, 70.39, 70.76, 71.14, 71.51, 71.89, 72.26, 72.64, 73.01, 73.39, 73.76, 74.13, 74.51, 74.88, 75.25, 75.63, 76.00, 76.37, 76.74, 77.11, 77.48, 77.85, 78.23, 78.60, 78.97, 79.34, 79.71, 80.07, 80.44, 80.81, 81.18, 81.55, 81.92, 82.29, 82.65, 83.02, 83.39, 83.76, 84.12, 84.49, 84.85, 85.22, 85.59, 85.95, 86.32, 86.68, 87.05, 87.41, 87.78, 88.14, 88.50, 88.87, 89.23, 89.59, 89.96, 90.32, 90.68, 91.04, 91.40, 91.77, 92.13, 92.49, 92.85, 93.21, 93.57, 93.93, 94.29, 94.65, 95.01, 95.37, 95.73, 96.09}, -{44.09, 44.48, 44.87, 45.26, 45.65, 46.04, 46.43, 46.82, 47.21, 47.59, 47.98, 48.37, 48.76, 49.14, 49.53, 49.92, 50.30, 50.69, 51.07, 51.46, 51.85, 52.23, 52.61, 53.00, 53.38, 53.77, 54.15, 54.53, 54.92, 55.30, 55.68, 56.06, 56.45, 56.83, 57.21, 57.59, 57.97, 58.35, 58.73, 59.11, 59.49, 59.87, 60.25, 60.63, 61.01, 61.39, 61.77, 62.14, 62.52, 62.90, 63.28, 63.65, 64.03, 64.41, 64.78, 65.16, 65.53, 65.91, 66.28, 66.66, 67.03, 67.41, 67.78, 68.16, 68.53, 68.90, 69.28, 69.65, 70.02, 70.40, 70.77, 71.14, 71.51, 71.88, 72.25, 72.62, 73.00, 73.37, 73.74, 74.11, 74.48, 74.84, 75.21, 75.58, 75.95, 76.32, 76.69, 77.06, 77.42, 77.79, 78.16, 78.53, 78.89, 79.26, 79.62, 79.99, 80.36, 80.72, 81.09, 81.45, 81.82, 82.18, 82.55, 82.91, 83.27, 83.64, 84.00, 84.36, 84.73, 85.09, 85.45, 85.81, 86.17, 86.54, 86.90, 87.26, 87.62, 87.98, 88.34, 88.70, 89.06, 89.42, 89.78, 90.14, 90.50, 90.86, 91.21, 91.57, 91.93, 92.29, 92.65, 93.00, 93.36, 93.72, 94.07, 94.43, 94.79, 95.14, 95.50, 95.85}, -{44.36, 44.74, 45.13, 45.51, 45.90, 46.28, 46.67, 47.05, 47.44, 47.82, 48.21, 48.59, 48.97, 49.36, 49.74, 50.12, 50.50, 50.89, 51.27, 51.65, 52.03, 52.41, 52.79, 53.17, 53.55, 53.93, 54.31, 54.69, 55.07, 55.45, 55.83, 56.21, 56.59, 56.96, 57.34, 57.72, 58.10, 58.47, 58.85, 59.23, 59.60, 59.98, 60.35, 60.73, 61.11, 61.48, 61.85, 62.23, 62.60, 62.98, 63.35, 63.72, 64.10, 64.47, 64.84, 65.22, 65.59, 65.96, 66.33, 66.70, 67.07, 67.44, 67.82, 68.19, 68.56, 68.93, 69.30, 69.66, 70.03, 70.40, 70.77, 71.14, 71.51, 71.88, 72.24, 72.61, 72.98, 73.34, 73.71, 74.08, 74.44, 74.81, 75.18, 75.54, 75.91, 76.27, 76.64, 77.00, 77.36, 77.73, 78.09, 78.46, 78.82, 79.18, 79.55, 79.91, 80.27, 80.63, 80.99, 81.36, 81.72, 82.08, 82.44, 82.80, 83.16, 83.52, 83.88, 84.24, 84.60, 84.96, 85.32, 85.68, 86.03, 86.39, 86.75, 87.11, 87.47, 87.82, 88.18, 88.54, 88.89, 89.25, 89.61, 89.96, 90.32, 90.67, 91.03, 91.38, 91.74, 92.09, 92.45, 92.80, 93.16, 93.51, 93.86, 94.22, 94.57, 94.92, 95.27, 95.63} -}; \ No newline at end of file diff --git a/app/gl_transform_table.h b/app/gl_transform_table.h deleted file mode 100644 index 3b43503..0000000 --- a/app/gl_transform_table.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef TRANSFORM_TABLE_H_ -#define TRANSFORM_TABLE_H_ - -#include "zf_common_headfile.h" - - -extern const float InverseMapH[80][140] ; -extern const float InverseMapW[80][140] ; -void transform(float X, float Y, int* x, int* y); - - -#endif /* TRANSFORM_TABLE_H_ */ - - diff --git a/app/isr.c b/app/isr.c index 63f2687..05e77ac 100644 --- a/app/isr.c +++ b/app/isr.c @@ -42,7 +42,6 @@ #include "jj_motion.h" #include "jj_blueteeth.h" -#include "jj_blueteeth.h" void NMI_Handler(void) __attribute__((interrupt())); void HardFault_Handler(void) __attribute__((interrupt())); @@ -279,7 +278,7 @@ void TIM1_UP_IRQHandler(void) if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM1, TIM_IT_Update); - sport_motion2(bt_fly); + sport_motion(); } } @@ -314,7 +313,8 @@ void TIM5_IRQHandler(void) void TIM6_IRQHandler(void) { if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) { - ICM_getEulerianAngles(); + //ICM_getEulerianAngles(); + imu660ra_get_gyro(); TIM_ClearITPendingBit(TIM6, TIM_IT_Update); } } diff --git a/app/jj_blueteeth.c b/app/jj_blueteeth.c index 7e47f67..dae432e 100644 --- a/app/jj_blueteeth.c +++ b/app/jj_blueteeth.c @@ -3,21 +3,17 @@ #include "by_fan_control.h" bool bt_rx_flag = false; uint8 bt_buffer; // 接收字符存入 -float bt_angle = 0.0f; uint32_t bt_run_flag = 0; -uint8_t bt_flow_flag = 0; +uint8_t bt_fly_flag = 0; +uint32_t bt_run = 0; uint32_t bt_fly = 0; -uint32_t bt_flow = 0; enum bt_order { - Start_work = 0x01, - Turn_Left = 0x02, - Turn_Right = 0x03, - Speed_up = 0x04, - Speed_down = 0x05, - Stop_fly = 0x06, - Flow_on = 0x08, - Flow_up = 0x09, - Flow_down = 0x10, + Fly_ctrl = 0x01, // 起飞转换 + Fly_up = 0x02, // 起飞程度增加 + Fly_dowm = 0x03, // 起飞程度减小 + Speed_up = 0x04, // 加速 + Speed_down = 0x05, // 减速 + Speed_ctrl = 0x06, // 速度开关 }; /** * @brief 蓝牙初始化 @@ -36,41 +32,27 @@ void jj_bt_run() { if (bt_rx_flag) { switch (bt_buffer) { - case Start_work: - bt_angle = 0.0f; + case Fly_ctrl: + bt_fly_flag = !bt_fly_flag; break; - case Turn_Left: - bt_angle = 10.0f; + case Speed_ctrl: + bt_run_flag = !bt_run_flag; break; - case Turn_Right: - bt_angle = -10.0f; + case Fly_up: + bt_fly += 10; break; - case Speed_down: + case Fly_dowm: bt_fly -= 10; break; case Speed_up: - bt_fly += 10; + bt_run += 10; break; - case Stop_fly: - bt_run_flag = !bt_run_flag; - break; - case Flow_on: - bt_flow_flag = !bt_flow_flag; - break; - case Flow_up: - bt_flow += 20; - break; - case Flow_down: - bt_flow -= 20; + case Speed_down: + bt_run -= 10; break; default: break; } - - if (bt_flow_flag == 0) { - bt_flow = 0; - } - by_pwm_update_duty(bt_flow + 500, bt_flow + 500); bt_rx_flag = false; } } @@ -88,5 +70,4 @@ void bt_printf(const char *format, ...) ; USART_SendData((USART_TypeDef *)uart_index[UART_2], sbuf[i]); } - } \ No newline at end of file diff --git a/app/jj_blueteeth.h b/app/jj_blueteeth.h index 11f1a64..29f73ac 100644 --- a/app/jj_blueteeth.h +++ b/app/jj_blueteeth.h @@ -2,12 +2,12 @@ #define _JJ_BLUETEETH_H_ #include "stdio.h" #include "zf_driver_uart.h" - extern bool bt_rx_flag; -extern uint8_t bt_buffer; -extern uint32_t bt_fly; +extern uint8 bt_buffer; // 接收字符存入 extern uint32_t bt_run_flag; -extern float bt_angle; +extern uint8_t bt_fly_flag; +extern uint32_t bt_run; +extern uint32_t bt_fly; void jj_bt_init(); void jj_bt_run(); void bt_printf(const char *format, ...); diff --git a/app/jj_motion.c b/app/jj_motion.c index 3dbdb66..2aa33e7 100644 --- a/app/jj_motion.c +++ b/app/jj_motion.c @@ -1,44 +1,80 @@ #include "jj_motion.h" #include "by_fan_control.h" #include "by_imu.h" -#include "../3rd-lib/PID-Library/pid.h" #include "jj_blueteeth.h" -#include "gl_common.h" -PID_TypeDef angle_pid; -PID_TypeDef gyro_z_pid; -PID_TypeDef img_x_pid; +#include "../3rd-lib/PID-Library/pid.h" +#include "zf_driver_encoder.h" + +PID_TypeDef far_angle_pid; +PID_TypeDef far_gyro_pid; +PID_TypeDef near_pos_pid; +PID_TypeDef speed_pid; + float an_Kp = 8.0f; -float an_Ki = 0.0f; +float an_Ki = 1.0f; float an_Kd = 2.0f; -float im_Kp = 1.0f; -float im_Ki = 0.0f; -float im_Kd = 0.0f; -float set_x = 0.0f; -float img_x = 40.0f; -float yaw0 = 0; -float out_M = 0; -float out_yaw; -uint32_t cnt1 = 0; +float in_angle; +float set_angle = 0.0f; +float out_angle; + +float gy_Kp = 1.0f; +float gy_Ki = 0.0f; +float gy_Kd = 0.0f; +float in_gyro; +float out_gyro; +//float set_gyro = 0.0f; + +float po_Kp = 1.0f; +float po_Ki = 0.0f; +float po_Kd = 0.0f; +float in_pos; +float out_pos; +float set_pos = 0.0f; + +float sp_Kp = 1.0f; +float sp_Ki = 0.0f; +float sp_Kd = 0.0f; +float in_speed; +float out_speed; +float set_speed = 0.0f; + /** * @brief * - * @param fy y轴的加速度 */ -void sport_motion2(uint32_t fy) +int cnt1 = 0; +void sport_motion(void) { + cnt1++; - yaw0 = imu660ra_gyro_z; - if (cnt1 >= 50) { - PID_Compute(&angle_pid); + in_gyro = imu660ra_gyro_z; // 陀螺仪输入 + in_angle = 0; // 图像远端输入 + in_pos = 0; // 图像近端输入 + in_speed = encoder_get_count(TIM5_ENCOEDER) / 1024 / 0.01 * 0.25; // 速度输入,m/s + encoder_clear_count(TIM5_ENCOEDER); // 清除计数 + PID_Compute(&far_gyro_pid); + + if (cnt1 >= 10) { + PID_Compute(&far_angle_pid); + PID_Compute(&speed_pid); cnt1 = 0; } - PID_Compute(&gyro_z_pid); + + PID_Compute(&near_pos_pid); + if (bt_run_flag == 1) { - by_pwm_power_duty((int32_t)(500 + fy + out_M), (int32_t)(500 + fy - out_M), - (int32_t)(500 + fy + out_M), (int32_t)(500 + fy - out_M)); + by_pwm_power_duty((int32_t)(500 + out_pos + out_gyro), + (int32_t)(500 - out_pos - out_gyro), + (int32_t)(500 + out_speed + out_gyro), + (int32_t)(500 + out_speed - out_gyro)); } else { by_pwm_power_duty(500, 500, 500, 500); } + if (bt_fly_flag == 0) { + bt_fly = 0; + } + + by_pwm_update_duty(bt_fly + 500, bt_fly + 500); } /** * @brief 结构体初始化 @@ -47,14 +83,25 @@ void sport_motion2(uint32_t fy) void sport_pid_init() { - PID(&angle_pid, &bt_angle, &out_yaw, &set_x, im_Kp, im_Ki, im_Kd, 0, 0); - PID(&gyro_z_pid, &yaw0, &out_M, &out_yaw, an_Kp, an_Ki, an_Kd, 1, 1); - PID_Init(&angle_pid); - PID_Init(&gyro_z_pid); + PID(&far_angle_pid, &in_angle, &out_angle, &set_angle, an_Kp, an_Ki, an_Kd, 0, 0); + PID(&far_gyro_pid, &in_gyro, &out_gyro, &out_angle, gy_Kp, gy_Ki, gy_Kd, 1, 1); + PID_Init(&far_angle_pid); + PID_Init(&far_gyro_pid); - PID_SetOutputLimits(&angle_pid, -500.0f, 500.0f); - PID_SetOutputLimits(&gyro_z_pid, -400.0f, 400.0f); + PID_SetOutputLimits(&far_angle_pid, -500.0f, 500.0f); + PID_SetOutputLimits(&far_gyro_pid, -500.0f, 500.0f); - PID_SetMode(&gyro_z_pid, 1); - PID_SetMode(&angle_pid, 1); + PID_SetMode(&far_gyro_pid, 1); + PID_SetMode(&far_angle_pid, 1); + + PID(&near_pos_pid, &in_pos, &out_pos, &set_pos, po_Kp, po_Ki, po_Kd, 0, 0); + PID(&speed_pid, &in_speed, &out_speed, &out_speed, sp_Kp, sp_Ki, sp_Kd, 1, 1); + PID_Init(&near_pos_pid); + PID_Init(&speed_pid); + + PID_SetOutputLimits(&near_pos_pid, -500.0f, 500.0f); + PID_SetOutputLimits(&speed_pid, -400.0f, 400.0f); + + PID_SetMode(&near_pos_pid, 1); + PID_SetMode(&speed_pid, 1); } diff --git a/app/jj_motion.h b/app/jj_motion.h index 2b4b1c2..5cc6af7 100644 --- a/app/jj_motion.h +++ b/app/jj_motion.h @@ -2,17 +2,35 @@ #define _JJ_MOTION_H_ #include "ch32v30x.h" #include "../3rd-lib/PID-Library/pid.h" -extern PID_TypeDef angle_pid; -extern PID_TypeDef gyro_z_pid; + extern float an_Kp; extern float an_Ki; extern float an_Kd; -extern float im_Kp; -extern float im_Ki; -extern float im_Kd; -extern float out_M; -extern float out_yaw; -extern float yaw0; +extern float in_angle; +extern float set_angle; +extern float out_angle; + +extern float gy_Kp; +extern float gy_Ki; +extern float gy_Kd; +extern float in_gyro; +extern float out_gyro; +extern float set_gyro; + +extern float po_Kp; +extern float po_Ki; +extern float po_Kd; +extern float in_pos; +extern float out_pos; +extern float set_pos; + +extern float sp_Kp; +extern float sp_Ki; +extern float sp_Kd; +extern float in_speed; +extern float out_speed; +extern float set_speed; + void sport_pid_init(); -void sport_motion2(uint32_t fy); +void sport_motion(void); #endif \ No newline at end of file diff --git a/app/jj_param.c b/app/jj_param.c index a2a9b94..26b4315 100644 --- a/app/jj_param.c +++ b/app/jj_param.c @@ -3,23 +3,71 @@ #include "./page/page.h" #include "zf_common_headfile.h" #include "jj_motion.h" + PARAM_INFO Param_Data[DATA_NUM]; soft_iic_info_struct eeprom_param; TYPE_UNION iic_buffer[DATA_IN_FLASH_NUM]; -void jj_param_eeprom_init() +/** + * @brief 参数初始化注册 + * + */ +void jj_param_eeprom_init(void) { soft_iic_init(&eeprom_param, K24C02_DEV_ADDR, K24C02_SOFT_IIC_DELAY, K24C02_SCL_PIN, K24C02_SDA_PIN); // eeprom初始化 - PARAM_REG(angle_Kp, &an_Kp, EFLOAT, 1, "an_P"); // 注冊 - PARAM_REG(angle_Ki, &an_Ki, EFLOAT, 1, "an_I"); // 注冊 - PARAM_REG(angle_Kd, &an_Kd, EFLOAT, 1, "an_D"); // 注冊 - PARAM_REG(imgax_Kp, &im_Kp, EFLOAT, 1, "im_P"); // 注冊 - PARAM_REG(imgax_Ki, &im_Ki, EFLOAT, 1, "im_I"); // 注冊 - PARAM_REG(imgax_Kd, &im_Kd, EFLOAT, 1, "im_D"); // 注冊 - for (uint8 i = 0; i < DATA_IN_FLASH_NUM; i++) { + PARAM_REG(angle_Kp, &an_Kp, EFLOAT, 1, "an_P:"); // 注冊 + PARAM_REG(angle_Ki, &an_Ki, EFLOAT, 1, "an_I:"); // 注冊 + PARAM_REG(angle_Kd, &an_Kd, EFLOAT, 1, "an_D:"); - soft_iic_read_8bit_registers(&eeprom_param, 4 * i, (uint8 *)&iic_buffer[i], 4); + PARAM_REG(gyro_Kp, &gy_Kp, EFLOAT, 1, "im_P:"); // 注冊 + PARAM_REG(gyro_Ki, &gy_Ki, EFLOAT, 1, "im_I:"); // 注冊 + PARAM_REG(gyro_Kd, &gy_Kd, EFLOAT, 1, "im_D:"); + + PARAM_REG(speed_Kp, &sp_Kp, EFLOAT, 1, "sp_P:"); // 注冊 + PARAM_REG(speed_Ki, &sp_Ki, EFLOAT, 1, "sp_I:"); // 注冊 + PARAM_REG(speed_Kd, &sp_Kd, EFLOAT, 1, "sp_D:"); + + PARAM_REG(pos_Kp, &po_Kp, EFLOAT, 1, "po_P:"); // 注冊 + PARAM_REG(pos_Ki, &po_Ki, EFLOAT, 1, "po_I:"); // 注冊 + PARAM_REG(pos_Kd, &po_Kd, EFLOAT, 1, "po_D:"); + + PARAM_REG(param_set_speed, &set_speed, EFLOAT, 1, "rate:"); + jj_param_read(); // 注冊 +} +/** + * @brief 参数写入 + * + */ +void jj_param_write(void) +{ + for (uint8 i = 0; i < DATA_IN_FLASH_NUM-1; i++) { + switch (Param_Data[i].type) { + case EFLOAT: + iic_buffer[i].f32 = *((float *)(Param_Data[i].p_data)); + break; + case EUINT32: + iic_buffer[i].u32 = *((uint32 *)(Param_Data[i].p_data)); + break; + case EINT32: + iic_buffer[i].s32 = *((int32 *)(Param_Data[i].p_data)); + break; + default: + break; + } + eep_soft_iic_write_8bit_registers(&eeprom_param, (4 * i) >> 8, (4 * i), (uint8 *)&iic_buffer[i], 4); + system_delay_ms(10); + } +} +/** + * @brief 参数读出 + * + */ +void jj_param_read(void) +{ + for (uint8 i = 0; i < DATA_IN_FLASH_NUM-1; i++) { + + eep_soft_iic_read_8bit_registers(&eeprom_param, (4 * i) >> 8, (4 * i), (uint8 *)&iic_buffer[i], 4); switch (Param_Data[i].type) { case EFLOAT: *((float *)(Param_Data[i].p_data)) = @@ -39,27 +87,3 @@ void jj_param_eeprom_init() system_delay_ms(10); } } -/** - * @brief 参数更新 - * - */ -void jj_param_update() -{ - for (uint8 i = 0; i < DATA_IN_FLASH_NUM; i++) { - switch (Param_Data[i].type) { - case EFLOAT: - iic_buffer[i].f32 = *((float *)(Param_Data[i].p_data)); - break; - case EUINT32: - iic_buffer[i].u32 = *((uint32 *)(Param_Data[i].p_data)); - break; - case EINT32: - iic_buffer[i].s32 = *((int32 *)(Param_Data[i].p_data)); - break; - default: - break; - } - soft_iic_write_8bit_registers(&eeprom_param, 4 * i, (uint8 *)&iic_buffer[i], 4); - system_delay_ms(10); - } -} diff --git a/app/jj_param.h b/app/jj_param.h index 3fbe8bb..b2c637c 100644 --- a/app/jj_param.h +++ b/app/jj_param.h @@ -6,23 +6,37 @@ #include "zf_driver_soft_iic.h" /** * @brief 注册需调参数 - * + * */ -#define PARAM_REG(_data_tag_, _p_data_, _type_, _cmd_,_text_) \ - Param_Data[_data_tag_].p_data = (void *)_p_data_; \ - Param_Data[_data_tag_].type = _type_; \ - Param_Data[_data_tag_].cmd = _cmd_; \ +#define PARAM_REG(_data_tag_, _p_data_, _type_, _cmd_, _text_) \ + Param_Data[_data_tag_].p_data = (void *)_p_data_; \ + Param_Data[_data_tag_].type = _type_; \ + Param_Data[_data_tag_].cmd = _cmd_; \ Param_Data[_data_tag_].text = _text_; - + typedef enum { - DATA_HEAD = -1, - angle_Kp, + + Page1_head = 0, + + angle_Kp = Page1_head, angle_Ki, angle_Kd, - imgax_Kp, - imgax_Ki, - imgax_Kd, + gyro_Kp, + gyro_Ki, + gyro_Kd, + speed_Kp, + speed_Ki, + speed_Kd, + pos_Kp, + pos_Ki, + pos_Kd, + param_set_speed, + + Page2_head, DATA_IN_FLASH_NUM, + + delta_x, + delta_y, DATA_NUM, } data_tag_t; @@ -30,26 +44,27 @@ typedef enum { EUINT32, EINT32, EFLOAT, -}ENUM_TYPE; +} ENUM_TYPE; -typedef union{ +typedef union { uint32_t u32; int32_t s32; float f32; uint8_t u8; -}TYPE_UNION; +} TYPE_UNION; typedef struct { void *p_data; ENUM_TYPE type; - uint8_t cmd; + uint8_t cmd; // 01:仅存储 00:仅显示 02:传输并显示 char *text; -}PARAM_INFO; +} PARAM_INFO; extern soft_iic_info_struct eeprom_param; extern PARAM_INFO Param_Data[DATA_NUM]; extern TYPE_UNION iic_buffer[DATA_IN_FLASH_NUM]; -void jj_param_eeprom_init(); -void jj_param_update(); -void jj_param_show(); +void jj_param_eeprom_init(void); +void jj_param_write(void); +void jj_param_read(void); +extern float data7; #endif \ No newline at end of file diff --git a/app/main.c b/app/main.c index 73a71b9..6e73ad0 100644 --- a/app/main.c +++ b/app/main.c @@ -25,8 +25,6 @@ #include "page.h" #include "page_ui_widget.h" -#include "gl_headfile.h" - #include "jj_param.h" #include "jj_motion.h" #include "jj_blueteeth.h" @@ -43,26 +41,31 @@ int main(void) system_delay_init(); debug_init(); + encoder_dir_init(TIM5_ENCOEDER, TIM5_ENCOEDER_MAP0_CH1_A0, TIM5_ENCOEDER_MAP0_CH2_A1); ips200_init(IPS200_TYPE_SPI); - + while (imu660ra_init()) + ; + jj_param_eeprom_init(); + jj_bt_init(); by_rb_init(); by_pwm_init(); - by_buzzer_init(); - by_tiny_frame_init(); + // by_buzzer_init(); + by_tiny_frame_init(); Page_Init(); + sport_pid_init(); + + pit_ms_init(TIM6_PIT, 10); // 陀螺仪 + pit_ms_init(TIM1_PIT, 1); // 运动解算,bianmaqi printf("ok\r\n"); while (1) { - by_buzzer_run(); Page_Run(); - + //by_buzzer_run(); + jj_bt_run(); /** 测试完成后移除 **/ by_tiny_frame_run(); - // by_tiny_frame_pack_send(&frame_now); system_delay_ms(10); - by_tiny_frame_parse_timer_handle(); - /** 测试完成后移除 **/ } } diff --git a/app/page/page.c b/app/page/page.c index 794ddaa..031005c 100644 --- a/app/page/page.c +++ b/app/page/page.c @@ -124,7 +124,7 @@ void Page_Run(void) void Page_Init(void) { PAGE_REG(page_menu); - PAGE_REG(page_rtcam); + // PAGE_REG(page_rtcam); PAGE_REG(page_param); // PAGE_REG(page_argv); // PAGE_REG(page_sys); diff --git a/app/page/page.h b/app/page/page.h index f65d8bf..521b003 100644 --- a/app/page/page.h +++ b/app/page/page.h @@ -19,7 +19,7 @@ enum PageID { PAGE_NULL = -1, //...... page_menu, - page_rtcam, + //page_rtcam, page_param, // page_argv, // page_sys, diff --git a/app/page/page_param.c b/app/page/page_param.c index 40dc086..ef8d0f4 100644 --- a/app/page/page_param.c +++ b/app/page/page_param.c @@ -2,6 +2,7 @@ #include "page_ui_widget.h" #include "jj_motion.h" #include "page.h" +#include #define LINE_HEAD 0 #define LINE_END DATA_NUM - 2 @@ -25,14 +26,14 @@ static void Setup() { ips200_clear(); Print_Curser(Curser, Curser_Last, RGB565_PURPLE); - for (int16 i = 0; i < DATA_NUM - 1; i++) { - ips200_show_string(10, i * 18 + 2, Param_Data[i].text); + for (int16 i = 0; i < DATA_IN_FLASH_NUM - 1; i++) { + ips200_show_string(0, i * 18 + 2, Param_Data[i].text); if (Param_Data[i].type == EINT32) ips200_show_int(50, i * 18 + 2, *((int32 *)(Param_Data[i].p_data)), 5); else if (Param_Data[i].type == EFLOAT) ips200_show_float(50, i * 18 + 2, *((float *)(Param_Data[i].p_data)), 4, 5); } - ips200_show_int(50, (DATA_NUM-1)* 18 + 2, index_power, 5); + ips200_show_int(50, (DATA_IN_FLASH_NUM-1)* 18 + 2, index_power, 5); } @@ -74,7 +75,7 @@ static void Event(page_event event) Print_Curser(Curser, Curser_Last, RGB565_RED); return; } else if (page_event_press_long == event) { - jj_param_update(); + jj_param_write(); sport_pid_init(); Page_Shift(page_menu); return; diff --git a/app/page/page_rtcam.c b/app/page/page_rtcam.c deleted file mode 100644 index 7b479bd..0000000 --- a/app/page/page_rtcam.c +++ /dev/null @@ -1,91 +0,0 @@ -#include "zf_common_headfile.h" -#include "page_ui_widget.h" -#include "page.h" - -#define LINE_HEAD 11 -#define LINE_END 16 - -static char Text[] = "RealTime Image"; - -static int8_t Curser = LINE_HEAD; // 定义光标位置 -static int8_t Curser_Last = LINE_HEAD; // 定义光标位置 -/*************************************************************************************** - * - * 以下为页面模板函数 - * - ***************************************************************************************/ - -/** - * @brief 页面初始化事件 - * @param 无 - * @retval 无 - */ -static void Setup() -{ - ips200_clear(); - Print_Curser(Curser, Curser_Last,RGB565_PURPLE); -} - -/** - * @brief 页面退出事件 - * @param 无 - * @retval 无 - */ -static void Exit() -{ -} - -/** - * @brief 页面循环执行的内容 - * @param 无 - * @retval 无 - */ -static void Loop() -{ - Show_Marked_Image(); -} - -/** - * @brief 页面事件 - * @param btn:发出事件的按键 - * @param event:事件编号 - * @retval 无 - */ -static void Event(page_event event) -{ - Curser_Last = Curser; - - if (page_event_forward == event) { - Curser--; // 光标上移 - } else if (page_event_backward == event) { - Curser++; // 光标下移 - } else if (page_event_press_short == event) { - - } else if (page_event_press_long == event) { - Page_Shift(page_menu); - } - - if (Curser < LINE_HEAD) { - Curser = LINE_END; - } else if (Curser > LINE_END) { - Curser = LINE_HEAD; - } - - Print_Curser(Curser, Curser_Last,RGB565_PURPLE); -} - -/** - * @brief 页面注册函数 - * - * @param pageID - */ -void PageRegister_page_rtcam(unsigned char pageID) -{ - Page_Register(pageID, Text, Setup, Loop, Exit, Event); -} - -/*************************************************************************************** - * - * 以下为页面自定义功能函数 - * - ***************************************************************************************/ diff --git a/app/page/page_ui_widget.c b/app/page/page_ui_widget.c index e4e7f77..98f84e9 100644 --- a/app/page/page_ui_widget.c +++ b/app/page/page_ui_widget.c @@ -1,6 +1,6 @@ #include "page_ui_widget.h" #include "zf_common_headfile.h" -#include "gl_data.h" + /** * @brief 绘制光标 @@ -137,57 +137,57 @@ void Set_Vaule(ITEM *item, uint8_t item_num, float step) // } } -void Show_Marked_Image(void) -{ -#define IMAGE_DISPLAY_WIDTH (230U) -#define IMAGE_DISPLAY_HEIGHT (146U) -#define START_X ((240U - IMAGE_DISPLAY_WIDTH) / 2U) -#define START_Y (16U) +// void Show_Marked_Image(void) +// { +// #define IMAGE_DISPLAY_WIDTH (230U) +// #define IMAGE_DISPLAY_HEIGHT (146U) +// #define START_X ((240U - IMAGE_DISPLAY_WIDTH) / 2U) +// #define START_Y (16U) - float horizontal_zoom_rate = ((float)(IMAGE_DISPLAY_WIDTH)) / ((float)(MT9V03X_W)); - float vertical_zoom_rate = ((float)(IMAGE_DISPLAY_HEIGHT)) / ((float)(MT9V03X_H)); +// float horizontal_zoom_rate = ((float)(IMAGE_DISPLAY_WIDTH)) / ((float)(MT9V03X_W)); +// float vertical_zoom_rate = ((float)(IMAGE_DISPLAY_HEIGHT)) / ((float)(MT9V03X_H)); - ips200_show_gray_image(START_X, START_Y, mt9v03x_image_copy[0], MT9V03X_W, MT9V03X_H, IMAGE_DISPLAY_WIDTH, IMAGE_DISPLAY_HEIGHT, 0); - ips200_draw_frame(START_X - 3, START_Y - 3, START_X + IMAGE_DISPLAY_WIDTH + 2, START_Y + IMAGE_DISPLAY_HEIGHT + 2, 2, RGB565_BLUE); - // 确认边线数组在显示前不会清空 - for (uint i = 0; i < PT_MAXLEN; i++) { - //寻近线逆透视后边线数组 - uint16_t l_x = START_X + (uint16_t)((float)pts_inv_r[i][1] * horizontal_zoom_rate); - uint16_t l_y = START_Y + (uint16_t)((float)pts_inv_r[i][0] * vertical_zoom_rate); - uint16_t r_x = START_X + (uint16_t)((float)pts_inv_l[i][1] * horizontal_zoom_rate); - uint16_t r_y = START_Y + (uint16_t)((float)pts_inv_l[i][0] * vertical_zoom_rate); - //寻远线逆透视后边线数组 - uint16_t far_l_x = START_X + (uint16_t)((float)pts_far_inv_r[i][1] * horizontal_zoom_rate); - uint16_t far_l_y = START_Y + (uint16_t)((float)pts_far_inv_r[i][0] * vertical_zoom_rate); - uint16_t far_r_x = START_X + (uint16_t)((float)pts_far_inv_l[i][1] * horizontal_zoom_rate); - uint16_t far_r_y = START_Y + (uint16_t)((float)pts_far_inv_l[i][0] * vertical_zoom_rate); - //寻近线中线数组 - uint16_t mid_x_l = START_X + (uint16_t)(mid_left[i][1] * horizontal_zoom_rate); - uint16_t mix_y_l = START_Y + (uint16_t)(mid_left[i][0] * vertical_zoom_rate); - uint16_t mid_x_r = START_X + (uint16_t)(mid_right[i][1] * horizontal_zoom_rate); - uint16_t mix_y_r = START_Y + (uint16_t)(mid_right[i][0] * vertical_zoom_rate); +// ips200_show_gray_image(START_X, START_Y, mt9v03x_image_copy[0], MT9V03X_W, MT9V03X_H, IMAGE_DISPLAY_WIDTH, IMAGE_DISPLAY_HEIGHT, 0); +// ips200_draw_frame(START_X - 3, START_Y - 3, START_X + IMAGE_DISPLAY_WIDTH + 2, START_Y + IMAGE_DISPLAY_HEIGHT + 2, 2, RGB565_BLUE); +// // 确认边线数组在显示前不会清空 +// for (uint i = 0; i < PT_MAXLEN; i++) { +// //寻近线逆透视后边线数组 +// uint16_t l_x = START_X + (uint16_t)((float)pts_inv_r[i][1] * horizontal_zoom_rate); +// uint16_t l_y = START_Y + (uint16_t)((float)pts_inv_r[i][0] * vertical_zoom_rate); +// uint16_t r_x = START_X + (uint16_t)((float)pts_inv_l[i][1] * horizontal_zoom_rate); +// uint16_t r_y = START_Y + (uint16_t)((float)pts_inv_l[i][0] * vertical_zoom_rate); +// //寻远线逆透视后边线数组 +// uint16_t far_l_x = START_X + (uint16_t)((float)pts_far_inv_r[i][1] * horizontal_zoom_rate); +// uint16_t far_l_y = START_Y + (uint16_t)((float)pts_far_inv_r[i][0] * vertical_zoom_rate); +// uint16_t far_r_x = START_X + (uint16_t)((float)pts_far_inv_l[i][1] * horizontal_zoom_rate); +// uint16_t far_r_y = START_Y + (uint16_t)((float)pts_far_inv_l[i][0] * vertical_zoom_rate); +// //寻近线中线数组 +// uint16_t mid_x_l = START_X + (uint16_t)(mid_left[i][1] * horizontal_zoom_rate); +// uint16_t mix_y_l = START_Y + (uint16_t)(mid_left[i][0] * vertical_zoom_rate); +// uint16_t mid_x_r = START_X + (uint16_t)(mid_right[i][1] * horizontal_zoom_rate); +// uint16_t mix_y_r = START_Y + (uint16_t)(mid_right[i][0] * vertical_zoom_rate); - //近线数组显示 - ips200_draw_rect(l_x, l_y, l_x + 2, l_y, RGB565_RED); - ips200_draw_rect(r_x - 2, r_y, r_x, r_y, RGB565_BLUE); +// //近线数组显示 +// ips200_draw_rect(l_x, l_y, l_x + 2, l_y, RGB565_RED); +// ips200_draw_rect(r_x - 2, r_y, r_x, r_y, RGB565_BLUE); - //远线数组显示 - //ips200_draw_rect(far_l_x, far_l_y, far_l_x + 2, far_l_y, RGB565_RED); - //ips200_draw_rect(far_r_x - 2, far_r_y, far_r_x, far_r_y, RGB565_BLUE); +// //远线数组显示 +// //ips200_draw_rect(far_l_x, far_l_y, far_l_x + 2, far_l_y, RGB565_RED); +// //ips200_draw_rect(far_r_x - 2, far_r_y, far_r_x, far_r_y, RGB565_BLUE); - //中线数组显示 - ips200_draw_rect(mid_x_l, mix_y_l, mid_x_l + 2, mix_y_l, RGB565_BLACK); - ips200_draw_rect(mid_x_r, mix_y_r, mid_x_r + 2, mix_y_r, RGB565_BLUE); +// //中线数组显示 +// ips200_draw_rect(mid_x_l, mix_y_l, mid_x_l + 2, mix_y_l, RGB565_BLACK); +// ips200_draw_rect(mid_x_r, mix_y_r, mid_x_r + 2, mix_y_r, RGB565_BLUE); - // ips200_draw_point(START_X + (uint16_t)((float)pts_right[i][1] * horizontal_zoom_rate), START_Y + (uint16_t)((float)pts_right[i][0] * vertical_zoom_rate), RGB565_GREEN); - // ips200_draw_point(START_X + (uint16_t)((float)pts_right[i][1] * horizontal_zoom_rate) - 1, START_Y + (uint16_t)((float)pts_right[i][0] * vertical_zoom_rate), RGB565_GREEN); - // ips200_draw_point(START_X + (uint16_t)((float)pts_left[i][1] * horizontal_zoom_rate), START_Y + (uint16_t)((float)pts_left[i][0] * vertical_zoom_rate), RGB565_YELLOW); - // ips200_draw_point(START_X + (uint16_t)((float)pts_left[i][1] * horizontal_zoom_rate) + 1, START_Y + (uint16_t)((float)pts_left[i][0] * vertical_zoom_rate), RGB565_YELLOW); - } -#undef IMAGE_DISPLAY_WIDTH -#undef START_X -#undef START_Y -} +// // ips200_draw_point(START_X + (uint16_t)((float)pts_right[i][1] * horizontal_zoom_rate), START_Y + (uint16_t)((float)pts_right[i][0] * vertical_zoom_rate), RGB565_GREEN); +// // ips200_draw_point(START_X + (uint16_t)((float)pts_right[i][1] * horizontal_zoom_rate) - 1, START_Y + (uint16_t)((float)pts_right[i][0] * vertical_zoom_rate), RGB565_GREEN); +// // ips200_draw_point(START_X + (uint16_t)((float)pts_left[i][1] * horizontal_zoom_rate), START_Y + (uint16_t)((float)pts_left[i][0] * vertical_zoom_rate), RGB565_YELLOW); +// // ips200_draw_point(START_X + (uint16_t)((float)pts_left[i][1] * horizontal_zoom_rate) + 1, START_Y + (uint16_t)((float)pts_left[i][0] * vertical_zoom_rate), RGB565_YELLOW); +// } +// #undef IMAGE_DISPLAY_WIDTH +// #undef START_X +// #undef START_Y +// } uint16_t rgb_gradient(uint16_t i) { diff --git a/app/tiny_frame/by_tiny_frame_slave_read_write.c b/app/tiny_frame/by_tiny_frame_slave_read_write.c index c0fd7c4..9344cb4 100644 --- a/app/tiny_frame/by_tiny_frame_slave_read_write.c +++ b/app/tiny_frame/by_tiny_frame_slave_read_write.c @@ -6,6 +6,8 @@ #include "by_tiny_frame_parse.h" #include "by_tiny_frame_pack.h" +#include "jj_motion.h" + void by_tiny_frame_read_write_run(void) { // empty @@ -26,13 +28,22 @@ void by_tiny_frame_read_write_handle(by_tf_parse_frame_t frame_s, uint8_t status switch (frame_s.cmd) { case 0x03: - // 添加查询接口,操作完成后应答 - frame_pack_s.data = 0XFFFFFFFF; // 示例 + // 添加查询接口,操作完成后应答,主机读取,这个是从机 + frame_pack_s.data = 0XFFFFFFFF; //it's useless just now by_tiny_frame_pack_send(&frame_pack_s); break; case 0x06: // 添加写入接口,操作完成后应答 - frame_pack_s.data = frame_s.data; + switch (frame_pack_s.reg_addr) { + case 0x00: + in_angle = (float)frame_s.data; + break; + case 0x01: + in_pos = (float)frame_s.data; + break; + default: + break; + } by_tiny_frame_pack_send(&frame_pack_s); break; default: diff --git a/libraries/sdk/Ld/Link.ld b/libraries/sdk/Ld/Link.ld index aa73cb2..4a580bd 100644 --- a/libraries/sdk/Ld/Link.ld +++ b/libraries/sdk/Ld/Link.ld @@ -1 +1,185 @@ -ENTRY( _start ) __stack_size = 2048; PROVIDE( _stack_size = __stack_size ); MEMORY { /* CH32V30x_D8C - CH32V305RB-CH32V305FB CH32V30x_D8 - CH32V303CB-CH32V303RB */ /* FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 128K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K */ /* CH32V30x_D8C - CH32V307VC-CH32V307WC-CH32V307RC CH32V30x_D8 - CH32V303VC-CH32V303RC FLASH + RAM supports the following configuration FLASH-192K + RAM-128K FLASH-224K + RAM-96K FLASH-256K + RAM-64K FLASH-288K + RAM-32K */ RAM (xrw) : ORIGIN = 0x20000040, LENGTH = 63K FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256K } SECTIONS { .init : { _sinit = .; . = ALIGN(4); KEEP(*(SORT_NONE(.init))) . = ALIGN(4); _einit = .; } >FLASH AT>FLASH .vector : { *(.vector); . = ALIGN(64); } >FLASH AT>FLASH .text : { . = ALIGN(4); *(.text) *(.text.*) *(.rodata) *(.rodata*) *(.glue_7) *(.glue_7t) *(.gnu.linkonce.t.*) . = ALIGN(4); } >FLASH AT>FLASH .fini : { KEEP(*(SORT_NONE(.fini))) . = ALIGN(4); } >FLASH AT>FLASH PROVIDE( _etext = . ); PROVIDE( _eitcm = . ); .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH AT>FLASH .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH AT>FLASH .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } >FLASH AT>FLASH .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } >FLASH AT>FLASH .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } >FLASH AT>FLASH .dalign : { . = ALIGN(4); PROVIDE(_data_vma = .); } >RAM AT>FLASH .dlalign : { . = ALIGN(4); PROVIDE(_data_lma = .); } >FLASH AT>FLASH .data : { *(.gnu.linkonce.r.*) *(.data .data.*) *(.gnu.linkonce.d.*) . = ALIGN(8); PROVIDE( __global_pointer$ = . + 0x800 ); *(.sdata .sdata.*) *(.sdata2.*) *(.gnu.linkonce.s.*) . = ALIGN(8); *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata .srodata.*) . = ALIGN(4); PROVIDE( _edata = .); } >RAM AT>FLASH .bss : { . = ALIGN(4); PROVIDE( _sbss = .); *(.sbss*) *(.gnu.linkonce.sb.*) *(.bss*) *(.gnu.linkonce.b.*) *(COMMON*) . = ALIGN(4); PROVIDE( _ebss = .); } >RAM AT>FLASH PROVIDE( _end = _ebss); PROVIDE( end = . ); .stack ORIGIN(RAM) + LENGTH(RAM) - __stack_size : { PROVIDE( _heap_end = . ); . = ALIGN(4); PROVIDE(_susrstack = . ); . = . + __stack_size; PROVIDE( _eusrstack = .); } >RAM } \ No newline at end of file +ENTRY( _start ) + +__stack_size = 2048; + +PROVIDE( _stack_size = __stack_size ); + + +MEMORY +{ +/* CH32V30x_D8C - CH32V305RB-CH32V305FB + CH32V30x_D8 - CH32V303CB-CH32V303RB +*/ +/* + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 128K + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K +*/ + +/* CH32V30x_D8C - CH32V307VC-CH32V307WC-CH32V307RC + CH32V30x_D8 - CH32V303VC-CH32V303RC + FLASH + RAM supports the following configuration + FLASH-192K + RAM-128K + FLASH-224K + RAM-96K + FLASH-256K + RAM-64K + FLASH-288K + RAM-32K +*/ + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 288K +} + + +SECTIONS +{ + + .init : + { + _sinit = .; + . = ALIGN(4); + KEEP(*(SORT_NONE(.init))) + . = ALIGN(4); + _einit = .; + } >FLASH AT>FLASH + + .vector : + { + *(.vector); + . = ALIGN(64); + } >FLASH AT>FLASH + + .text : + { + . = ALIGN(4); + *(.text) + *(.text.*) + *(.rodata) + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t.*) + . = ALIGN(4); + } >FLASH AT>FLASH + + .fini : + { + KEEP(*(SORT_NONE(.fini))) + . = ALIGN(4); + } >FLASH AT>FLASH + + PROVIDE( _etext = . ); + PROVIDE( _eitcm = . ); + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH AT>FLASH + + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) + KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH AT>FLASH + + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) + KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH AT>FLASH + + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*crtbegin?.o(.ctors)) + /* We don't want to include the .ctor section from + the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } >FLASH AT>FLASH + + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*crtbegin?.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } >FLASH AT>FLASH + + .dalign : + { + . = ALIGN(4); + PROVIDE(_data_vma = .); + } >RAM AT>FLASH + + .dlalign : + { + . = ALIGN(4); + PROVIDE(_data_lma = .); + } >FLASH AT>FLASH + + .data : + { + *(.gnu.linkonce.r.*) + *(.data .data.*) + *(.gnu.linkonce.d.*) + . = ALIGN(8); + PROVIDE( __global_pointer$ = . + 0x800 ); + *(.sdata .sdata.*) + *(.sdata2.*) + *(.gnu.linkonce.s.*) + . = ALIGN(8); + *(.srodata.cst16) + *(.srodata.cst8) + *(.srodata.cst4) + *(.srodata.cst2) + *(.srodata .srodata.*) + . = ALIGN(4); + PROVIDE( _edata = .); + } >RAM AT>FLASH + + .bss : + { + . = ALIGN(4); + PROVIDE( _sbss = .); + *(.sbss*) + *(.gnu.linkonce.sb.*) + *(.bss*) + *(.gnu.linkonce.b.*) + *(COMMON*) + . = ALIGN(4); + PROVIDE( _ebss = .); + } >RAM AT>FLASH + + PROVIDE( _end = _ebss); + PROVIDE( end = . ); + + .stack ORIGIN(RAM) + LENGTH(RAM) - __stack_size : + { + PROVIDE( _heap_end = . ); + . = ALIGN(4); + PROVIDE(_susrstack = . ); + . = . + __stack_size; + PROVIDE( _eusrstack = .); + } >RAM + +} + + + diff --git a/libraries/zf_device/zf_device_imu660ra.c b/libraries/zf_device/zf_device_imu660ra.c index 15eb24c..34ca52a 100644 --- a/libraries/zf_device/zf_device_imu660ra.c +++ b/libraries/zf_device/zf_device_imu660ra.c @@ -228,7 +228,7 @@ uint8 imu660ra_init(void) #if IMU660RA_USE_SOFT_IIC soft_iic_init(&imu660ra_iic_struct, IMU660RA_DEV_ADDR, IMU660RA_SOFT_IIC_DELAY, IMU660RA_SCL_PIN, IMU660RA_SDA_PIN); // 配置 IMU660RA 的 IIC 端口 #else - spi_init(IMU660RA_SPI, SPI_MODE0, IMU660RA_SPI_SPEED, IMU660RA_SPC_PIN, IMU660RA_SDI_PIN, IMU660RA_SDO_PIN, SPI_CS_NULL); // 配置 IMU660RA 的 SPI 端口 + spi_init(IMU660RA_SPI, SPI_MODE0, IMU660RA_SPI_SPEED, IMU660RA_SPC_PIN, IMU660RA_SDI_PIN, IMU660RA_SDO_PIN, IMU660RA_CS_PIN); // 配置 IMU660RA 的 SPI 端口 gpio_init(IMU660RA_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // 配置 IMU660RA 的 CS 端口 imu660ra_read_register(IMU660RA_CHIP_ID); // 读取一下设备 ID 将设备设置为 SPI 模式 #endif diff --git a/libraries/zf_device/zf_device_imu660ra.h b/libraries/zf_device/zf_device_imu660ra.h index b3f22b4..a81e5d2 100644 --- a/libraries/zf_device/zf_device_imu660ra.h +++ b/libraries/zf_device/zf_device_imu660ra.h @@ -62,21 +62,21 @@ #if IMU660RA_USE_SOFT_IIC // 这两段 颜色正常的才是正确的 颜色灰的就是没有用的 //====================================================软件 IIC 驱动==================================================== #define IMU660RA_SOFT_IIC_DELAY (10) // 软件 IIC 的时钟延时周期 数值越小 IIC 通信速率越快 -#define IMU660RA_SCL_PIN (E7) // 软件 IIC SCL 引脚 连接 IMU660RA 的 SCL 引脚 -#define IMU660RA_SDA_PIN (E8) // 软件 IIC SDA 引脚 连接 IMU660RA 的 SDA 引脚 +#define IMU660RA_SCL_PIN (B3) // 软件 IIC SCL 引脚 连接 IMU660RA 的 SCL 引脚 +#define IMU660RA_SDA_PIN (B5) // 软件 IIC SDA 引脚 连接 IMU660RA 的 SDA 引脚 //====================================================软件 IIC 驱动==================================================== #else //====================================================硬件 SPI 驱动==================================================== #define IMU660RA_SPI_SPEED (10 * 1000 * 1000) // 硬件 SPI 速率 -#define IMU660RA_SPI SPI_3 // 硬件 SPI 号 -#define IMU660RA_SPC_PIN SPI3_MAP0_SCK_B3 // 硬件 SPI SCK 引脚 -#define IMU660RA_SDI_PIN SPI3_MAP0_MOSI_B5 // 硬件 SPI MOSI 引脚 -#define IMU660RA_SDO_PIN SPI3_MAP0_MISO_B4 // 硬件 SPI MISO 引脚 +#define IMU660RA_SPI SPI_1 // 硬件 SPI 号 +#define IMU660RA_SPC_PIN SPI1_MAP1_SCK_B3 // 硬件 SPI SCK 引脚 +#define IMU660RA_SDI_PIN SPI1_MAP1_MOSI_B5 // 硬件 SPI MOSI 引脚 +#define IMU660RA_SDO_PIN SPI1_MAP1_MISO_B4 // 硬件 SPI MISO 引脚 //====================================================硬件 SPI 驱动==================================================== #endif -#define IMU660RA_CS_PIN (C10) // CS 片选引脚 +#define IMU660RA_CS_PIN (B6) // CS 片选引脚 #define IMU660RA_CS(x) ((x) ? (gpio_high(IMU660RA_CS_PIN)) : (gpio_low(IMU660RA_CS_PIN))) typedef enum { diff --git a/libraries/zf_driver/zf_driver_soft_iic.c b/libraries/zf_driver/zf_driver_soft_iic.c index 61094df..bfe9668 100644 --- a/libraries/zf_driver/zf_driver_soft_iic.c +++ b/libraries/zf_driver/zf_driver_soft_iic.c @@ -1,43 +1,43 @@ /********************************************************************************************************************* -* CH32V307VCT6 Opensourec Library CH32V307VCT6 Դ⣩һڹٷ SDK ӿڵĵԴ -* Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļCH32V307VCT6 Դһ -* -* CH32V307VCT6 Դ -* Ըᷢ GPLGNU General Public License GNUͨù֤ -* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* -* Դķϣܷãδκεı֤ -* ûԻʺض;ı֤ -* ϸμ GPL -* -* ӦյԴͬʱյһ GPL ĸ -* ûУ -* -* ע -* Դʹ GPL3.0 Դ֤Э Ϊİ汾 -* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ -* ֤ libraries ļ ļµ LICENSE ļ -* ӭλʹò ޸ʱ뱣ɿƼİȨ -* -* ļ zf_driver_soft_iic -* ˾ ɶɿƼ޹˾ -* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* MounRiver Studio V1.8.1 -* ƽ̨ CH32V307VCT6 -* https://seekfree.taobao.com/ -* -* ޸ļ¼ -* ע -* 2022-09-15 W first version -********************************************************************************************************************/ + * CH32V307VCT6 Opensourec Library CH32V307VCT6 Դ⣩һڹٷ SDK ӿڵĵԴ + * Copyright (c) 2022 SEEKFREE ɿƼ + * + * ļCH32V307VCT6 Դһ + * + * CH32V307VCT6 Դ + * Ըᷢ GPLGNU General Public License GNUͨù֤ + * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ + * + * Դķϣܷãδκεı֤ + * ûԻʺض;ı֤ + * ϸμ GPL + * + * ӦյԴͬʱյһ GPL ĸ + * ûУ + * + * ע + * Դʹ GPL3.0 Դ֤Э Ϊİ汾 + * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ + * ֤ libraries ļ ļµ LICENSE ļ + * ӭλʹò ޸ʱ뱣ɿƼİȨ + * + * ļ zf_driver_soft_iic + * ˾ ɶɿƼ޹˾ + * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ + * MounRiver Studio V1.8.1 + * ƽ̨ CH32V307VCT6 + * https://seekfree.taobao.com/ + * + * ޸ļ¼ + * ע + * 2022-09-15 W first version + ********************************************************************************************************************/ #include "zf_common_debug.h" #include "zf_driver_soft_iic.h" -#define SOFT_IIC_SDA_IO_SWITCH (0) // ǷҪ SDA I/O л 0-Ҫ 1-Ҫ +#define SOFT_IIC_SDA_IO_SWITCH (0) // ǷҪ SDA I/O л 0-Ҫ 1-Ҫ //------------------------------------------------------------------------------------------------------------------- // IIC ʱ @@ -46,12 +46,12 @@ // ʹʾ soft_iic_delay(1); // עϢ ڲ //------------------------------------------------------------------------------------------------------------------- -//static void soft_iic_delay (vuint32 delay) +// static void soft_iic_delay (vuint32 delay) //{ // volatile uint32 count = delay; // while(count --); //} -#define soft_iic_delay(x) for(uint32 i = x; i--; ) +#define soft_iic_delay(x) for (uint32 i = x; i--;) //------------------------------------------------------------------------------------------------------------------- // IIC START ź @@ -60,16 +60,16 @@ // ʹʾ soft_iic_start(soft_iic_obj); // עϢ ڲ //------------------------------------------------------------------------------------------------------------------- -static void soft_iic_start (soft_iic_info_struct *soft_iic_obj) +static void soft_iic_start(soft_iic_info_struct *soft_iic_obj) { zf_assert(soft_iic_obj != NULL); - gpio_high(soft_iic_obj->scl_pin); // SCL ߵƽ - gpio_high(soft_iic_obj->sda_pin); // SDA ߵƽ + gpio_high(soft_iic_obj->scl_pin); // SCL ߵƽ + gpio_high(soft_iic_obj->sda_pin); // SDA ߵƽ soft_iic_delay(soft_iic_obj->delay); - gpio_low(soft_iic_obj->sda_pin); // SDA + gpio_low(soft_iic_obj->sda_pin); // SDA soft_iic_delay(soft_iic_obj->delay); - gpio_low(soft_iic_obj->scl_pin); // SCL + gpio_low(soft_iic_obj->scl_pin); // SCL } //------------------------------------------------------------------------------------------------------------------- @@ -79,16 +79,16 @@ static void soft_iic_start (soft_iic_info_struct *soft_iic_obj) // ʹʾ soft_iic_stop(soft_iic_obj); // עϢ ڲ //------------------------------------------------------------------------------------------------------------------- -static void soft_iic_stop (soft_iic_info_struct *soft_iic_obj) +static void soft_iic_stop(soft_iic_info_struct *soft_iic_obj) { zf_assert(soft_iic_obj != NULL); - gpio_low(soft_iic_obj->sda_pin); // SDA ͵ƽ - gpio_low(soft_iic_obj->scl_pin); // SCL ͵ƽ + gpio_low(soft_iic_obj->sda_pin); // SDA ͵ƽ + gpio_low(soft_iic_obj->scl_pin); // SCL ͵ƽ soft_iic_delay(soft_iic_obj->delay); - gpio_high(soft_iic_obj->scl_pin); // SCL + gpio_high(soft_iic_obj->scl_pin); // SCL soft_iic_delay(soft_iic_obj->delay); - gpio_high(soft_iic_obj->sda_pin); // SDA + gpio_high(soft_iic_obj->sda_pin); // SDA soft_iic_delay(soft_iic_obj->delay); } @@ -100,25 +100,22 @@ static void soft_iic_stop (soft_iic_info_struct *soft_iic_obj) // ʹʾ soft_iic_send_ack(soft_iic_obj, 1); // עϢ ڲ //------------------------------------------------------------------------------------------------------------------- -static void soft_iic_send_ack (soft_iic_info_struct *soft_iic_obj, uint8 ack) +static void soft_iic_send_ack(soft_iic_info_struct *soft_iic_obj, uint8 ack) { zf_assert(soft_iic_obj != NULL); - gpio_low(soft_iic_obj->scl_pin); // SCL ͵ƽ + gpio_low(soft_iic_obj->scl_pin); // SCL ͵ƽ - if(ack) - { - gpio_high(soft_iic_obj->sda_pin); // SDA - } - else - { - gpio_low(soft_iic_obj->sda_pin); // SDA + if (ack) { + gpio_high(soft_iic_obj->sda_pin); // SDA + } else { + gpio_low(soft_iic_obj->sda_pin); // SDA } soft_iic_delay(soft_iic_obj->delay); - gpio_high(soft_iic_obj->scl_pin); // SCL + gpio_high(soft_iic_obj->scl_pin); // SCL soft_iic_delay(soft_iic_obj->delay); - gpio_low(soft_iic_obj->scl_pin); // SCL - gpio_high(soft_iic_obj->sda_pin); // SDA + gpio_low(soft_iic_obj->scl_pin); // SCL + gpio_high(soft_iic_obj->sda_pin); // SDA } //------------------------------------------------------------------------------------------------------------------- @@ -128,25 +125,24 @@ static void soft_iic_send_ack (soft_iic_info_struct *soft_iic_obj, uint8 ack) // ʹʾ soft_iic_wait_ack(soft_iic_obj); // עϢ ڲ //------------------------------------------------------------------------------------------------------------------- -static uint8 soft_iic_wait_ack (soft_iic_info_struct *soft_iic_obj) +static uint8 soft_iic_wait_ack(soft_iic_info_struct *soft_iic_obj) { zf_assert(soft_iic_obj != NULL); uint8 temp = 0; - gpio_low(soft_iic_obj->scl_pin); // SCL ͵ƽ - gpio_high(soft_iic_obj->sda_pin); // SDA ߵƽ ͷ SDA + gpio_low(soft_iic_obj->scl_pin); // SCL ͵ƽ + gpio_high(soft_iic_obj->sda_pin); // SDA ߵƽ ͷ SDA #if SOFT_IIC_SDA_IO_SWITCH gpio_set_dir(soft_iic_obj->sda_pin, GPI, GPI_FLOATING_IN); #endif soft_iic_delay(soft_iic_obj->delay); - gpio_high(soft_iic_obj->scl_pin); // SCL ߵƽ + gpio_high(soft_iic_obj->scl_pin); // SCL ߵƽ soft_iic_delay(soft_iic_obj->delay); - if(gpio_get_level((gpio_pin_enum)soft_iic_obj->sda_pin)) - { + if (gpio_get_level((gpio_pin_enum)soft_iic_obj->sda_pin)) { temp = 1; } - gpio_low(soft_iic_obj->scl_pin); // SCL ͵ƽ + gpio_low(soft_iic_obj->scl_pin); // SCL ͵ƽ #if SOFT_IIC_SDA_IO_SWITCH gpio_set_dir(soft_iic_obj->sda_pin, GPO, GPO_OPEN_DTAIN); #endif @@ -162,22 +158,21 @@ static uint8 soft_iic_wait_ack (soft_iic_info_struct *soft_iic_obj) // ز uint8 ACK ״̬ // עϢ ڲ //------------------------------------------------------------------------------------------------------------------- -static uint8 soft_iic_send_data (soft_iic_info_struct *soft_iic_obj, const uint8 data) +static uint8 soft_iic_send_data(soft_iic_info_struct *soft_iic_obj, const uint8 data) { zf_assert(soft_iic_obj != NULL); uint8 temp = 0x80; - while(temp) - { -// gpio_set_level(soft_iic_obj->sda_pin, data & temp); + while (temp) { + // gpio_set_level(soft_iic_obj->sda_pin, data & temp); ((data & temp) ? (gpio_high(soft_iic_obj->sda_pin)) : (gpio_low(soft_iic_obj->sda_pin))); temp >>= 1; soft_iic_delay(soft_iic_obj->delay); - gpio_high(soft_iic_obj->scl_pin); // SCL + gpio_high(soft_iic_obj->scl_pin); // SCL soft_iic_delay(soft_iic_obj->delay); - gpio_low(soft_iic_obj->scl_pin); // SCL + gpio_low(soft_iic_obj->scl_pin); // SCL } - return ((soft_iic_wait_ack(soft_iic_obj) == 1) ? 0 : 1 ); + return ((soft_iic_wait_ack(soft_iic_obj) == 1) ? 0 : 1); } //------------------------------------------------------------------------------------------------------------------- @@ -187,27 +182,26 @@ static uint8 soft_iic_send_data (soft_iic_info_struct *soft_iic_obj, const uint8 // ز uint8 // עϢ ڲ //------------------------------------------------------------------------------------------------------------------- -static uint8 soft_iic_read_data (soft_iic_info_struct *soft_iic_obj, uint8 ack) +static uint8 soft_iic_read_data(soft_iic_info_struct *soft_iic_obj, uint8 ack) { zf_assert(soft_iic_obj != NULL); uint8 data = 0x00; uint8 temp = 8; - gpio_low(soft_iic_obj->scl_pin); // SCL ͵ƽ + gpio_low(soft_iic_obj->scl_pin); // SCL ͵ƽ soft_iic_delay(soft_iic_obj->delay); - gpio_high(soft_iic_obj->sda_pin); // SDA ߵƽ ͷ SDA + gpio_high(soft_iic_obj->sda_pin); // SDA ߵƽ ͷ SDA #if SOFT_IIC_SDA_IO_SWITCH gpio_set_dir(soft_iic_obj->sda_pin, GPI, GPI_FLOATING_IN); #endif - while(temp --) - { - gpio_low(soft_iic_obj->scl_pin); // SCL + while (temp--) { + gpio_low(soft_iic_obj->scl_pin); // SCL soft_iic_delay(soft_iic_obj->delay); - gpio_high(soft_iic_obj->scl_pin); // SCL + gpio_high(soft_iic_obj->scl_pin); // SCL soft_iic_delay(soft_iic_obj->delay); data = ((data << 1) | gpio_get_level((gpio_pin_enum)soft_iic_obj->sda_pin)); } - gpio_low(soft_iic_obj->scl_pin); // SCL ͵ƽ + gpio_low(soft_iic_obj->scl_pin); // SCL ͵ƽ #if SOFT_IIC_SDA_IO_SWITCH gpio_set_dir(soft_iic_obj->sda_pin, GPO, GPO_OPEN_DTAIN); #endif @@ -220,11 +214,11 @@ static uint8 soft_iic_read_data (soft_iic_info_struct *soft_iic_obj, uint8 ack) // IIC ӿд 8bit // ˵ *soft_iic_obj IIC ָϢ Բ zf_driver_soft_iic.h ĸʽ // ˵ data Ҫд -// ز void +// ز void // ʹʾ soft_iic_write_8bit_register(soft_iic_obj, 0x01); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -void soft_iic_write_8bit (soft_iic_info_struct *soft_iic_obj, const uint8 data) +void soft_iic_write_8bit(soft_iic_info_struct *soft_iic_obj, const uint8 data) { zf_assert(soft_iic_obj != NULL); soft_iic_start(soft_iic_obj); @@ -238,19 +232,18 @@ void soft_iic_write_8bit (soft_iic_info_struct *soft_iic_obj, const uint8 data) // ˵ *soft_iic_obj IIC ָϢ Բ zf_driver_soft_iic.h ĸʽ // ˵ *data ݴŻ // ˵ len -// ز void +// ز void // ʹʾ soft_iic_write_8bit_array(soft_iic_obj, data, 6); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -void soft_iic_write_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len) +void soft_iic_write_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len) { zf_assert(soft_iic_obj != NULL); zf_assert(data != NULL); soft_iic_start(soft_iic_obj); soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1); - while(len --) - { - soft_iic_send_data(soft_iic_obj, *data ++); + while (len--) { + soft_iic_send_data(soft_iic_obj, *data++); } soft_iic_stop(soft_iic_obj); } @@ -259,11 +252,11 @@ void soft_iic_write_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 // IIC ӿд 16bit // ˵ *soft_iic_obj IIC ָϢ Բ zf_driver_soft_iic.h ĸʽ // ˵ data Ҫд -// ز void +// ز void // ʹʾ soft_iic_write_16bit(soft_iic_obj, 0x0101); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -void soft_iic_write_16bit (soft_iic_info_struct *soft_iic_obj, const uint16 data) +void soft_iic_write_16bit(soft_iic_info_struct *soft_iic_obj, const uint16 data) { zf_assert(soft_iic_obj != NULL); soft_iic_start(soft_iic_obj); @@ -278,20 +271,19 @@ void soft_iic_write_16bit (soft_iic_info_struct *soft_iic_obj, const uint16 data // ˵ *soft_iic_obj IIC ָϢ Բ zf_driver_soft_iic.h ĸʽ // ˵ *data ݴŻ // ˵ len -// ز void +// ز void // ʹʾ soft_iic_write_16bit_array(soft_iic_obj, data, 6); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -void soft_iic_write_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len) +void soft_iic_write_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len) { zf_assert(soft_iic_obj != NULL); zf_assert(data != NULL); soft_iic_start(soft_iic_obj); soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1); - while(len --) - { + while (len--) { soft_iic_send_data(soft_iic_obj, (uint8)((*data & 0xFF00) >> 8)); - soft_iic_send_data(soft_iic_obj, (uint8)(*data ++ & 0x00FF)); + soft_iic_send_data(soft_iic_obj, (uint8)(*data++ & 0x00FF)); } soft_iic_stop(soft_iic_obj); } @@ -301,11 +293,11 @@ void soft_iic_write_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint1 // ˵ *soft_iic_obj IIC ָϢ Բ zf_driver_soft_iic.h ĸʽ // ˵ register_name ļĴַ // ˵ data Ҫд -// ز void +// ز void // ʹʾ soft_iic_write_8bit_register(soft_iic_obj, 0x01, 0x01); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -void soft_iic_write_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data) +void soft_iic_write_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data) { zf_assert(soft_iic_obj != NULL); soft_iic_start(soft_iic_obj); @@ -321,20 +313,19 @@ void soft_iic_write_8bit_register (soft_iic_info_struct *soft_iic_obj, const uin // ˵ register_name ļĴַ // ˵ *data ݴŻ // ˵ len -// ز void +// ز void // ʹʾ soft_iic_write_8bit_registers(soft_iic_obj, 0x01, data, 6); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -void soft_iic_write_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len) +void soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len) { zf_assert(soft_iic_obj != NULL); zf_assert(data != NULL); soft_iic_start(soft_iic_obj); soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1); soft_iic_send_data(soft_iic_obj, register_name); - while(len --) - { - soft_iic_send_data(soft_iic_obj, *data ++); + while (len--) { + soft_iic_send_data(soft_iic_obj, *data++); } soft_iic_stop(soft_iic_obj); } @@ -344,11 +335,11 @@ void soft_iic_write_8bit_registers (soft_iic_info_struct *soft_iic_obj, const ui // ˵ *soft_iic_obj IIC ָϢ Բ zf_driver_soft_iic.h ĸʽ // ˵ register_name ļĴַ // ˵ data Ҫд -// ز void +// ز void // ʹʾ soft_iic_write_16bit_register(soft_iic_obj, 0x0101, 0x0101); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -void soft_iic_write_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data) +void soft_iic_write_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data) { zf_assert(soft_iic_obj != NULL); soft_iic_start(soft_iic_obj); @@ -366,11 +357,11 @@ void soft_iic_write_16bit_register (soft_iic_info_struct *soft_iic_obj, const ui // ˵ register_name ļĴַ // ˵ *data ݴŻ // ˵ len -// ز void +// ز void // ʹʾ soft_iic_write_16bit_registers(soft_iic_obj, 0x0101, data, 6); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len) +void soft_iic_write_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len) { zf_assert(soft_iic_obj != NULL); zf_assert(data != NULL); @@ -378,10 +369,9 @@ void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const u soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1); soft_iic_send_data(soft_iic_obj, (uint8)((register_name & 0xFF00) >> 8)); soft_iic_send_data(soft_iic_obj, (uint8)(register_name & 0x00FF)); - while(len--) - { + while (len--) { soft_iic_send_data(soft_iic_obj, (uint8)((*data & 0xFF00) >> 8)); - soft_iic_send_data(soft_iic_obj, (uint8)(*data ++ & 0x00FF)); + soft_iic_send_data(soft_iic_obj, (uint8)(*data++ & 0x00FF)); } soft_iic_stop(soft_iic_obj); } @@ -391,9 +381,9 @@ void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const u // ˵ *soft_iic_obj IIC ָϢ Բ zf_driver_soft_iic.h ĸʽ // ز uint8 ضȡ 8bit // ʹʾ soft_iic_read_8bit(soft_iic_obj); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -uint8 soft_iic_read_8bit (soft_iic_info_struct *soft_iic_obj) +uint8 soft_iic_read_8bit(soft_iic_info_struct *soft_iic_obj) { zf_assert(soft_iic_obj != NULL); uint8 temp = 0; @@ -410,19 +400,18 @@ uint8 soft_iic_read_8bit (soft_iic_info_struct *soft_iic_obj) // ˵ register_name ļĴַ // ˵ *data ҪȡݵĻָ // ˵ len Ҫȡݳ -// ز void +// ز void // ʹʾ soft_iic_read_8bit_array(soft_iic_obj, data, 8); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -void soft_iic_read_8bit_array (soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len) +void soft_iic_read_8bit_array(soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len) { zf_assert(soft_iic_obj != NULL); zf_assert(data != NULL); soft_iic_start(soft_iic_obj); soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01); - while(len --) - { - *data ++ = soft_iic_read_data(soft_iic_obj, len == 0); + while (len--) { + *data++ = soft_iic_read_data(soft_iic_obj, len == 0); } soft_iic_stop(soft_iic_obj); } @@ -433,16 +422,16 @@ void soft_iic_read_8bit_array (soft_iic_info_struct *soft_iic_obj, uint8 *data, // ˵ register_name ļĴַ // ز uint16 ضȡ 16bit // ʹʾ soft_iic_read_16bit(soft_iic_obj); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -uint16 soft_iic_read_16bit (soft_iic_info_struct *soft_iic_obj) +uint16 soft_iic_read_16bit(soft_iic_info_struct *soft_iic_obj) { zf_assert(soft_iic_obj != NULL); uint16 temp = 0; soft_iic_start(soft_iic_obj); soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01); temp = soft_iic_read_data(soft_iic_obj, 0); - temp = ((temp << 8)| soft_iic_read_data(soft_iic_obj, 1)); + temp = ((temp << 8) | soft_iic_read_data(soft_iic_obj, 1)); soft_iic_stop(soft_iic_obj); return temp; } @@ -452,21 +441,20 @@ uint16 soft_iic_read_16bit (soft_iic_info_struct *soft_iic_obj) // ˵ *soft_iic_obj IIC ָϢ Բ zf_driver_soft_iic.h ĸʽ // ˵ *data ҪȡݵĻָ // ˵ len Ҫȡݳ -// ز void +// ز void // ʹʾ soft_iic_read_16bit_array(soft_iic_obj, data, 8); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -void soft_iic_read_16bit_array (soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len) +void soft_iic_read_16bit_array(soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len) { zf_assert(soft_iic_obj != NULL); zf_assert(data != NULL); soft_iic_start(soft_iic_obj); soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01); - while(len --) - { + while (len--) { *data = soft_iic_read_data(soft_iic_obj, 0); - *data = ((*data << 8)| soft_iic_read_data(soft_iic_obj, len == 0)); - data ++; + *data = ((*data << 8) | soft_iic_read_data(soft_iic_obj, len == 0)); + data++; } soft_iic_stop(soft_iic_obj); } @@ -477,9 +465,9 @@ void soft_iic_read_16bit_array (soft_iic_info_struct *soft_iic_obj, uint16 *data // ˵ register_name ļĴַ // ز uint8 ضȡ 8bit // ʹʾ soft_iic_read_8bit_register(soft_iic_obj, 0x01); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -uint8 soft_iic_read_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name) +uint8 soft_iic_read_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name) { zf_assert(soft_iic_obj != NULL); uint8 temp = 0; @@ -499,11 +487,11 @@ uint8 soft_iic_read_8bit_register (soft_iic_info_struct *soft_iic_obj, const uin // ˵ register_name ļĴַ // ˵ *data ҪȡݵĻָ // ˵ len Ҫȡݳ -// ز void +// ز void // ʹʾ soft_iic_read_8bit_registers(soft_iic_obj, 0x01, data, 8); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len) +void soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len) { zf_assert(soft_iic_obj != NULL); zf_assert(data != NULL); @@ -512,9 +500,8 @@ void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uin soft_iic_send_data(soft_iic_obj, register_name); soft_iic_start(soft_iic_obj); soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01); - while(len --) - { - *data ++ = soft_iic_read_data(soft_iic_obj, len == 0); + while (len--) { + *data++ = soft_iic_read_data(soft_iic_obj, len == 0); } soft_iic_stop(soft_iic_obj); } @@ -525,9 +512,9 @@ void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uin // ˵ register_name ļĴַ // ز uint16 ضȡ 16bit // ʹʾ soft_iic_read_16bit_register(soft_iic_obj, 0x0101); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name) +uint16 soft_iic_read_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name) { zf_assert(soft_iic_obj != NULL); uint16 temp = 0; @@ -538,7 +525,7 @@ uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const u soft_iic_start(soft_iic_obj); soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01); temp = soft_iic_read_data(soft_iic_obj, 0); - temp = ((temp << 8)| soft_iic_read_data(soft_iic_obj, 1)); + temp = ((temp << 8) | soft_iic_read_data(soft_iic_obj, 1)); soft_iic_stop(soft_iic_obj); return temp; } @@ -549,11 +536,11 @@ uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const u // ˵ register_name ļĴַ // ˵ *data ҪȡݵĻָ // ˵ len Ҫȡݳ -// ز void +// ز void // ʹʾ soft_iic_read_16bit_registers(soft_iic_obj, 0x0101, data, 8); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len) +void soft_iic_read_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len) { zf_assert(soft_iic_obj != NULL); zf_assert(data != NULL); @@ -563,11 +550,10 @@ void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const ui soft_iic_send_data(soft_iic_obj, (uint8)(register_name & 0x00FF)); soft_iic_start(soft_iic_obj); soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01); - while(len --) - { + while (len--) { *data = soft_iic_read_data(soft_iic_obj, 0); - *data = ((*data << 8)| soft_iic_read_data(soft_iic_obj, len == 0)); - data ++; + *data = ((*data << 8) | soft_iic_read_data(soft_iic_obj, len == 0)); + data++; } soft_iic_stop(soft_iic_obj); } @@ -579,29 +565,26 @@ void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const ui // ˵ write_len ͻ // ˵ *read_data ȡݴŻ // ˵ read_len ȡ -// ز void +// ز void // ʹʾ iic_transfer_8bit_array(IIC_1, addr, data, 64, data, 64); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -void soft_iic_transfer_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len) +void soft_iic_transfer_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len) { zf_assert(soft_iic_obj != NULL); zf_assert(write_data != NULL); zf_assert(read_data != NULL); soft_iic_start(soft_iic_obj); soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1); - while(write_len --) - { - soft_iic_send_data(soft_iic_obj, *write_data ++); + while (write_len--) { + soft_iic_send_data(soft_iic_obj, *write_data++); } - if(read_len) - { + if (read_len) { soft_iic_start(soft_iic_obj); soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01); - while(read_len --) - { - *read_data ++ = soft_iic_read_data(soft_iic_obj, read_len == 0); + while (read_len--) { + *read_data++ = soft_iic_read_data(soft_iic_obj, read_len == 0); } } soft_iic_stop(soft_iic_obj); @@ -614,31 +597,28 @@ void soft_iic_transfer_8bit_array (soft_iic_info_struct *soft_iic_obj, const uin // ˵ write_len ͻ // ˵ *read_data ȡݴŻ // ˵ read_len ȡ -// ز void +// ز void // ʹʾ iic_transfer_16bit_array(IIC_1, addr, data, 64, data, 64); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -void soft_iic_transfer_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len) +void soft_iic_transfer_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len) { zf_assert(soft_iic_obj != NULL); zf_assert(write_data != NULL); zf_assert(read_data != NULL); soft_iic_start(soft_iic_obj); soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1); - while(write_len--) - { + while (write_len--) { soft_iic_send_data(soft_iic_obj, (uint8)((*write_data & 0xFF00) >> 8)); - soft_iic_send_data(soft_iic_obj, (uint8)(*write_data ++ & 0x00FF)); + soft_iic_send_data(soft_iic_obj, (uint8)(*write_data++ & 0x00FF)); } - if(read_len) - { + if (read_len) { soft_iic_start(soft_iic_obj); soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01); - while(read_len --) - { + while (read_len--) { *read_data = soft_iic_read_data(soft_iic_obj, 0); - *read_data = ((*read_data << 8)| soft_iic_read_data(soft_iic_obj, read_len == 0)); - read_data ++; + *read_data = ((*read_data << 8) | soft_iic_read_data(soft_iic_obj, read_len == 0)); + read_data++; } } soft_iic_stop(soft_iic_obj); @@ -649,11 +629,11 @@ void soft_iic_transfer_16bit_array (soft_iic_info_struct *soft_iic_obj, const ui // ˵ *soft_iic_obj IIC ָϢ Բ zf_driver_soft_iic.h ĸʽ // ˵ register_name ļĴַ // ˵ data Ҫд -// ز void +// ز void // ʹʾ soft_iic_sccb_write_register(soft_iic_obj, 0x01, 0x01); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -void soft_iic_sccb_write_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data) +void soft_iic_sccb_write_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data) { zf_assert(soft_iic_obj != NULL); soft_iic_start(soft_iic_obj); @@ -669,9 +649,9 @@ void soft_iic_sccb_write_register (soft_iic_info_struct *soft_iic_obj, const uin // ˵ register_name ļĴַ // ز uint8 ضȡ 8bit // ʹʾ soft_iic_sccb_read_register(soft_iic_obj, 0x01); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -uint8 soft_iic_sccb_read_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name) +uint8 soft_iic_sccb_read_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name) { zf_assert(soft_iic_obj != NULL); uint8 temp = 0; @@ -694,18 +674,46 @@ uint8 soft_iic_sccb_read_register (soft_iic_info_struct *soft_iic_obj, const uin // ˵ delay IIC ʱ ʱӸߵƽʱ Խ IIC Խ // ˵ scl_pin IIC ʱ zf_driver_gpio.h gpio_pin_enum ö嶨 // ˵ sda_pin IIC zf_driver_gpio.h gpio_pin_enum ö嶨 -// ز void +// ز void // ʹʾ soft_iic_init(&soft_iic_obj, addr, 100, B6, B7); -// עϢ +// עϢ //------------------------------------------------------------------------------------------------------------------- -void soft_iic_init (soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin) +void soft_iic_init(soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin) { zf_assert(soft_iic_obj != NULL); - zf_assert(scl_pin != sda_pin); // ѣ scl_pin sda_pin ôͬһţ + zf_assert(scl_pin != sda_pin); // ѣ scl_pin sda_pin ôͬһţ soft_iic_obj->scl_pin = scl_pin; soft_iic_obj->sda_pin = sda_pin; - soft_iic_obj->addr = addr; - soft_iic_obj->delay = delay; - gpio_init(scl_pin, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ȡӦIO AFܱ - gpio_init(sda_pin, GPO, GPIO_HIGH, GPO_OPEN_DTAIN); // ȡӦIO AFܱ + soft_iic_obj->addr = addr; + soft_iic_obj->delay = delay; + gpio_init(scl_pin, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ȡӦIO AFܱ + gpio_init(sda_pin, GPO, GPIO_HIGH, GPO_OPEN_DTAIN); // ȡӦIO AFܱ } +void eep_soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, uint8 *data, uint32 len) +{ + zf_assert(soft_iic_obj != NULL); + zf_assert(data != NULL); + soft_iic_start(soft_iic_obj); + soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1); + soft_iic_send_data(soft_iic_obj, register_name_h); + soft_iic_send_data(soft_iic_obj, register_name_l); + soft_iic_start(soft_iic_obj); + soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01); + while (len--) { + *data++ = soft_iic_read_data(soft_iic_obj, len == 0); + } + soft_iic_stop(soft_iic_obj); +} +void eep_soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, const uint8 *data, uint32 len) +{ + zf_assert(soft_iic_obj != NULL); + zf_assert(data != NULL); + soft_iic_start(soft_iic_obj); + soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1); + soft_iic_send_data(soft_iic_obj, register_name_h); + soft_iic_send_data(soft_iic_obj, register_name_l); + while (len--) { + soft_iic_send_data(soft_iic_obj, *data++); + } + soft_iic_stop(soft_iic_obj); +} \ No newline at end of file diff --git a/libraries/zf_driver/zf_driver_soft_iic.h b/libraries/zf_driver/zf_driver_soft_iic.h index 1323324..c39c25f 100644 --- a/libraries/zf_driver/zf_driver_soft_iic.h +++ b/libraries/zf_driver/zf_driver_soft_iic.h @@ -1,83 +1,84 @@ /********************************************************************************************************************* -* CH32V307VCT6 Opensourec Library CH32V307VCT6 Դ⣩һڹٷ SDK ӿڵĵԴ -* Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļCH32V307VCT6 Դһ -* -* CH32V307VCT6 Դ -* Ըᷢ GPLGNU General Public License GNUͨù֤ -* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* -* Դķϣܷãδκεı֤ -* ûԻʺض;ı֤ -* ϸμ GPL -* -* ӦյԴͬʱյһ GPL ĸ -* ûУ -* -* ע -* Դʹ GPL3.0 Դ֤Э Ϊİ汾 -* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ -* ֤ libraries ļ ļµ LICENSE ļ -* ӭλʹò ޸ʱ뱣ɿƼİȨ -* -* ļ zf_driver_soft_iic -* ˾ ɶɿƼ޹˾ -* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* MounRiver Studio V1.8.1 -* ƽ̨ CH32V307VCT6 -* https://seekfree.taobao.com/ -* -* ޸ļ¼ -* ע -* 2022-09-15 W first version -********************************************************************************************************************/ + * CH32V307VCT6 Opensourec Library CH32V307VCT6 Դ⣩һڹٷ SDK ӿڵĵԴ + * Copyright (c) 2022 SEEKFREE ɿƼ + * + * ļCH32V307VCT6 Դһ + * + * CH32V307VCT6 Դ + * Ըᷢ GPLGNU General Public License GNUͨù֤ + * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ + * + * Դķϣܷãδκεı֤ + * ûԻʺض;ı֤ + * ϸμ GPL + * + * ӦյԴͬʱյһ GPL ĸ + * ûУ + * + * ע + * Դʹ GPL3.0 Դ֤Э Ϊİ汾 + * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ + * ֤ libraries ļ ļµ LICENSE ļ + * ӭλʹò ޸ʱ뱣ɿƼİȨ + * + * ļ zf_driver_soft_iic + * ˾ ɶɿƼ޹˾ + * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ + * MounRiver Studio V1.8.1 + * ƽ̨ CH32V307VCT6 + * https://seekfree.taobao.com/ + * + * ޸ļ¼ + * ע + * 2022-09-15 W first version + ********************************************************************************************************************/ #ifndef _zf_driver_soft_iic_h_ #define _zf_driver_soft_iic_h_ - #include "zf_driver_gpio.h" typedef struct { - gpio_pin_enum scl_pin; // ڼ¼Ӧű - gpio_pin_enum sda_pin; // ڼ¼Ӧű - uint8 addr; // ַ λַģʽ - uint32 delay; // ģ IIC ʱʱ -}soft_iic_info_struct; + gpio_pin_enum scl_pin; // ڼ¼Ӧű + gpio_pin_enum sda_pin; // ڼ¼Ӧű + uint8 addr; // ַ λַģʽ + uint32 delay; // ģ IIC ʱʱ +} soft_iic_info_struct; -void soft_iic_write_8bit (soft_iic_info_struct *soft_iic_obj, const uint8 data); -void soft_iic_write_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len); +void soft_iic_write_8bit(soft_iic_info_struct *soft_iic_obj, const uint8 data); +void soft_iic_write_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len); -void soft_iic_write_16bit (soft_iic_info_struct *soft_iic_obj, const uint16 data); -void soft_iic_write_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len); +void soft_iic_write_16bit(soft_iic_info_struct *soft_iic_obj, const uint16 data); +void soft_iic_write_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len); -void soft_iic_write_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data); -void soft_iic_write_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len); +void soft_iic_write_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data); +void soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len); -void soft_iic_write_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data); -void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len); +void soft_iic_write_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data); +void soft_iic_write_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len); -uint8 soft_iic_read_8bit (soft_iic_info_struct *soft_iic_obj); -void soft_iic_read_8bit_array (soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len); +uint8 soft_iic_read_8bit(soft_iic_info_struct *soft_iic_obj); +void soft_iic_read_8bit_array(soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len); -uint16 soft_iic_read_16bit (soft_iic_info_struct *soft_iic_obj); -void soft_iic_read_16bit_array (soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len); +uint16 soft_iic_read_16bit(soft_iic_info_struct *soft_iic_obj); +void soft_iic_read_16bit_array(soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len); -uint8 soft_iic_read_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name); -void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len); +uint8 soft_iic_read_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name); +void soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len); -uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name); -void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len); +uint16 soft_iic_read_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name); +void soft_iic_read_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len); -void soft_iic_transfer_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len); -void soft_iic_transfer_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len); +void soft_iic_transfer_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len); +void soft_iic_transfer_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len); -void soft_iic_sccb_write_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data); -uint8 soft_iic_sccb_read_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name); +void soft_iic_sccb_write_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data); +uint8 soft_iic_sccb_read_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name); -void soft_iic_init (soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin); +void soft_iic_init(soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin); + +void eep_soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, const uint8 *data, uint32 len); +void eep_soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, uint8 *data, uint32 len); #endif -