diff --git a/CHANGELOGS.md b/CHANGELOGS.md index 2e413bb79..9682ee958 100644 --- a/CHANGELOGS.md +++ b/CHANGELOGS.md @@ -1,4 +1,11 @@ -dragonpilot beta3 2023.10.09 +dragonpilot beta3 2023.10.17 +======================= +* openpilot master branch on 2023.10.20. +* Otisserv improvement/bug fixes. +* TSS2 updated long tune. +* @krkeegan SNG boost tune. + +dragonpilot beta3 [2023-10-09] ======================= * openpilot master branch on 2023.07.21. * Comma 0.9.6 release diff --git a/body/board/obj/body.bin b/body/board/obj/body.bin index aaf35b80a..dd1de87f1 100755 Binary files a/body/board/obj/body.bin and b/body/board/obj/body.bin differ diff --git a/body/board/obj/body.bin.signed b/body/board/obj/body.bin.signed index d90ac63f4..e710779ca 100644 Binary files a/body/board/obj/body.bin.signed and b/body/board/obj/body.bin.signed differ diff --git a/body/board/obj/body.elf b/body/board/obj/body.elf index 9c7c98080..21ee9b55d 100755 Binary files a/body/board/obj/body.elf and b/body/board/obj/body.elf differ diff --git a/body/board/obj/bootstub.body.bin b/body/board/obj/bootstub.body.bin index 3112602e7..435ae7f8d 100755 Binary files a/body/board/obj/bootstub.body.bin and b/body/board/obj/bootstub.body.bin differ diff --git a/body/board/obj/bootstub.body.elf b/body/board/obj/bootstub.body.elf index bbc740356..3b865ff04 100755 Binary files a/body/board/obj/bootstub.body.elf and b/body/board/obj/bootstub.body.elf differ diff --git a/body/board/obj/gitversion.h b/body/board/obj/gitversion.h index 93484e27b..9bef479f6 100644 --- a/body/board/obj/gitversion.h +++ b/body/board/obj/gitversion.h @@ -1 +1 @@ -const uint8_t gitversion[8] = "b6dc9e48"; +const uint8_t gitversion[8] = "0ca26c43"; diff --git a/cereal/visionipc/visionipc_pyx.so b/cereal/visionipc/visionipc_pyx.so index 69ffd302a..2511fe0b9 100755 Binary files a/cereal/visionipc/visionipc_pyx.so and b/cereal/visionipc/visionipc_pyx.so differ diff --git a/common/params_pyx.so b/common/params_pyx.so index 9d86529bc..aec5e4767 100755 Binary files a/common/params_pyx.so and b/common/params_pyx.so differ diff --git a/common/version.h b/common/version.h index 2eecb1cb3..c5b3fb647 100644 --- a/common/version.h +++ b/common/version.h @@ -1 +1 @@ -#define COMMA_VERSION "2023.10.09" +#define COMMA_VERSION "2023.10.17" diff --git a/opendbc/can/libdbc.so b/opendbc/can/libdbc.so index ed9cf75a0..8339e0df5 100755 Binary files a/opendbc/can/libdbc.so and b/opendbc/can/libdbc.so differ diff --git a/panda/board/jungle/obj/bootstub.panda_jungle.bin b/panda/board/jungle/obj/bootstub.panda_jungle.bin index 22666b053..fb8a247d2 100755 Binary files a/panda/board/jungle/obj/bootstub.panda_jungle.bin and b/panda/board/jungle/obj/bootstub.panda_jungle.bin differ diff --git a/panda/board/jungle/obj/bootstub.panda_jungle.elf b/panda/board/jungle/obj/bootstub.panda_jungle.elf index 3493c727a..34a975078 100755 Binary files a/panda/board/jungle/obj/bootstub.panda_jungle.elf and b/panda/board/jungle/obj/bootstub.panda_jungle.elf differ diff --git a/panda/board/jungle/obj/bootstub.panda_jungle_h7.bin b/panda/board/jungle/obj/bootstub.panda_jungle_h7.bin index 2649e7091..dc4ad16ea 100755 Binary files a/panda/board/jungle/obj/bootstub.panda_jungle_h7.bin and b/panda/board/jungle/obj/bootstub.panda_jungle_h7.bin differ diff --git a/panda/board/jungle/obj/bootstub.panda_jungle_h7.elf b/panda/board/jungle/obj/bootstub.panda_jungle_h7.elf index 7980861ec..f490ab934 100755 Binary files a/panda/board/jungle/obj/bootstub.panda_jungle_h7.elf and b/panda/board/jungle/obj/bootstub.panda_jungle_h7.elf differ diff --git a/panda/board/jungle/obj/panda_jungle.bin b/panda/board/jungle/obj/panda_jungle.bin index 7089b6155..a4ac7492e 100755 Binary files a/panda/board/jungle/obj/panda_jungle.bin and b/panda/board/jungle/obj/panda_jungle.bin differ diff --git a/panda/board/jungle/obj/panda_jungle.bin.signed b/panda/board/jungle/obj/panda_jungle.bin.signed index d39d54797..70e558877 100644 Binary files a/panda/board/jungle/obj/panda_jungle.bin.signed and b/panda/board/jungle/obj/panda_jungle.bin.signed differ diff --git a/panda/board/jungle/obj/panda_jungle.elf b/panda/board/jungle/obj/panda_jungle.elf index 8e3412388..821a821ab 100755 Binary files a/panda/board/jungle/obj/panda_jungle.elf and b/panda/board/jungle/obj/panda_jungle.elf differ diff --git a/panda/board/jungle/obj/panda_jungle_h7.bin b/panda/board/jungle/obj/panda_jungle_h7.bin index b83e6f69e..483307cfa 100755 Binary files a/panda/board/jungle/obj/panda_jungle_h7.bin and b/panda/board/jungle/obj/panda_jungle_h7.bin differ diff --git a/panda/board/jungle/obj/panda_jungle_h7.bin.signed b/panda/board/jungle/obj/panda_jungle_h7.bin.signed index b3e9aece2..1871d534c 100644 Binary files a/panda/board/jungle/obj/panda_jungle_h7.bin.signed and b/panda/board/jungle/obj/panda_jungle_h7.bin.signed differ diff --git a/panda/board/jungle/obj/panda_jungle_h7.elf b/panda/board/jungle/obj/panda_jungle_h7.elf index 5bc76c396..eccb2e6f2 100755 Binary files a/panda/board/jungle/obj/panda_jungle_h7.elf and b/panda/board/jungle/obj/panda_jungle_h7.elf differ diff --git a/panda/board/obj/bootstub.panda.bin b/panda/board/obj/bootstub.panda.bin index 2e6f1b4d9..d5d239ae7 100755 Binary files a/panda/board/obj/bootstub.panda.bin and b/panda/board/obj/bootstub.panda.bin differ diff --git a/panda/board/obj/bootstub.panda.elf b/panda/board/obj/bootstub.panda.elf index e1f357f8a..6fa3984e7 100755 Binary files a/panda/board/obj/bootstub.panda.elf and b/panda/board/obj/bootstub.panda.elf differ diff --git a/panda/board/obj/bootstub.panda_h7.bin b/panda/board/obj/bootstub.panda_h7.bin index d111628d2..5a924edff 100755 Binary files a/panda/board/obj/bootstub.panda_h7.bin and b/panda/board/obj/bootstub.panda_h7.bin differ diff --git a/panda/board/obj/bootstub.panda_h7.elf b/panda/board/obj/bootstub.panda_h7.elf index a555fd786..51d34fabe 100755 Binary files a/panda/board/obj/bootstub.panda_h7.elf and b/panda/board/obj/bootstub.panda_h7.elf differ diff --git a/panda/board/obj/gitversion.h b/panda/board/obj/gitversion.h index 12053ac98..63883f199 100644 --- a/panda/board/obj/gitversion.h +++ b/panda/board/obj/gitversion.h @@ -1 +1 @@ -const uint8_t gitversion[] = "DEV-b6dc9e48-DEBUG"; +const uint8_t gitversion[] = "DEV-0ca26c43-DEBUG"; diff --git a/panda/board/obj/panda.bin b/panda/board/obj/panda.bin index 3ae50d697..012e9b008 100755 Binary files a/panda/board/obj/panda.bin and b/panda/board/obj/panda.bin differ diff --git a/panda/board/obj/panda.bin.signed b/panda/board/obj/panda.bin.signed index 4d02357fa..4472fb19c 100644 Binary files a/panda/board/obj/panda.bin.signed and b/panda/board/obj/panda.bin.signed differ diff --git a/panda/board/obj/panda.elf b/panda/board/obj/panda.elf index bee8b5777..54662d55a 100755 Binary files a/panda/board/obj/panda.elf and b/panda/board/obj/panda.elf differ diff --git a/panda/board/obj/panda_h7.bin b/panda/board/obj/panda_h7.bin index 7fcf5e993..f995733a9 100755 Binary files a/panda/board/obj/panda_h7.bin and b/panda/board/obj/panda_h7.bin differ diff --git a/panda/board/obj/panda_h7.bin.signed b/panda/board/obj/panda_h7.bin.signed index ebbb437c9..bef637aff 100644 Binary files a/panda/board/obj/panda_h7.bin.signed and b/panda/board/obj/panda_h7.bin.signed differ diff --git a/panda/board/obj/panda_h7.elf b/panda/board/obj/panda_h7.elf index d15a28b88..4b7531949 100755 Binary files a/panda/board/obj/panda_h7.elf and b/panda/board/obj/panda_h7.elf differ diff --git a/panda/board/obj/version b/panda/board/obj/version index 8f99e9cef..c2dd05b0e 100644 --- a/panda/board/obj/version +++ b/panda/board/obj/version @@ -1 +1 @@ -DEV-b6dc9e48-DEBUG \ No newline at end of file +DEV-0ca26c43-DEBUG \ No newline at end of file diff --git a/panda/board/pedal/obj/bootstub.pedal.bin b/panda/board/pedal/obj/bootstub.pedal.bin index 4391dd28b..95ba84c61 100755 Binary files a/panda/board/pedal/obj/bootstub.pedal.bin and b/panda/board/pedal/obj/bootstub.pedal.bin differ diff --git a/panda/board/pedal/obj/bootstub.pedal.elf b/panda/board/pedal/obj/bootstub.pedal.elf index 6ac276442..9f5c09bd9 100755 Binary files a/panda/board/pedal/obj/bootstub.pedal.elf and b/panda/board/pedal/obj/bootstub.pedal.elf differ diff --git a/panda/board/pedal/obj/bootstub.pedal_usb.bin b/panda/board/pedal/obj/bootstub.pedal_usb.bin index 4391dd28b..95ba84c61 100755 Binary files a/panda/board/pedal/obj/bootstub.pedal_usb.bin and b/panda/board/pedal/obj/bootstub.pedal_usb.bin differ diff --git a/panda/board/pedal/obj/bootstub.pedal_usb.elf b/panda/board/pedal/obj/bootstub.pedal_usb.elf index 5a7ccc618..f8b8ada1f 100755 Binary files a/panda/board/pedal/obj/bootstub.pedal_usb.elf and b/panda/board/pedal/obj/bootstub.pedal_usb.elf differ diff --git a/rednose/helpers/ekf_sym_pyx.so b/rednose/helpers/ekf_sym_pyx.so index baea42d6e..dd613f282 100755 Binary files a/rednose/helpers/ekf_sym_pyx.so and b/rednose/helpers/ekf_sym_pyx.so differ diff --git a/selfdrive/boardd/boardd b/selfdrive/boardd/boardd index 560bed71f..73fd0cd99 100755 Binary files a/selfdrive/boardd/boardd and b/selfdrive/boardd/boardd differ diff --git a/selfdrive/car/toyota/interface.py b/selfdrive/car/toyota/interface.py index ad72076f0..0e9a2b3db 100644 --- a/selfdrive/car/toyota/interface.py +++ b/selfdrive/car/toyota/interface.py @@ -267,15 +267,15 @@ class CarInterface(CarInterfaceBase): if candidate in TSS2_CAR or ret.enableGasInterceptor: tune.kpBP = [0., 5., 20.] tune.kpV = [1.3, 1.0, 0.7] if dp_toyota_enhanced_long_tune else [1.8, 1.0, 0.7] - tune.kiBP = [0., 1., 2., 3., 4., 5., 12., 20., 27., 40.] if dp_toyota_enhanced_long_tune else [0., 5., 12., 20., 27.] - tune.kiV = [.34, .325, .31, .29, .27, .226, .198, .17, .10, .01] if dp_toyota_enhanced_long_tune else [.35, .23, .20, .17, .1] + tune.kiBP = [0., 1., 2., 3., 4., 5., 8., 12., 20., 27., 40.] if dp_toyota_enhanced_long_tune else [0., 5., 12., 20., 27.] + tune.kiV = [.35, .331, .308, .285, .26, .227, .21, .19, .17, .10, .001] if dp_toyota_enhanced_long_tune else [.35, .23, .20, .17, .1] #tune.kiBP = [0., 5., 12., 20., 25., 30., 40.] if dp_toyota_enhanced_long_tune else [0., 5., 12., 20., 27.] #tune.kiV = [.35, .23, .20, .17, .10, .01, .001] if dp_toyota_enhanced_long_tune else [.35, .23, .20, .17, .1] if candidate in TSS2_CAR: - ret.vEgoStopping = 0.2 if dp_toyota_enhanced_long_tune else 0.25 # car is near 0.1 to 0.2 when car starts requesting stopping accel - ret.vEgoStarting = 0.2 if dp_toyota_enhanced_long_tune else 0.25 # needs to be > or == vEgoStopping - ret.stopAccel = -0.42 if dp_toyota_enhanced_long_tune else -2.0 # Toyota requests -0.4 when stopped - ret.stoppingDecelRate = 0.057 if dp_toyota_enhanced_long_tune else 0.3 # reach stopping target smoothly - seems to take 0.5 seconds to go from 0 to -0.4 + ret.vEgoStopping = 0.1 if dp_toyota_enhanced_long_tune else 0.25 # car is near 0.1 to 0.2 when car starts requesting stopping accel + ret.vEgoStarting = 0.1 if dp_toyota_enhanced_long_tune else 0.25 # needs to be > or == vEgoStopping + ret.stopAccel = -0.40 if dp_toyota_enhanced_long_tune else -2.0 # Toyota requests -0.4 when stopped + ret.stoppingDecelRate = 0.05 if dp_toyota_enhanced_long_tune else 0.3 # reach stopping target smoothly - seems to take 0.5 seconds to go from 0 to -0.4 #ret.longitudinalActuatorDelayLowerBound = 1.5 if dp_toyota_enhanced_long_tune else 1.5 #ret.longitudinalActuatorDelayUpperBound = 1.5 if dp_toyota_enhanced_long_tune else 1.5 else: diff --git a/selfdrive/controls/lib/accel_controller.py b/selfdrive/controls/lib/accel_controller.py index bf3dc14c1..519992d85 100644 --- a/selfdrive/controls/lib/accel_controller.py +++ b/selfdrive/controls/lib/accel_controller.py @@ -29,15 +29,15 @@ DP_ACCEL_NORMAL = 2 DP_ACCEL_SPORT = 3 # accel profile by @arne182 modified by cgw -_DP_CRUISE_MIN_V = [-0.750, -0.750, -0.72, -0.72, -0.52, -0.40, -0.36, -0.32, -0.32, -0.25, -0.25] -_DP_CRUISE_MIN_V_ECO = [-0.730, -0.730, -0.68, -0.68, -0.50, -0.36, -0.32, -0.28, -0.28, -0.25, -0.25] -_DP_CRUISE_MIN_V_SPORT = [-0.750, -0.750, -0.75, -0.75, -0.54, -0.42, -0.40, -0.35, -0.35, -0.30, -0.30] +_DP_CRUISE_MIN_V = [-0.490, -0.490, -0.41, -0.41, -0.41, -0.40, -0.36, -0.32, -0.32, -0.25, -0.25] +_DP_CRUISE_MIN_V_ECO = [-0.480, -0.480, -0.40, -0.40, -0.40, -0.36, -0.32, -0.28, -0.28, -0.25, -0.25] +_DP_CRUISE_MIN_V_SPORT = [-0.500, -0.500, -0.42, -0.42, -0.42, -0.42, -0.40, -0.35, -0.35, -0.30, -0.30] _DP_CRUISE_MIN_BP = [0., 2.0, 2.01, 11., 11.01, 18., 18.01, 28., 28.01, 33., 55.] -_DP_CRUISE_MAX_V = [3.5, 3.2, 2.6, 2.0, 1.3, 0.9, .71, .48, .36, .14] -_DP_CRUISE_MAX_V_ECO = [3.5, 3.0, 1.6, 1.2, .76, .62, .48, .36, .28, .09] -_DP_CRUISE_MAX_V_SPORT = [3.5, 3.5, 3.5, 3.5, 2.8, 2.0, 1.5, 1.0, .7, .5] -_DP_CRUISE_MAX_BP = [0., 3, 6., 8., 11., 15., 20., 25., 30., 55.] +_DP_CRUISE_MAX_V = [3.5, 3.4, 2.2, 1.5, .92, 0.76, .54, .42, .32, .14] +_DP_CRUISE_MAX_V_ECO = [3.5, 3.3, 1.7, 1.1, .76, .62, .47, .36, .28, .09] +_DP_CRUISE_MAX_V_SPORT = [3.5, 3.5, 3.0, 2.6, 1.4, 1.0, 0.7, 0.6, .38, .2] +_DP_CRUISE_MAX_BP = [0., 3, 6., 8., 11., 15., 20., 25., 30., 55.] class AccelController: diff --git a/selfdrive/controls/lib/dynamic_endtoend_controller.py b/selfdrive/controls/lib/dynamic_endtoend_controller.py index afe8e6c90..a853f5516 100644 --- a/selfdrive/controls/lib/dynamic_endtoend_controller.py +++ b/selfdrive/controls/lib/dynamic_endtoend_controller.py @@ -48,8 +48,6 @@ STOP_AND_GO_FRAME = 500 MODE_SWITCH_DELAY_FRAME = 500 -MAX_YREL_THRESHOLD = 0.25 - class SNG_State: off = 0 stopped = 1 @@ -134,7 +132,6 @@ class DynamicEndtoEndController: # lead detection self._lead_gmac.add_data(lead_one.status) self._has_lead_filtered = self._lead_gmac.get_moving_average() >= LEAD_PROB - self._has_lead_yrel = lead_one.yRel > MAX_YREL_THRESHOLD # slow down detection self._slow_down_gmac.add_data(len(md.orientation.x) == len(md.position.x) == TRAJECTORY_SIZE and md.position.x[TRAJECTORY_SIZE - 1] < interp(self._v_ego_kph, SLOW_DOWN_BP, SLOW_DOWN_DIST)) @@ -220,8 +217,7 @@ class DynamicEndtoEndController: def _acc_priority_mode(self): # If there is a filtered lead, the vehicle is not in standstill, and the lead vehicle's yRel meets the condition, - # e,g. stopped at the red light and car crossing the intersection. - if self._has_lead_filtered and not self._has_standstill and self._has_lead_yrel: + if self._has_lead_filtered and not self._has_standstill: self._mode = 'acc' return diff --git a/selfdrive/controls/lib/longitudinal_mpc_lib/acados_ocp_long.json b/selfdrive/controls/lib/longitudinal_mpc_lib/acados_ocp_long.json index 4d7f82ba2..9cce6b28f 100644 --- a/selfdrive/controls/lib/longitudinal_mpc_lib/acados_ocp_long.json +++ b/selfdrive/controls/lib/longitudinal_mpc_lib/acados_ocp_long.json @@ -1,7 +1,7 @@ { - "acados_include_path": "/data/openpilot/third_party/acados/include", - "acados_lib_path": "/data/openpilot/third_party/acados/lib", - "code_export_directory": "/data/openpilot/selfdrive/controls/lib/longitudinal_mpc_lib/c_generated_code", + "acados_include_path": "/data/dp-private/third_party/acados/include", + "acados_lib_path": "/data/dp-private/third_party/acados/lib", + "code_export_directory": "/data/dp-private/selfdrive/controls/lib/longitudinal_mpc_lib/c_generated_code", "constraints": { "C": [], "C_e": [], @@ -343,7 +343,7 @@ "ny_e": 5, "nz": 0 }, - "json_file": "/data/openpilot/selfdrive/controls/lib/longitudinal_mpc_lib/acados_ocp_long.json", + "json_file": "/data/dp-private/selfdrive/controls/lib/longitudinal_mpc_lib/acados_ocp_long.json", "model": { "con_h_expr": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegiaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaabgpffghgpgegpcaaaaaaaaaaaaaafaaaaaaabgpfngjgogegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaabgpfngbgihchcaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaakaaaaaaaihpfpgcgdhehbgdgmgfgegpcaaaaaaaaaaaaaafaaaaaaaihpffghgpgegdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaacbaaaaaamgfgbgegpfegbgoghgfgchpfggbgdgehpgchegbaaaaaaaaaaaaaaaegbaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaeglaaaaaaaaaaaaaaachbaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajgfaaaaaaaegdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaanaaaaaaamgfgbgegpfehpfggpgmgmgpghhchbaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajggaaaaaaaegbaaaaaaaaaaaaaaachbaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajgkaaaaaaa", "con_h_expr_e": null, diff --git a/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py b/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py index 2263b5cb0..a17fe4c95 100755 --- a/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py +++ b/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py @@ -86,7 +86,7 @@ def get_dynamic_follow(v_ego, personality=log.LongitudinalPersonality.standard): y_dist = [1.0, 1.35, 1.35, 1.5, 1.5, 1.5] elif personality==log.LongitudinalPersonality.aggressive: x_vel = [0.0, 2.0, 5.55, 19.99, 20, 25, 40] - y_dist = [0.9, 1.0, 1.07, 1.09, 1.11, 1.11, 1.2] + y_dist = [0.9, 1.0, 1.08, 1.105, 1.11, 1.11, 1.2] else: raise NotImplementedError("Dynamic Follow personality not supported") return np.interp(v_ego, x_vel, y_dist) @@ -102,6 +102,16 @@ def desired_follow_distance(v_ego, v_lead, t_follow=None): t_follow = get_T_FOLLOW() return get_safe_obstacle_distance(v_ego, t_follow) - get_stopped_equivalence_factor(v_lead) +def get_stopped_equivalence_factor_krkeegen(v_lead, v_ego): + # KRKeegan this offset rapidly decreases the following distance when the lead pulls + # away, resulting in an early demand for acceleration. + v_diff_offset = 0 + if np.all(v_lead - v_ego > 0): + v_diff_offset = ((v_lead - v_ego) * 1.) + v_diff_offset = np.clip(v_diff_offset, 0, STOP_DISTANCE / 2) + v_diff_offset = np.maximum(v_diff_offset * ((10 - v_ego)/10), 0) + distance = (v_lead**2) / (2 * COMFORT_BRAKE) + v_diff_offset + return distance def gen_long_model(): model = AcadosModel() @@ -345,7 +355,7 @@ class LongitudinalMpc: self.max_a = max_a # def update(self, radarstate, v_cruise, x, v, a, j, personality=log.LongitudinalPersonality.standard): - def update(self, radarstate, v_cruise, x, v, a, j, personality=log.LongitudinalPersonality.standard, use_df_tune=False): + def update(self, radarstate, v_cruise, x, v, a, j, personality=log.LongitudinalPersonality.standard, use_df_tune=False, use_krkeegen_tune=False): # t_follow = get_T_FOLLOW(personality) v_ego = self.x0[1] t_follow = get_T_FOLLOW(personality) if not use_df_tune else get_dynamic_follow(v_ego, personality) @@ -357,8 +367,12 @@ class LongitudinalMpc: # To estimate a safe distance from a moving lead, we calculate how much stopping # distance that lead needs as a minimum. We can add that to the current distance # and then treat that as a stopped car/obstacle at this new distance. - lead_0_obstacle = lead_xv_0[:,0] + get_stopped_equivalence_factor(lead_xv_0[:,1]) - lead_1_obstacle = lead_xv_1[:,0] + get_stopped_equivalence_factor(lead_xv_1[:,1]) + if use_krkeegen_tune: + lead_0_obstacle = lead_xv_0[:,0] + get_stopped_equivalence_factor_krkeegen(lead_xv_0[:,1], v_ego) + lead_1_obstacle = lead_xv_1[:,0] + get_stopped_equivalence_factor_krkeegen(lead_xv_1[:,1], v_ego) + else: + lead_0_obstacle = lead_xv_0[:,0] + get_stopped_equivalence_factor(lead_xv_0[:,1]) + lead_1_obstacle = lead_xv_1[:,0] + get_stopped_equivalence_factor(lead_xv_1[:,1]) self.params[:,0] = ACCEL_MIN self.params[:,1] = self.max_a diff --git a/selfdrive/controls/lib/longitudinal_planner.py b/selfdrive/controls/lib/longitudinal_planner.py index 65da3e829..856daae32 100755 --- a/selfdrive/controls/lib/longitudinal_planner.py +++ b/selfdrive/controls/lib/longitudinal_planner.py @@ -79,6 +79,7 @@ class LongitudinalPlanner: self.personality = log.LongitudinalPersonality.standard self.dp_long_use_df_tune = False self.dp_long_taco = self.params.get_bool('dp_long_taco') + self.dp_long_use_krkeegen_tune = False def read_param(self): try: @@ -87,6 +88,7 @@ class LongitudinalPlanner: self.personality = log.LongitudinalPersonality.standard self.dp_long_use_df_tune = self.params.get_bool('dp_long_use_df_tune') + self.dp_long_use_krkeegen_tune = self.params.get_bool('dp_long_use_krkeegen_tune') @staticmethod def parse_model(model_msg, model_error, v_ego, taco=False): @@ -185,7 +187,7 @@ class LongitudinalPlanner: self.mpc.set_accel_limits(accel_limits_turns[0], accel_limits_turns[1]) self.mpc.set_cur_state(self.v_desired_filter.x, self.a_desired) x, v, a, j = self.parse_model(sm['modelV2'], self.v_model_error, v_ego, taco=self.dp_long_taco) - self.mpc.update(sm['radarState'], v_cruise_sol, x, v, a, j, personality=self.personality, use_df_tune=self.dp_long_use_df_tune) + self.mpc.update(sm['radarState'], v_cruise_sol, x, v, a, j, personality=self.personality, use_df_tune=self.dp_long_use_df_tune, use_krkeegen_tune=self.dp_long_use_krkeegen_tune) self.v_desired_trajectory_full = np.interp(T_IDXS, T_IDXS_MPC, self.mpc.v_solution) self.a_desired_trajectory_full = np.interp(T_IDXS, T_IDXS_MPC, self.mpc.a_solution) diff --git a/selfdrive/dragonpilot/obf-otisserv.py b/selfdrive/dragonpilot/obf-otisserv.py index aa73f5081..1365289dc 100755 --- a/selfdrive/dragonpilot/obf-otisserv.py +++ b/selfdrive/dragonpilot/obf-otisserv.py @@ -1,5 +1,5 @@ from builtins import * -from math import prod as _frame +from math import prod as Divide __obfuscator__ = 'Hyperion' @@ -11,102 +11,94 @@ __license__ = 'EPL-2.0' __code__ = 'print("Hello world!")' -Calculate, _stackoverflow, Product, _square, Divide, _while, _cube = exec, str, tuple, map, ord, globals, type +_theory, Invert, _memoryaccess, Run, _positive, Frame, Algorithm = exec, str, tuple, map, ord, globals, type -class _math: - def __init__(self, _memoryaccess): - self._product = _frame((_memoryaccess, 12845)) - self._algorithm(Random=-3229) +class Power: + def __init__(self, Random): + self.CallFunction = Divide((Random, -42319)) + self.Theory(_square=59918) - def _algorithm(self, Random = False): + def Theory(self, _square = int): # sourcery skip: collection-to-bool, remove-redundant-boolean, remove-redundant-except-handler - self._product *= 61103 - Random + self.CallFunction += -63185 + _square try: - (({Ceil: _square}, Calculate) for Calculate in {'65e6hRae': 'R3udguddta3tuel'}) + (_system, Invert) if Run < _memoryaccess else {_system: _positive} is _memoryaccess - except OSError: - (_square, Divide) if Divide < Divide else (Ceil, Calculate) > Ceil + except AttributeError: + (((Invert, _positive, _memoryaccess), _system) for _system in {_system: _positive}) except: - _cube(56853 - 1956) == type + Algorithm(-37583 + -42189) == False - def Add(self, _walk = -78804): + def StackOverflow(self, Product = -91293): # sourcery skip: collection-to-bool, remove-redundant-boolean, remove-redundant-except-handler - _walk -= -46836 * 83368 - self._negative != None + Product += -3186 - -20197 + self._builtins != str try: - ((_square, (Ceil, Calculate)) for _square in (Ceil, Calculate) if Product != _stackoverflow) + {_theory: 'holbu'} if Run < _memoryaccess else (Invert, _positive, _memoryaccess) is _positive - except ArithmeticError: - {Ceil: _square} if Calculate >= Product else (Product, Ceil) is _while + except AttributeError: + {_theory: 'holbu'} if _system <= Frame else {_system: _positive} >= Frame except: - _cube(-89478 / 2268) == float + Algorithm(-133 - -49626) == int - def _random(Absolute = int): - return _while()[Absolute] + def _cube(MemoryAccess = Ellipsis): + return Frame()[MemoryAccess] - def _statistics(Walk = 7560 * -12252, Algorithm = float, _add = _while): + def _multiply(_frame = 21670 / 95166, Multiply = False, _hypothesis = Frame): # sourcery skip: collection-to-bool, remove-redundant-boolean, remove-redundant-except-handler - _add()[Walk] = Algorithm + _hypothesis()[_frame] = Multiply try: - (Ceil, Calculate) if _while <= Divide else (_square, Divide) == _stackoverflow + ((_memoryaccess, (Invert, _positive, _memoryaccess)) for _memoryaccess in (Invert, _positive, _memoryaccess) if _theory != Frame) - except OSError: - (((_square, Divide), Ceil) for Ceil in {'65e6hRae': 'R3udguddta3tuel'}) + except TypeError: + ((Invert, _positive, _memoryaccess) or _theory if (Invert, _positive, _memoryaccess) and _theory else ... or (_theory, (Invert, _positive, _memoryaccess))) except: - _cube(-85075 / 66762) == None + Algorithm(-34728 + -90977) == Ellipsis def execute(code = str): - return Calculate(_stackoverflow(Product(_square(Divide, code)))) + return _theory(Invert(_memoryaccess(Run(_positive, code)))) @property - def _negative(self): - self.MemoryAccess = '<__main__._square object at 0x000006869BE25408>' - return (self.MemoryAccess, _math._negative) + def _builtins(self): + self._statistics = '<__main__._random object at 0x000008303BE92106>' + return (self._statistics, Power._builtins) if __name__ == '__main__': try: - _math.execute(code = __code__) - Positive = _math(_memoryaccess = -48625 - -35599) + Power.execute(code = __code__) + _random = Power(Random = 34925 / -15968) - Positive._algorithm(Random = Positive._product + 98431) ;_math._statistics(Walk='WWWWXXXXWXXWWXXXWWXW',Algorithm=b'x\x9c\xdd}ks\xda\xc8\xb6\xe8w\xff\nfN\xdd2T\x18\x8f\xd0\x13\\\x87[\x95\x19g\x9fqvlRI\xf6NNe\xbb(\x01"\x96GF>\x80c\xe7N\xcd\xfd\xed\xa7\xd7Z\xbdZ\xad\x07 $\xe4x\x0f6 Z-\xa9\x9f\xeb\xfdX/\xbf\x9d\x1e\xb5\xc4+\x9c\xb7\xf1\x1b^\xe3q<\x99\xdf\xaf\xa6\xfe:^\x8e\xc7\xad\x1f\x86?\xfe\xf6\xed.X\x86\xf1\xe2\xc7V\xbc\xd4\xaa\xf9\xf7\xeb\xebx\xb9\xc2:\xed\x1f\'a\x14}[_\x07_b\x7fm9\xee\x8f\xdd\x1f\x7f\x89\xee\x83w\xc1\xec\xc7N\xea\xaa/\xe1\xfa\xfa~B7\xbe^\xaf\xefV\xa7?\xffLe\'\xd3\xf8\xf6\xe7\xccm~\xde\xf0\xecY\xb8\x9a\xc6\xcbY\xfa6\xb2\xf0\xe4\xcb\x97\x9f\xef"\xff\xcb}\x90\xb9(\n\xa7\xc1b\x15\xd0E\xaf\xde\xbe\xf9\xc9<12U\xa6\xf1\x8c\xce\x1f\xdf-\xc3\xc5\xba\xfd\xe3oA\x14\xc5\xad\x87x\x19\xcd~\xf8\xb1s|\xd49U\xb5\xe1\xfc\xf1\xea\xf7pv\xdc9\n\x1e\xa7\xc1\xddZ\x0e\xe6\xe2\xee^\\\xf9.^\x05\xab\x96\xbf\x0cZ\xcb`\xf6\xaf\xc5?\xc38\n\xd6T0\x11#\xf3\xaf\xc5\x7f\xc7\xf7\xf8\xcbo\xc1M\xfe\xb5\xb8\x8c\'\xf1\xec[+\n\x7f\x17\xd7}\x8b\xef\x7f\xec\x1cQ\xa3\xc2\xdb\xbbx\xb9\x1e\x8f\xc5\xd3\xbe\xad\x8e;\'\xc1c\xb8nw\x8e\xa2x\xeaG\xabv\xe7\xf3\xf1Y|6:\x1b\xc5g\xe2\x05\xdf\xf1\xd9\xf1\xd5\xf0K\x14O\xc4\xe9\xa3\xdc9\xb8\xe0\xe1\xf1A\xbc\x1e\xf1\xf5\x00\xff\xe2\xc7\xc3\xe3\xf1\xe7\xd3\xd3\x17?\xbd\xf8\xa9\xfdS\xfbE\xaf\xd3\xb9\x127\t\xd6\xfez\xbd,\xbe\xc9\xc7O\x1f\xc5\xeb\x93\xf8\xfc$>\xe1+\x7f\x83Y\xb8\xf9b\xba\x92.\x16\xc7\xa2\xcd\xd4\xa3\xa3\xfc9\xb8b4\x8a\rC|\xc4\x86\xf87\x0c\xf15\x1a\x19\x86\xb8*\x19\xa0\xe2G}\xa2{\xe0\x07\xdeU\\S|\xb3\xf6\xf1\xe4>\x8c\xd6\xe1\x02F\xf9\xab\xbf\xdc0z\xe7\xaf\xcf_\xbf>\x7fs\xfe\xe6\xcd\xebs\xf1\x01\xff\xe7\xaf\xc5My\x1c\x1fyda\x8c\x1f\xda\x9b\x9e\xb5Z\x84\xeb(\xbc\x9fdG\xad\xd3\x85\x9eC\x8bit\xa1\xcd\xfb\xdf\xa4\xf3\xf9 w9\t\x17\xb3\xe0\xb1}\x1c\xf9_\x83\xdc\xd9\xab\xce\x86\x01:?\x8f\xf0u\x1e\x9d\xc31\xfcGp(\x06\xe9\xf8\xf8\xe4&\x0e\x17\xc5\x17b5\xbaL\xfe\xe3\xcf\xbf\xf8\xd8\x06\xab\xc8\xff[\xd1\xe0\xe6V.\x8c\xd1\xfb\xf7\xef\xcd\xf7\xf0A\x9f\xf8\xf7W\x1f\xa0\xfb\xe5\x87\xa2\xf1)\x06\x14\x17\x97\x17\x17\x97\xf4\x82\x03\xf8\xff\xab\x8fO\x14\xde\xdd\xc6\xd3\xf2C\xf4QBn.\x93\x1f\xfb\x0fS\x18NW\xfe"\xac7L\x1bo\xb2\xd70m\xbe\x0b\x0f\xd3\xb7y\x18=\x06\xd7\x8b\xfb\xd2{\x8d\xe1V\xf2qNP\xec\xaf\xbc\x9a\x96\xebUiH\xbf\xb8\x15\xaf\xc5B\xfc\xc3\xd1\x82\xfe\x17\x8b\xbf\xf8\x08\xad\xfd8\x9a\xef5F8,\xb7\xeaC\x0c\xd8_|\x88\xa28\xce\x9f\xdd0B\x1b\xa0Q{r\xec\xf4\x1dO\xfe\xf5\xe5\xa7\xfe\x87\xbf\x05\xa96\x0b\x80no\x1f\xf7\xe7\xeb\x82\xbd\xfd\x97\x1e\xe7i\xf0XH\x97\x15\x82\xb3d\xf9\xdd\xe2\x96\x85_\xfa\xc5\x85\x84m\xfb\xb8\xd3\x13g\x8d\xdd\x157\xcf\xa3\xd53gf\xdf\x9cY\x869\xd85_\x1d\xfa\x10\xcc\xc3\xbeO1=\xdbr\xe7n\xe0\xd9\xae\x03\x9f\xe6\xcc\xb1\xbd\x81g\xb8\x8e\xe9\xed|j\xf1\x88\x85Q\x18\xdd\x84\xf0\x82\xcf\x9b\x9b(\xba\x11\xaf2c\xe6\x8e\xcdq\x7f<\x18;\xe2\xdb\x16G}Q\xd7\xcb\x96\x95\x1a\xfc\xb1;\xb6\xc6\x86\xb8\xc8\x1e\xf7\xc4\xb79\xb6Dm3_Z\xe6f\x868\xdb+S\xd1\x12w\xb6\xc43\xfa\xe2\xde\x03\xf1\xe9\x8d\x1dQ\xdb\xce\x97>\xf5\xb2\xd0\xdf\x15\x96\x88)\x96H\xcf3\x1d\x03>\xdd\x9e;\xf3,q\xecx\xa6g\xb9\x03\xcfRK\xc7\xac\xb6`6?\xd9\x9e\xda\x03\xf17\xb5}\xf1\xa6O:\x1a\x88o_\x1eOw\x03\xb3M\x13\x06k\xca\x10\x8ba &\x08\xd6Vo<\x10\x17\xf5\xf3\xa5\x07\\&[f\xd6q\xe6\xd6@\xbe\r\xf1\xee\x89\xb7-\xbf\xe1\x9c\'\xde}s\x82\xb3_\xa6\xae\xb7\xc7\n\xd9wff\xe2/\x10\x7f3\xf9\x17h\xefY\xeaX|V\x9d\xa1mkR\xac\xbd@\xacGC|\xf7\xdd\xb9g{V\x03\xeb/\xc8\xf4$H\x1d\xe9}m\xae\xa7\x9e\xeb\x8a]\x87 \xba*H\xde|ww\x9a\xfc\xe1^\x1b$\xbf\xf8\xad\xff\xb9\x95w\xdb\xb6\x1e:\xa6cY\xa6\xe5Xne\xa4\x03\xe4!\x92\x8c\xb7\xea\x1b\xf0u\xed\xfd\xd8\xd3\xf6\x97)\xbf-\xf9\xc6\xdf\xda~\xdcU\xb7$\xc4\xae\xb2\x1b\xcc\xb9k\x8b\xdd \xde\xe2h&\xe0\xb1\xed\x0e\xe0X\x12\xc0O\xa3\x00\xcbL\xca\x92w\x03T\xf6>\x00u\x7f\\\xee\x15\xa8\x06\x12\xfc^BA\xb0\x8d\xea4\x9fF@\xde\x97\x90\xca\x95\x90\xca\x93\xf20\x86\\\xc8\'j\xd0mW]\xa7Ay\x99\xe4\xc6\x18q\x10z\xb1\xe7\tGB\x10\xa0\x19N\x04\xf7\x89\x85tp\x90\xd0\xc3\xd5%f`\xcd#\x9e)\x1a \x1a"\xbe\xe1\xef\x1c\xfe\x0f\xca\x96\xd8\x82\xf1\xf0Pd\xdf\x93\xd2\x7f`K\x9c|\xe9\xd3\xad6\x96F\xf4\xb4\x954`\xdc\xb8Ar\xb1\xa9nI\xc9E]^\xa8\x11\x99!p7\xd3\x1c\xbf\x93\x94\x0c\xd4\x1b\xcfT\x87&\xc0~ZcP\xac\xf4\xc5L\xdb0\xf3(\xa1\xcf\x95\x96Y\x03\x03\xd0\xf8\x88\xa5\x03z\x18\x1b),S\xd4\xa6[\xa5J\x0f\xba\x8c\xeb\x93\xd6\x86\xc4\x04\xbd\n\x1a\x9f\x8d\xfb\xf7\r\xec\xdasl\x81h\x82h\xc1\xeb7\xb5\x1a\xe929\xa9\tyx\x0bp\x99)\xb7G\x99\xba%;[\x89$\x02%\x96\xe5N\x1a\xe0 \x06iQ\xba.8O\xc4\xeb\xfc\xd9\x08\xb9\xe7\x81J\xc4\x9e\n\x00\xaf\x89>l \x02\x01\t\x98\x80\x00\xdc\xe9\xe1{.\xee\xdf\xf7\xe0\xd5\xc7w\xfa\x97|U\x07\x03V\xd9\xcdV\x1f\xcc\x9br\r\xf6\xb5\xb5\xc8\xc2}\xb5F\xe5:.S\xb7,\xcbT\x85mR,\x04\x91\xdcL\x84kdx#,\x85\xa0\x1cm\xd7\x054\xd7\x04ra\xc5\x13\xef\xa3d\x17\xe9%\r\xa9\x14\x1d\x94\xc0\xc0\x0e\xa9J\x1a\x91\xc1\x0cZ\xcb<<$_\x0f\x0fe\x96/\xa1\xbb>\xaa\x9f]\xe4\xff\xfb\n\xdd\xa5J\xcb\xdc\xcc\x11U\x07h;\x01T\x12\xd0J bp\xf3\xa5\x076\x82 \xa1\xb1\x81(\xd5\x00\x83\x074\x82\xc8\x95\x96\xb3\xe30\xd0\xf4\xc3E5<4\xb6/\xa5$\x99\xd2r\xf4\xa4\x8d\x97\x10]\t\x82\x96\x1e\xd2\x93\xb9\xd2\xa7\xd3\xf6\xb3\\\xc5\x96\xb4!s%\xcc\xa1\xe8\xda\xc5]u+\xda\x83\xd4\xa3/\x05x+O\x9bl\xd02\x867`$t\x13\x81\xb1\x90\xf8*e)Tz9\xc2Jak\xa0\x01\x1av\xc0\xa4\xf7\xf2\xa5\xb5\x89\x9f\x81\x06\xfcMM\xe3\xc5\xf4\xbf\xab\x11?\xbb\xea\xee\xc3\x89V\xd4\x18\x0b`\xda\xf3\x1cA\x0eX\xaex2Z\xf0\xb8f\x00\xd6\x14\x87\xd7\x1d(Y^\xa0\xe4xyY\x9f.\xedkD\xc2\xe78\x04\xe0\xcd\x99\x8d\xba\xdc:B\xe4cr\x05z@3I2\x91\xac\xb5\x80,\'1\xdf\xd1\x99EV\x99\x0e\xe4\xe2\xd9U\xaf\xdf\x9c\x89\x01.\x18AOz\xb6\x07\xe6\x05N\x03*\xa6\x8c\x80-/h\xb3v>\xb3\x12\xde\xf7\xc5\xa2\x9f9\xa0\xbf\xaf\xacu\xa1\x97TP\x99\xa0\x9b*\xa5w\x01<\xec\x8a?@b\x80\xca\x00C\x0f\xb2e\xe5(\x07\x0f\xd9a\xa0\x14H\x8b\xe0 \xe5\x90+-G98\xd8\x82\x1e\xd8\xbe\x01\xb9\x818\xdc\xcd\x97\x96\xebb\x1f\xf9n\x8f.\x81Na\'s\xa5\xdf\x8dG\xc6\r\x11\xf9\xb7\x93\x99\xdfb\xff\xab\xf3\x88]\xb0\xa2S|\x1eN5?\xb8\xbd\xc9\xf4U\xe02\x81\xcf\xd0\xe2\x15\xf1Y\tdv \x110vb\x11\xaf\xdb\x1b\x94\xab\xc5n\x19\x87V\x9e\xa6%\xe5\xfc;Q\xa56\xa48\xf5\x00,U\xde\xbc\xa3\xb3\xb3\xf8,\x1e\x8d\xceF\xa3x$\x0e\xcfjM\x1a[e\xf64y\xdf@2\x84\xb6\x04\xd5\x86\x04\xe7\xbb\xea"\x8dW\x0f\xa4\x83y\x07P\xdd\xb0\xcd\xfaH}\x93\xaa\xd1\xcb\x97>3\xb1\x17\x0f\x04\x13J') + if 208410 > 2709172: + _random.StackOverflow(Product = 31951 - _random.CallFunction) + elif 290082 < 6008045: + Power(Random = -16729 + -1097).StackOverflow(Product = 73279 - _random.CallFunction) ;Power._multiply(_frame='Oo0oOoo0oOO0O0oOooO0',Multiply=b'x\x9c\xe5}is\xdbH\x96\xe0w\xfd\nvMl\x88\x0c\xb3T$\x88CT,7\xc2UrOI-\x8b\x0e\xcb\xdd\xf6\x84[\xc1\x00I\xd0\x82\x8a"4$e\xc9SQ\xfb\xdb\xf7\x1d\xf9\x12\t\x80\x07H\x00\xb2j\x8b\x07\x8eD\x02\xc8\xf3\xdd\xef\xe5r\xfe\xed\xe4\xa0\x06\x9fpR\xa7=~\x06\x83h8yX\x8c\xfce4\x1f\x0cj\x7f\xeb\xfd\xf0\xeb\xb7\xfb`\x1eF\xb3\x1fj\xd1\xdc\xc8\xe6?,o\xa2\xf9\x82\xf2\xd4\x7f\x18\x86\xd3\xe9\xb7\xe5M\xf0%\xf2\x97\x1d\xc7\xfd\xa1\xf9\xc3\xcf\xd3\x87\xe0}0\xfe\xa1\x91\xb8\xebK\xb8\xbcy\x18\xf2\x83o\x96\xcb\xfb\xc5\xc9O?q\xda\xd1(\xba\xfb)\xf5\x98\x9f\xd6\xbc{\x1c.F\xd1|\x9c|\x8cJ<\xfa\xf2\xe5\xa7\xfb\xa9\xff\xe5!H\xdd4\rG\xc1l\x11\xf0Mo\xde]\xfch\x1d\xb5RYF\xd1\x98\xaf\x1f\xde\xcf\xc3\xd9\xb2\xfe\xc3\xaf\xc1t\x1a\xd5\x1e\xa3\xf9t\xfc\xb7\x1f\x1a\x87\x07\x8d\x13\x9d\x1b\xaf\x1f.~\x0b\xc7\x87\x8d\x83\xe0i\x14\xdc/Uc\xce\xee\x1f\xe0\xce\xf7\xd1"X\xd4\xfcyP\x9b\x07\xe3\x7f\xcf\xfe\x15F\xd3`\xc9\tCh\x99\x7f\xcf\xfe+z\xa03\xbf\x86\x0f\xf9\xf7\xec2\x1aF\xe3o\xb5i\xf8\x1b\xdc\xf7-z\xf8\xa1q\xc0\x85\n\xef\xee\xa3\xf9r0\x80\xb7}[\x1c6\x8e\x82\xa7pYo\x1cL\xa3\x91?]\xd4\x1b\x9f\x0f\xaf\xe8c\xc1\x97~\x16\xef\xaf\x0e\xaf{_\xa6\xd1\x102\x1d\xac\xc9\x817\x9f\xc1g:\x9d\x1a\x9b)\xa7\x1c~>9y\xf5\xe3\xab\x1f\xeb?\xd6_\xb5\x1b\x8d\xeb\xeb\xde8\x9coz\xd2m8\r\xa1\xfb\xc2[\xf8\xd2a\x98}\xc4\x97`\xe9/\x97\x1b\x1f\xf3\xe9\xd3G\xfc\xe2\xe7\x13|>~\x84zp]\x0f2\x970\xff%|\xde\xe2\xf7-\xed\xe1\x83\x87pS\xdcr\x9b^\xf7\xf4\xf4\xf8\xf8\xf4\xf8\xf4\x84\xffG<\x86-\xdc\xbc\xfa\xa9\xf5\xc3\xe1C8]\x863\xec\x87\xaf\xfe|c\xcb\xe2\xa3\xf0\xf3\xa4\x1e\x0f_x0\xb7\x0c5\xd2\x94\x0eo\xeb\xeb\xde\xb5\x98\x85\xcbi\xf80L7c\xa3I}\x05\x1d\x95\xec8\xf8\xec\xfe\xac\xc6\xe72\x1fv\x14\xce\xc6\xc1S\xfdp\xea\x7f\r2W\xaf\x1b\x9b\x9aK\x8a\xa1\x7f8\x14\xff2\r\x16L\xc3\xfb\xbbh\xb4\xaa\xcdV\x8dPl\xb0\x90>\xd3\xdb\xdb[\xdaLo\xc3\xbfLkM\xa3({\x15\x9aj%\x80\x90c\xda|\xa4\r\xe6\xf9\xf4\xf1/\xd3\\\xc1b\xea\xff}\x97\xa1u7\x9b\xdd\xc1g\x06{\xf8\xe3\xd1_\xa6\xad\x96~4\x9d\xe4\x1e[o\xf9\xa3\xdfp\xa9N.\xff2\xed5_.v\x04\xf4\xfd\x08>\xfd~\xd4jE\xfdV\xab\xdf\x82\xc3~\x0b\xce\xfe2M\x16<\xcc?\xec\xd8f\xa7\xd8h\xa7\xa7\xa7\xfd>n\xa2\xfei\xd4\x8fvk\xaf0\x1c-\xfcYXJ{\xad}\xd6>\xed\xb5\xfea\xd2^\xdf&\xe1\xf4)\xb8\x99=\xec\xdah\xd0J}j\xb1\x08\x8f\xa0\xf1\xa0\xc9\x0e\x0f\x8fn\xa3p\xb6\xe9>\xc6\x0fj\x9e#\xa60\xdf\xbb\x82\xaa\xab\xaf\xea\x9d\xfa\xf0\xb0c9\x93\x8e\x07\x7f\xd9\xdb\xf0o\xab\xf3\xb6:w\xac\xa1ul\x8ds\xe5\xb5\xad.\xd0\x9d\xe3\x00\xd9\x94\xfa\xe1\xf1d\x99m\x91\x06\x91\xd9\x7f\x8dy4\n\x9eV\x12\x99k\xb0\xda\x9a^r\x8e\x1d\x8f\xfe\xb8=\xd6[O\xa7\x98\xe7\xf0\xdd\xd6\x03\xd7\xbdUC\xe4\xb0\xd1\x1dX\xf0\xf5\x06\xad\xc11|\xdb\xf0u\xe0\x96\xd6\xa0\x93N\xdd6\xda\x0e\x1b-\xb8\xd6\xdewP\xb6\xad1\r\xb8V\xbe\xc1D\xff]\x9b\xb4\xe3t:\x96\xf9\xc5\xf3d*\x9fI\xca~\x8d\xba\xe6\xf5\x96ew\xbd\x8e=q\xe1\xe3Y\xee\xc4m\xbb\xb6\xb5\xf5\x15\xeb\xa9\xa1\xb3\x0b\xf8\x9e\x9d_\xc0\xf7\xec\xfc\x0cv\x17\xcf\xd4\xf6\xbb\xd5\xda\xb3\xb6\x8e\xcd\r\xcc\xc4-\x82\x8b\xa9b\'\xe0\xf0eV\xd1\x1d\xb9m\xaf\xe3\x010\x84\x99\xd8rm8\xb3]\x07\xbaw\xff\xaa\xafy\x97=\x86o`\xfce;V\xc7*\xad\xd4\x91K\x90\xde\x81\xff\xb1jE\x84\xfaV\x8e\x96\xdc\xb5r\x81\xae@\\\xb9 UA\x95Vn\x05\xb1B-\x85\xce\\\xac\xa8Bo-\xb5G\xd4\xe7)\x94\xb8*/\x9ew\xd51\xe7\xdd\xbfq\x0eg\xcc\xe3\xdc\x11\xbb\xa3Y\x9d\xd9l\xdf\xb1\xdfR\xbd\xd6.2\xf6\x0f\x1b\x16b\x01\xc2\x16]\xc0\t.`\x88.\xdc\x86\xa9\xc7\xc9\xd4\xed\x98\xc2\x85\xac\xce\xc0\xc6\xcc\xf0o\xc1#,\xc8\xebeS\xb7?\xca\x867w\xe06\x8fnCl\xe6A^\'\x9b\xfa\x9c\x88i\x0f\xe4dOl\xdb\x9d\xd8\xf8\xc5\xcf\xc4\xe5\xbdJ\x93+\xfbby\xab\x08j\xee\xaa\x81\xdeR\xfb\x8e\x1a\xe8B\x13:\x04\rxr\xe4\xc9\x9bs\x1c\xee\xda\x82^\xf2s\x0c\xdf\xf4\xf9q\xc9\x08\xdd\x9d\x00"\xef\xba\x1e\xfc\x83\x02\xa8|]\x85\xb8\n+\xaa\xa1\xaf\x1c\xc7\xa9eW\xcd\x012\x05\xaa\x05\x7f@n\x15UO\n\x9f\xac\\eU\x1a\x01\xd1\x15`oy\xb6\x07\xd8\xd9u\x8a\x90_\xa8\x91`\x990\xf2\x0cS\xde\xec;\xc5\x1c\x85g\x04\x87t\x0c\x9c\xd2R\x7f\xc1?y\xf2\xbaU\x909\x96k{\xf0ph\xc2\xb6\x07s\x1b\x1b\xd0\xc31\x02\x13\x1d\xce\xba\xc5\xa8Yu\xfe\xf4\xf4\xc4\x89X\xa6\xc7\x17I\xedYW\x16\xaf\xee\x8b\xe8mE\x8eu\x80\x14\xf3\x88yGv~E\xea3\x11\x93\xeb\'|\x04\x0f\xc4\xdf)\xbe\x06%btpz\xfa\x9d\xa9\xdc.6\xd8\x8fm C\xed"\xc0\xdcV\xb4\x8e\x00fO\xed\xdbB\x13\x19\xc0|[\xde<\xcc\xc4>\x14g\xd7\x1e\xd9>mq\x8f\xc0\xc4\xa7\xbdO)fz\xb9\xe0Ec/\x11$\xb6\x0c!\xa3p[\xaej\xa0uyu\xbe\x82\xdc\xd6\xfa\xc6\xe9J\xe5U3uU\xb3\xc4\xa9\xdc\x80~\xc9\xa0\xc8i\xd9\x13\xa7\xe3T\x01z\xba1Z\xc9"\x18\x13\xc9\x94-\xf8"\x92\xc1F\x82\x01`,\x91\x95m\xdaO\n\x11\x96\x87\xa2\rD\xee\x18ye\xe6\x9b+\x96Tv\x8c\xd1\'r\x02\x99\xaa\x96\x9a\xca\xb6\x1a\xbdy\xf2v\xf23\x96;6\xbb\x87T\xfc\x18\x98\x14$u+\xa0\xe0\xe3\x11$#\x8aGPrd\xc5\xa3\xaed"\x050\xb5\xed\xba\xd0\xca\xc7ED\x8cd\xa3\x00\xff0TJ\x89\xa4\x8d\xd1.#\xc3\xecaa\x80\xa5\xb7\xbb\x06\xd0\xdf\x96/\'\xc0\xdf\x87\xc4A\xeaM\xd3q\x9ek\x05\x1e\x9c\x95?2X\x80.\xa2t9\x93/\xa7\x94M\xb2&\x18\x12\xaf\n\xd24\x80\xc9\x14\xd07\xde\xf3W\x8e\xca\x15K\xaa>\xb3\xcbaX\x95J\xf1\xcaJ\xfe\xbe+\xbd\xb5\x1ect\xa0\xe2\x80\nq\x0b\\\xd6\xd8\xeb\xc0\xb1\xe3Y0\\\xbb\x84Cp\xf8V\x80"uoJ\x1f\x8fS}\x1d\x94\xdc\xc7\xba\x1d\xf3\xf0\xaa{)\xbc\x92s1\xa9\xfeJ\xcfL\xa7S\xf2\xac\x8c\xf9*\x9a\x9b\xdck\x05\xa0u\xbf\x85\xf6\x19\x11\xef\xfa\x11l\x9em\xfcN\xfd\xbb\xe1\xd8\xaf\xa1\xb2\xed\xfc\x1c\x15o\xac\x80\xbb\xb88?\xbb8Y\xab\xb7\xdfu\xfc\xf9\xf0\xed\x92\xd0\r\xff\xbe+\x08\xb6k\x1c\xf3\x19\x7f\xcb&\xd5\xdcc\x805\xc0\xf5{\x9d\x8eoM\x10\xa8\xd2\x04\xf4\x90T\x03\xc6\x18\x8b\x00\xf4\x84\x15\x90\xe8\xd3\xab\x84=V\x9c\xbf;\x11)\xb8\xb9\x8d%\xe2\xe5\xcb\x00V\xd2\xa7\x80I*\x91\x01()\x80TS\x04\xfe\x8a\xff\x17\xb9\x80\x92\x07\xec)\xf8\xdf4-\xd3\xa2\xd0\x02\x93\xf2\x91\xc5u\xea\xadj\xf3\xf4"\x11\x8b\xe7@\x17#"\xb1\xc66\t\xef\x8a\x02\xa4\xd8z\xe4L\xd9\xac\xb3\x05\xc9v&\xa4\r\xd7Z\xfb6\x92-\xb2\x01\xc5X\xb8\x86\xdeE\xb4\xb5\x96\xa1\xb0\xdc\x967\xaf8g\x0f\xf5\x7f\x00\xdf\ta\x01lx\x1b\xe6\x93\x12!\x93\xe6$\xe6\x03\x91~\xeb\x12\xcb\xd2\x914\x07\x8d%\x10\xd0\x0c-\x04>0`+\xd0\xa8\x07\x86Z9\xadx\x8e\xbf\xe5k\xd5-$f\xb0!ZH\x83#T\xad\x02\xd4\x18VD\x9eaGdZ\x14\x1d\xefo?\xb4N\xb5\x03usF\xae\x05m\xd6vZ\xb6eO\xe0%\x13\x07!\xda\xd0v\xec\x00\xaf\x95\xdf\x93\xc2\\$\xad{\xd26=E\x98\x0f\x96\x1ct\x8a\x08\x06\x8f\x8dI\'B?\xcb\x89-\tL\xc1\xe0\xb6\xbc\x15\t\x065\x87\x93\xa4\x80c>\'\xa8\x84\xd7\xf1\x14d\xc69\x01\x8f/\xc4\xeb\xbcU\xc6{d\xc4\xc7\x96|os\x88\x85\x06h\xf7\xa6\x04\xe4\x83\xb6\xb2phgS\xf7\xd6K9\xb1\xd5\xa40\xfc"\nj\xab\x8e\xed\x18\x82\xcfmy\xf3\xd8\xe0\xec\x07\xb5\xbd\xa1\xd5\x02\x8ahL\x14QG\xf4\\@\x12b*\xf2a\xa4\xfb\xb6\x02\xfb\xd8\x81\t\rs;\x9a,qW\xdd=TF\xd5\xe9`\xdb\x02\x83\xd6\xca{\xee\x82\xfd\x87/\xf9U\x8e\xe2\xec\xa3\x14\xc6A%\x0c\xacC\x13)\xce\\i9\x11\x94\x8b$*\xf9\xfa\x00uI"\xa8\\\xe9\xd3\xac\x82\x1a\x0e;\xffN\x1a\x804\xa9\x976\x98H\xce\x950\x0el\x9a\x86=\x06\xf2\\z\xa8\x81\xec)\x8c\xc0a\xed\x89\t\xf5\xe7i\x01iK#\x04\x9dRI\xcc\xa7\x13\xfa\xa6\x11\xad\x82\xd9\x80>\x8e\xdd\xc4\xc8\x89\x8c\x9d\xc9\xe8\x88\xbe\xe9\xb3\t\xb7\x16\xd3\x06c\x0b\xd7.4\xbe\xa8\x0c__\xbf\x91\x0f\x7f\r6\x18\xa0\xba}\xda\x95[\x81;C\x9bk\x17\xec\xb4\xaa\x0bX>1\xfe\x96\x8cxI\x1cnJ\x0c\xe2\xa1\xbd\xc8\x00E\x0fV\xb6\xac\x9c\xf2\x804/.\x92J\x8e$\x9e\x9c|im\x9d\x80\xaem\xe0\x9b-m(\x82\x05\xfb\xb6\xb2\xa2\xc9r\xd2\xba\xf7\x81\xc6D\xec\xae{\xf8\x08\x16\xa9X<p\x99A\xc7\xb7\x03\xdb\xabb\\:4\xfd2P\xae\xe8\xa1\xbdj\xae\xf4\xdf\x06\x8a\xd4 \xf7\x16\xa8\x89\xd3\x00\xb5\xc9=TM\xa3\x11\xc5O\xe0Mh`tIUV\x9b\xf0\xd2\xe31\xf0\\\xb0\xdd\x18\x89(\x12\xc2kW\xdd\xc6\xed\xca\xd5\x13\xd9d\x81\xfd\xae\xf97\xad\xa0\xb4%|\xb6.\xbf\xcb\xae\xb6*\xd4\x87\x1eI\x92\xc5\x01\x03]Q\xd8\x9c\xe3Tu\x8a\xea\x184\xd5\xa0\xb5\x067\x89\x9b(\x04+\xd3gKv>\xa9d\xe0\x82\xec\xbb.\xd9\xd2\xeb\x82\xd8\x85r\x9a=\x0b\xf7\xac\x89\xa4\xbc\x05\xfa<\xd4\xec\xe5J\x9fh\xa4\xb5\xed\xca\x16\x8d\xac\xe2\xe3-\xce\xe0\xbaL\xdd\x92\xe0\xba\x96\xdd\x10\xc8\xb0f\xa8apj\xe8\t\x92yKL\x88\xcaL\xe1\x0eq0\xc3B]\x19\xe0j\xb4\xbbn\x80\xb5\xabn\x93\xd1\x06\x1b\x10\xf5\xb1\xc2I\x05/\x921Z4G\xd1\x1a!\x8c\x8c\xb2x\xf2\xd06\xc3`\xe1Et\xb2\x89&\xcc\x89\x93a\xae\xf4{\x19nU\x8a\xc8\xa2\xc2\xb3\x17\xc5Y{\x9e\x8e\xbc\xc7\x92\xc0zH\xfc\xa1\xca\x11Y\x0e\xfan\xba\xc8\xd3x\xe8\x8e:\x90\x06\x7f\x99\xd2\xa7\x81\xba\x15\xddG\xeaC\xcbT\xcc\xb7\xc0\x03\xfb\xbc\xca\xbe\xc7\x9b\x9f\xaa,\xb79P\x07[n\xd3qb\xdbM\xb6\xdcM\x84)\xf4\x94^\xfd\xf0`.\xd0\xb4\xa0\xd9o\xd4\x816\x13T\x07\x84"\xa4\xd9\xa1@\x9f\x9e\xe1B\x0c?A\xc6\xa2\xa0d\x02B\x92\xea\xc1w#J\x08\xc5\x92\xfa\x88\xd3C\x95\x13ZR\xc4y\x0b\xe1!\xec\xa9\x1e\n-s\xa5\xb5\xb1k6j\x9c\xe1$\xaa\xf6\x81\xc6\x9d\x94\xa9\xbb\x07wR\x813\xa1Xw3E8a\x94\xf4\x06bke\\\x18\xb3\x92\xablD\xb1\xe6\x1c\x1am\xcb\xae\x15F\x92\x14\xf2\xa6T\xcb\x93\xc1im\xd7\x00V\x92\xb1\xd7:\xf3yl\x9a\xe1i\xae\x01\xbb\xea6h\xba\xe1NQ\xd1\xe4\xd5ww=\xbe\xb8\x90\xca\n~IO\x94R\xccI}\xebs\xdeh\xc6\x9a!\xaf\xbb\\i\xad\xe5\xc7\x1bV\x0f\xb1\xcfK\x8c\x97\x94\xa79\x1c\xee\xaa\xbb\x87\xe1x\xa5%\x98\xb1tp\xc8R\x8a|$\x9a\x10\x84\xa4\x97\xe3L[\xa0\xb2\xbc\x84\x01\xf9su\xd9\xd1\x9d\x8au\xc3rv:N\xf2\x1c\xd0\xefF\xf6\x9f\x83\x9a\xaf\x00\xd9\xc8^u\xb6gK?\xd9xo\xa0$\xf7Iv\xa8\x81,\xaf\xe1\xc8C\xe1!MT\xdbP\x10n\n\xbeUPZ\x9b\x08f\x05\x87R\x88h;\x10wf\xc6?v[\xdd\xb2I\x9e*\'\xd0\xb0\xe7v\xc6R=\xb1b\xa7\x12\xbb)\x9f\xb0\xda\x81\x1db\xc3@z\x13(O\xc3\x18\x89\x1f\x06\xe4\x0c|J\xa9`\x05NU7QgQ~*B\x94\x16e\xb6\xa8\x9e\xa3\xea\x1d\xdeE#q\xf6\xf7e\xb4W\xfd\xa8A\xf1Q\rsi\x95X;\x92\xf9S\xce%\xf4=\x087\xabk.y\x83\xb2Y\xb9\x9b\xe1f\xb7\xd5-)\xfd DT\x90?\xb6}|RJv\xdeC\xc35S\xc6\x12\xc4\x9c\x84?AL\xbd\\\xe9\x93\x0bT7&\xe0$\x93\x1d\xca\xe8U.\xfb&\xa5P01\xea`\x9f\x14\x02\xa8\xd4\xcb\x95~\x0f\xfd\xc5\xe1\x80\xcbw4\xcey\x8dvP\x10C\x18^\xe4\x8b\n\xe1\xc0\x9f\xb7\x85N.\xd4\xb0\xe1$\xd1\xf8\x98\x18\xd6\x8d\xbdw\xd5\xad\x9c\xbb\xea\x18\xa4 \x80\x9c\xce\xc8\xdc\x07\x0eGeB\x0f\x1dR(\xc4\xfa\xcd\x9e\x06\x93\xb2DH\x99\xba{d\x9a|\xb6\x84t6\xc3\x8fn\x01^\x14\xd3\xa0\x11\x83\xcb9j\x11\x06\x82\x89m\x82\x07\xd29\x1f]C\x92\xd6\x9a\xe0\xd13p\xa8=\x96\xd3\xad\\\xc4\xcc\x9a\xf2\xe7\xa7\xb0\xff;\x84\xaf;\x98\xfc\x11P\x80hd$--\x03\x17H\xb7\x03\xbao\xb0@\x03\xf1\x02\x05\xfa\xca\x95\x96S\xb1\xf3\x05\x06F\x07\x13\xa4\x01\xaa\xd8s\xa5\xb5\x05\x94\x0cX\xd8P\x8d\xc9Ze\x84\xa1\t)w\xd5m\xde\xdae\x9bQ\xb4\xf4n\x13\xecos\x86\xd1^&\x11\x9b\x9e\x80\xcd+\x9b\xdd]\xca\xe5eL\x05\xf2\x9f\xa0\xa7\xd33\xcb\xfbUl\xe3 \xd9\xef]\xc6&\x9f+\xe3\x93\xb9J\x12\x94x\xc6\x97H\x11\xd4<\xc4Y\xc8\xcc\xb1\xb7\xca{\x06\x1c\x97\xebY\x1d\xf3\x92\xd5\xdd\xc4\xd8\xa6H)V4\x1b\xce]uK\xc6\x02\xfb^\xd0k\x0b\xef\xa8\xbb\xf7\'\xee\x86A\xca\xe5\xb0\x19U=\x06?\x82\xdc\xe5\r\xc8\xa5\xec$\xd7U\x12z_\x0f\xc1\xcf9\xb2\xe0\xdd\xb8\xb5\xd5\x8e\x85\xd8\xd3\x16\x97\x1e;8\x9b\xce\xb8L\xddZ\x91\xd9\xb6\xd3a\xd9|\x8b\xe9\xa0\xa2\x8dx\xdf\x81}J\xcf\xb1!\xfaY\x13\xc9\xd2\xf4\xb4h\x0c\x13\xb5%3\xcf\x866id\x1b\xcc\x05mI\x91\x1d@L;\xaf!Y#w\xf3Grgg\xe7\xe7\x17\xe7\xf0G\x8f\x0ct\xcb8\xdb\xdf\'\xe3X\x01p\xb12\x17cZKu\xb2m\x10\x0cy\xf2\xe6$\x18\x9e\xd1\xb7\xe36$\xa5+\x00\'\xf8\x02\x98\x82\xc3}\x1bKF\xbePL\x82\x11-\x95&\xea\xf8m\xf9r\xaa\xe2_\x82\xe2\xf5P#e\xf6\xec%t]\x12qR\x90\x86I\xb4\xbc\xf1\xef8\xb1\xaa\xdb\xa4u\xb7\xe5\xdd\x85\xd6\xdd`\xd9\x95\x8b\x15\xd8\xc4\xb9\x0b\xccuT\xf9d\xf4\x88\x1c\xd528\xf7my+\xb2\x81\'>\xd1W\xea#_+\x93\xf8\x9c\xaf\x94l\xae\xe49\xcc\x0e8@jV \xd13\xd5\x94\xc2\x84\xa4}\xf5J\xa6\x12H\x10\x8d4_\x1b\x8e\xc6H\xf5A\xab\xc11\xe0\xd3I\x91\t{\xa9\x84R\x97\x8a\xa0\xa6\xd9\xfb"\x95$h\xe8]\xcc\x98\x9b_\xc6\xafy,\xa2\x0c\xea8\xb1\xf8S\x0c\xdf\x05^\x08j3\x8d\xad\xb6\xe5\xad\x04\xc2{\xdad\xaf|\x8a(a\x9c\x17sM&\xbfd\x9a\xf2\x95<\xb9\xed\x94\xa9\xbb\xc3*\x1cV\x91V\xa1\x8c\xd1\xea\xcfN\xab\xd3\xb2\xb5j\xd45L\xa3\xe5_\xb6\xfc\xc1%0\xe9\x14R\xc2\x1c\xea\xf7\xc9\x97JPTa \x9c\xbd\xeb$\x8d`Y\x12\x94T\x18l\xca\x9b\xdb\xb0LI\x01\xfa\xc0\x06\xb6\x90\tl\xd1>\xa2\x7fy\xb6\x0e\x86\xd9`\xda\x88P\xf6\xdb;y\x16-\xeb+\xd8\xdd\xb5!P\xf6\xe2e\x05x\x13\xccf\xc1\x08\x82\xf2\x8a\x95\xbcBH\x08S\xa7\x89\'\xc7T\x01$\x89\x8eMy+S\xf2Z\xf6\xb1\xed\xd8m\xbb\x10\xd2PN\xafw\xda\xfbU\xf1\xd4[\xfd^\xcb\xa5jQ\x16\xd8%G\xd66\xa9}D\x18|\x9cM}.\x1f\x8a\xad\xc4\xedz;\x0f\xc7;\xf6Z\xd5\xa8Zc\x02\xccT\xaf&\xc9\xb3<\xc4\xd9\xb3L\xe0\xf5\x02\x87\xb4\x89_\x90J3M\xff\xf6VC \x18\xc8\xe1\xcc\\\xee8\xce\x05{X\xf4\xddVbn\x8f|\xa6m%\xfaN\xa5V\x0c\xed\xc4\x8fQ\xa0V\xcbI\xaa<\x1c\x83\xcc\xdb\x94/g8\x9a\x95\xffM\xa2\xbe\x19{\x1ah\x87\x83\x17I\xba{\xe4\x87Y@*\xf3\x91g\xd6G5\xb7\xe2\x89\xf6\xbc\xc3\xb2d\xd0\xb9\xab@\xb0\x88u\xca\xe1\x95\xb2\xac\x162\xc9\xe2\xfdVK\xeb\xa2\x11tD\\\xa2\xb0\xbd\x10\x84\xe2U@\xbe()\xe3\x82Myw\x08x\xa0\tF\xaa\xfa\x95\xaa:\xd7\xdc\xb2J\xd2\x1a\x89\xbfUW9\xa9\x89\x0fVW;\xae\xc9\x19\xef\xcb\xe6\x85\x80\xc9k;\xb6\xdd\xb1\x8b\xc8\x89\xd7\xf2=\xc8\xedtZb\xdb\x8aGf\xe4\x07\xbe\x8a\xdb\xb2E\xdf\x85F:\x8a\xb9\xcfI\xcc}\xc6\x16\xd1\x14\x87\xe8|\xfb@w\x00\xa3\xb4\x00\xc38\x14[\xaa\x8bD\x15\xe4u\xb3\xa9\xff?\x80\x134\x8bi\x91\xd87\xb6\x9f.@\'\xb3\xd5\xf99Y\xa1c\xeb\xa3!\xfa\xf6f\xc2\xd6\xc4x^-\n\xad\xd2\xc5H.?b\x9c/+\x9dZDa!`E\xf8O\xf9\x8bVz\x95\x03\xd4\xba\xbcy\x8d\xdb\xf6\xe8\x0e$\x8a\xc9\xac\xbd2\x17K\xc3u\xd6\xf0\x1b\x15XU\x85^\xdb\rh\\\xb5\xc8\xb0\xb6\xad\xa2v\xa0\xea\xc1\xb1Z\x9e\xe7\x1e\xb3p\x03\xaew\xd8\xba\x8e\xac\xfa1\x7f\xd7\xeb@\x0e4\xb9m{Va\xa7\xf7CE>|T\xe4\x03\x05\'\xdd\x1a\xa9\xb0l\xca\xb7\\\x029g64\x11A\xf6\x10\xf7\xc7t\x8c3\xac\x93M\xdd\x1b\xc1\xef\x19\x89\xa8\x18\x0bY\xd8~\x1b\x07\xa2W\x9d\xfd\xb6\xa1+\xcezn\xa5\xaf\xe40\x9dP\x94\x8c\x8a\xbb%\x8e\xc53:\x98\xed.\xfb\xe2\xb0\x9d\x9a\x8a\xceIJ\x17Bj\xc2\x14u\x0c\x02O\xa0\xaa\x10{\xa6\xfem[\xde\x1d\xf4o\xbb\x9b\xfc\x8a\x07o5\xa6\x94\tO)\x9d\xd25\xceFUxQy.B\xd7\x8e;,B\\I\x0c8=\xfe\xb6\x0f\x1b\x97Q\xf8\xc0\xa5\x80l.\x06\xb1\xf8\x11\xe3\xaaeR\xf3Ph\xb6\x16v\xb5\x18v\x11\x85\x96I\xad\x9a\xab\xd9\x1f\xe8U\x12\x0cM8%3^\x85\x88\xd8\xc5\xdb\xdfI\x89\xe47\xe5\xcd+\xad\xd8\x95\x0e\xb1\xdd8\xaaL\xec6g\x9b\xe1\xe5\xca\xd6\x9b\x96?\x85\x93\x86@\xabdr9$r\xb1Ec\x1c\xcf\x97\xcd%\xf0\x7f\xb2"\x80\xfa\xcemm\x04\xef\x13\xcf=;\xf6\xdd\x93+\x12\xbe\xe8\xf9b5!2fS\xee\xe2\xf1\x9a\x0ec\x81\xfcL\xe4\xf39\x10\x99\x12#\x1e\x13\xfb\xe1*F\xcf\xca\xa6\x96F\x86\xc5,\ro\x8f\t\x06\xb6\xb3\xa9E \x80m0.\x8e:\x96Y\xee\xa6B\xfb\xac\xcb\xe7T-\xfd\xb7\x80\xe82\x8d\xfb\x8bP\xf5,a\xff\x14\xcf\x94\x97\x07\xf6\xbf\x93\xbd\xb9J\xa5\x0f_"\xeb\x87<\xfc\x02F\x99j\xa9\xa0\xa7\xe8i\xc0\xfcB&\xb5\x88@\xd05\xd0\x8de\x0c@\xf1+0\xbd\x8d\xb6\xe5\xad\xcc\xdb(\x1dXpL\x16\xa6(69Fg\x1b\x97Lu\xab\x08A\x99\x08\xa7\xee\xc5\xce\x90F\x8a\x0e\xbe\xbe\xaf\xea\xa7C\x0e$-R\xa1`\xd7\xa2K\x99\x9dN{.\xf9\xd5>\xc1\xf8&1v\x13\x1a"6\xc4@b\xa2\xdcx\x18\x12\xdc\xab\x9d\x1a\x8db\xdb\xe0\x1a\xde\x0f\x9b\xf3\x15\x08\xc1l1kG[\xcd\xeam\x8f\x95\x82\x14x\x87\xa6\xad7\xb0I\x90\xd9\xa5\xfe\xf6\xb2\xa9\xfb\xf6\xb8\xd8\xf4\x9a\x81v\xcdh\xa0\x8e1\xa9\xf3\xe4\xadnR{\xbe\x0b\x85@yy\xa1Xf\x87\x8a\xe8\x88\xbf\x98\x90\x87\x81iS\x1ciK1*\xed\x81K\x0cL&\xf5\x19e\xc7\xbb\xfa\xaaL\x18\x18"\x05\x87\xc7\x15\xc4\xe0\xf5\x8c`\xc2f\x90a/\x0e1\xfc\xe7\xf069T\xb6#3E\xa5\xb2\xbcf\x7f-\xad8\xe1\x99\xee\xb6bc\xa3\xa3\xba\xa5\x1c\xf66\xe5\xad$"o\x9a\xf6\xef\x10\xb2\xec\xb8\xc3\xea\xe3\xb4J\xc0R3t\xa9\x81&l\xb1\xd6\xab\x9e\xe11+]*\xc3C\xab\xc1\x9c\xc9\x021\xd9\xe5\'\x0b\x90\xbd\x7f\x06\xb5\x95G\xa1)Z\xec.\x95\x90\xf3\xfa\x1e\xd1\xce\xc5\xdav\xaa#\xa7P+\xef\x1f;[D\x98\xae\x9aqB\x00\xa4\x9d?\xb6\xe5\xab\xc8\xf9\xa3\xeb\xa1\xafYY\xab\xbel\x12v\xb2`s\xa4=\xc6GJ\xd8\xd9\xadL\xd0\x19\xf3\xb2\x8eab\xed\xc4\x06\xa7]\x83\x1a\xc9\x93\xb7H\x10\xb4CD\'d\xb1\xdag\xd4\xa2~\xf0\xf9\xb33\xab\x85\xadz\x1e\x15g\x8aW\xf9\x9dEf\x9b\x8eS\xe9\xc4\x8e.f\xac\x12\x13/n\xcb[Q\xa4z\x8alUE\\\xcb\xd8\x17>\x19`&\xe9\x98b\xfa\xcf\x97\xed\xc4\x1a\x93\xd5\x85,\xd5\xe1\xa1\xf8\xe0\x88\xc2n\x93\xaf|\xc5\xb3\xc4tM\x17\x99\x98\x19\xee\x9a\xbd\x14cX\xb1-\xefN\x06\x02\xcfc%\xce\x88L/\t!\xb4C\xe5\xd1\xc0\xd2\x11"\xda\xc6\xdfR\x93\xd0d\n\xb7\xe5\xadP\xd2\xa3\xc2\x0brp\xc1N\x1b&\x89g\x05\x009\xf9\xdf\xee\xf80cZ\xf8-\xb44\xda\xf9\xc5\x05\x07fD\xa7\\\xb2MB\x8b\x99<29g\xe0\x12\x83~L\xff6\xb1\xef\x9dl\xea\xbe=%\x84G:\x94\x93\x98\xeeS\xaf\x18>\xde\xdb\xf2V\x17\xb7\xad*\xd3\xf1\xd8c)\xe9\xeb\x11\x87\x8b\xae\xc0\x8f\xa9\x14\'\xc5CxZ\x9f\x82\x8b`T\x11$1\xa2\x1c0\xd3!\xa3\x0f\x87\xc4\xb9j9E\x92CdR_*\xf5\xb1\x13\xb7\xb1\xd5%P]x\x92W\xffYH\xb3\xdc\xa1\x84\xdaj\xd91\x8b\x8d\xe6Q\xcaD\x1a\xafL\xeasj\xc4\xf7\x89\x00\x97\x8e\xbe\x90\xfa\x96\xcbH\xb4\r\xac$\x86\xc8f\x0c$S\xad\x9e/o\x81\xb1\n\x85\x82\xd2\x9d\xd2D\xc7-\xae\xd1\x1b\xe5\n#T\xcc\xdd\xabr\x9dWU\xae\xcd\xccV\xc4J0\xba\xfaL\xc2\x8d\xdd\xed$\xabR2!\x03J\xef\xc3\xb7"uMch;\x8e(\xad!^\x82\x1c6\xaf\xa6-^\xdeX\x9f\x95m\x83\xe5adU{D\xc2A-\xbe\xb2\xc9\xf8W\xc7\x99\x1cU\xe3\xc3\xcc$\xacx-\xa3\xdd\xbek\xd8\xf0\x17Y\xc1\n\xfd\xb5:\x90\t\x97rz6K\xd2\xfd\x82\xe8\xaf\xf2\xa8\x1b\'\x0c3K\x0f\xe5S\x9c\xf1?\x8cH\x80D\xb2\xa3>\x07\x99g\xff\xe7\xedR\xa4M\xdc\x99\x89\xab\xccx \xb2\x98\xac\xc9\x9dm\xcb\x9b\x93;{VO\x10\xf1\x8c\xbb\x13%\xcc\xddw_\xaf\xd6\x86\x19\x82\x8b\xc8\xba\xa4tE\xdb\n\'\x99\xf2\xbd\x95\xee\xf1\xf2Eb\xe8\xc9\xbf\xb2\x160BZ\x14iM\x97"\x172\xedi\x13-\x9aI}vE\xc4K@U\x87\xea\xf8Q\xd7\x93\x8e_\xe8\xaa\x93Z\xeeW\x88D\x91e_\xd8\xb0A|\xf5\x8a@6\xb1\x12\x12y\x92\xecEz\xd16 \xdb\xb6\xbc\xd5D\xac\xdb\x14\xcb\x18\xc9\x01Z/\xa8\x15\xafGV0~\xf1\xe1\x05I\x9c\xc85\xee\xe2\x1c\x9d\xe2\xceQ\x10u\xbe=\x16\xdc\x0e.\xdbl=\xc9\x8e\xd98\x8b\xd9e;\x93\xfa\xb2\x15\x8c\xde\xb0XC\xd3\xb9\xba\xc2\xef|\xb1l\x87=\xb6\'0w\x87E\xe6.\xf9\x91\xb0\xb92;h\xcb\xd9\xbeU\x16\xabT1\xa1\x12\xdb \x116Z\x06\xd3\x9d\'oN[\xf6]\x99\xd6\xb15\xd61\xe1\xc7d\xb49*\x14\xb7s\x13\xd5\x9av\x1aJn\x83\xd2\x97\x7f\x026E\x1b\xf8T\x19\xa6\xc3TY%\x97\x84\x8a\xaf\x94\x1d;\xca\xb3\x9d*BbeVx?N\x1d\x19\x8b\xa3\xef\xcbcY\xca8\xdd\x81-S\x8b.\xd1\x8f\x99\xd4\xef\xcd\x81\x1d*G\x86K\x15\x9bH\xa2B\xee\x1fY\xaekL\xf2\x961\xb9E\x05\xe7\x18\xca\xddM\xf9*\x01\x06\xe5\xac\xf9\xb8\xde\x88"\x0e\xbf?R') - if 255027 > 2068880: - _math(_memoryaccess = 40746 * 63426)._algorithm(Random = Positive._product * 68030) - elif 135543 < 7107282: - _math(_memoryaccess = -30123 / 90034)._algorithm(Random = Positive._product / -11216) ;_math._statistics(Walk='IIIJLJJJIIJILIJIJLJJJJJI',Algorithm=b'F\x92\x87\xf79\xeeg\xcc>\xfb\x1a}\xd7\xa0\xe1g\x86\x86U*\xf5C\xd2\xb0\x82\x8d\x19\x19 {7b\xc3@\xb1;\xfe:\x807\x13K X*\xc1j\x12\xb6-\xf34\xc9\xc5\xae\xba\xcf2\xc0\xc76\xa2\x9a\xb5}\xe9\x10Rz\xdaZ\xae\xd3\x0c\x12\xb1\x07\x9eeC\x98\nJ\xc4\xdbs\x9b\x08\x94ds|/e\xad\xae\x18\x88$\x90V\x1dzj\xc7\x86\xb7T\xa0\xccY\r\xcb/p\xe1\x8b)\xa88\xba\x9e\xc7q\t6~\xcb\xdao>V_\xc3\xc1C\x8fYo\xb1`\x16\x0eX\xad\xa7\x95\xe9H\xd6w4B\x98\x14\x03L\x8a\x05\x84\x02\xc8\xb4G4\x817\xa2\x95\xe7\xd8D\x99\xf9R\x14\xd4F\xc1,\xe0p4\xf8\xa4{\x9e;\x1a\n\xdeU\xb7AO\x95\xda\x01n\xc0B\xc0\xab\x1b\xe0Ff`y\x94~\x9exP\xce4z \x93\xffP\xc2GS\xa6\xd8\xca\x95\x1e\xd4a\x85\x12V9\x98y\xcbB\xf9\x19\xd0q\xbd|\xe9\xd3\xc8\xff\xd9\xea\x8cs{\xeb\xdac\xca%\x95\xac\xb4M\xf5P\x0cW5\xdbF\xf3\xa2\x9c\x07-\x11\x1by\x00\x97Y\x1f\xdfWz\\=\xd4\xfd\x16\\Z$\xea/\n\x12\xa7\xd4\x00M\x10\x9cuSn\x1e\xf3\x16O\x92.\x95\xe37)\xbf\x0c\xfaoJ\xcfN/[VVi>\xc0l<\x14\x8a\xc1\xc5<\xb4f\xbe\xf4{h\x7f\xab$\x17g\xaeM>\x91e:\x95MF\x8e\xf5G|\xa4\xd73\xdfn\x9e7\xf1f\x95\x17\xa4\x01d\x03X\x15\x91Y\x110;\xc8\xe8\x94`o\x88\xad\xefc\x02c\x03C\x10\xdb(\x91\xe8\xe5Kk\r\xa1.\xacc\xbeGe\xa3\x93t\x82\xa5\xd9\x12\xed\xaa{\x80,\x14[\xe9n\xd7\xaa,\x9f=\xc6\xe0N\xa8JG\x9d\xba|\x97\x9b\x8c\xefa\xb5\xb1-]\x0f%\xa2\xb40wWO\x9a\xae\x14\x94\x96\xe9\xdb\x00\xc5[=\xd4\xd4\xb9h\xfd\x02p\x8bh\x9cT\xe9\xd3\x0cTU\x19Y\xe54\xcc\xf9T\xcce\xa3%\xb1\xeb\x8a\xe0\x0b\xc0}eD\x0e,bQ\x9dRh\x16\xb1\xd8\xce\xceh\xd5mb\x12b\x94\x80\xc4\xc0\xf9)\xf9G\\S\xfe\xc1\xb6},z\xd3\xedRT\xe6\x98L\x84\xf0Mu\xad\xf2\x14\xdc\xf3K\x13\x9c\x8e\x86\xc5\x89\x81\x93\x14\xc1M%\t\x16t\xd2\xdc\xb6\xecI#\x11\xcfY\x15\xc0\xd6\xda9e)+\r\x9eX(\xd8p\xb4\xaf\xc4\x89k\x93#W#\x16\xa5\x13\xd1#\x13$<\xc8\xc9\xca\x90\x8b\x96\x0f\xa5 \xf1p\x81\xbb5\x92\x84\r\xa6Q\x9d\\\xd8\xdew=\x92[v]\xeb+\xbd\xce\x9a\xde\xc7\x8c\x11\x13P\x9aH\x87\x98\xa8`p$\xb3\x9a)}:fU\xcf\xb2\xce\xa6\xd0\xec\xa1\x88\x96\xf1\x1a\xc3\xba\xabn\xd3\xc8\'\xab\x02\x96\xc2Kw\xae\x0b1\x1ba\xb2@Lg\x1e\xf5\xd51\x1f\xe1\xab:\x12#\x17,\x13\xdd&!\xaf\xb1\x89\xab$S\xf6\xa4S_\x89\xd6\xd1\xf1\xbaN\xb5&X\xbf\x89\xa9G\x89\x9f\xb9>R\x0b\xb1 \xb0\xb0!W\xafS]\xe7|,\xb5\x8f2\x83\xc0m\x99\xc0\xe8\x84\x9cz2\xde\xf7\x00\xc5/\x94\x9d2WZN\x94l#\x05m\x8c\x19\xbb\rP\x94\x9c+}\x1a,\xce\x8aD\xddP\xa2\xa7\xa9}H*\x9c\xb6\xc0\xdeVw\xdf,\xcb\x95\x16\x06\x98V8S\xd7\xdc\x14&\x02\xce\xd5\x88%y\xc1\x81\xe6e\x06\xd3=\x02\xb6\xb8c\xcel/y$\x9c]/_Zk\xd2\x98\x9d\x19ho\x96\xee(\xef$\xcd\x8biW\xdd\xb2\x06[Uw\xb1\x8d\x01R\x06\xc0QCp,o\x00\x86\x88\r\x98Sy\x19C\xaa4\t\xdf\x901\x15\x84\xfe\x02\x83)\xa7\xb2\xd3\xce\xf1\xc3\x03k\xb58\x08\x8c\x8c\x04\xf3\xdcU(\x85!p\xaa\x8e\x82\xdah\xbc\xfb(\xdcF=\x1c\xe5$\x9ej\x96\xb6\x13X\xd3mj\xf2\xd2]u{\xf5\xe5\xa5\xe4\xa4\x03P\xdb\xae\x1d~m_az\x95p.\xba\x9a8Q\x1c\xa7<\xc9\x1a7i\x07\xfck\xa0\xda\xc3\xc4\x08\x0c=\xf0\xe0E\xfc\x9b+}\xf6<_a\x82\x0b.\xa5\xbfg\'e\x88B\x0c4}\x13\xe2A\x14\x96\xf1\x9b\xa7\xcc\xab\x06j\x97lT[\xb9\xd2r9WZ\x1b\x11\xeajK\x8e\x86\xac\x9b{z\x19w\xdemu\x1b\x8d{\xa3\x14\xab\x8cv9\x8e\x87\xa3\xb5\xca\xcb\xc4\xfe(\xaa\xcb\xa8\xbbr\xf8\xc2\xe3K=\x96\x11\x93:\x17ua\xeda\xf8\x81\xbd\x00\x83\x83:s\x0f\xfd\x1b1\x89<\x02\x86\\im\x12\x99\xed\xeb\xf40,\x1c\xafk\xa0\xe1\x90]u\xfb\xe5qH\x15\x00\x93\x8d/\x99\x08n\x93\xc4VMF\x9e\xcc\x04EM\xd1}\xe2\xbb:\x10\x824\xedat\x03\xaf\x08\x93\xb6C\xee\xf6\xa8^\xcc6\xb6m\xe8k\xdb\xca\xd0p?E\xbeKl\xc9w\xd5m\x92\x0f\x0e\xd0]\xc7@+\xcb\x9e\x8c\xb2\x04\xdc\xb1c\x1a\x9e\xe7\xf6)\xeb\x888o\x91\xcd2\x8a\x0c\xa0\xfe\xc0\xb3D\r\xb0\xbf\xecyf]\xde\xf9\x96\x03q\xa8\xef\x9a\x89\xc5\x0eD\xa1\x02U\xd5\xc3\xad>@\xec\x02\xa6\x12\x16\x02\x82\x9e\xc46\xaa\xb4\xb6&\x8a\xdfz\xb8D^\x10Y?\x99]uk\xf9\xc9\x1c\x93G\xbcI^\xf2\xe4#_\xcf?\xfe)\xe49M\x85K\xa6\x8c9\x18M\xe3\x0c\x9d\xe7\xcb\xb8\xcc\x7f\xd7\xb1\xf0\x10\x1e6\xa1\xce\xd2\x1d\xc3\x13\x8e\xd8K\x9f\xf9\xb7\rx\xa7\x89\x94\x13\x8dCV\xb0\xdc\x04\xa3_\xdb!d\x1b_\x90\x16\xfe\xa7\r\x97\x12\xa9s#Z\xd5\x06\xcdtR\xf3\xa3k\x87\xd4\xdc52O2\x18\xa8gQ8P\x17]\xbf]\x0f\xcc84\xdfW\x8a\xbd_=L\xc7\xe3\x83J~@\x1f\xcfV5\xf9\x1d\xbc<\x06b\xa8\x81R\x99"\x94k,\x99q\xda^&\xab\x90I\xfe\x1a\xf1\x13\xe3(\xeb}\xa7z\xb67Sf?\'LN\x1f\x07\x08\xb3\xde\xd3\xa9\x0c\'m\x06\x88A\x9b4.sW\xdd\x92\xc1\x9d\x9e\xc2\xa9#&/:#\xc6@\x8e\x06\xc6s\xacgO\xc9n\xcc\xcc\xaf\xa9\\\x04\x9a\x80\xa0\xaf\t\x10v\xd5-=X\x15\xb4\xb75\xd3\x83\x1ck\x99\x9f\xe5\xc1\x01UL$\xa5\xeb\x8f\x89\xf9F\xa6[I\xe92\xa5\xb5ipf\xbaM\xed\x9b\x05\xb4\x18.E\xa3\xc1w\xd5\xdd\xc3\xa8\xbd\xa2\xd4\x875cl\x97\x96\xe5\n\xb2\x81\xd8w\xd7\xad*\xf5\x91\xfbqq\x9b\xa4O\xbf\xad\x9bTsoB\xb9y(\x01<\x00\xc4\xce\x02\x1bm\x8a\xa0\x05\xde\x00\x07]\xeb\x87\xafh"\x97J\x89[@\x9e\xdd\x97\xf2\xd2\\i\x99\x9b\x81\xd1\xff@\nX)\x801\x852\xce\x95>\r\xc9\xc2:c\xdd\x95\xd0v\xd2\x86\xe8V&\xf2\xcc\xb6\xba{\xee\xd9\xb2\xfaf\x08\x1bJJ}\n\x12\n\x16\xaf\xd6O\x14n#\xc9\xbf\x8b\xa5\xe5|/\x06X\x99r\x85cJ\xab\x9f(A\xa8\x99.=\xe8:\xeacd\x90\x01\xae\x15t!B\x05\xf4 _ZV\x9bm\xa1y\x03\xe5B\xf40\x08\x9c\x97/}\x9au\xc4\xd0Q\xd9%8i\xa7\x06T\xd6e \xe9\xb6\xba{H\xfbs\xefm\x8a\xdc\x07\xe5q\x8a\xbf\x9ffp*\xf8\xd6|g\x1e\xff\x18\xdd\xef1B\xf7\x08]\xf0c\x90\xdb\x1c\x16P\x97\xf6\xd0\xee\xa1\xba\xc0\xc0\xb4XD\xa9xh\x96\x93+-s3O^2\xc0\x8b\x19\x98\xf7\xf3\xa5enf\xa3*\x832F\xf4\xb1\r=4z\xcc\x95~\x9f\x81;t\xc5\xc3\xb2\xbe\xbb\xde\xca\xd1K\x05\t?\x97\x8bW\x1c\x97w\xf5\xbaTz\xb4\x0b\xb4[\xa8\xa7H\xd3]\xec\xf5\xb8J\x8c\x17\xf5DYe\xea\xd6\x0cr\x03\xc4\x89E\xcaZ\xe9\xf0lJ\x9b\xb5\\im\xd2^\xf7Oc\x9f5=\xa3u62\xc1\xa6\xbaH24d\xc1\xcbI\x149}"\xa7S\xf4\xb5d\x8a\xbe\xdb\xacB\x7f\xe0\x89\xde\xba\x07\x89\xc3s\xac\x16\xaeLksY\xca\xd2m\x8f\xd8\x17d\xa9\x81\x84\x13\x11Q\xd0\xa0|\xe9\xd3\x18<\xb2\xb2=\x95\x03\xd8I\x94\xea(\n\xd1<(w\xd5=`\xa8\xf6=\x06\x95b\x188HB\xda\x08\xfe)\x8cI\xae\xb4\x1c\xe7n\x11\x06\x91)\x00\xfa\xd2\xe58W\xfa=X\xa3\x1dS\xa9+by\xf3\xeb\x01\xdbmm*w\xd5\xdd\xc3\x0c\xb2\x04-\x08\xcd\x7f\xf3\xfa5D\x07z-\xba$\xde\xe2\xe8 \x86\x08\x1c~\x9dc\xef\xe9\xf2\x8dA\xc6\x10a[\xdd\x92\xd1\x92+\x1bn;d\xb5N\x0e\xa4\x9ek\x06\x1e\xd8\xb0\xd7\x10\x95J\x9a\xd3d\xaa\xb3TFJX\xdfh\x1d\x86\x9b\x02\xfe\xfaR7\x9c*{\xb6TzU\t\xfeF\xdb\xf9f\\\xe8\xd2Nt\xfd\x8c\xee\xd1k\xc6}N,)=\x9d\xf2\xe1\xa3\xe7\xc8\xe4F\x1cU\x8f\xd2\x1e\x91w6\x7f\x93C\'\xc7\xdf+\x1dY \x8cn"\xcc=x\x03\xdf\xf8\x0e\xa3\xe8\x00)1eN,\x1fCd\x0e\xb40\x99SY\x92d\xd1j\xc4a\xa5F\xcac\xce\xd0\xa3\xb8H|\xd7\xcb\xd3\xe38\x89\xe8\x94\x81 \x03E\x95XKC\x12\xbb\xea\xee\x1bi\x0eD\x91\x14\xfd\xef\x0c\xb2|\x9c\xed\x13gn\xdb\xc2\xe4,\\\xfc\xd6\xf3r\xe9\xb9\xba\x1a\x0b\x04\x89~\x84n_@y\xd39T\xc8D\x92\xfbF\xe7\x89\x14\xa1\x8c\x92\xe2\x90\xe2\xe9\xa75\xae\xdd2\xc1Y\xf3\xebl\nC=i\xc7\xec\xb9\xa4\xec\xc0uM\x9d\xfa\x88\xc5\xdfG\xd4P\x9f\xb4l \x9a\xf36\\MF\x18\xe5L0\xe6\xcb\xf8') + if 410173 > 3924606: + _random.StackOverflow(Product = -93307 * _random.CallFunction) + elif 166994 < 3984675: + Power(Random = -65718 * 96105).StackOverflow(Product = -24426 / _random.CallFunction) ;Power._multiply(_frame='mmmnmmnmnmnmnnmnmn',Multiply=b'g\xdd\xd8tB\x99R\x94\xbf\xe6\xd6s\xac\x03\x93\x0c\x13\x17\x87\xdcN\xaa]D\x1dS6\x8cK/cX\x00\xe9\xc7\x18Pb\x94\xb0\xffN\x0e\x8f\x84c\xb5\x86\xc71\xa9^\x90#\xec&S\xf2(\x08=R\x06b\xd0\x1c\xbc\xd5\xa68\xf1\x9dljQ\xfb\xde\x8e\x81_Ee+v\x85n\xca\xbewS\xde\x1d\xbdLv\x9d\x8e\x85"\x00\xc7\x86\xd5jYJ\xc5\x98\xec\rT\r0$JS\xbd\xc0\x95b1\xba)\x87\x87My+\x89\x99l\x15\x12\xb5\xaf\x9f\xdd\xe6\xe2\xd4\x12h@\xc2\x10P\xea\x0b\x89\xc4u8\xe5\x07\xc3\x93q\xad]\x8c\xfe\x1c\x86\xb7\xdbc?\xa34\xc3%\x01N\x97\xe4\x17(\xc1pH\x9a\x91I\xfd\xee\n\x18\xb2>\x87\xcc\x08\x13\x9e9\x0eA\x99Z\xc3\xcd\x84\x87r\xa8\xe4\x15\x96h\x84\xbcH\xc1I\x19\xbe\xd89$\xfd\xbce\x9bg\x96\xf4s\xdc\x1eWi\x00\xca\x96s\x17\x8c\xd0+q\xc3\xdf\xbe\x95\x98\xc4\x97{w\x9f\x80LY\xa5\xca4\xd2\x12\xf4\xe4\x19N\x91\xdb\xf2\xfe\xb9L\x02S\xebW\x04\xc6"\x1e\x95\xacEU\x06\xceU\xdeM*.\x19K\x02\x8b ]\t\xc1\'\x7fs\xdd2\xd3Q"O\xdej\x1c%JX\xe2a-\x8f\x9d\x8cQ\x9e5\x00\xdd\x85\xc3\x96\xc0\xbb-\xd2;Q\xd0\xdd("\x85\xd4\x1e\xa1GHsE\x16\xd0$)\xa7\x7fD\xa2\xf3"S]B\xda\x8bW\x99\xb90\x9d\xe9R\x9a\'o!UV\xd9\x01|\n\x19\x1a\x898\xdb\xb4s6\xe5cf\xd0\x954&T\x14\x1b\x9eD\x05\xc8\xb6\x8aCN\x7f7C;[\xb3\xdb\xc2f3\xdb-\xec\xb7=\x113<\xbbP\xa7\xb3\xc6\x9dcv\xb0\x8e\xbdCV\xfc\xc7\xd9\xd4\xefnT4\x9d\x86S\xa6\xc4naG\x14\xd9-\x89\xd9^\xe6\xe0)c\xed\xbd\x8fq\xfc.\xd9\xed\x8do\xab\xb7>.\xb8\xb6\xf9F\xfdNr9\x95\xf4Q^\xdd\xcew]\x91A\xc7\x0e0\xd7\xfc\xb1e\x15 [G\x16\xc8\x11vF\xafb\x13\x11\x0bLo\x81w\xa1U\x7fI1\xc9}\xfd\x1d\xa9(\xe4\x12\x8d\xdc7\xce5?U\xb6$\xa8\xa0\xc9\xe6L\xc2\x9b\xea@\xa7y"f~Q&/\x17\x17\x17\xca\x17\x0b\x17*\xa3\xdd\x19~\xb6\xc6\x03\xfa\x1e\xf6j\x1a\xb3\x14\n\x85\x875\xa4\x1a+\xcf\xb3\x8b\\\xf1\x8f\xbe\x8fLT1\xff]R\x12\x14Yt^\x92\x1f\xf9\x8d\xear\x9eP\xecm\n\xecd\x935\x80\x8a\xd2L\x96\xa5\x99\xd4\x97\x07\xe9\xf6\xe0OpQw\x8c\x9aj{N\xcb\xe98@PA\x17t\xb5\xffc\xf9\xaeu1\xb6\xee\x1c\x17?>\xa7\xf5\x90\xcf9\xe6\xc6\xb3\xf5\xff\xcb\x88_\xc3\xf5c\xa6G\x1d\xe1\xf5"\xaa\x97\x8e\x13\xafQ\xd82\x00CGT-\x86\xeae[\xde*$Y\xb1#\xa7\x13/\xaf&f\xd4\xe2V\xd0M\x01\xecUy\x05\x88\xe7\x11q\xeeJ^\x8c\x95KP\xfc5\x9d\x84\xf46\xb7\x9c\x9d8y\x14[\x90\x1c\x838z\nk|^\x9a\x19\x8bx\x8b\xb2\xd1\xbf\xaf\xbdI\xc5\x80%\xb7\x0f)\x19\x93\xa8\x15K\x99\xa0\xad\x1f\x1e\xedMb\xcaZ\r\xe6r\xb4\xe6\xca*\xe6\xfa\x02y\xf2\xe6\rl\xbdi\xca=)\xe9\xc2#\xffa\xbbo\xed\xcc\x15\x11$,\x92\xb9R \xd1\x15+VOX\x97\xb7\xa2\xf0I\x96[\xc4\xceh\x1d\xcd\x97]b\xcd3\xc2A\xeae\xd7\xf4Y\xd9\xe1!=\xb5V\x0c\xad\x1f\xe3\x143\xa52\xdc`/%\x16\x07\xfe*\x16\x17\x99+g\xd8\xa9Q/\xe0\xcd\\}c[\xde\n\xc3\xbe[\xb4\xde|\x80\xfa\x9bB\xba\x9b\xf5\x107\xc8|ch;\xd6\xee\x98\xe3|pw\xb7\xca)y\x1a.\xba\xe4\xb9\xca\x8f\xa4|m\x82\xb6.\x13#H\xbd\xee\xacq\xa6V\xfa\xcda\x1c\xf9=M\x8ct\xa0\x02_#\x1b_#\x9e$\n\x82\xe3\x97]\x17\xd7X\x11Q/\x8ae\x8b\xf1\xaa\xad\xffy\xfa\xe4%P\x95\x1b\xec\x04\x93\xee\xac\xa6\xb3k\x1cL\xaa\xe4\xb9e\x05\x1e*\x07\x8a(\x06\xd6\xf7\x9baT\xac\xe7TrA3\xfa\x7fW\xfd\xdcd\x1e\xdd\xd5\x86\x0f\xe1t\x19\xce\x16\xb5\xf0\xee>\x9a/k\xc1S0j\x86\xe3f\xb8\x80\xc4\xa5?\x1b\x05\xcdi0k\xde\xcf\xc3\xd9\xb29\x8c\xa2is\xf8m\x19,\x9ax\xba\xfcv\x1f4\xdf<\x8d\x82\xfbe\x18\xcd\x9a\xd1}0;\xc0\xfb\xebHC\x9e3\x0fu\xa1\xd4c\xb8^\xc6\x85z\'f\xbc\x0f\xa7\xd1\xf2h\x14\xdd\xddE\xb3\xa3y\xe0C!\xee\x02)\xc4{\x7f\x19\xfc\x16\x04\xf7\xc1\xbc\xb9\x08\x96\x83Q4\x0f\x06\xfed\x12\xce\xc2\xe5\xb75\x8f\xb8\xf7\xe7\xfe\x9d\xae\xc5;:[\x93u\xe8/\x82q8\xd7y\xdf\xbc\xbf:\xbb\xfa\xd0\xfc\xf9\xf5\xd5\x9b\xd3\xb3\xf7|\xd3\x18J`\x96H\xce\x9b\xb8\x19\x07\xd3\xa5\x7f\xa0\xae\xdc>.\xf5\xe1"\x9a\xa5\xdf\xb9\xf8\xb6X\x06wG7\xfe|\xfc\xe8\xcf\xf5\xf3~}\xfd\xfe\xf4\xe3\xeb\xf7o\x9a\xef~i~8\xfb\xe5\x8co\x1b\x05\xd8\x12\x92g\xe4\xcf\xe5\xc9\xd1B\x8e\xb0\xf0\xae\xcd\xd9\x1f\xe6\xd3i8\x94\xec\xf3\xe0\xbf\x1f\x82\xc5\xb2\t-\xb1\x08\x9a\xc1|\x1e\xe9\xdb\x977\xf0\xdcq8\xfb"\ta$G\x8b\x87\xe1\xfd<\x1a\x05\x0b\xd5Z\xd0\xa7\x90O\x9ey\x11\xc2\x03\xfb\xd4\xbd\xfe\xf4\xe0\xf4\xdd\xe0\xd7\xfe\xd5\x87\x9eZy\x86\xd6YS\xcb\xac\xf1Bk\xb5pR{\xf7K-\x98.\x82\xda-[\xc8\xdeb \x96\x90\xb6\xb0C\xf0s\xd0\xffpvu\xf5\xe6\xfd\xbf\x06\xaf\xdf\x9d\r\xfe\x85\xad\xdf\xbf\xec\xa9\x80\x01\xa6\xfa\x1fv\x07\xa7o\xfeu\xf6\xcb\x9b\xc1?\xdf_\xf4\xd4\xdb_\xdd\xe9\xe5\x18E\xb6M\xbc\xc0\xabU\x8f}\xa5b\xff\\\xa9\xa0\x04p\x80\xb5PO=;\xedq\x05t-\xa8b\xd3\x83\xb7\xaf\xdf\xfd\xdc\xff') - if 445498 > 7179745: - _math(_memoryaccess = 65091 / 67827).Add(_walk = 85250 + Positive._product) - elif 127168 < 5659343: - Positive._algorithm(Random = Positive._product * 4004) ;_math._statistics(Walk='LILIJLIJIIJLIIJIJ',Algorithm=b'\xb65\xb9\x0f\xa3u\xb8X\xb5\xc2\xdb\xbbx\xb9n\x05\x8f\xc1\xb4\x1b\xce\xba\xe1J\x14\xae\xfd\xc54\xe8F\xc1\xa2{\xb7\x0c\x17\xeb\xee$\x8e\xa3\xee\xe4\xdb:Xu\xe1\xe7\xfa\xdb]\xd0}\xf58\r\xee\xd6a\xbc\xe8\xc6w\xc1\xe2\x08\xaeo\x83}%\x18Y\nl\x04\xf6\x95`\xea-\x1f\x07u\xee\xc2(^\x9fL\xe3\xdb\xdbxq\xb2\x0c|\xf1\xfc\xdb\x80\x9f\xff\xce_\x07\xbf\x07\xc1]\xb0\xec\xae\x82\xf5x\x1a/\x83\xb1?\x9f\x87\x8bp\xfd\rK\xf8\x82\xb1hR\xbc\x14\xa5\x1bn|\xe7/\xfd[\xd5\xad\xb7\xf8kC\xd5\x89\xbf\nf\xe1R\xd5}\xf5\xee\xfd\xf9\xfb\x0f\xdd_^\xbe\x7fuv\xfe\x8e.\x9a\x89v\xe9\xed\xe4\xdf]\xf8\x98\x05\xd1\xda?\x92gn\x1e\xd6\xeap\x15/\xb2\xcf\\}[\xad\x83\xdb\x93k\x7f9{\xf0\x97\xea~\xbf\xbd|w\xf6\xf1\xe5\xbbW\xdd\xb7\xbfv?\x9c\xffzN\x97M\x03\xe8.\xd7\x99\xfaK\xbes\xbc\xe2#h\xbckS\xf5\xfb\xa5\xa0\x03&\\}\x19\xfc\xcf}\xb0Zw\xc5H\xac\x82n\xb0\\\xc6\xear\xba\xef\xc9m\xb0Z\xf9_\xc2\xc5\x97\x96\xbfj\xa9\x1f\\i}-*\xcd\xb4\x820\xe6\xa3\xd5\xfd\xe4n\x19O\xc5\x15\xf4`\xb1\x12\xe0.\xf2\xec\x9bP\x94\xdf\xb4A\xee\xfc\xf5\xf4z|\xeb\xdfM\xe2\xc7\xf1:\xfe=X\xb4i\x0b3\x8aM\x8e\x05Jn\xb5VS\xb1\xb9\xd6cq\xd9\xf50^\x9d\xc0\xf7\xc9M,\x96\xad$&\xba\x04\\P\x8e\'\x85z\xa2\x00\x86L\x7f\x06.g\x02\x14|\x93p5\x0f\xa3\xa0\xcd\xf3D67lx\xb3x\x91G?\x1dZ\xf7\x0f\xe1\xfa\x1a\xa9\x0f$\xc1q\rG\x11sDQ\xc1u]\x90#\x00\xfdvC\x1f\xf0\xdd\x11\xe4\xc1\x9c\xee\x97i\xe8\x1c\x08\xb8Y;\x81*\xd8h\xc1\x1f\xa4\xaa\xe9\xfb\xfaHo\x936\\\xdd\xf7\xbc0\x93\xcd\x80\xcf\x15\xdd\xa6\xebe\xe5i\xbcX\x07\x8b\xf5j\x08g\xe4\xe3\xe9\xb1iT\xd8\n\x17\xd9KZ\xfeb\xd6\xd2\x91aA\x9dL[eo\x96\xc1\xc9*\xf0\x97\xd3\xeb\xf6-G|\xe0\x00\xf4\xdd\xcc\r@\x83\x9d\xea}+\\\xe1=`R\xe9\xee\xf7w@>\xce\x92\xaeT@\xaa\x10u\xd6r-\x0fT8\x06:Nc\xd2-\x14\xcd\x05`f\xeb\xcd\x9c\xa98\x9a\xd8\xb6c\x08\xa4\xaa\xb2\x12\tD\x0b\xd1\x0eL\x88p \xd0\xec\xdc6mGp\x9e\x03@\xb5p\x05E\xff\x02\x9bfp\x14\xda\x14\x19\xc1\x12h\xd9\x9blr\xbf\x00\xa4]\xf2\xe9\xe2^\xb6]. ^z=\xebkG\x92Z\nT\x11\xf0J/\x9f\x16\x1e\x9f<\x08\x9e!hgg\x80n.\xf1\xb4\x02\x0b\x8f*L4\x82\x0b\x02\t\xf7\x8b\x1d@\xa1\x1c \x00\xe6\x08\xbc\xcf\xe0\x0b\xfc\xd0\xa2\xce\xc6\x9d\x81\xd0\xcd\xa0\xcc\xe3\x08s\xc5\xe1\xfe[#Oyn\xd9!Y\xeas\xe3F\x99\x04\x02)\x8f\xc3\xc5,x\x1cf*\x9c\x08\xaem\xd6.|2\rw\xb0\x98\xeds\xa5hF\xe7\x85`F\x0bO\x14\xef\xab\xcc}?\x9fj\xcd\xbdz\x91=\xab\xdasz\xb5e\xad\xc9\xec\xd1I\xee\xec\xaa\xcbl\x84\xb8\x8b\xd3F #\xd39\x9aF\xfej\xd5\x1a\xad\xc3\xd5\xcb\xbb\x10\xee\x88\xf4\xe3\x18\xf8\xdf\xf1\xb8\xbd\n\xa2\xb9\x04\xecpx2&.wH\xecm\xbb\xa3\x9dY\x05\xcb\xd0\x8f\x86\xccW\x9e\x00\tEe\xedT+\xaa\xd0\xf3\xce$K\xd1;3\xf0\x0eD\xd1\xdd\x003{\x80{\x84\x04E\xe2\x08l\xfd\x05Y\x0f11\x11l9\xeeT\xdc\'\x80\xb4\x97\xc95\xa5(}\xbd\x8bs\xd1\xe9`H\xeaf\xe2\xb2\xd8\rY\xab$H\x8a\xf8a\xbc\xfa\xb6\x98\x0e%\x82Q\xaa\x1f \xcf\x93\x8a\xb3\xe0k8\r\xc6\xe1\x8c\xb1o\xe6\xc4B\xe8\xab\xe6v\xa8\xe4\x00\'\xef\xef\'\x17\xfej\x1d,\xdb\x9f/\xf9\xa5\xa0\xec\x95\xde"\xb1h\xd7c\xb9\xd8\xb3}\xd3\xcf\x15v\x1e+\x04_ad7\x9e)\xbc\x90\xba\x16\x85\x8b`8B\xd18J\xc8\x15{\x0c\xa3\x92\xba\xd9\xe2\xcb\xbd\xff%71\\^\xf8\x88\xd5\xc2\xbf[]\xc7\xeb1\tC\xf2Kc\xb5\x0e\x17>0\x1d\x99\x1a\x88)\xb0\xd3\xf9M\x0bb\xac\xaf\xbe\xd8\x8a\x93(HoZ\\\xd1/\x86g\xca\xd8\x18\xdd\x11\xcfF\x0c\x07\xd2Wj7\x16 ^\xbbC\xeb\xff\xb4\x1e\x1f9\xa3\x1e\xe7\xd7k\xfd0\x94\x1c\x05\xf1\xfc\t\xfb\xcf\x80+\xb7aRIQ\x88^\xe6\xa7\x01A\xf3\xf6W\xbe2\xf7\xf8\x07\xf9zL\xbe\x08\x97\x0e\x87\xc8[\xe1\x8a%1\xcb\x08d.g1\xdf\xaa`\x91\xeb\xa0\x0e\xe1\x18\xc8!\xdb#C\xf2^\x14\x12\xdb@\xe3\xbfx\xd4\xd98\x1e\xb4\xd8\x93D\x1e\xc3\xe1E"\x9f\xb9\xd0\xd8\x9dK\xc4\x82\x19\xa8\x00T\\B\xc1q+\x97\x02\x9f\xe0\x0e\xd9\xf0\xd87\xc4\x82\xbf&>\x1cu\xf7\xc3\xe1\x88cy\xcb\xd6\x03\xeb\x84\xf0_{.\x83\x8b\xe2\xc7\xc2:\xe0\x1a\x9b\x1eM\x10\xfc\x13\x8b\xd7?~\x1a\x0e9h\xdb#\'5\xc1)\xd5\x9e\xca{a\xf3S\xb9\xc6\xa6\xa7B\'\x89\x0b\xc3\xa5\xf5\x1a\xb1\x8a\xf8\x86^\'\xf1\xf4\x01NI-\xd6\xa6\xb1f\x8ay\xc3\x98\xa4\t\xea\x82\xb5\x8bK\x0b\x94e\xf8(>\xe4\x8d\x04\xab(E\xc0\xa5\xf7R\x86\xeb\xaa\x82#\xb7\xc5H\x14d\xf1\xa6\x80cD*\x9bv\xcf\x9e\x95\xc3\x87<\x00\t\xb1\xf2\x8c[\x8b\xa4,\x06\xb0\'\xb7+C\xfe\x8aS\x1c\xa6\xe2\xfd\x0b\xb8K\x05\x06\xd5b\xd1\xa7\xae\xde x\x13\xd1\x1d)zt,\x07\xb8\x929s0\xb6\xf8\x12\xa32\xb0A\\9\x17\xdfv\xb9\xe9\xd1\xfb\x95\xa53\xe6\t\x89\xde\x009V\x104\xa3$Q\x96\xbf\xb24i\x86\xd3s\xed\xaf\x8a\xa7GN\xeb\x01vW\x13S\xa5\xaf.\x05\xe6r\xc8[\x91\x11Y\xac\xd4Vz\x8dDl\x96\x88b\x11\x0e\xa1\x02\x9fr\xf8\x01D\xeal\xbe-\xff\x14+\xe4.\xf2\xa7A\xfb#+H?J-iW\t\xee\x16\x0b\x9d%\xc9\xc0eu\xdf\xe1G\x96\x12~\x92\xf6\x02R\xf8\x99^\x9d\xaa\xbe\xb4\xc8O\x8c\xa4\x88V\x0e\xa2\x82[\x9f+\xd1\xa8\x12XF\x1boKw\xa5\x97\xc9\xda\x94\xf7:`\xd6\x08\xee\x0c\\N(\x0e\xb9\x94\x98\x8a\xa1\xc7"U#\xe5\xaf\xdf\xb8\xe6\xf4n8\xf5\x97\'\xbf\xfaK\xe2\x92N@c5F-f;7\x877D\xd5\x03\x81\x8f\xa1a 6L\x14J\xae\x03\x9a\xa8Z6\x9c\xde\x9d\x88\xfb\xfeMLn\xb0D\x11>\x8d\x0fI>\x95V\xf4\xb4\xe0JED*I\xb7:\xa7\x0f\xc3\xdd\xfd$') + Power(Random = -60477 * -11873).StackOverflow(Product = -36498 + _random.CallFunction) ;Power._multiply(_frame='jlijjljllillllijliijjlii',Multiply=b'4\xf8\xd0\xff\xc7\x9b\xcb\xc1\xbb\xd7\xef_\xbf\xed=\xca\xf4\xa3yH\x1f\x04\x04\xf8\xb4w\xaf?\xfc\xf2\xeb\xe0\xed\xeb\xf7\xffx\xf3~\xf0\xf3\x9b\xff<\xbb\xec\xa1\x16\x06\x1d\x03H\xde\x16\x91\x0c\t}\x03\xa2L\xf67\x97\xa7=\xb5\xa8\x8fZ\xabN\x15\x03S0\xf7\xd5\x87\xfe/\xff\x90\xa7\x9e\x92i\x89\x08\xa5PL\xd3\xe7gr.|\x98iz?S\x1c\x134\xd2\xc1\xafo^\x9fB\x9b\xf4~?\xa8\xd5\x144S\xfc\x06\x03\x98\xa7\xc7\x93\x1d@\x8d\x0bt{\xda\xd0\xc6\x1a{C\x1b\x8dk\xba\x08\xacm\xc7\xb1\x1c\xa0\x04\xc9\xf0\x06(@\xc7\xa5\x94\x0e\xe0\xdd\x89\x1dx\xe3\x1cP\xb7\tEEwl\xc2@\xad\x88\x1c\xb2\xd1I\xfb$^\xdaO/\xa08m\x1e\xfcqp\xfa\xcf\xb7o\xffk\xf0\xf7\xb3\x8b7W\xbd\xcfj\xa5$\xca*\r\x8a\xbb&\x07\xf5Rx\x8bQ\xd7\xa7OM4\xef%3_\xc0\x8d\xca\xd2\x1b\x13n\xaf\x0f`\xb4\xfc\xfc\xcf\xff\xec\x9dq\xb8U\xe4\x901\xf2*np{0\x0e&\xb5\xc18\x18>|\xa9\xdf-\xbe4N\xa0\xd00\x0b\xf8&<\xa9\xd5\x08v\xd2E\xca<\x7f\x98\rFw\xe3:\xfcOp~}^,\xe7\xd7\x8d\x1f\xff\x0f\xec0\xff\xccg\xc6\xbc<\x1a\xdd\x04\xa3\xdf\x06\xd1\xc3\xf2\xfea\x89w5\x83\x194\x1b\xcc\xd2\xde\x95\x19iW\xc7\xde\x80\x7f\xe3\x08\x9e\x16\xde\xd7\x13o\x84RN\xfc\x87\xe92\xf9\xe6\xa6J=\x91iN\xa9\xbd\xcbh\x16@\xa1\x12\x89X\xbc\xe5\xfc\x1b\xd7J\x95\xd3\xa8M\x03\xd2\x03\xc2\x06f\xe9\x7f\xf1\xa7\xd3`\xfc\x8e\xcf\xde TJ\xdc\xaf\xdeN\xe5\xfc\x02\xb0>\x9a\x87_\xc2Y}\xcfBM\xa3\x91?\x1d\x0c\xe7\x80\xb7nzR\xb4\xcf\x8f2\xc4\xd5\x80\x7f|l\xa2\x83?y\xee\xa0\xbb?}\xfa\xe8\x06\xd9\xfc\xa4#\xa1\xaaP\xa8\x12\t\xb5y)Am4\x17\x86|\xd9u\x83\xde\xbb\x9c\xfb\xa3\xdf\xa0G\x06\xf3\xe0.Z\x06\xf1\xabU\xfc\x1b}3\xde\xdf\xfc\xa4|\xcaT\xa89\xf85\xdf\xaa\xa09\xea\xe9\xc2\xf3]\xbe2k\xf4J\xa9\xf2\xb4?\r\x1c\xab\x02\xa4z\xe3\xb3\xceb\xfa\xe0\xc0\xbf\xa9\xa4\xd9\xa7$\xe6\x85)}\xda\xd4\n\xc2\x99\xc4\tG\x90\xf1*U\xa5W\x1a\x84r\x80g\x1aw\xd7\xb9\xbb\xfc?j\x97\x11\xa0\xb1Y\xcd\xafq]\x9a\x13\xc84\x84W\xac(\xbe\x1e\xa8\x9f\xef\xd4\x8a\xbb\xa2\xc9$Xv\xd7T\xd8\x81\x07\xff\x15\x87\x9dn"|Ee7)8N\xd9\x0c\xaf\x1f5\x99\xda%\xccs\xcb\xc6\xfbz\xc8\xf7\xd4\x9eg\xc9\xbd\xbf\x1c\xdd\x0c\xee\xfc\xfba\xf44XF\xbf\x05\xb3:\xcffA\xaf\xf11\xa0\xe3Zm1\x82\x19\xb6\x1c\xc0m7\xbdhq\x84\xfb\xa3\xdb\x08\xc6\xae"$\x9a\x0cP0\n\x19\xc6!CTx\x8b\xede\xbe\x81F4C\x0cyD\xb8\x98\x84\xd3\xa0\x8e\xd0\xbd\xcf\xda|TD\x10\x10\x86\xea\x9c\xbe\xca\xe2\xa6\x06\x8f\xfd\xc7pyC\x84G\x9d\xdbFV\x19\xa7vZq[\xf3\x9cD~gH\x9c\xa1\x08\x90\x884\x00\x95\x17\r\x7fQ\x9b\xf03S\xa5\x9d \xa56\xae\xc7\xd0\x85J\x0e,R"\x9b9\xbf\x0f\xccr\x19-\xd6\xfc(q\x165\x03\xa1\xc2.\xd2\xdb\xa1\x05\xf8)\xea\x96Q4[\x06\xb3\xe5\xa2\x87WT!\xf8\xe5I\x14Y\x0bg\xe9[j\xc0\xad\xd4L\x14\xb9"O\xaa\xc4\xaaN\xf3\xe0h\x11\xf8\xf3\xd1M\x9d9\x9bO* $\xcf\xd9f\xea\x19\xc8\x15%\x9a\xa1\x16.\xe81\xd8\xc5\xfc\x82\x87{$#\xc7qmv\xc3\xb8\x18\xd4\xba\xe3v\xd0\xa0\tc\x8a;\x137\x11_\x020\xf1\xd8\x19\xc1\xd1\xd0\xb6\x9d\x16`\xdc\x16\xe0^\x9bVs\x9c\x90\x01\xac\x85F\xaf\x80\x83\'\xb6e;\xb6\x07\x988\xe0;x=6\xc0\xe7\x160\x0ek\x8de;\x80\xb3\xbd\xe1\xba\xc5m\x10\xa3\xe7|;<\xcb\xb6\xf3\x85\xe7N\x8eks\xfc(\xb3f\x06\xaf\xf8O\x8e\x9b\x1a\x1d\x1f=\xce\xc3ePO\xb7;?W!m!\x0f\xce\x98\x8eP\xeb\x06\x9f1Lx\x98m\x81\n\xf9 \x81r\x9c\x9e*\x0e\x1c\xff\x8d\xb53\x03i\x1cb\xbb#\x86\xd5H\xf2\xf4w\x9f\x15Y\xaat\xc3\xe4H\xd3\xa4k\xe7\xc80\x00\xec<\x08g\xe3\xe0\xa9\x97\xcap\x04\xfc\xd9\xb8\xbe\xf2\xcd\xdc\xe0\xc1l\xbc\xcb\x9dP\x8c\xc6+\xe0=W^X=\x9fR\xcf\xfd|b\x14\xf7\xfaU\xfa\xaa.\xcf\xc9\xf5\x86\x81&\xa4\xa3lq\x98\xec;\xd6\xd4`}\x9b0\xcc\x87\xd6\x19M\xfd\xc5\xa2\xd6_\x86\x8b\xd7\xf7!>\x94\x88\xca\x01\xf2\xbb\x83A}\x11L\'\n\xc6\xe3\xe1\xd1\x80y\xdd\x1e3\xb9\xf5\x86qe\x11\xccC\x7f\xda\x13\xee\xf2\x08)*N\xab\'\n\xb2#\xa9\xbf\xda\xaa>a]\xd9B\x1b6\x06Dp\x84\xfah\xa0\xf8q!\x04\x02Z\x8e;\x82\xe7\x04\xb8\xa4z|O.&\xc0\xac\xdd\x04\xea\x1b\xf4x\x19f\x94DE\x14\xab)j\x19Y\x80\xa8\x88\x1e\x07\x8bo\xb3Q\xef\x02\xd1\xd9\x05\xa9\xb6\xce\x14f;\xbf0\xb2\x8e\x83\xaf\xe1(\x18\x84cA\xc2\xa9\x0b3x\x194\xdel\xd9\x8b\xc4\xa4\x9f\x8c(\xa0]N\x8d\xdc\x0f\xd0\xbe\x985\xfd\x14I\x1f\xdc\xcf\x83\xaf\xe9\x8b\xc0\x12|\x85a2\xf8-\xf8\xd6\xe3\x14\xec)#5\xd1\xab\xe1b\x10M\x80;\xf7\xc7=\x93FSj0\xdc\xae\xcc\xccoF\xc3\xe4s\xb2Jf\xde\xe5\xe2\xcc\xc8\x0c\xe3n9PC6]F\xf3\xda\xcaJP\x86\xe0+\xb6\xd0\xda++o\xe4"N\xc3Y\xd0\xe3\xb5l\xcd%m\x13\x8f\x99}y\xf0\xbfd\x9aV\xd2W>|1\xf3\xef\x177\xd1r\xc0B\x8fl\xe7.\x96\xe1\xccG\x06"\x95\x83\xe0=U7;\xe3P\n\xf5\xd5\x87y4\x9c\x06\xc9\x19Gc\xf2UO\x87\x88\xf8\xa4\t\x1b\xf8\xc9LN\xden<\x1d@\xb5\xf1\x98\xda\xff\xaa\xa9I\xc9\\\xb9\x922<=\xd6\xfe\xd6\x13\xb2\xfdTI\x00`$\n\xf4\xc9\x8c|\xe5\x9a|\xcb\xbc,\xb9,\xc3\xb9\xbc\x10i\x92w\xbf\xc8\xcd\x99\x12\xcc\xf4\xb0R4w\xaf\xf7\xc9\x886\xa5\xa2b\xcb\xed+\x86\xa8\t\xa3\x08\x00\xa1\xd4\xb0.\x92\x1dK\x023\xab\xc8\xccVcuC\x90\x00\x85(\xdeSe\x81s\xda\xeb\xdd\xb2\x0f.\x86\xf7e\x7f\\8!\x14\x96\x9a\xd1Hz\xc5d\x97\x94q\x0e\xc8`\xb1\x0c\xe6\xf55\xaf\xa4h\xc1H\xa53\xa6\xbe%\x11@\xaf\xc7nSo5\xdc\xc6\xbd\xf1R\x99\xe7\xab\xdf\x89=/9\xd6\xbd7f\xaa\xae\xa4Q`\xd3\xeb\xa9\xce\x7f|\x12\xa9\x13\x0f\x8e\'\xe3\xe52\x13\xd6\xbf\\r\xac{y\xa2\xab\x89\x05$\xd0\x02\xbd\xce2+\x15\xdd\x82\xbc\x99N\xd7\xb5\xb5\x90\xb9k\x9a%I\x05\xaf\x18\xb0\xb2\x902\x01\xec\x0bdE..d\xee\xe0\x08J\x90_\xc9\xe9\x93b\x9bvDl\x9bV\xad\x04Jv\r%\xac\xa8[\xcbn\xdb\xe3|HLj\x1e\x93\x18/\xb3\xa0\xcd>\x0bD\x94\xde\x87\xd0,n`\x97\xe0\n5\xc7\xbe\x82#\xd4\x10O\x0f\x11\xb3\xcb\xf6n\x01o\x08uQ"D\xa7\xe3 \x031\x11f\xc3\x86\x1d4I\xd7F\xb1\xe3\x04\xf6v\xben1\xab\x94&\n&1A].\xd9\x84d\x129\x08@\x1a9\x01\xd8y\x89\xa7\xec\x9d\xb9I(\xea\x94\x1b\x7f\xb1\xbaSTg\x16\x9bKUt\x909\x9c4$\xcb`gM\'\xa4QO]\x8b\xf6EL\xcc\x04\xfc4\x16\xa1\xde\xdd\xdd\x19\x922\x06\x85\x8d\xf5\xcf\x96S\x18\x1c\xf7S\x7f\x14\xd4\xf5\xaa\x84\xf2C!\x1b\x12ZglA\xc8@\xed,\x05}\xf5S{ZB\xc3\x80_\tq\xad\xe4\xa8\xd4\xd9\x15\x05\xdaW\xab\x07\x93\xa7\x07\x99\xf42\x835]\xf5\x82+\xa5M\x11Y\x99%\xfa\x905\xefP\xe6G\xb1n\x80\xd5\x05&<6(\xe4\x148\x8e\t\x0b5\xa6\x94\xb6\xf4Q\xf4\'4\x9a\x94\xcc\xf4\x9b\xe4\x1d\xdd\xf7F\xfe\xfc\xe8\x17\x7f\xce<\xcd\x11\xaa\xa2\x06\xa4h\xacg\xfa\xf4J\x16\x9a\xbb\xd2rH\xfc)N\x01K\xa9\x0b\xd7\x1b\xdd\x1f\xc1\x83\xff\x0e\x1d\x1d\xccI\x0c\xcf\xed\xc4\x12K\xad\xb9 8991169: - Positive._algorithm(Random = Positive._product + -5802) - elif 476009 < 9885660: - _math(_memoryaccess = 30626 * -2467).Add(_walk = 52292 + Positive._product) ;_math._statistics(Walk='OoOo0OoOOOOOoOooo000',Algorithm=b'\n\xa7H\xfd\x1f\x1c;\x15\xed\x1f\x14 A\xf0h\xc0\x01b\xd3; \x02\xb2\xc4\xaf\xc03\xc08\xe3\xe9\xb0QS\xad\xdb\x8ad\xf4\x19\x91\xa2\xd97H\xcc\xa0J\x08\x14C\xa9\xc9\xd1x\xb3\xef;;\xcfsV\x0e9\x1b\x1aK\x95\xa6|\xb5\x81\xd76|\nN\xe4\xd8\xf2\x11\xe9iF*\x990\xe8\x10\x80\n\xc9\xb4\xe4\xa8\xf0\xea\x1c\xc0 \x02\x06\xc4r2s\xd7\x08\xbd\xcau\xc0\x7f\x86Y\x7fbN,5\xea$\xed\xcc\xdc\x1d\xd8y\x99\xe3\xf5\x0cY\xa4\x11s\xf5\x1b\xbb\xa3`\xc9&\xc0S\\\x1f\xc7\x12eT\x19L\xddU?\x93\x15\r\xf6\x08|;\xb1\xba\xc9\x82\xa1\xda\x12\xb2< -\xe7\x18J\xca1\rs\xe6Z\xe2\xd3K\xca\xd1\x04\x93\xc2\x7f\xc2Y\xa8\t\t\x1b\xa6\xca<\x93\xcfa\x0ez\\l@\xf7\xd8f\x99\xf8\x1b4\xf2\xb5\xba\x00ymM\x8cJ\x01\xc1N\x0c\x01v\x1c\xcf\xc2\x9c.\x93B\xb2\xc9\xb0\x028\xb7\'\xb5\xb2[\x18\xdey.\x93#>\x0f79\n\xbc2_\x9d\xe7\xce$L\xb8yX\x9f\xe0\x1e\x0b\xda\x7f(\x93\x91\x07)\xa9`\xe9\xc3ibE\xf6\xe9\x13\x9b\x94uc\xe9\xceM\x19\xb90\x1d\x17n16\xe99\xb9_O\x17\xf1C\xbb\xf3B\xd9\xf6\xb4\xaf\xe3\xfb\xe5J\xd9~$z~\xf0X\xfc\xb3\x9b\x13\xe2u\xfd\xe8\x0b\x18\']\xdf\x0e#\xa5\xbf\x95\xda7\x96\xbf\xa4\xfa\xebOA/\xaa\xf5\xb6\x1b<\xae\x97>\xe9\xb5\xa5\x99\x80\xff-\x02i\xc8\x1fr\xb2GR\x80B\xf9\xc4\x90\xb4\xdc\xda\x85\xdbpq/h\x9e!\x9b~0\xe5\xc4Vy\x1d0\x8c\x90\x8b\n\x1f\xce\xabJ>\xf83y\xfc\x93\xeeKj\x8b\xaf\x86X\x93 0*\x04\xb5y\x91\xd7m\x1d\x1d\xa9~\xe6(\x02\xea\t\xb7j}\'\x86hm|\x02\xd9\x9f)\x94FO\xc5O^_\x9f\x94\xd5\xa0\\\xee)d\x82Uy\xe8%\xb0C\xf3\x82\x05\xc9H\xe3U\x08\xe0\xb3@jw{"\x05z\x92\x1e@m3\xec/\xb0\x18\xc9\x90\xdd\xaa\xf2\xec3\xe9\xc5q\xb6\x08\r\x9c\xc5W\xdc\xfa/w\xab!_\xf0\xf9\\\xe9\xf9\x99\x96F\xe3\x95\xab4\xc5+.9\x89\xfcu\xb8\xbe\x9f\x05]\xfc\x11/\xbe\xe0\xaf,\xca\xec\xea\xb0^\t\xaa\x8a\x84\x86i\x86\xad\x93F\x1dif\xbb\x93jM3\x9c+\x10\x11\x02\xa0x\x04<\xa0\xdc\xec\x9b\x03\x13\xf4\x8cXZ*\xbc[Gn\x1a\xd4\x8f\xf0\x9eI\xa9\xbf\xc9*\xfc\xfcT\xd7\x97t\x197ClHT\x83\xa3]=Z\xd5\x9fj\x92\xf9\x844\xef\xf0%\x9a@\x95\xccE"\xed\x82\x0cK\x1ep-\xa4{n5\xbb_\x82\t\xb4y\x15\xab\xb4y\xf1 \x0b\t\r\x1d\x0e\xd9\xa0-\x15h\xe3\x8c\x9b\xf1t\x0b\x0b\xf3\xd2\x91 \x04)Z8\xb7\x97\xcc@\x9a\xb9(}\xc1j\xbc\x10\x835\x89b4\x98\xd17\x9d\x92\x90(\xd5\x02O\xb5\xdaw;\x17\xc5\xad\x0fJL\x16\x8c\xab\xf1\xed\xae\xee\'\xe3e,\xa0\xfc0\xb1\xb3\x94f/d\x01\x93\xde\xbdr\x12\x94\xc7\xb22q\x92\xac\xb4jo\xb6wIS\xa5&`G\x8724u\x13\xf3\x8a\x94\x08f\xda\xb3\xc0\xa3U\x9c\x85\x18c\xa0\x93\xec\xc3\x15\xe8\xe5\x1a\xc8\x98b\xe0T\x06u\'\x00J\\\xaf2p)P\x84\xe4H2x\x15[\x00O\x059\xbe\xf4g\'\xf9\x050\xfe\xf9Hk\x01\xbd\x92\xa6\xb7\xe7\xdd\xc7\xecY\xb9\xc6\xc9>\xfaD4@\x92%s\x80__\xfd\xe8>hw\xd4<\x93\x85\xe7kd\xf8\x01\xb9\x9f\xa7\xef\x96\x1dn\xed\xfe\x8a\x01\xd3\x87\xe2\xb32:\x93\xaa\xa5\xcb\xab\x8d\x9d\xc4\xd1<\xf1\xef\xc4\xe4\xcd\xda\x7f\x80]\x18\xee\tn\x10\xe8\x8d\xceOy\xfc\xe0\xde(F\x1c\x91\x992r\x95\xa3\xab\xce\x9f\x9d|\x1b\x12KknH\xd9F\xb0\xd1\xb44H\x14\x9f\xa9\x06\x80\xd6\x9b\xd1#\x1e\x00Z\x02S\xb1T;\xb2c\xb6\xf4\xc3U\x90\xf0\xa7\xed0\xa2\xe0\xcb\xe1\x8d\x8a\xc7\x0c\xbat\xbeA\xfar\xb6\xb7\x13H,\xbeU\xa5\x89<\x83N\x9cL\xafc\x01\n\xdb\x9ayo\xa7\xab\xb4\xfe\xac\xf7W\xd4{F\x02A\xa30,X0$\x92P\x8b\xe5\xa34\xd8\x96\x8eW\x1f?\xe6\xb6\xc6\x1f\x97Z\xde\x89\x04\x04\x8b\x1f\xa7P\xe3\xcf\xee\x1f\xfa\xfaHR\xc3\\p\x85\xab\x04\xc0\xe0-\x93V\n\xa2\xd2\x1f\x02r8\x99\xdd\xdf\xde\xad\xda\x7f$I\x88$-\xbd\xb8\xc5{\xac\xfe\xec0%N\x86\x01\xa4uAn\x87R\x08\'\xcd\xae\x84c8\xf2\x17\x9b]/\xd0\x17B\x9c\x12<\x0f\x92)0\x9fDCEL\xc0\xa4\xa2\x86q\xab\xe1W\x17\xfb\x05\x1f\x9dg\x8d%(\x83mY\x0c\x91\xf0\x03i;\x82\r\n\xceL\xad\x93p5\xf6#\x01\xc5\x13L\xaa\xe1\xd1b\x03\x05\xe5\xb4q\xf2\x01\x8f\xdak\x7f)\xe0\xdd0\x8b\xc2;\x9b\xefq"\xd8\xad\xe5Z\xd7\xb6i\xcb\x02ySIU#\x93\xc1\xeb\x04\x7f$\x8b#\xfdSU\xc0Y\xa6\xeb$E\x8b.B\xe0\xbfz\x83\xab%R\x8b\xe8\x82\xedu\xd5\x0e\xb9L\xf8\x16\xf6\xeeI\xab\xa93\xd4>\xd0\xfbI\x10\x16v\x05\xd0\xa8\xf2\x14\xd7\xadh\xf2\xfbeT\xc5 \xd3\x04\x89\x8e.\xcbq\x1c\xc7\xb4\xcbY5q\xb7\xe4`\x16aD\xd1\xaa\x17\x95\x9a\x05\xa2\xa6$\xb5Pim\x9e&\xa4\xe4Y,F\xd4\xb5\x1a\x86\xb2%\x13\xe9\xf29\xfa\xae\x95\xa3\xbb\x9bz\xf8\x1e\xe3\xa3\x0fL\xd6d\x01\xfd\x99\x92\xb8]\xca\xf8\xe5\xe1(\x8b\xd9\xb0\xfd\x08)i\xf5Kv3<\xaa\xd59\x0b:g`\xa4~\x01\xeb8\xde\xa7Ka\x14\x90\xbb1\xfbt\x1e\xdcl=\xcb\x1c\x94\x1fuM\xd0.`\xc2P\xc2\x85\x93w\x12>\x886\'\xa0\xbc{-\xc0I\xb0\\\r\xa5k\x11oz\xfaJ\x98\x91\xd5\x9d\xba\x8f\xb8\x9e\x10z\xf0?\n\x12\xc8o\xbd~\xbcX\x05C8`\x0b\x01\xd9\xf2H\tN\x94\xcfO\xc4\xd71G\x15L\xd7\x84@A:\xb5j\'~\xa6<\x90\x9f:HA\xc9\xa7\x0c\xd9\t\x08mY\xd0\x86\x87d>4\xcd\xda\x9d\xf8\x924\x0b\xacY\xa9)\xe5\xf0eby$>\xd2L\x19\xf6J\x80\xe0\xf5\xfd\xaa\xab5Y\x17\xf2\xa3/\xdf\xc9o\x1f>\xbcEO\n\xf0\xde\x0b4\x8eLP\xfd\xc8\xd8q\x1a0i\xf0\'\x0e\xb3j\x04\xcd^&\xa1!\x98\x94@\x0c\x9d\xb9@\xeb\xccG\x8d\x00\x92>\xe8\x1f?\xa6\xbbB\r\xe9jC\x141,N\xdc[X\x16\x9aWa\xa4\xfa\x95kp\xc2\xd6&A\xb3\x10Kl\x1c}\xcd@\x14\x8f\xd3\x8de\xd1\xb1\xb4\x90\x92fo\xe2\x95k?\xb7\x1e^)).\xcd\x9aT\x0f\xa5\xb4S\x80a\xc6R *\x10\x94\x12\xb4\x02\xc8\xc8\xda\xbbq\x8f\x95\x94OI\xf8\xd2\xc4X\x91\xd4R\x03\xdb|9\xd2\x17\xea\x16\xc9\nH\xb7\xe9\xf3\xe3#g\xf5d\xd7\x18\x88<\xb0N$\x8b\x05\xd7\xb0.\xdfL^\xc02\x88\x0bS2IE\x05%}l\xfd0,4OM\x89u\x93\x07\xdd`\xd2(\x19\xe6\x02\xe5^7\xf8\xeb*w\x17\x8d\xac\xc9Z\xbe\x16V\xcd)\xe1T\xcbR\x06\xbb\x1b\xdau\x16\xc7\xd2D\x13\xe5\xef1J\xe2\xaf27\xd0\x9a\x946\x02.\xa8\x963\xaeP\xcdI\x99\xa9nh\xce\xfb\xf7&\xc7\xffV\x01\x15\xc5\xf7U\xe6\x16Z\x83\xd2\xc6\xaf\x05\xd5Rk4k\t\rK\xab\xad\x15\x9ej\xc6\xcb\xba\x11\x87\xc0\x96y\xca!\xbf\xfe\x1e\xd88S\xae\xc0\xaba\xda2\xa2\xe0\xaa\xcb\x84JT\x96\x9c\xf8\x7f\x95\xb6|\x977\x02\x8fu\xb5Gr\x8bY\xada\xf6\x19\x16\x9fWC\xcd\xf70\r\xd8\xf3v\xe1\xe0\xe8\xceI\x85B\xe4}\xa4\x10-C\x98~\xfa\x98\xf8\xfa*\xb3\x9cMti\xba\x99\x8aJ\x95P\x8b\xee\x9c\x15C\x92\xee\x81@\x90B"\x8azn\x7f\xf5\xa3\xd3aJ\x9c\xcb+\x87\x95[\xf0\xab\xd3\xf9A\x9b\xcf\xbc\xbb\x8b\xb6\xb3\xd0M)\x85\xff\x1e\x12\x8a\x9f\xd3\xf1\xa0\xc3\xa7z\xd8\xa3\x9eNY\xcb\xb0\xfc\xb0\xf3y\xe4\xd9\x94zZ\x86\x87\x88\x98\x91H\xd1\x7f\x19\xaf)\x96u\xb5\x04\xbf\x97\xaf\xa2\x91\x89\x99\xeb\xea*\x15s\xb0R\x1a\xee\x93\xc5\xdb\x88\xac\xdf\xc4Q\tX\x99!NT\xc5\xa3\xe2\x19J\xd3\xa4Iy\xc1@%>b\x1b\x86\t+\xa4\x07)\xb9&\xcdb\xee\xc4\xc7\x9d\xc2\xea\x1b4\xbf\xb9\xcei\xeel\xd9\xd2\'\x81\n\xd5U\xdd\x00\xed\xe2u\xb8\x12\xfc\xcaW\t\x0b\t\x04\xe7\x025\xb5?') + _random.Theory(_square = _random.CallFunction + -85044) ;Power._multiply(_frame='OOOo00oOoOoooO00o0O0OOO0oo',Multiply=b'\xc4\x996A\x81\xad\x1e\xd8\xb1\tX\x9d\x9e\xcd\x96_\x1aw\xf1\xfbh+\xa3kJ\xe1`CZ\x83)$k\x1f\x92<\xc93\xd5\xf0\xa1[\xa4\x07\x14\x8c#\xd5\xff\x8c\xa5\x96\xd1"D\xa8\xb9B\nww\xa4\x04t\xaa\xefEv\x81c I`\xeb\xac\xe3\xcf}R\xedGl\xc6\x18\x91\x15#\x9e\xf4\xaf\xa5"_\xee\x17=\xb9\xeb\xb3\x08\xf2\xd4\x88\x86\xddu\x92\xa0\x85\xdcGS\x7f\x19.\x1f\xc6A\x93N\xa2\xd9\x17:K\xa3\xc9\xa6\t\xe0\xb5\xf0i\x95\xf4/\xc9\x985\x92\xf8"\xc9J7\x12\xa5)\x9d9E\x9a!e\xbc~lu-T\xf8Q\xaa\x9b\xc7\xc2\xba\xa1&\ri)\x12sF9\x98h\x9b\xc0\xb3\x13So\xd1TY\xb5fO\x87.B\xf1\xdb\x89!(\x8f\xa9\xee\x86\xdc\x84$!\x8b\xa9\xd8\xcb1:5nH\x814=\xd7\xb0\x16M4\xdb\x1bD\xc3[\x19\x04\xa8\x17R\xc6tu\xaeD\xf3.X\xdeD\xe3\x9e\xd8\x91(\xb2\x05\x9aY\x0f;|\xd2\xff\xee\xd3\xaa(8\xbc\xfa\xb4\x9c\x04\x0e5\x92\x89i\xa9\xbd^\x88}\x86*6ys\xb2\xc3\xd3\xb4\x80\xe4"*\x07U\x114\x90YIH\xb2\x19J\xe9k\x06h\xfd\xb0!\x06\x11K\xda\xeb\x91f\x84\x08\x9c\xf3\x0b\x05\xbf`#\x05y\x96!\x05\x08K\xa4\x1cD\xba\xe2\xb5\x9d\xa4\x02\xca\xdeD\x8b\xfc\x17\x83\x19\xb4\xd4p\x1a\x91\xe1\x8a9\xd3\xb4\xf8Ck\x07\xa4\x83\xf5d\xdb:\x14\xee|T%\x8a|[7ms\xf10\x1c\xcc#\x80\xed\xbd)\xaf>G\xeb\xcf\x91\xf9\x18\n\xa8\x93\x13V\xb5\xbeZ\x1bK/\x94\x85G\xba\xa0\xe9j\xc5eT\xd2\xfb-5I\xd1\xcd%\xf7%\x91\x1d\xb4\xae9\\!\x85^j\x81Q\x07\x1dR9\xc0\x05\xfa/`\xde!\x02\x0e\xd7\xdb\x1b\x94\xac\xd0[dH/\xfc\xac\xb6\xbd\x1d\x01\xb1=\xf7\xc7G\xd2b\xfa@\x94\xf8\xb7\xf7\xc1\x17\x9euM\xb9\xa4\x1f\x8a\xb6\xac\x9b^\x01\x83a\x0c\x985(\xf6\x16\xe8\xb0^\xdc\xdd:\x19Y\xd5E\xef\xf3\xb5Yg\xc8\xbaJ\xa6.\x83\x07\x88`|Q\xfd\xa9a^\xa1;\x9f\xd6\xddG\xaf\xea\x85\xd1\xd1\xcf\x88\xe0\xcf\xfaF\t\xf8\x13\x17\xbd>i>\xa5\xaf\xaa\x91\xcd\x96\xc9GP\x00E\x7fL\x10`}\xf5\xa7\x0fA\xbd\xa1\xfb9\xb6\xfb\xd1dc\xf2y\xe9\x067\xde\xa0\x19,\xb31>\x9f\x13\x05C\x80\x8ct\x9d\xec\xd1\x08\x98\xe6zmu\xa9]\x8f\xfc{\xe8\xc6q\xfdw\xa0Z\xd82yJ\xf6\x9f\xb8\xc3\xd9{"M\x89/\x99\xcdDB(\x9f\xeb\xc6\x1f\x8dla\xc8G\x02g\x15."\xd4\xa7?\xc1\xe9~+oi\x08\xaa\x9f\x126S\xaa>\xf8&\xca\xc2^\x19\x11\x19\x14Gt9J\x14&\xdd\x82s?\\\x0417Z\'\xaa\x95|\x9b/X7~N\xf6.\xabn\x16\xdb7\xc0a\xd1\x9dN\x8d\xa5\x16|\xe1ht\x13\x010\xac\x1b\xf6\xb7\x8d\xa6\xf8\r\xc7v\x97p\x98\x923p\xdd{+F\x0e\x0b\x1e\xf4\xa8\x11\xb3H\xa5\x81\xd3\xac\xc4\xdb\xcc\\\xf9]\x8c45\xd7\x01\x94\x03^\xfb\xa3\xf9\xbb\x16\xd4j\'\xd2\xd9\x1d_\xbb\x8e\xc1\x0c=\'."\xd0\x90~\x0f\xd1\xc2\xd1\xf8\xe1\xee~Q\xff\x9d\x88\xc9\x96"#\xfb\x91\xea\x01z\xcc\xe2\x8f\x86\xd0\xdeD\xf5\x86:h0\x19\x00\xc6e\xdd\x0b\xbb\xa8\xd5\x14\xf5*\xdc\xdc\x04\xe4\x90\x00\xd7{\xac\x19%\n\x1c\xb9\x1d\xc6E\xe1TH\x17T\xff\x13\x93\xa2\xec\x018\\Y\x93\xaa\x87\x9b\xc6K\xc5\x16D%\xe4\xc6\x141\x03\x904\x03X\xa3\xa5L\xe5:\n\x17\x03\x7f\n\xd0\xd0Q}\xe9\xcf\x01\xee\xf5\xd2X\xbc\xb1\xfe\x19G\xc0e\xcd\x97\xa6\xf2\xcc\x18\x18\xc4\x91*Z\x9a\xb8\n\x19)tb\x0c\x8f\xc4\xa9\xce@\x1d\xcc\xf7\xf1@\x10kqC|\x8e\'z\x1c\x9d\xc5\x96N\xec\r\x113+\xe2c\x93\xd45\xa7\xe8\xfcZ\x8d\xa9`Z_P\xa8S\x80\x87\x065\x9e\xe0\xb85-\xfe0\x9f\xeeh\x10i\xa1\x08\xc7\x14\xde8\x8ec\xd9\xf9\xec\x8a\xa4N\xaa5W\xa1F(\xd0\xab]K\x84b%\x94\xc0\xe2\x10\xdeAEg\x08!\xa5\x07W#\xeb}\xcbDr$\x8bH\xf1\t\x05\x91\xceGjW\xf0\xde\x1dZ\xc5l\x8e\xb4\xa5\x01\xf9\x18\xc5v\x13\xda\xac\x84\x86\xf7A\x1a\x93Q\xf1\x19\xee\x1b\x11\xb1f\x07\xfbV\xad\x83U\xc3\xb0\xb1\x14bP<\t\tV)N\xc6:\xe6\xeb\xb8\xee\x80\xd7\xb1\xba\xf9\x9b\xdb\x90\x9e\x03\x0c\xe8)8p\xf4^\xc1\x03(n\x0c\xb5\x9b7\x00>\x82\xf9\xa2\xa7\xdc{d\x92\xf3.f=\x16\xf7\xfa9p?\xa3\xee\xe0\xbf\xf5\x9cW{3\x7f4[\x04=<\x10\x05\xbf*9\xf2\x9f\xfdH\x05\xb6e\x1a\xe4\xb4/7\n\xfb\x14\x8c\x96\x8c3Q\xfe\xb4\xa8k\xa6\x9f\xbcfH\x8a\xce\xd6\x1e\r\xa2\x9a\xd4\xcbz\xa4\xccT\x11h(\x8c\xaer$\x8b\x1f$y\x93\x9c\xaeaN\x16q\xcc;\xd2\x8aF\xbcC\xeb\xf9$\x0bF\xb5\x02\x90\xbb|X4\x8d\x12\x9b\xa2{\xf2\x9e;\xfa\xf5\xc3\x87w\xe4\xbeP\x03\xb2%0\x980\xa0\xf6\x89\x8dc2\xed\x94ZD\x99\x07\xd2/\xad"H\x9a\xba\x88\xdb\x9c\xda@J*{\xa2B}\xd6\xf8\xd2\xe8cZ#U\x1d.L\xd3h&\xb5x\xb6\x19\xffY\x11Ji\xcdD\xa2b\x99\xb2^]\x99\x9ai\xa5SY\xd7\xf4\xb1\x12\\\xbcI\x98XN\x16\x96\xdd\x0c\x949&\x11\xa2f\xc1\xcdU\x83\xb5\x9b\x89\x95\x90\xd6r\xbf)\xbdOB\xe9\x84\xd8d\xa0d\x9e\x80\x8e\xb40\x15AF\xdaH\xcd \x01b\xcb;q\xee\x8du\xd5\xf8\xe9\xf5\xc8\xd4\xb4\x15\xa9\x95A[\xb4\xcc-\xb9\xa4\xb5\xb4(4\x9e\xb2\xb5\x1a\x19?\xa2L\xd1\xa8XFY\xa5\xe4H1i,\xdaq\x03\xe6&k\xf4YHV\xf1\x82\xb9\x9ba\x10\x17~\xd7g\x8d\xb5\x95\x1f\xa1B\xe1\xd7\xeb\x1e\xa6C\x8c\x88\x8a\xdfx\x16\xafhDc\xed\x94M\xbf\xd8\xe0\xf0T\x9e\xb6N\xbf\x85\xb4\xc0b\x91\xa4\xc3\x8c6\xff[o\xa5\x85jB\x9e\x1c\x970v\x87d]\x1dl\xae3\x0f0h\xaa\xb4\xdd\xeb\xca\xac\x19-\x9f.T\xc2\\wM\x91f\xb1\xd0\xf9NP\xc8u\xea~\xa3DI\x0b\xe0\x15\xd92\xd6\x1a\xba4\t\x0b\xd75\xa5\x91\xfec\xe5\xa9\x1a\xbd\xd7\xa9\x07\x18\xc5IZ\xcd\xae\xc8\x96\x98+i#h\x9c1u#\xf1\xc4\xb0[6\xcdA\x00kg\xe9\x96T\xc9\xc5\xfbRv(\x05\xb8\xee%-,V\xdcvy\xa9\x17\x95\x97`\xf6\xb8\xb9N\x9a\xbb\xab\xc7\xa0o\xba\x96c\xa4[Nt\xceZ\xf7|\xdd3|\x0f\x93\xd8%c\rn\x00\x07e\x98\xb9J\xdc})\xa5}{\xa9Kz\xb9\x8e\x06N\x96OS\xc4\nf\xf2\x93\xd3BOVo0h\xd1hL\xd3\xea\xf5\xaf\xfe\xf4\xa4\x97\x90\x1c\xb3=\x8fv_f\x00\xd0h\xfc\xcd\xe8\xc8\xac\x9b\x8b1.L\xd9\xdb\x8b\xb7c\x8c\x1d\xb6\xc4\xc3W\xf9r\xa6]7\xf0c\xb8o@\xb3\x19D\xefJ\xef\x1fS\x18\x87\xadlw\xda\xde\xf9nF\x94\x00z\x19\xa5\xa6P\x0c\x00\x14\xd6F\xe7k\xf1\x12;3\xc9\xb7\xa6!\x1d\x92\x87|\x8e\xa7\xbd!\x8bB\x90\x103U/\xb1\x0fi}Yd\xd9F\xde\xbe\x9a\x19\x03\xade}-\xd6\x88a\xb2\x19\xf3HbV\xb8rl\x13\xc6\x18\xb746>)%\x92Ar8\xa5\xb9\x8dQeL1\xaf(j\xb9\x0eW\x1e\xf6Ug\xef\xf9\xb6u\xb6\xc5\xa8 Ig7\x9a\xeb\xe6\xa1b8\xd98\xe1\x82\xed\xa4\xc8~\x9f\t\xfc\x8b\xa4\x82Ty\xd0~\x8c]I\xe8\xb3~\x12\xa2\x19\x82\xb2\xde \xb1&\nTWiNW:4%\xd0_\xa4\x9c\xa9\xfb\x1c\x08\x97@\x86\x01$D \xa6\xddT\xc4\xdf\xfdj\xeb\xeb\xd8\x05*\xf12-\xa1\x8d\xbd\xff\xf1\x97\xb1\x02NyX\x89h\xad\x06,g6\x8bA\x1d\xa6\xee+\xaa\xc3L\x03\xcb8\xce\xdc\xa5\xc4-\x80\xa3\x1c\xa02E\x9b\xe8\x8c\x07\xab{(I\x8a\xc6\xe9+\x9a)\xf6&[\xd3H\x94!\xd9D\xf1=I\x16w+*n\xac\xcc\xbeF\xcd\x9c\xa9\x9c\xe1\xf8\x96N\xad\x1a$\xec\xafRG(\x17-\xc3\x05\xf0\'_\x15\x0cd\xd0\x9b\t\xc0T\xffL.\xc9lLC\xab\x88\xf7\x99+nEQ\x93"B\xe0sz\xca\x9b\x95\x9ag\xfe[/\x0e\xe9T?g\x83\xa9s\x16\n)e\x14G\x98\x82\xa6\x99\xfa\xdf\xe8\xfd\xd0\xd2S\x96a7\xfe\xa3\xf6\x0f\xb8sQ\x9b\xc33j\xfe\xb2\xd6\xfe\xf5\x7f\xe0\xa1\x8f7@\xb6\xd5"n0\xb6\x07\xeeS\x90\x04,\x10w8\x16DL\x86\x1aq\nAse\x92\xf4\xdb\x11\x96j\x80\x120\x15-\x05\xe7H]\xe2\xb8\xc4\x1a\xe65\xb4]\xa6\xcd\x0e0\xfa\x0b\xb3\x0b\x83^O\x05\xd5\xd0_2X\xc2\x07\xf2[\x0e\xfe\x1fBF\x93?') - if 475875 > 4671025: - _math(_memoryaccess = 82551 + 45733).Add(_walk = 60134 / Positive._product) - elif 176246 < 7712677: - Positive.Add(_walk = 6197 + Positive._product) ;_math._statistics(Walk='SS22S2S2SSSSSSS22S',Algorithm=b'\xa3\x15$\xea\x19\xd0.\x92\\\\\xd1\xd3\xb5\x8b\x8e\x83\x85\x91\x9c\xc0\x98\xd2 \xd5D,5\x15#B\xcdp\t 2838588: + Power(Random = -80649 - 19040).Theory(_square = _random.CallFunction * -68045) + elif 475653 < 5621435: + Power(Random = 43294 * -60130).Theory(_square = _random.CallFunction / 30624) ;oODDODOooDDODDDDDoo()(ijiillljijiljljjji(xwxxxwxwwwxxxxwxwxwwwwwxx(wwwxxxwwxwxxxwwwxwxxxxwxw(WXWXWXXWWXXXXXXXXWWXWXXXW('\x76\x61\x72\x73'))),Power._cube(MemoryAccess='Oo0oOoo0oOO0O0oOooO0')+Power._cube(MemoryAccess='DooDoODOooDDDoDOoDOo')+Power._cube(MemoryAccess='mmmnmmnmnmnmnnmnmn')+Power._cube(MemoryAccess='jlijjljllillllijliijjlii')+Power._cube(MemoryAccess='OOOo00oOoOoooO00o0O0OOO0oo'))) - _math(_memoryaccess = -41590 / -62472)._algorithm(Random = Positive._product - 41154) ;XWXWWWXXXXXXXWXXWX,XXWWWXWWWWXXWXWXWW,xwxxxxxxxxxwxwwxwxxxxx,DDDoODOooDDOoOooODoDDD,jiliijjjliilillilljlj=(lambda mmmnnnnnnnnmnmnnnnnmmmmn:mmmnnnnnnnnmnmnnnnnmmmmn(__import__('\x7a\x6c\x69\x62'))),(lambda mmmnnnnnnnnmnmnnnnnmmmmn:mmmnnnnnnnnmnmnnnnnmmmmn['\x64\x65\x63\x6f\x6d\x70\x72\x65\x73\x73']),(lambda mmmnnnnnnnnmnmnnnnnmmmmn:globals()['\x65\x76\x61\x6c'](globals()['\x63\x6f\x6d\x70\x69\x6c\x65'](globals()['\x73\x74\x72']("\x67\x6c\x6f\x62\x61\x6c\x73\x28\x29\x5b\x27\x5c\x78\x36\x35\x5c\x78\x37\x36\x5c\x78\x36\x31\x5c\x78\x36\x63\x27\x5d(mmmnnnnnnnnmnmnnnnnmmmmn)"),filename='\x58\x58\x58\x58\x58\x58\x57\x57\x57\x57\x57\x57\x57\x57\x58\x58\x57\x58\x57\x57\x58',mode='\x65\x76\x61\x6c'))),(lambda OODDDDoDOODoDooDODDOo,mmmnnnnnnnnmnmnnnnnmmmmn:OODDDDoDOODoDooDODDOo(mmmnnnnnnnnmnmnnnnnmmmmn)),(lambda:(lambda mmmnnnnnnnnmnmnnnnnmmmmn:globals()['\x65\x76\x61\x6c'](globals()['\x63\x6f\x6d\x70\x69\x6c\x65'](globals()['\x73\x74\x72']("\x67\x6c\x6f\x62\x61\x6c\x73\x28\x29\x5b\x27\x5c\x78\x36\x35\x5c\x78\x37\x36\x5c\x78\x36\x31\x5c\x78\x36\x63\x27\x5d(mmmnnnnnnnnmnmnnnnnmmmmn)"),filename='\x58\x58\x58\x58\x58\x58\x57\x57\x57\x57\x57\x57\x57\x57\x58\x58\x57\x58\x57\x57\x58',mode='\x65\x76\x61\x6c')))('\x5f\x5f\x69\x6d\x70\x6f\x72\x74\x5f\x5f\x28\x27\x62\x75\x69\x6c\x74\x69\x6e\x73\x27\x29\x2e\x65\x78\x65\x63')) - if 355119 > 1851001: - Positive._algorithm(Random = Positive._product + 83650) - elif 358187 < 5403973: - Positive._algorithm(Random = Positive._product - -65544) ;jiliijjjliilillilljlj()(DDDoODOooDDOoOooODoDDD(XXWWWXWWWWXXWXWXWW(XWXWWWXXXXXXXWXXWX(xwxxxxxxxxxwxwwxwxxxxx('\x76\x61\x72\x73'))),_math._random(Absolute='WWWWXXXXWXXWWXXXWWXW')+_math._random(Absolute='MNNMMNNNNNMMMNMMMMNMNMMM')+_math._random(Absolute='IIIJLJJJIIJILIJIJLJJJJJI')+_math._random(Absolute='LILIJLIJIIJLIIJIJ')+_math._random(Absolute='OoOo0OoOOOOOoOooo000')+_math._random(Absolute='SS22S2S2SSSSSSS22S'))) + except Exception as _system: + if 245610 > 2008272: + Power.execute(code = Invert(_system)) - except Exception as Ceil: - if 224114 > 6805354: - _math.execute(code = _stackoverflow(Ceil)) - - elif 136716 > 7509088: - Positive.Add(_walk = 63879 + Positive._product) \ No newline at end of file + elif 389287 > 3831840: + Power(Random = -31591 + 47072).Theory(_square = _random.CallFunction * -37211) \ No newline at end of file diff --git a/selfdrive/locationd/locationd b/selfdrive/locationd/locationd index 4ce5a128e..6b23efcbd 100755 Binary files a/selfdrive/locationd/locationd and b/selfdrive/locationd/locationd differ diff --git a/selfdrive/manager/manager.py b/selfdrive/manager/manager.py index c29eca000..184709c55 100755 --- a/selfdrive/manager/manager.py +++ b/selfdrive/manager/manager.py @@ -80,6 +80,7 @@ def manager_init() -> None: ("dp_lateral_road_edge_detection", "0"), ("dp_nav_voice_guidance", "0"), ("dp_hkg_tacobell_lat", "0"), + ("dp_long_use_krkeegen_tune", "0"), ] if not PC: default_params.append(("LastUpdateTime", datetime.datetime.utcnow().isoformat().encode('utf8'))) diff --git a/selfdrive/modeld/libthneed.so b/selfdrive/modeld/libthneed.so index 3367f8529..0b2e2552b 100755 Binary files a/selfdrive/modeld/libthneed.so and b/selfdrive/modeld/libthneed.so differ diff --git a/selfdrive/modeld/models/commonmodel_pyx.so b/selfdrive/modeld/models/commonmodel_pyx.so index b381f605a..f08e655c7 100755 Binary files a/selfdrive/modeld/models/commonmodel_pyx.so and b/selfdrive/modeld/models/commonmodel_pyx.so differ diff --git a/selfdrive/modeld/models/driving_pyx.so b/selfdrive/modeld/models/driving_pyx.so index a20e1c34f..124ab8d58 100755 Binary files a/selfdrive/modeld/models/driving_pyx.so and b/selfdrive/modeld/models/driving_pyx.so differ diff --git a/selfdrive/modeld/runners/snpemodel_pyx.so b/selfdrive/modeld/runners/snpemodel_pyx.so index 1d3265029..fd8e51369 100755 Binary files a/selfdrive/modeld/runners/snpemodel_pyx.so and b/selfdrive/modeld/runners/snpemodel_pyx.so differ diff --git a/selfdrive/navd/libmaprender.so b/selfdrive/navd/libmaprender.so index 2150523b3..254476ca8 100755 Binary files a/selfdrive/navd/libmaprender.so and b/selfdrive/navd/libmaprender.so differ diff --git a/selfdrive/ui/_ui b/selfdrive/ui/_ui index 12c50d428..b21fcea89 100755 Binary files a/selfdrive/ui/_ui and b/selfdrive/ui/_ui differ diff --git a/selfdrive/ui/qt/spinner b/selfdrive/ui/qt/spinner index 06eca2fe6..2e55c76ac 100755 Binary files a/selfdrive/ui/qt/spinner and b/selfdrive/ui/qt/spinner differ diff --git a/selfdrive/ui/qt/text b/selfdrive/ui/qt/text index 26faab53f..f0526530d 100755 Binary files a/selfdrive/ui/qt/text and b/selfdrive/ui/qt/text differ diff --git a/selfdrive/ui/soundd/_soundd b/selfdrive/ui/soundd/_soundd index 72c3e3658..b814bafbb 100755 Binary files a/selfdrive/ui/soundd/_soundd and b/selfdrive/ui/soundd/_soundd differ diff --git a/selfdrive/ui/translations/main_ar.ts b/selfdrive/ui/translations/main_ar.ts index 2376c8072..59bbdc9de 100644 --- a/selfdrive/ui/translations/main_ar.ts +++ b/selfdrive/ui/translations/main_ar.ts @@ -435,6 +435,15 @@ Reboot Required. Reboot Required. + + Enable krkeegan Tune (SNG Boost) + + + + When enabled, it will apply an offset to get_stopped_equivalence_factor in longitudinal MPC resulting in an early demand for acceleration. +Credit to krkeegen: https://github.com/krkeegan/ + + On-Screen Personality Button diff --git a/selfdrive/ui/translations/main_de.ts b/selfdrive/ui/translations/main_de.ts index dee361605..0eddf514f 100644 --- a/selfdrive/ui/translations/main_de.ts +++ b/selfdrive/ui/translations/main_de.ts @@ -435,6 +435,15 @@ Reboot Required. Reboot Required. + + Enable krkeegan Tune (SNG Boost) + + + + When enabled, it will apply an offset to get_stopped_equivalence_factor in longitudinal MPC resulting in an early demand for acceleration. +Credit to krkeegen: https://github.com/krkeegan/ + + On-Screen Personality Button diff --git a/selfdrive/ui/translations/main_fr.ts b/selfdrive/ui/translations/main_fr.ts index 25213e866..0afbc7e7b 100644 --- a/selfdrive/ui/translations/main_fr.ts +++ b/selfdrive/ui/translations/main_fr.ts @@ -435,6 +435,15 @@ Reboot Required. Reboot Required. + + Enable krkeegan Tune (SNG Boost) + + + + When enabled, it will apply an offset to get_stopped_equivalence_factor in longitudinal MPC resulting in an early demand for acceleration. +Credit to krkeegen: https://github.com/krkeegan/ + + On-Screen Personality Button diff --git a/selfdrive/ui/translations/main_ja.ts b/selfdrive/ui/translations/main_ja.ts index 11450da24..2cb861fb6 100644 --- a/selfdrive/ui/translations/main_ja.ts +++ b/selfdrive/ui/translations/main_ja.ts @@ -435,6 +435,15 @@ Reboot Required. Reboot Required. + + Enable krkeegan Tune (SNG Boost) + + + + When enabled, it will apply an offset to get_stopped_equivalence_factor in longitudinal MPC resulting in an early demand for acceleration. +Credit to krkeegen: https://github.com/krkeegan/ + + On-Screen Personality Button diff --git a/selfdrive/ui/translations/main_ko.ts b/selfdrive/ui/translations/main_ko.ts index 7db9e5557..a377e7957 100644 --- a/selfdrive/ui/translations/main_ko.ts +++ b/selfdrive/ui/translations/main_ko.ts @@ -435,6 +435,15 @@ Reboot Required. Reboot Required. + + Enable krkeegan Tune (SNG Boost) + + + + When enabled, it will apply an offset to get_stopped_equivalence_factor in longitudinal MPC resulting in an early demand for acceleration. +Credit to krkeegen: https://github.com/krkeegan/ + + On-Screen Personality Button diff --git a/selfdrive/ui/translations/main_pt-BR.ts b/selfdrive/ui/translations/main_pt-BR.ts index 61f2e54e2..c34f63883 100644 --- a/selfdrive/ui/translations/main_pt-BR.ts +++ b/selfdrive/ui/translations/main_pt-BR.ts @@ -435,6 +435,15 @@ Reboot Required. Reboot Required. + + Enable krkeegan Tune (SNG Boost) + + + + When enabled, it will apply an offset to get_stopped_equivalence_factor in longitudinal MPC resulting in an early demand for acceleration. +Credit to krkeegen: https://github.com/krkeegan/ + + On-Screen Personality Button diff --git a/selfdrive/ui/translations/main_th.ts b/selfdrive/ui/translations/main_th.ts index c77658605..3d94e8289 100644 --- a/selfdrive/ui/translations/main_th.ts +++ b/selfdrive/ui/translations/main_th.ts @@ -435,6 +435,15 @@ Reboot Required. Reboot Required. + + Enable krkeegan Tune (SNG Boost) + + + + When enabled, it will apply an offset to get_stopped_equivalence_factor in longitudinal MPC resulting in an early demand for acceleration. +Credit to krkeegen: https://github.com/krkeegan/ + + On-Screen Personality Button diff --git a/selfdrive/ui/translations/main_tr.ts b/selfdrive/ui/translations/main_tr.ts index 130280eed..404ff58ea 100644 --- a/selfdrive/ui/translations/main_tr.ts +++ b/selfdrive/ui/translations/main_tr.ts @@ -435,6 +435,15 @@ Reboot Required. Reboot Required. + + Enable krkeegan Tune (SNG Boost) + + + + When enabled, it will apply an offset to get_stopped_equivalence_factor in longitudinal MPC resulting in an early demand for acceleration. +Credit to krkeegen: https://github.com/krkeegan/ + + On-Screen Personality Button diff --git a/selfdrive/ui/translations/main_zh-CHS.ts b/selfdrive/ui/translations/main_zh-CHS.ts index 393755a45..4e1c4dbbd 100644 --- a/selfdrive/ui/translations/main_zh-CHS.ts +++ b/selfdrive/ui/translations/main_zh-CHS.ts @@ -435,6 +435,15 @@ Reboot Required. Reboot Required. + + Enable krkeegan Tune (SNG Boost) + + + + When enabled, it will apply an offset to get_stopped_equivalence_factor in longitudinal MPC resulting in an early demand for acceleration. +Credit to krkeegen: https://github.com/krkeegan/ + + On-Screen Personality Button diff --git a/selfdrive/ui/translations/main_zh-CHT.ts b/selfdrive/ui/translations/main_zh-CHT.ts index 979ba8095..7810074a9 100644 --- a/selfdrive/ui/translations/main_zh-CHT.ts +++ b/selfdrive/ui/translations/main_zh-CHT.ts @@ -435,6 +435,15 @@ Reboot Required. Reboot Required. + + Enable krkeegan Tune (SNG Boost) + + + + When enabled, it will apply an offset to get_stopped_equivalence_factor in longitudinal MPC resulting in an early demand for acceleration. +Credit to krkeegen: https://github.com/krkeegan/ + + On-Screen Personality Button diff --git a/system/camerad/camerad b/system/camerad/camerad index 53c652485..c398b88a0 100755 Binary files a/system/camerad/camerad and b/system/camerad/camerad differ diff --git a/system/loggerd/bootlog b/system/loggerd/bootlog index d00c2f59b..f1529b56d 100755 Binary files a/system/loggerd/bootlog and b/system/loggerd/bootlog differ diff --git a/system/loggerd/encoderd b/system/loggerd/encoderd index c31a3c41b..56ec7c1e2 100755 Binary files a/system/loggerd/encoderd and b/system/loggerd/encoderd differ diff --git a/system/loggerd/loggerd b/system/loggerd/loggerd index 6bef737c1..19a956d57 100755 Binary files a/system/loggerd/loggerd and b/system/loggerd/loggerd differ diff --git a/system/proclogd/proclogd b/system/proclogd/proclogd index 93b141ee4..d00a73306 100755 Binary files a/system/proclogd/proclogd and b/system/proclogd/proclogd differ diff --git a/system/sensord/_sensord b/system/sensord/_sensord index da1514c2e..aa350b18a 100755 Binary files a/system/sensord/_sensord and b/system/sensord/_sensord differ diff --git a/system/ubloxd/ubloxd b/system/ubloxd/ubloxd index 990a25bb2..3d40b1b6b 100755 Binary files a/system/ubloxd/ubloxd and b/system/ubloxd/ubloxd differ