From bfc3959f9f16952cf05a09dcb9150fd3b0435dba Mon Sep 17 00:00:00 2001 From: zhang Date: Fri, 11 Aug 2023 17:54:06 +0800 Subject: [PATCH 1/3] add gazebo for RL --- .../legged_gym/envs/gazebo/README.md | 14 + .../legged_gym/envs/gazebo/a1_config.py | 198 +++++ .../legged_gym/envs/gazebo/a1_legged_robot.py | 694 ++++++++++++++++++ .../envs/gazebo/a1_real/a1_robot_dummy.py | 189 +++++ .../envs/gazebo/a1_real/a1_robot_real.py | 429 +++++++++++ .../envs/gazebo/a1_real/robot_utils.py | 175 +++++ .../a1_real/unitree_legged_sdk/.gitignore | 1 + .../a1_real/unitree_legged_sdk/CMakeLists.txt | 32 + .../a1_real/unitree_legged_sdk/ChangeLog.md | 0 .../gazebo/a1_real/unitree_legged_sdk/LICENSE | 373 ++++++++++ .../include/unitree_legged_msgs/BmsCmd.h | 211 ++++++ .../include/unitree_legged_msgs/BmsState.h | 297 ++++++++ .../include/unitree_legged_msgs/Cartesian.h | 215 ++++++ .../include/unitree_legged_msgs/HighCmd.h | 462 ++++++++++++ .../include/unitree_legged_msgs/HighState.h | 574 +++++++++++++++ .../include/unitree_legged_msgs/IMU.h | 265 +++++++ .../include/unitree_legged_msgs/LED.h | 215 ++++++ .../include/unitree_legged_msgs/LowCmd.h | 352 +++++++++ .../include/unitree_legged_msgs/LowState.h | 509 +++++++++++++ .../include/unitree_legged_msgs/MotorCmd.h | 261 +++++++ .../include/unitree_legged_msgs/MotorState.h | 291 ++++++++ .../include/unitree_legged_sdk/a1_const.h | 19 + .../unitree_legged_sdk/aliengo_const.h | 19 + .../include/unitree_legged_sdk/comm.h | 168 +++++ .../include/unitree_legged_sdk/lcm.h | 82 +++ .../include/unitree_legged_sdk/lcm_server.h | 106 +++ .../include/unitree_legged_sdk/loop.h | 58 ++ .../include/unitree_legged_sdk/quadruped.h | 48 ++ .../include/unitree_legged_sdk/safety.h | 32 + .../include/unitree_legged_sdk/udp.h | 64 ++ .../unitree_legged_sdk/unitree_legged_sdk.h | 19 + .../lib/libunitree_legged_sdk_amd64.so | Bin 0 -> 458984 bytes .../lib/libunitree_legged_sdk_arm32.so | Bin 0 -> 476408 bytes .../lib/libunitree_legged_sdk_arm64.so | Bin 0 -> 426736 bytes .../a1_real/unitree_legged_sdk/pybind11 | 1 + .../unitree_legged_sdk/python_interface.cpp | 379 ++++++++++ .../legged_gym/legged_gym/utils/helpers.py | 7 +- 37 files changed, 6758 insertions(+), 1 deletion(-) create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/README.md create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_config.py create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_legged_robot.py create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/a1_robot_dummy.py create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/a1_robot_real.py create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/robot_utils.py create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/.gitignore create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/CMakeLists.txt create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/ChangeLog.md create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/LICENSE create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/BmsCmd.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/BmsState.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/Cartesian.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/HighCmd.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/HighState.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/IMU.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/LED.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/LowCmd.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/LowState.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/MotorCmd.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/MotorState.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/a1_const.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/aliengo_const.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/comm.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/lcm.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/lcm_server.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/loop.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/quadruped.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/safety.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/udp.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/unitree_legged_sdk.h create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/lib/libunitree_legged_sdk_amd64.so create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/lib/libunitree_legged_sdk_arm32.so create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/lib/libunitree_legged_sdk_arm64.so create mode 120000 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/pybind11 create mode 100644 rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/python_interface.cpp diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/README.md b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/README.md new file mode 100644 index 0000000..55ba083 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/README.md @@ -0,0 +1,14 @@ +### Compile the robot SDK of Unitree A1 for gazebo robot deployment. +``` +# Unitree A1 Gazebo +cd ./legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk +# After entering the SDK directory, compile the code +mkdir build && cd build +cmake -DPYTHON_EXECUTABLE=/usr/bin/python3 .. +make +cp *.so ../../ +``` +### How to use the gazebo lib +``` +python3 legged_gym/legged_gym/scripts/play.py --task wl_real --rl_device cuda:0 --sim_device cuda:0 --load_run pre-trained/ --checkpoint A1.pt +``` \ No newline at end of file diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_config.py b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_config.py new file mode 100644 index 0000000..5b51ea2 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_config.py @@ -0,0 +1,198 @@ +# SPDX-FileCopyrightText: Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Copyright (c) 2021 ETH Zurich, Nikita Rudin +# Copyright (c) 2023, HUAWEI TECHNOLOGIES + +from legged_gym.envs.base.legged_robot_config import LeggedRobotCfg, LeggedRobotCfgPPO + + +class A1RoughCfg(LeggedRobotCfg): + + class init_state(LeggedRobotCfg.init_state): + pos = [0.0, 0.0, 0.36] # x,y,z [m] + default_joint_angles = { + # = target angles [rad] when action = 0.0 + 'FL_hip_joint': 0., + 'RL_hip_joint': 0., + 'FR_hip_joint': 0., + 'RR_hip_joint': 0., + + 'FL_thigh_joint': 0.9, + 'RL_thigh_joint': 0.9, + 'FR_thigh_joint': 0.9, + 'RR_thigh_joint': 0.9, + + 'FL_calf_joint': -1.8, + 'RL_calf_joint': -1.8, + 'FR_calf_joint': -1.8, + 'RR_calf_joint': -1.8, + } + + class env(LeggedRobotCfg.env): + num_envs = 4096 + num_privileged_obs = 54 # if not None a priviledge_obs_buf will be returned by step() (critic obs for assymetric training). None is returned otherwise + num_observation_history = 40 + episode_length_s = 20 # episode length in seconds + curriculum_factor = 0.8 + + class control(LeggedRobotCfg.control): + # PD Drive parameters: + control_type = 'P' + stiffness = {'joint': 20.} # [N*m/rad] + damping = {'joint': 0.5} # [N*m*s/rad] + # action scale: target angle = actionScale * action + defaultAngle + action_scale = 0.25 + # decimation: Number of control action updates @ sim DT per policy DT + decimation = 4 + use_torch_vel_estimator = False + use_actuator_network = False + + class asset(LeggedRobotCfg.asset): + file = '{LEGGED_GYM_ROOT_DIR}/resources/robots/a1/urdf/a1.urdf' # a1_unitree.urdf + name = "a1" + foot_name = "foot" + shoulder_name = "shoulder" + penalize_contacts_on = ["thigh", "calf"] + terminate_after_contacts_on = ["base", "shoulder"] + self_collisions = 1 # 1 to disable, 0 to enable...bitwise filter + restitution_mean = 0.5 + restitution_offset_range = [-0.1, 0.1] + compliance = 0.5 + + class rewards(LeggedRobotCfg.rewards): + soft_dof_pos_limit = 0.9 + base_height_target = 0.28 + pitch_roll_factor = [1, 1] + still_all = True + only_positive_rewards = False + + class scales(LeggedRobotCfg.rewards.scales): + lin_vel_z = -2.0 + ang_vel_xy = -0.5 + orientation = -5.0 + base_height = -1.0 + torques = -0.0002 + dof_vel = -0.0 + dof_acc = -1.25e-07 + action_rate = -0.0 + target_smoothness = -0.01 + collision = -1.0 + termination = -0.0 + dof_pos_limits = -10.0 + tracking_lin_vel = 2.0 + tracking_ang_vel = 1.0 + feet_air_time = 1.0 + stumble = -0.3 + stand_still = -0.5 + feet_height = -3.0 + delta_phi = -0.1 + residual_angle = -0.1 + feet_velocity = -0.0 + episode_length = 0.1 + + class normalization(LeggedRobotCfg.normalization): + + class obs_scales(LeggedRobotCfg.normalization.obs_scales): + height_measurements = 0.0 + + dof_history_interval = 1 + + class noise(LeggedRobotCfg.noise): + add_noise = True + heights_uniform_noise = False + heights_gaussian_mean_mutable = True + heights_downgrade_frequency = False # heights sample rate: 10 Hz + + class noise_scales(LeggedRobotCfg.noise.noise_scales): + height_measurements = 0.0 + + class commands(LeggedRobotCfg.commands): + curriculum = False + fixed_commands = None # None or [lin_vel_x, lin_vel_y, ang_vel_yaw] + gamepad_commands = True + resampling_time = 10. # time before command are changed[s] + + class ranges: + lin_vel_x = [-0.5, 0.5] # min max [m/s] + lin_vel_y = [-0.5, 0.5] # min max [m/s] + ang_vel_yaw = [-0.5, 0.5] # min max [rad/s] + heading = [-3.14, 3.14] + + class terrain(LeggedRobotCfg.terrain): + mesh_type = 'trimesh' # none, plane, heightfield or trimesh + dummy_normal = True + random_reset = True + curriculum = True + max_init_terrain_level = 2 + # terrain_length = 8. + # terrain_width = 8. + # num_rows = 20 # number of terrain rows (levels) + # num_cols = 20 # number of terrain cols (types) + # terrain types: [smooth slope, rough slope, stairs up, stairs down, discrete, stepping stones, wave] + terrain_proportions = [0.15, 0.15, 0.15, 0.0, 0.2, 0.2, 0.15] + # rough terrain only: + measure_heights = True + + class domain_rand(LeggedRobotCfg.domain_rand): + randomize_friction = True + friction_range = [0.5, 1.25] + randomize_base_mass = True + added_mass_range = [-3., 3.] + randomize_com_offset = True + com_offset_range = [[-0.05, 0.05], [-0.05, 0.05], [-0.05, 0.05]] + randomize_motor_strength = True + motor_strength_range = [0.8, 1.2] + randomize_Kp_factor = True + Kp_factor_range = [0.75, 1.25] + randomize_Kd_factor = True + Kd_factor_range = [0.5, 1.5] + + class pmtg(LeggedRobotCfg.pmtg): + gait_type = 'trot' + duty_factor = 0.6 + base_frequency = 1.5 + max_clearance = 0.15 + body_height = 0.28 + max_horizontal_offset = 0.05 + + +class A1RoughCfgPPO(LeggedRobotCfgPPO): + + class algorithm(LeggedRobotCfgPPO.algorithm): + entropy_coef = 0.01 + num_mini_batches = 4 # mini batch size = num_envs*nsteps / nminibatches + + class runner(LeggedRobotCfgPPO.runner): + run_name = '' + experiment_name = 'rough_a1' + max_iterations = 6000 # number of policy updates + resume = False + resume_path = 'legged_gym/logs/rough_a1' # updated from load_run and ckpt + load_run = '' # -1 = last run + checkpoint = -1 # -1 = last saved model diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_legged_robot.py b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_legged_robot.py new file mode 100644 index 0000000..40c0ed8 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_legged_robot.py @@ -0,0 +1,694 @@ +# SPDX-FileCopyrightText: Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Copyright (c) 2021 ETH Zurich, Nikita Rudin +# Copyright (c) 2023, HUAWEI TECHNOLOGIES + +import os +import sys +import time +import numpy as np +import torch + +from legged_gym.utils.isaacgym_utils import (to_torch, quat_mul, quat_apply, torch_rand_float, get_axis_params, + quat_rotate_inverse, get_euler_xyz) +from legged_gym.utils.torch_math import quat_apply_yaw, wrap_to_pi, torch_rand_sqrt_float +from legged_gym.utils.helpers import class_to_dict, parse_device_str +from .a1_config import A1RoughCfg +from legged_gym.envs.gazebo.a1_real.robot_utils import STAND_UP_HEIGHT +from legged_gym.envs.gamepad import gamepad_reader +from legged_gym.envs.gazebo.a1_real import a1_robot_real +from legged_gym.envs.gazebo.a1_real.a1_robot_dummy import A1Dummy +from legged_gym.envs.base.motor_config import MotorControlMode +from legged_gym.envs.estimator import robot_velocity_estimator +from legged_gym.envs.estimator.torch_robot_velocity_estimator import VelocityEstimator as torch_velocity_estimator +from legged_gym.envs.base.PMTrajectoryGenerator import PMTrajectoryGenerator + + +class A1LeggedRobot: + """A1leggedRobot environment class for the real-world A1 robot. + + """ + cfg: A1RoughCfg + + def __init__(self, cfg, sim_params, physics_engine, sim_device, headless, **kwargs): + """ Initialize the A1LeggedRobot environment. + + Parses the provided config file, + initilizes pytorch buffers used during training + + Args: + cfg (Dict): Environment config file + sim_params (gymapi.SimParams): simulation parameters + physics_engine (gymapi.SimType): gymapi.SIM_PHYSX (must be PhysX) + device_type (string): 'cuda' or 'cpu' + device_id (int): 0, 1, ... + headless (bool): Run without rendering if True + """ + self.cfg = cfg + self.sim_params = sim_params + self.height_samples = None + self.debug_viz = False + self.init_done = False + self._parse_cfg(self.cfg) + self.base_task_init(cfg, sim_params, physics_engine, sim_device, headless) + + self._init_buffers() + + self.hybrid_action = np.zeros(60, dtype=np.float32) + self.motor_control_mode = "P" + self.last_ctontrol_time = 0 + + self.gamepad = gamepad_reader.Gamepad() + self.command_function = self.gamepad.get_command + + # Construct real robot + self.robot = a1_robot_real.A1Robot(motor_control_mode=MotorControlMode.HYBRID, + enable_action_interpolation=False, + time_step=self.cfg.sim.dt, + action_repeat=1, + device=self.device) + + self.robot_dummy = None + if cfg.control.use_torch_vel_estimator: + self.robot_dummy = A1Dummy(motor_control_mode=MotorControlMode.HYBRID, + enable_action_interpolation=False, + time_step=self.cfg.sim.dt, + action_repeat=1, + device=self.device) + + self._clock = self.robot.GetTimeSinceReset + self._reset_time = self._clock() + self.start_time_wall = self.time_since_reset() + + self._state_estimator = {} + self._state_estimator['robot_state_estimator'] = robot_velocity_estimator.VelocityEstimator( + self.robot, moving_window_filter_size=20) + self._state_estimator['torch_robot_state_estimator'] = torch_velocity_estimator(robotIn=self.robot_dummy, + window_size=20, + device=self.device) + + # self._prepare_reward_function() + self.init_done = True + self.tik = 0.0 + + self.fixed_commands = self.cfg.commands.fixed_commands + self.curriculum_factor = self.cfg.env.curriculum_factor + self.height_noise_mean = 0. + self.pmtg = PMTrajectoryGenerator(robot=self.robot_dummy, + clock=self.robot.GetTimeSinceReset, + num_envs=self.num_envs, + device=self.device, + param=self.cfg.pmtg, + task_name="a1_real") + self.count = 0 + self.reset_flag = False + + def time_since_reset(self): + """Return the time elapsed since the last reset.""" + return self._clock() - self._reset_time + + def base_task_init(self, cfg, sim_params, physics_engine, sim_device, headless): + """Initialize the base task parameters. + + Args: + cfg (Dict): Environment config file + sim_params (gymapi.SimParams): simulation parameters + physics_engine (gymapi.SimType): gymapi.SIM_PHYSX (must be PhysX) + sim_device (string): 'cuda' or 'cpu' + headless (bool): Run without rendering if True + """ + self.physics_engine = physics_engine + self.sim_device = sim_device + sim_device_type, self.sim_device_id = parse_device_str(self.sim_device) + self.headless = headless + if sim_device_type == 'cuda': + self.device = self.sim_device + else: + self.device = 'cpu' + + # graphics device for rendering, -1 for no rendering + self.graphics_device_id = self.sim_device_id + if self.headless: + self.graphics_device_id = -1 + + self.num_envs = cfg.env.num_envs + self.num_obs = cfg.env.num_observations + self.num_privileged_obs = cfg.env.num_privileged_obs + self.num_actions = cfg.env.num_actions + self.num_policy_outputs = cfg.env.num_policy_outputs + + # optimization flags for pytorch JIT + torch._C._jit_set_profiling_mode(False) + torch._C._jit_set_profiling_executor(False) + + # allocate buffers + self.obs_buf = torch.zeros(self.num_envs, self.num_obs, device=self.device, dtype=torch.float) + self.rew_buf = torch.zeros(self.num_envs, device=self.device, dtype=torch.float) + self.reset_buf = torch.zeros(self.num_envs, device=self.device, dtype=torch.bool) + self.episode_length_buf = torch.zeros(self.num_envs, device=self.device, dtype=torch.long) + self.time_out_buf = torch.zeros(self.num_envs, device=self.device, dtype=torch.bool) + if self.num_privileged_obs is not None: + self.privileged_obs_buf = torch.zeros(self.num_envs, + self.num_privileged_obs, + device=self.device, + dtype=torch.float) + else: + self.privileged_obs_buf = None + + self.extras = {} + + def _init_buffers(self): + """ Initialize torch tensors which will contain simulation states and processed quantities + """ + self.num_dof = 12 + self.up_axis_idx = 2 # 2 for z, 1 for y -> adapt gravity accordingly + # create some wrapper tensors for different slices + self.root_states = to_torch([0., 0., 0., 0., 0., 0., 1, 0., 0., 0., 0., 0., 0.], device=self.device).repeat( + (self.num_envs, 1)) + self.dof_pos = torch.zeros(self.num_envs, + self.num_dof, + dtype=torch.float32, + device=self.device, + requires_grad=False) + self.dof_vel = torch.zeros(self.num_envs, + self.num_dof, + dtype=torch.float32, + device=self.device, + requires_grad=False) + self.base_quat = self.root_states[:, 3:7] # xyzw + # initialize some data used later on + self.common_step_counter = 0 + self.extras = {} + self.gravity_vec = to_torch(get_axis_params(-1., self.up_axis_idx), device=self.device).repeat( + (self.num_envs, 1)) + self.torques = torch.zeros(self.num_envs, + self.num_actions, + dtype=torch.float, + device=self.device, + requires_grad=False) + self.p_gains = torch.zeros(self.num_actions, dtype=torch.float, device=self.device, requires_grad=False) + self.d_gains = torch.zeros(self.num_actions, dtype=torch.float, device=self.device, requires_grad=False) + self.actions = torch.zeros(self.num_envs, + self.num_actions, + dtype=torch.float, + device=self.device, + requires_grad=False) + self.last_actions = torch.zeros(self.num_envs, + self.num_actions, + dtype=torch.float, + device=self.device, + requires_grad=False) + self.last_last_actions = torch.zeros(self.num_envs, + self.num_actions, + dtype=torch.float, + device=self.device, + requires_grad=False) + self.last_dof_vel = torch.zeros_like(self.dof_vel) + self.last_last_dof_vel = torch.zeros_like(self.dof_vel) + self.commands = torch.zeros(self.num_envs, + self.cfg.commands.num_commands, + dtype=torch.float, + device=self.device, + requires_grad=False) # x vel, y vel, yaw vel, heading + self.commands_scale = torch.tensor( + [self.obs_scales.lin_vel, self.obs_scales.lin_vel, self.obs_scales.ang_vel], + device=self.device, + requires_grad=False, + ) + self.feet_names = ['FL_foot', 'FR_foot', 'RL_foot', 'RR_foot'] + self.feet_air_time = torch.zeros(self.num_envs, + len(self.feet_names), + dtype=torch.float, + device=self.device, + requires_grad=False) + self.last_contacts = torch.zeros(self.num_envs, + len(self.feet_names), + dtype=torch.bool, + device=self.device, + requires_grad=False) + self.base_lin_vel = quat_rotate_inverse(self.base_quat, self.root_states[:, 7:10]) + self.base_ang_vel = quat_rotate_inverse(self.base_quat, self.root_states[:, 10:13]) + self.projected_gravity = quat_rotate_inverse(self.base_quat, self.gravity_vec) + self.body_height = torch.tensor([[STAND_UP_HEIGHT]], dtype=torch.float, + device=self.device).repeat(self.num_envs, 1) + + self.measured_heights = 0 + self.last_last_last_pos = torch.zeros((self.num_envs, self.num_dof), + device=self.device, + dtype=torch.float, + requires_grad=False) + self.last_last_pos = torch.zeros((self.num_envs, self.num_dof), + device=self.device, + dtype=torch.float, + requires_grad=False) + self.last_pos = torch.zeros((self.num_envs, self.num_dof), + device=self.device, + dtype=torch.float, + requires_grad=False) + self.cpg_phase_information = torch.ones((self.num_envs, 13), + device=self.device, + dtype=torch.float, + requires_grad=False) + self.delta_phi = torch.zeros(self.num_envs, 4, dtype=torch.float, device=self.device, requires_grad=False) + self.residual_angle = torch.zeros(self.num_envs, 12, dtype=torch.float, device=self.device, requires_grad=False) + + # joint positions offsets and PD gains + self.dof_names = [ + 'FL_hip_joint', 'FL_thigh_joint', 'FL_calf_joint', 'FR_hip_joint', 'FR_thigh_joint', 'FR_calf_joint', + 'RL_hip_joint', 'RL_thigh_joint', 'RL_calf_joint', 'RR_hip_joint', 'RR_thigh_joint', 'RR_calf_joint' + ] + self.default_dof_pos = torch.zeros(self.num_dof, dtype=torch.float, device=self.device, requires_grad=False) + for i in range(self.num_dof): + name = self.dof_names[i] + angle = self.cfg.init_state.default_joint_angles[name] + self.default_dof_pos[i] = angle + found = False + for dof_name in self.cfg.control.stiffness.keys(): + if dof_name in name: + self.p_gains[i] = self.cfg.control.stiffness[dof_name] + self.d_gains[i] = self.cfg.control.damping[dof_name] + found = True + if not found: + self.p_gains[i] = 0. + self.d_gains[i] = 0. + if self.cfg.control.control_type in ["P", "V"]: + print(f"PD gain of joint {name} were not defined, setting them to zero") + self.default_dof_pos = self.default_dof_pos.unsqueeze(0) + + self.clip_actions = self.cfg.normalization.clip_actions + self.clip_angles = torch.tensor(self.cfg.normalization.clip_angles, dtype=torch.float, device=self.device) + self.torque_limits = 25 + self.feet_indices = torch.zeros(len(self.feet_names), dtype=torch.long, device=self.device, requires_grad=False) + for f in range(len(self.feet_names)): + self.feet_indices[f] = f + + def reset(self): + """Resets the robot environment. + + This method resets the environment to its initial state and returns the initial observations. + """ + self.reset_flag = True + self.reset_buf.zero_() + zero_action = torch.zeros((self.num_envs, self.num_actions + 4), device=self.device, dtype=torch.float) + self.step(zero_action) + self.reset_robot() + zero_action = torch.zeros((self.num_envs, self.num_actions + 4), device=self.device, dtype=torch.float) + self.step(zero_action) + self.pmtg.reset([0]) + self._reset_time = self._clock() + self.start_time_wall = self.time_since_reset() + self.reset_flag = False + return None, None + + def step(self, policy_outputs): + """Applies actions, simulates the environment, and performs post-physics steps. + + This method applies the given policy outputs as actions, simulates the environment, + and performs additional steps such as refreshing state tensors and clipping observations. + + Args: + policy_outputs (torch.Tensor): Tensor of shape (num_envs, num_actions_per_env) + + Returns: + Tuple: A tuple containing the observation buffer, privileged observation buffer, + reward buffer, reset buffer, and additional information. + """ + for _ in range(self.cfg.control.decimation): + self.delta_phi = policy_outputs[:, :4] + self.residual_angle = policy_outputs[:, 4:] + delta_phi = policy_outputs[:, :4] * self.cfg.control.delta_phi_scale + residual_angle = policy_outputs[:, 4:] * self.cfg.control.residual_angle_scale + residual_xyz = torch.zeros(self.num_envs, self.num_actions).to(self.device) + pmtg_joints = self.pmtg.get_action(delta_phi, + residual_xyz, + residual_angle, + self.base_quat, + command=self.commands) + clip_actions = self.cfg.normalization.clip_actions + self.actions = torch.clip(pmtg_joints, -clip_actions, clip_actions).to(self.device) + self.hybrid_action = self._compute_command(self.actions) + if not self.reset_flag: + self.robot.ApplyAction(self.hybrid_action) + + while self.time_since_reset() - self.start_time_wall < self.cfg.sim.dt: + pass + self.start_time_wall = self.time_since_reset() + + self.robot.ReceiveObservation() # refresh raw state + + self.refresh_dof_state_tensor() + if self.robot_dummy is None: + self.refresh_actor_root_state_tensor() + else: + self.torch_refresh_actor_root_state_tensor() + + self.count += 1 + self.post_physics_step() + clip_obs = self.cfg.normalization.clip_observations + self.obs_buf = torch.clip(self.obs_buf, -clip_obs, clip_obs) + if self.privileged_obs_buf is not None: + self.privileged_obs_buf = torch.clip(self.privileged_obs_buf, -clip_obs, clip_obs) + return self.obs_buf, self.privileged_obs_buf, self.rew_buf, self.reset_buf, self.extras + + def refresh_dof_state_tensor(self): + dof_pos = self._serialize_dof(self.robot.GetTrueMotorAngles()) + dof_vel = self._serialize_dof(self.robot.GetMotorVelocities()) + self.dof_pos[:] = torch.from_numpy(dof_pos).to(self.device).repeat((self.num_envs, 1)) + self.dof_vel[:] = torch.from_numpy(dof_vel).to(self.device).repeat((self.num_envs, 1)) + + def refresh_actor_root_state_tensor(self): + self._state_estimator['robot_state_estimator'].update(robot_state_tick=self.robot.tick, + current_time=self.time_since_reset()) + self.body_height = self._state_estimator['robot_state_estimator'].estimate_robot_height() + + base_orientation = np.array([self.robot.GetBaseOrientation()], dtype=np.float32) + self.base_quat[:] = torch.from_numpy(base_orientation).to(self.device).repeat((self.num_envs, 1)) + + base_lin_vel_world = np.array([self._state_estimator['robot_state_estimator'].com_velocity_world_frame], + dtype=np.float32) # world frame + self.base_lin_vel[:] = quat_rotate_inverse( + self.base_quat, + torch.from_numpy(base_lin_vel_world).to(self.device).repeat((self.num_envs, 1))) + base_ang_vel = np.array([self.robot.GetBaseRollPitchYawRate()], dtype=np.float32) # base frame + self.base_ang_vel[:] = torch.from_numpy(base_ang_vel).to(self.device).repeat((self.num_envs, 1)) + + def torch_refresh_actor_root_state_tensor(self): + torch_se = self._state_estimator['torch_robot_state_estimator'] + self.base_quat[:] = torch.from_numpy(self.robot._base_orientation).to(self.device, + dtype=torch.float).unsqueeze(0) + robot_obs_buf = self.robot.GetRobotObs().to(device=self.device) + self.base_ang_vel[:] = robot_obs_buf[0, 6:9] + self.robot_dummy.set_state(robot_obs_buf) + v, h = torch_se(self.robot.raw_state.tick / 1000.0, robot_obs_buf) + self.base_lin_vel[:] = v + self.body_height[:] = h + + def post_physics_step(self): + """ check terminations, compute observations and rewards + calls self._post_physics_step_callback() for common computations + calls self._draw_debug_vis() if needed + """ + self.episode_length_buf += 1 + self.common_step_counter += 1 + self.projected_gravity[:] = quat_rotate_inverse(self.base_quat, self.gravity_vec) + self.cpg_phase_information = self.pmtg.update_observation() # TODO + + self._post_physics_step_callback() + self.foot_forces = torch.tensor(self.robot.GetFootForce()).to(self.device) + self.compute_observations() + + self.last_last_actions[:] = self.last_actions[:] + self.last_actions[:] = self.actions[:] + self.last_last_dof_vel[:] = self.last_dof_vel[:] + self.last_dof_vel[:] = self.dof_vel[:] + self.last_last_last_pos[:] = self.last_last_pos[:] + self.last_last_pos[:] = self.last_pos[:] + self.last_pos[:] = self.dof_pos[:] + + def check_termination(self): + """ Check if environments need to be reset + """ + self.robot.ReceiveObservation() + self.reset_buf = torch.tensor([False]).to(self.device) + roll, pitch, yaw = self.robot.GetBaseRollPitchYaw() + feet_not_contact = (~self.robot.GetFootContacts()).all() + self.reset_buf |= torch.tensor(feet_not_contact).to(self.device) + self.reset_buf |= torch.tensor([self.body_height < 0.15]).to(self.device) + self.time_out_buf = self.episode_length_buf > self.max_episode_length # no terminal reward for time-outs + self.reset_buf |= self.time_out_buf + if self.reset_buf: + print('feet_not_contact:', feet_not_contact) + print('body_height:', self.body_height) + print('time_out_buf:', self.time_out_buf) + + def reset_robot(self): + """ Reset a1 robot and real world environment. + Resets some buffers + """ + self.robot.Reset() + # reset buffers + self.last_actions[0] = 0. + self.last_dof_vel[0] = 0. + self.feet_air_time[0] = 0. + self.episode_length_buf[0] = 0 + self.reset_buf[0] = 0 + # fill extras + self.extras["episode"] = {} + if self.cfg.terrain.curriculum: + self.extras["episode"]["terrain_level"] = torch.mean(self.terrain_levels.float()) + if self.cfg.commands.curriculum: + self.extras["episode"]["max_command_x"] = self.command_ranges["lin_vel_x"][1] + # send timeout info to the algorithm + if self.cfg.env.send_timeouts: + self.extras["time_outs"] = self.time_out_buf + + def _post_physics_step_callback(self): + """ Callback called before computing terminations, rewards, and observations + Default behaviour: Compute ang vel command based on target and heading, compute measured terrain heights and randomly push robots + """ + env_ids = (self.episode_length_buf % + int(self.cfg.commands.resampling_time / self.dt) == 0).nonzero(as_tuple=False).flatten() + self._resample_commands(env_ids) + + if self.cfg.commands.heading_command: + forward = quat_apply(self.base_quat, self.forward_vec) + heading = torch.atan2(forward[:, 1], forward[:, 0]) + self.commands[:, 2] = torch.clip(0.5 * wrap_to_pi(self.commands[:, 3] - heading), -1., 1.) + if self.cfg.commands.gamepad_commands: + lin_speed, ang_speed, e_stop = self.command_function() + if e_stop: + sys.exit(0) + self.commands[:, 0] = lin_speed[0] + self.commands[:, 1] = lin_speed[1] + self.commands[:, 2] = ang_speed + + if self.cfg.terrain.measure_heights: + self.measured_heights = self._get_heights() + + def _resample_commands(self, env_ids): + """ Randommly select commands of some environments + + Args: + env_ids (List[int]): Environments ids for which new commands are needed + """ + if self.fixed_commands is not None: + self.commands[env_ids, + 0] = torch.tensor([self.fixed_commands[0]]).repeat(len(env_ids)).to(device=self.device) + self.commands[env_ids, + 1] = torch.tensor([self.fixed_commands[1]]).repeat(len(env_ids)).to(device=self.device) + self.commands[env_ids, + 2] = torch.tensor([self.fixed_commands[2]]).repeat(len(env_ids)).to(device=self.device) + else: + self.commands[env_ids, 0] = torch_rand_float(self.command_ranges["lin_vel_x"][0], + self.command_ranges["lin_vel_x"][1], (len(env_ids), 1), + device=self.device).squeeze(1) + self.commands[env_ids, 1] = torch_rand_float(self.command_ranges["lin_vel_y"][0], + self.command_ranges["lin_vel_y"][1], (len(env_ids), 1), + device=self.device).squeeze(1) + if self.cfg.commands.heading_command: + self.commands[env_ids, 3] = torch_rand_float(self.command_ranges["heading"][0], + self.command_ranges["heading"][1], (len(env_ids), 1), + device=self.device).squeeze(1) + else: + self.commands[env_ids, 2] = torch_rand_float(self.command_ranges["ang_vel_yaw"][0], + self.command_ranges["ang_vel_yaw"][1], (len(env_ids), 1), + device=self.device).squeeze(1) + + # set small commands to zero + self.commands[env_ids, :2] *= (torch.norm(self.commands[env_ids, :2], dim=1) > 0.2).unsqueeze(1) + + def _get_heights(self, env_ids=None): + self.num_height_points = 187 + self.measured_heights = torch.zeros(self.num_envs, self.num_height_points, device=self.device) + return self.measured_heights + + def _prepare_reward_function(self): + """ Prepares a list of reward functions, whcih will be called to compute the total reward. + Looks for self._reward_, where are names of all non zero reward scales in the cfg. + """ + # remove zero scales + multiply non-zero ones by dt + for key in list(self.reward_scales.keys()): + scale = self.reward_scales[key] + if scale == 0: + self.reward_scales.pop(key) + else: + self.reward_scales[key] *= self.dt + # prepare list of functions + self.reward_functions = [] + self.reward_names = [] + for name, scale in self.reward_scales.items(): + if name == "termination": + continue + self.reward_names.append(name) + name = '_reward_' + name + self.reward_functions.append(getattr(self, name)) + + # reward episode sums + self.episode_sums = { + name: torch.zeros(self.num_envs, dtype=torch.float, device=self.device, requires_grad=False) + for name in self.reward_scales.keys() + } + + def create_sim(self): + self.up_axis_idx = 2 # 2 for z, 1 for y -> adapt gravity accordingly + self.sim = self.gym.create_sim(self.sim_device_id, self.graphics_device_id, self.physics_engine, + self.sim_params) + + # load robot asset from URDF file + asset_path = self.cfg.asset.file.format(LEGGED_GYM_ROOT_DIR=LEGGED_GYM_ROOT_DIR) + asset_root = os.path.dirname(asset_path) + asset_file = os.path.basename(asset_path) + + asset_options = gymapi.AssetOptions() + asset_options.default_dof_drive_mode = self.cfg.asset.default_dof_drive_mode + asset_options.collapse_fixed_joints = self.cfg.asset.collapse_fixed_joints + asset_options.replace_cylinder_with_capsule = self.cfg.asset.replace_cylinder_with_capsule + asset_options.flip_visual_attachments = self.cfg.asset.flip_visual_attachments + asset_options.fix_base_link = self.cfg.asset.fix_base_link + asset_options.density = self.cfg.asset.density + asset_options.angular_damping = self.cfg.asset.angular_damping + asset_options.linear_damping = self.cfg.asset.linear_damping + asset_options.max_angular_velocity = self.cfg.asset.max_angular_velocity + asset_options.max_linear_velocity = self.cfg.asset.max_linear_velocity + asset_options.armature = self.cfg.asset.armature + asset_options.thickness = self.cfg.asset.thickness + asset_options.disable_gravity = self.cfg.asset.disable_gravity + + robot_asset = self.gym.load_asset(self.sim, asset_root, asset_file, asset_options) + dof_props_asset = self.gym.get_asset_dof_properties(robot_asset) + _ = self._process_dof_props(dof_props_asset, 0) + + self.penalize_joint_ids = [] + for i in range(len(self.dof_names)): + if self.dof_names[i] in ['FL_hip_joint', 'FR_hip_joint', 'RL_hip_joint', 'RR_hip_joint']: + self.penalize_joint_ids.append(i) + + def compute_observations(self): + body_orientation = get_euler_xyz(self.base_quat) + dof_pos_history = torch.cat((self.last_last_last_pos, self.last_last_pos, self.last_pos), dim=-1) + dof_pos_vel_history = torch.cat((self.last_last_dof_vel, self.last_dof_vel), dim=-1) + dof_pos_target_history = torch.cat((self.last_last_actions, self.last_actions), dim=-1) + cpg_phase_information = self.cpg_phase_information + + self.obs_buf = torch.cat( + (self.commands[:, :3] * self.commands_scale, body_orientation * self.obs_scales.orientation, + self.base_lin_vel * self.obs_scales.lin_vel, self.base_ang_vel * self.obs_scales.ang_vel, + self.dof_pos * self.obs_scales.dof_pos, self.dof_vel * self.obs_scales.dof_vel, + dof_pos_history * self.obs_scales.dof_pos, dof_pos_vel_history * self.obs_scales.dof_vel, + dof_pos_target_history * self.obs_scales.dof_pos, cpg_phase_information * self.obs_scales.cpg_phase), + dim=-1).to(self.device) + + # add perceptive inputs if not blind + if self.cfg.terrain.measure_heights: + heights = torch.clip(self.body_height - self.cfg.rewards.base_height_target - self.measured_heights, -1, + 1.) * self.obs_scales.height_measurements + self.obs_buf = torch.cat((self.obs_buf, heights), dim=-1) + + def get_observations(self): + return self.obs_buf + + def get_privileged_observations(self): + return self.privileged_obs_buf + + def _compute_command(self, actions): + # PD controller + control_type = self.cfg.control.control_type + self.torques = self.p_gains * (self.default_dof_pos - self.dof_pos) - self.d_gains * self.dof_vel + if control_type == "T": + torques = self.p_gains * (actions - self.dof_pos) - self.d_gains * self.dof_vel + torques = np.clip(torques.squeeze(0).detach().numpy(), -self.torque_limits, self.torque_limits) + torques = self._serialize_dof(torques) + + for index in range(len(torques)): + self.hybrid_action[5 * index + 4] = torques[index] + elif control_type == "P": + positions = actions.detach().cpu().numpy() + positions = self._serialize_dof(positions[0]) # only the first robot + for index in range(len(positions)): + self.hybrid_action[5 * index + 0] = positions[index] # position + self.hybrid_action[5 * index + 1] = self.cfg.control.stiffness['joint'] # Kp + self.hybrid_action[5 * index + 2] = 0 # velocity + self.hybrid_action[5 * index + 3] = self.cfg.control.damping['joint'] # Kd + self.hybrid_action[5 * index + 4] = 0 # torque + + return self.hybrid_action + + def _serialize_dof(self, dof_data): + serialized_data = np.zeros(12, dtype=np.float32) + serialized_data[0:3] = dof_data[3:6] + serialized_data[3:6] = dof_data[0:3] + serialized_data[6:9] = dof_data[9:12] + serialized_data[9:12] = dof_data[6:9] + return serialized_data + + def _parse_cfg(self, cfg): + self.dt = self.cfg.control.decimation * self.sim_params['sim']['dt'] + self.obs_scales = self.cfg.normalization.obs_scales + self.priv_obs_scales = self.cfg.normalization.priv_obs_scales + self.reward_scales = class_to_dict(self.cfg.rewards.scales) + self.command_ranges = class_to_dict(self.cfg.commands.ranges) + if self.cfg.terrain.mesh_type not in ['heightfield', 'trimesh']: + self.cfg.terrain.curriculum = False + self.max_episode_length_s = self.cfg.env.episode_length_s + self.max_episode_length = np.ceil(self.max_episode_length_s / self.dt) + + self.cfg.domain_rand.push_interval = np.ceil(self.cfg.domain_rand.push_interval_s / self.dt) + + # ------------ reward functions---------------- + def _reward_collision(self): + # Penalize collisions on selected bodies + return 0. + + def _reward_feet_air_time(self): + # Reward long steps + # Need to filter the contacts because the contact reporting of PhysX is unreliable on meshes + contact = torch.tensor(self.robot.GetFootContacts()).to(self.device) + contact_filt = torch.logical_or(contact, self.last_contacts) + self.last_contacts = contact + first_contact = (self.feet_air_time > 0.) * contact_filt + self.feet_air_time += self.dt + rew_airTime = torch.sum((self.feet_air_time - 0.5) * first_contact, + dim=1) # reward only on first contact with the ground + rew_airTime *= torch.norm(self.commands[:, :2], dim=1) > 0.1 # no reward for zero command + self.feet_air_time *= ~contact_filt + return rew_airTime + + def _reward_stumble(self): + # Penalize feet hitting vertical surfaces + return 0. + + def _reward_feet_contact_forces(self): + # penalize high contact forces + return torch.sum((self.foot_forces - self.cfg.rewards.max_contact_force).clip(min=0.), dim=1) + + def _reward_feet_height(self): + # Penalize feet height error + feet_height_error = self.pmtg.foot_target_position_in_base_frame[:, :, 2] - torch.tensor( + self.robot.GetFootPositionsInBaseFrame()).unsqueeze(0).to(self.device)[:, :, 2] + return torch.sum(torch.abs(feet_height_error), dim=1) diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/a1_robot_dummy.py b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/a1_robot_dummy.py new file mode 100644 index 0000000..ae8e5db --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/a1_robot_dummy.py @@ -0,0 +1,189 @@ +# SPDX-FileCopyrightText: Copyright (c) 2023, HUAWEI TECHNOLOGIES. All rights reserved. +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import torch +from legged_gym.utils.math import * +from .robot_utils import * + + +class A1Dummy(object): + + def __init__(self, time_step=0.002, **kwargs): + """Initializes the robot class.""" + print("Dummy Robot MPC_BODY_MASS: ", MPC_BODY_MASS) + print("Dummy Robot MPC_BODY_INERTIA: ", MPC_BODY_INERTIA) + print("Dummy Robot MPC_BODY_HEIGHT: ", MPC_BODY_HEIGHT) + + self.device = kwargs.get('device', torch.device('cpu')) + print("A1Dummy use ", self.device) + self.time_step = time_step + self.num_envs = kwargs.get('num_envs', 1) + # Robot state variables + self._base_orientation = None + self.base_rpy = torch.zeros((self.num_envs, 3), + dtype=torch.float, + device=self.device) + self._motor_angles = torch.zeros(12) + self._motor_velocities = torch.zeros(12) + self._joint_states = None + self.foot_contact = None + self.estimated_velocity = torch.zeros((self.num_envs, 3), + dtype=torch.float, + device=self.device) + self.base_rpyrate = torch.zeros((self.num_envs, 3), + dtype=torch.float, + device=self.device) + self.base_lin_acc = None + self.base_quat = None + self._init_complete = True + self.foot_positions_in_base_frame = torch.zeros((self.num_envs, 4, 3), + dtype=torch.float, + device=self.device) + self.foot_positions_in_base_frame[:, :, 2] -= 0.28 + self.footVelocitiesInBaseFrame = torch.zeros_like( + self.foot_positions_in_base_frame) + self.torch_hip_offset = torch.from_numpy(HIP_OFFSETS).to( + dtype=torch.float, device=self.device).unsqueeze(0) # (1,4,3) + self.l_hip = torch.tensor([[0.08505, -0.08505, 0.08505, -0.08505]], + dtype=torch.float, + device=self.device) # (1,4) + self.torch_hip_offset[:, 0:2, :] = self.torch_hip_offset[:, [1, 0], :] + self.torch_hip_offset[:, 2:4, :] = self.torch_hip_offset[:, [3, 2], :] + + def GetBaseRollPitchYaw(self): + return getEulerFromQuaternion(self._base_orientation) + + def GetTrueBaseRollPitchYaw(self): + return getEulerFromQuaternion(self._base_orientation) + + def GetBaseRollPitchYawRate(self): + return self.GetTrueBaseRollPitchYawRate() + + def GetFootPositionsInBaseFrame(self): + """Get the robot's foot position in the base frame.""" + return self.foot_positions_in_base_frame + + def ComputeJacobian(self, leg_id): + """Compute the Jacobian for a given leg.""" + motor_angles = self._motor_angles[:, leg_id * 3:(leg_id + 1) * 3] + return analytical_leg_jacobian(motor_angles.view(-1), leg_id) + + def GetBaseAcc(self): + return self.base_lin_acc + + def GetBaseOrientation(self): + return self._base_orientation + + def GetBaseRPY(self): + return self.base_rpy + + def GetMotorVelocities(self): + return self._motor_velocities + + def GetFootContacts(self): + return self.foot_contact + + def GetFootVelocitiesInBaseFrame(self): + return self.footVelocitiesInBaseFrame + + def set_state(self, original_obs_buf): + self.base_lin_acc = original_obs_buf[:, :3] + self.base_rpy = original_obs_buf[:, 3:6] + self.base_rpyrate = original_obs_buf[:, 6:9] + self._motor_angles = original_obs_buf[:, 9:21] + self._motor_velocities = original_obs_buf[:, 21:33] + self.foot_contact = original_obs_buf[:, 33:37] + jacobians = self.torch_analytical_leg_jacobian(self._motor_angles) + self.footVelocitiesInBaseFrame[:] = torch.matmul( + jacobians, self._motor_velocities.view(-1, 4, 3, 1)).squeeze(-1) + + def torch_analytical_leg_jacobian(self, leg_angles): + # J.shape = (None, 4, 3, 3) + # Q.shape = (None, 4, 9, 3) + # x.shape = (None, 4, 3, 1) + # Q*x = -- > (None,4 9,1)-->(None, 4 3, 3) + N = leg_angles.size(0) + Q = torch.zeros((N, 4, 9, 3), + dtype=torch.float, + device=leg_angles.device) + x = torch.zeros((N, 4, 3, 1), + dtype=torch.float, + device=leg_angles.device) + motor_angles = self._motor_angles.view(N, 4, 3) + t1 = torch.select(motor_angles, -1, 0) # (N, 4) + t2 = torch.select(motor_angles, -1, 1) # (N, 4) + t3 = torch.select(motor_angles, -1, 2) # (N, 4) + t_eff = t2 + t3 / 2 + l_eff = torch.sqrt(0.08 + 0.08 * torch.cos(t3)) # (N, 4) + x[:, :, 0, 0] = self.l_hip + x[:, :, 1, 0] = l_eff + x[:, :, 2, 0] = 0.04 / l_eff + + c_t_eff = torch.cos(t_eff) + s_t_eff = torch.sin(t_eff) + s_t1 = torch.sin(t1) + c_t1 = torch.cos(t1) + s_t3 = torch.sin(t3) + c_t3 = torch.cos(t3) + + Q[:, :, 1, 1] = -c_t_eff + Q[:, :, 2, 1] = c_t_eff * (-0.5) + Q[:, :, 2, 2] = s_t_eff * s_t3 + + Q[:, :, 3, 0] = -s_t1 + Q[:, :, 3, 1] = c_t_eff * c_t1 + Q[:, :, 4, 1] = -s_t1 * s_t_eff + Q[:, :, 5, 1] = s_t_eff * s_t1 * (-0.5) + Q[:, :, 5, 2] = -c_t_eff * s_t3 * s_t1 + + Q[:, :, 6, 0] = c_t1 + Q[:, :, 6, 1] = s_t1 * c_t_eff + Q[:, :, 7, 1] = s_t_eff * c_t1 + Q[:, :, 8, 1] = s_t_eff * c_t1 * 0.5 + Q[:, :, 8, 2] = c_t_eff * s_t3 * c_t1 + + J = torch.matmul(Q, x) + J = J.view(N, 4, 3, 3) + + L = torch.sqrt(c_t3 * 0.08 + 0.08) + H = torch.zeros((N, 4, 2, 1), + dtype=torch.float, + device=leg_angles.device) + S = torch.zeros((N, 4, 3, 2), + dtype=torch.float, + device=leg_angles.device) + S[:, :, 0, 1] = -s_t_eff + S[:, :, 1, 0] = c_t1 + S[:, :, 1, 1] = s_t1 * c_t_eff + S[:, :, 2, 0] = s_t1 + S[:, :, 2, 1] = -c_t1 * c_t_eff + H[:, :, 0, 0] = self.l_hip + H[:, :, 1, 0] = L + self.foot_positions_in_base_frame = torch.matmul( + S, H).squeeze(-1) + self.torch_hip_offset # (N,4,3) + return J \ No newline at end of file diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/a1_robot_real.py b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/a1_robot_real.py new file mode 100644 index 0000000..c9b2eb0 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/a1_robot_real.py @@ -0,0 +1,429 @@ +# SPDX-FileCopyrightText: Copyright (c) 2023, HUAWEI TECHNOLOGIES. All rights reserved. +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import os +import inspect + +currentdir = os.path.dirname( + os.path.abspath(inspect.getfile(inspect.currentframe()))) +parentdir = os.path.dirname(os.path.dirname(currentdir)) +os.sys.path.insert(0, parentdir) +import time +from absl import logging +import torch +from legged_gym.envs.base.motor_config import MotorControlMode +from legged_gym.envs.gazebo.a1_real.robot_interface import RobotInterface +from legged_gym.utils.math import * +from .robot_utils import * + + +class A1Robot: + """Interface for real A1 robot.""" + + def __init__(self, time_step=0.002, **kwargs): + """Initializes the robot class.""" + print("Real Robot MPC_BODY_MASS: ", MPC_BODY_MASS) + print("Real Robot MPC_BODY_INERTIA: ", MPC_BODY_INERTIA) + print("Real Robot MPC_BODY_HEIGHT: ", MPC_BODY_HEIGHT) + self.device = kwargs.get('device', torch.device("cpu")) + # Initialize pd gain vector + self.motor_kps = np.array([ABDUCTION_P_GAIN, HIP_P_GAIN, KNEE_P_GAIN] * + 4) + self.motor_kds = np.array([ABDUCTION_D_GAIN, HIP_D_GAIN, KNEE_D_GAIN] * + 4) + self._motor_control_mode = kwargs['motor_control_mode'] + self.stand_up_height = STAND_UP_HEIGHT + self.time_step = time_step + + # Robot state variables + self._init_complete = False + self._base_orientation = None + self._base_rpy = None + self.raw_state = None + self._last_raw_state = None + self._motor_angles = np.zeros(12, dtype=np.float32) + self._motor_velocities = np.zeros(12, dtype=np.float32) + self._joint_states = None + self.drpy = np.zeros(3, dtype=np.float32) + self.acc = np.zeros(3, dtype=np.float32) + self.footForce = np.array([50, 50, 50, 50], dtype=np.float32) + + # Initiate UDP for robot state and actions + self._robot_interface = RobotInterface() + self._robot_interface.send_command(np.zeros(60, dtype=np.float32)) + + self._state_action_counter = 0 + self.estimated_velocity = np.zeros(3) + self._last_reset_time = time.time() + self._init_complete = True + self.clip_angles = np.array( + [[-0.73, 0.73], [-0.85, 2.8], [-2.6, -1.0]], dtype=np.float32) + self.unsafty = False + self.safty_action = np.zeros((12), dtype=np.float32) + self.tick = 0 + + def ReceiveObservation(self): + """Receives observation from robot. + """ + state = self._robot_interface.receive_observation() + self.raw_state = state + + self.tick = state.tick + for i in range(3): + self.drpy[i] = state.imu.gyroscope[i] + self.acc[i] = state.imu.accelerometer[i] + for i in range(4): + self.footForce[i] = state.footForce[i] + + q = state.imu.quaternion + self._base_rpy = np.array([state.imu.rpy], dtype=np.float32) + # Convert quaternion from wxyz to xyzw + self._base_orientation = np.array([q[1], q[2], q[3], q[0]]) + self._motor_angles = np.array( + [motor.q for motor in state.motorState[:12]], dtype=np.float32) + self._motor_velocities = np.array( + [motor.dq for motor in state.motorState[:12]], dtype=np.float32) + self._joint_states = np.array( + list(zip(self._motor_angles, self._motor_velocities))) + + def GetTrueMotorAngles(self): + return self._motor_angles.copy() + + def GetMotorAngles(self): + return self._motor_angles.copy() + + def GetMotorVelocities(self): + return self._motor_velocities.copy() + + def GetBaseRollPitchYaw(self): + return getEulerFromQuaternion(self._base_orientation) + + def GetTrueBaseRollPitchYaw(self): + return getEulerFromQuaternion(self._base_orientation) + + def GetBaseRollPitchYawRate(self): + return self.GetTrueBaseRollPitchYawRate() + + def GetTrueBaseRollPitchYawRate(self): + return self.drpy.copy() + + def GetBaseVelocity(self): + return self.estimated_velocity.copy() + + def GetFootContacts(self): + return self.footForce > 20 + + def GetFootForce(self): + return self.footForce.copy() + + def GetTimeSinceReset(self): + return time.time() - self._last_reset_time + + def GetBaseOrientation(self): + return self._base_orientation.copy() + + def GetTrueBaseOrientation(self): + return self._base_orientation.copy() + + @property + def motor_velocities(self): + return self._motor_velocities.copy() + + def ApplyAction(self, motor_commands, motor_control_mode=None): + """Clips and then apply the motor commands using the motor model. + + Args: + motor_commands: np.array. Can be motor angles, torques, hybrid commands, + or motor pwms (for Minitaur only). + motor_control_mode: A MotorControlMode enum. + """ + if motor_control_mode is None: + motor_control_mode = self._motor_control_mode + + command = np.zeros(60, dtype=np.float32) + if motor_control_mode == MotorControlMode.POSITION: + motor_commands = np.clip(motor_commands.reshape(4, 3), + self.clip_angles[:, 0], + self.clip_angles[:, 1]).reshape(12) + for motor_id in range(NUM_MOTORS): + command[motor_id * 5] = motor_commands[motor_id] + command[motor_id * 5 + 1] = self.motor_kps[motor_id] + command[motor_id * 5 + 3] = self.motor_kds[motor_id] + elif motor_control_mode == MotorControlMode.TORQUE: + for motor_id in range(NUM_MOTORS): + motor_commands = np.clip(motor_commands, -25, 25) + command[motor_id * 5 + 4] = motor_commands[motor_id] + elif motor_control_mode == MotorControlMode.HYBRID: + command = np.array(motor_commands, dtype=np.float32) + else: + raise ValueError( + 'Unknown motor control mode for A1 robot: {}.'.format( + motor_control_mode)) + + self._robot_interface.send_command(command) + + def Reset(self, default_motor_angles=None, reset_time=3.0): + """Reset the robot to default motor angles.""" + self._reset() + self._state_action_counter = 0 + + def Step(self, action, motor_control_mode=None): + if not self.unsafty: + self.ApplyAction(action, motor_control_mode) + self.ReceiveObservation() + self._state_action_counter += 1 + + def check_safty(self): + reshaped_motor_angles = self._motor_angles.reshape(4, 3) + for leg_id in range(4): + if reshaped_motor_angles[leg_id, 1] < self.clip_angles[1, 0]: + self.safty_action[leg_id * 3 + 1] = 1.0 / ( + (self.clip_angles[1, 0] - reshaped_motor_angles[leg_id, 1]) + + 0.1) + self.unsafty = True + elif reshaped_motor_angles[leg_id, 1] > self.clip_angles[1, 1]: + self.safty_action[leg_id * 3 + 1] = 1.0 / ( + (self.clip_angles[1, 1] - reshaped_motor_angles[leg_id, 1]) + + 0.1) + self.unsafty = True + + return self.unsafty + + def ComputeMotorAnglesFromFootLocalPosition(self, leg_id, + foot_local_position): + """Use IK to compute the motor angles, given the foot link's local position. + + Args: + leg_id: The leg index. + foot_local_position: The foot link's position in the base frame. + + Returns: + A tuple. The position indices and the angles for all joints along the + leg. The position indices is consistent with the joint orders as returned + by GetMotorAngles API. + """ + # assert len(self._foot_link_ids) == self.num_legs + motors_per_leg = self.num_motors // self.num_legs + joint_position_idxs = list( + range(leg_id * motors_per_leg, + leg_id * motors_per_leg + motors_per_leg)) + + joint_angles = foot_position_in_hip_frame_to_joint_angle( + foot_local_position - HIP_OFFSETS[leg_id], + l_hip_sign=(-1)**(leg_id + 1)) + + # Joint offset is necessary for Laikago. + joint_angles = np.multiply( + np.asarray(joint_angles) - + np.asarray(self._motor_offset)[joint_position_idxs], + self._motor_direction[joint_position_idxs]) + + # Return the joing index (the same as when calling GetMotorAngles) as well + # as the angles. + return joint_position_idxs, joint_angles.tolist() + + def GetFootPositionsInBaseFrame(self): + """Get the robot's foot position in the base frame.""" + motor_angles = self.GetMotorAngles() + return foot_positions_in_base_frame(motor_angles) + + def ComputeJacobian(self, leg_id): + """Compute the Jacobian for a given leg.""" + motor_angles = self.GetMotorAngles()[leg_id * 3:(leg_id + 1) * 3] + return analytical_leg_jacobian(motor_angles, leg_id) + + def stand_up(self, + standup_time=1.5, + reset_time=5, + default_motor_angles=None): + logging.warning( + "About to reset the robot, make sure the robot is hang-up.") + + if default_motor_angles is None: + default_motor_angles = INIT_MOTOR_ANGLES + + for _ in range(20): + self.ReceiveObservation() + + current_motor_angles = self.GetMotorAngles() + tik = time.time() + count = 0 + for t in np.arange(0, reset_time, self.time_step): + count += 1 + stand_up_last_t = time.time() + blend_ratio = min(t / standup_time, 1) + action = blend_ratio * default_motor_angles + ( + 1 - blend_ratio) * current_motor_angles + self.Step(action, MotorControlMode.POSITION) + while time.time() - stand_up_last_t < self.time_step: + pass + tok = time.time() + print("stand up cost time = ", -tik + tok) + + def sit_down(self, + sitdown_time=1.5, + reset_time=2, + default_motor_angles=None): + if default_motor_angles is None: + default_motor_angles = SITDOWN_MOTOR_ANGLES + + self.ReceiveObservation() + current_motor_angles = self.GetMotorAngles() + sitdown_time = max(sitdown_time, 1.5) + tik = time.time() + count = 0 + for t in np.arange(0, reset_time, self.time_step): + count += 1 + sitdown_last_t = time.time() + blend_ratio = min(t / sitdown_time, 1) + action = blend_ratio * default_motor_angles + ( + 1 - blend_ratio) * current_motor_angles + self.Step(action, MotorControlMode.POSITION) + while time.time() - sitdown_last_t < self.time_step: + pass + tok = time.time() + print("sit down cost time = ", -tik + tok) + + def _reset(self): + for _ in range(5): + self.ReceiveObservation() + roll = self._base_rpy[0][0] + # make sure the angle is located in range [0, 2*pi] + if roll < 0.: + roll += 2 * PI + print("roll = ", roll) + shrinked_motor_angles = np.array( + [0, 2.0, -2.6, 0, 2.0, -2.6, 0, 2.0, -2.6, 0, 2.0, -2.6], + dtype=np.float32) + + if roll < 0.5 * PI or roll > 1.5 * PI: # the robot is not fliped + t1 = 2.0 # time for shrink legs + t2 = 2.0 # time for stand up + current_motor_angles = self.GetMotorAngles() + self.linearly_transform_angles(t1, current_motor_angles, + shrinked_motor_angles) + self.stand_up(t2) + else: + t1 = 2.0 # time for shrink1 legs + t2 = 1.0 # time for stand up + + shrinked1_motor_angles = np.array( + [0, 1.57, -0.9, 0, 1.57, -0.9, 0, 1.57, -0.9, 0, 1.57, -0.9], + dtype=np.float32) + shrinked2_motor_angles = np.array( + [0, 1.57, -2.5, 0, 1.57, -2.5, 0, 1.57, -2.5, 0, 1.57, -2.5], + dtype=np.float32) + + shrinked3_motor_angles = np.array([ + -0.7, 2.7, -2.5, 0, 1.57, -2.5, -0.7, 2.8, -2.5, 0, 1.57, -2.5 + ], + dtype=np.float32) + + shrinked4_motor_angles = np.array([ + -0.7, 2.7, -2.5, 0.6, 2.5, -2.5, -0.8, 2.8, -2.5, 0.6, 2.5, + -2.5 + ], + dtype=np.float32) + + shrinked5_motor_angles = np.array([ + -0.1, 1.7, -2.5, -0.6, 2.5, -2.5, -0.1, 1.7, -2.5, -0.6, 2.5, + -2.5 + ], + dtype=np.float32) + + shrinked6_motor_angles = np.array( + [0, 0.9, -2.5, 0, 0.9, -2.5, 0, 0.9, -2.5, 0, 0.9, -2.5], + dtype=np.float32) + + current_motor_angles = self.GetMotorAngles() + self.linearly_transform_angles(t1, current_motor_angles, + shrinked1_motor_angles) + + current_motor_angles = self.GetMotorAngles() + self.linearly_transform_angles(t2, current_motor_angles, + shrinked2_motor_angles) + + current_motor_angles = self.GetMotorAngles() + self.linearly_transform_angles(0.5, shrinked2_motor_angles, + shrinked3_motor_angles) + + current_motor_angles = self.GetMotorAngles() + self.linearly_transform_angles(0.3, shrinked3_motor_angles, + shrinked4_motor_angles) + + current_motor_angles = self.GetMotorAngles() + self.linearly_transform_angles(0.5, current_motor_angles, + shrinked5_motor_angles, 0.5) + + current_motor_angles = self.GetMotorAngles() + self.linearly_transform_angles(t1, current_motor_angles, + shrinked_motor_angles, 0.5) + self.stand_up(t2) + + def linearly_transform_angles(self, t1, souce_angles, dest_angles, t2=0): + for t in np.arange(0, t1, self.time_step): + stand_up_last_t = time.time() + blend_ratio = min(t / t1, 1.0) + action = blend_ratio * dest_angles + (1 - + blend_ratio) * souce_angles + self.Step(action, MotorControlMode.POSITION) + + while time.time() - stand_up_last_t < self.time_step: + pass + + for t in np.arange(0, t2, self.time_step): + stand_up_last_t = time.time() + while time.time() - stand_up_last_t < self.time_step: + pass + + def GetRobotObs(self): + base_acc_in_base_frame = torch.from_numpy(self.acc).unsqueeze(0).to( + device=self.device, dtype=torch.float) + is_contact = self.GetFootContacts() + obs = torch.cat( + (base_acc_in_base_frame, torch.from_numpy(self._base_rpy).to( + self.device), torch.from_numpy( + self.GetBaseRollPitchYawRate()).unsqueeze(0).to( + self.device), + torch.from_numpy(self._serialize_dof( + self._motor_angles)).unsqueeze(0).to(self.device), + torch.from_numpy(self._serialize_dof( + self._motor_velocities)).unsqueeze(0).to(self.device), + torch.tensor(np.array([[is_contact[i] for i in [1, 0, 3, 2]]]), + dtype=torch.float, + device=self.device)), + dim=-1) # 3+3+3+12+12+4=37 + return obs + + def _serialize_dof(self, dof_data): + serialized_data = np.zeros(12, dtype=np.float32) + serialized_data[0:3] = dof_data[3:6] + serialized_data[3:6] = dof_data[0:3] + serialized_data[6:9] = dof_data[9:12] + serialized_data[9:12] = dof_data[6:9] + return serialized_data \ No newline at end of file diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/robot_utils.py b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/robot_utils.py new file mode 100644 index 0000000..2da94a9 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/robot_utils.py @@ -0,0 +1,175 @@ +# SPDX-FileCopyrightText: Copyright (c) 2023, HUAWEI TECHNOLOGIES. All rights reserved. +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import math +import numpy as np + +NUM_MOTORS = 12 +NUM_LEGS = 4 +MOTOR_NAMES = [ + "FR_hip_joint", + "FR_upper_joint", + "FR_lower_joint", + "FL_hip_joint", + "FL_upper_joint", + "FL_lower_joint", + "RR_hip_joint", + "RR_upper_joint", + "RR_lower_joint", + "RL_hip_joint", + "RL_upper_joint", + "RL_lower_joint", +] + +# position mode PD +ABDUCTION_P_GAIN = 100.0 +ABDUCTION_D_GAIN = 1.0 +HIP_P_GAIN = 100.0 +HIP_D_GAIN = 2.0 +KNEE_P_GAIN = 100.0 +KNEE_D_GAIN = 2.0 + +INIT_RACK_POSITION = [0, 0, 1] +INIT_POSITION = [0, 0, 0.48] +JOINT_DIRECTIONS = np.ones(12) +HIP_JOINT_OFFSET = 0.0 +UPPER_LEG_JOINT_OFFSET = 0.0 +KNEE_JOINT_OFFSET = 0.0 +DOFS_PER_LEG = 3 +PI = math.pi + +JOINT_OFFSETS = np.array( + [HIP_JOINT_OFFSET, UPPER_LEG_JOINT_OFFSET, KNEE_JOINT_OFFSET] * 4) +# COM_OFFSET = -np.array([0.005, 0.0028, 0.000515]) # x++ back++ y++ right++ +COM_OFFSET = -np.array([0.0, 0.0, 0.0]) # x++ back++ y++ right++ + +HIP_OFFSETS = np.array([[0.1805, -0.047, 0.], [0.1805, 0.047, 0.], + [-0.1805, -0.047, 0.], [-0.1805, 0.047, 0.] + ]) + COM_OFFSET + +HIP_POSITION = np.array([[0.185, -0.135, 0], [0.185, 0.135, 0], + [-0.185, -0.135, 0], [-0.185, 0.135, 0]]) + +# unitree a1_robot +MPC_BODY_MASS = 10 +MPC_BODY_INERTIA = np.array((0.24, 0, 0, 0, 0.80, 0, 0, 0, 1.00)) # google +MPC_BODY_HEIGHT = 0.28 + +STAND_UP_HEIGHT = MPC_BODY_HEIGHT +LEG_LENGTH = 0.20 +UPPER_LEG_LENGTH = 0.20 +LOWER_LEG_LENGTH = 0.20 +HIP_LENGTH = 0.08505 +STANDUP_ABDUCTION_ANGLE = 0.0 +STANDUP_HIP_ANGLE = np.arccos(STAND_UP_HEIGHT / 2.0 / LEG_LENGTH) +STANDUP_KNEE_ANGLE = -2.0 * STANDUP_HIP_ANGLE +INIT_MOTOR_ANGLES = np.array( + [STANDUP_ABDUCTION_ANGLE, STANDUP_HIP_ANGLE, STANDUP_KNEE_ANGLE] * + NUM_LEGS) +SITDOWN_MOTOR_ANGLES = np.array([0.0, 0.93, -2.6] * NUM_LEGS) + + +def foot_position_in_hip_frame_to_joint_angle(foot_position, l_hip_sign=1): + l_up = 0.2 + l_low = 0.2 + l_hip = 0.08505 * l_hip_sign + x, y, z = foot_position[0], foot_position[1], foot_position[2] + theta_knee = -np.arccos( + np.clip((x**2 + y**2 + z**2 - l_hip**2 - l_low**2 - l_up**2) / + (2 * l_low * l_up), -1.0, 1.0)) + l = np.sqrt(l_up**2 + l_low**2 + 2 * l_up * l_low * np.cos(theta_knee)) + theta_hip = np.arcsin(np.clip(-x / l, -1.0, 1.0)) - theta_knee / 2 + c1 = l_hip * y - l * np.cos(theta_hip + theta_knee / 2) * z + s1 = l * np.cos(theta_hip + theta_knee / 2) * y + l_hip * z + theta_ab = np.arctan2(s1, c1) + return np.array([theta_ab, theta_hip, theta_knee]) + + +def foot_position_in_hip_frame(angles, l_hip_sign=1): + theta_ab, theta_hip, theta_knee = angles[0], angles[1], angles[2] + l_up = 0.2 + l_low = 0.2 + l_hip = 0.08505 * l_hip_sign + leg_distance = np.sqrt(l_up**2 + l_low**2 + + 2 * l_up * l_low * np.cos(theta_knee)) + eff_swing = theta_hip + theta_knee / 2 + + off_x_hip = -leg_distance * np.sin(eff_swing) + off_z_hip = -leg_distance * np.cos(eff_swing) + off_y_hip = l_hip + + off_x = off_x_hip + off_y = np.cos(theta_ab) * off_y_hip - np.sin(theta_ab) * off_z_hip + off_z = np.sin(theta_ab) * off_y_hip + np.cos(theta_ab) * off_z_hip + return np.array([off_x, off_y, off_z]) + + +def analytical_leg_jacobian(leg_angles, leg_id): + """ + Computes the analytical Jacobian. + Args: + ` leg_angles: a list of 3 numbers for current abduction, hip and knee angle. + l_hip_sign: whether it's a left (1) or right(-1) leg. + """ + l_up = 0.2 + l_low = 0.2 + l_hip = 0.08505 * (-1)**(leg_id + 1) + + t1, t2, t3 = leg_angles[0], leg_angles[1], leg_angles[2] + l_eff = np.sqrt(l_up**2 + l_low**2 + 2 * l_up * l_low * np.cos(t3)) + t_eff = t2 + t3 / 2 + + J = np.zeros((3, 3)) + J[0, 0] = 0 + J[0, 1] = -l_eff * np.cos(t_eff) + J[0, 2] = l_low * l_up * np.sin(t3) * np.sin( + t_eff) / l_eff - l_eff * np.cos(t_eff) / 2 + J[1, 0] = -l_hip * np.sin(t1) + l_eff * np.cos(t1) * np.cos(t_eff) + J[1, 1] = -l_eff * np.sin(t1) * np.sin(t_eff) + J[1, 2] = -l_low * l_up * np.sin(t1) * np.sin(t3) * np.cos( + t_eff) / l_eff - l_eff * np.sin(t1) * np.sin(t_eff) / 2 + J[2, 0] = l_hip * np.cos(t1) + l_eff * np.sin(t1) * np.cos(t_eff) + J[2, 1] = l_eff * np.sin(t_eff) * np.cos(t1) + J[2, 2] = l_low * l_up * np.sin(t3) * np.cos(t1) * np.cos( + t_eff) / l_eff + l_eff * np.sin(t_eff) * np.cos(t1) / 2 + return J + + +# For JIT compilation +foot_position_in_hip_frame_to_joint_angle(np.random.uniform(size=3), 1) +foot_position_in_hip_frame_to_joint_angle(np.random.uniform(size=3), -1) + + +def foot_positions_in_base_frame(foot_angles): + foot_angles = foot_angles.reshape((4, 3)) + foot_positions = np.zeros((4, 3)) + for i in range(4): + foot_positions[i] = foot_position_in_hip_frame(foot_angles[i], + l_hip_sign=(-1)**(i + + 1)) + return foot_positions + HIP_OFFSETS diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/.gitignore b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/.gitignore new file mode 100644 index 0000000..378eac2 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/.gitignore @@ -0,0 +1 @@ +build diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/CMakeLists.txt b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/CMakeLists.txt new file mode 100644 index 0000000..578138e --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/CMakeLists.txt @@ -0,0 +1,32 @@ +cmake_minimum_required(VERSION 2.8.3) +project(unitree_legged_sdk) + +find_package(catkin REQUIRED COMPONENTS + roscpp + std_msgs + sensor_msgs +) + +include_directories(include ${catkin_INCLUDE_DIRS}) + +link_directories(lib) + +add_compile_options(-std=c++14) + +EXECUTE_PROCESS( COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE ARCHITECTURE ) +message( STATUS "Architecture: ${ARCHITECTURE}") # x86_64, amd64, arm64, aarch64 +if((${ARCHITECTURE} STREQUAL "x86_64") OR (${ARCHITECTURE} STREQUAL "amd64")) + set(EXTRA_LIBS -pthread libunitree_legged_sdk_amd64.so lcm ${catkin_LIBRARIES}) +elseif((${ARCHITECTURE} STREQUAL "arm64") OR (${ARCHITECTURE} STREQUAL "aarch64")) + set(EXTRA_LIBS -pthread libunitree_legged_sdk_arm64.so lcm ${catkin_LIBRARIES}) +else() + message(FATAL_ERROR "unrecongnized arch.") +endif() + +set(CMAKE_CXX_FLAGS "-O3") + +add_subdirectory(pybind11) + +pybind11_add_module(robot_interface python_interface.cpp) +target_link_libraries(robot_interface ${EXTRA_LIBS}) + diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/ChangeLog.md b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/ChangeLog.md new file mode 100644 index 0000000..e69de29 diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/LICENSE b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/LICENSE new file mode 100644 index 0000000..a612ad9 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/BmsCmd.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/BmsCmd.h new file mode 100644 index 0000000..7384053 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/BmsCmd.h @@ -0,0 +1,211 @@ +// Generated by gencpp from file unitree_legged_msgs/BmsCmd.msg +// DO NOT EDIT! + + +#ifndef UNITREE_LEGGED_MSGS_MESSAGE_BMSCMD_H +#define UNITREE_LEGGED_MSGS_MESSAGE_BMSCMD_H + + +#include +#include +#include + +#include +#include +#include +#include + + +namespace unitree_legged_msgs +{ +template +struct BmsCmd_ +{ + typedef BmsCmd_ Type; + + BmsCmd_() + : off(0) + , reserve() { + reserve.assign(0); + } + BmsCmd_(const ContainerAllocator& _alloc) + : off(0) + , reserve() { + (void)_alloc; + reserve.assign(0); + } + + + + typedef uint8_t _off_type; + _off_type off; + + typedef boost::array _reserve_type; + _reserve_type reserve; + + + + + + typedef boost::shared_ptr< ::unitree_legged_msgs::BmsCmd_ > Ptr; + typedef boost::shared_ptr< ::unitree_legged_msgs::BmsCmd_ const> ConstPtr; + +}; // struct BmsCmd_ + +typedef ::unitree_legged_msgs::BmsCmd_ > BmsCmd; + +typedef boost::shared_ptr< ::unitree_legged_msgs::BmsCmd > BmsCmdPtr; +typedef boost::shared_ptr< ::unitree_legged_msgs::BmsCmd const> BmsCmdConstPtr; + +// constants requiring out of line definition + + + +template +std::ostream& operator<<(std::ostream& s, const ::unitree_legged_msgs::BmsCmd_ & v) +{ +ros::message_operations::Printer< ::unitree_legged_msgs::BmsCmd_ >::stream(s, "", v); +return s; +} + + +template +bool operator==(const ::unitree_legged_msgs::BmsCmd_ & lhs, const ::unitree_legged_msgs::BmsCmd_ & rhs) +{ + return lhs.off == rhs.off && + lhs.reserve == rhs.reserve; +} + +template +bool operator!=(const ::unitree_legged_msgs::BmsCmd_ & lhs, const ::unitree_legged_msgs::BmsCmd_ & rhs) +{ + return !(lhs == rhs); +} + + +} // namespace unitree_legged_msgs + +namespace ros +{ +namespace message_traits +{ + + + + + +template +struct IsMessage< ::unitree_legged_msgs::BmsCmd_ > + : TrueType + { }; + +template +struct IsMessage< ::unitree_legged_msgs::BmsCmd_ const> + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::BmsCmd_ > + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::BmsCmd_ const> + : TrueType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::BmsCmd_ > + : FalseType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::BmsCmd_ const> + : FalseType + { }; + + +template +struct MD5Sum< ::unitree_legged_msgs::BmsCmd_ > +{ + static const char* value() + { + return "c09195f3200bd8917201f8805a3fe1d1"; + } + + static const char* value(const ::unitree_legged_msgs::BmsCmd_&) { return value(); } + static const uint64_t static_value1 = 0xc09195f3200bd891ULL; + static const uint64_t static_value2 = 0x7201f8805a3fe1d1ULL; +}; + +template +struct DataType< ::unitree_legged_msgs::BmsCmd_ > +{ + static const char* value() + { + return "unitree_legged_msgs/BmsCmd"; + } + + static const char* value(const ::unitree_legged_msgs::BmsCmd_&) { return value(); } +}; + +template +struct Definition< ::unitree_legged_msgs::BmsCmd_ > +{ + static const char* value() + { + return "uint8 off # off 0xA5\n" +"uint8[3] reserve\n" +; + } + + static const char* value(const ::unitree_legged_msgs::BmsCmd_&) { return value(); } +}; + +} // namespace message_traits +} // namespace ros + +namespace ros +{ +namespace serialization +{ + + template struct Serializer< ::unitree_legged_msgs::BmsCmd_ > + { + template inline static void allInOne(Stream& stream, T m) + { + stream.next(m.off); + stream.next(m.reserve); + } + + ROS_DECLARE_ALLINONE_SERIALIZER + }; // struct BmsCmd_ + +} // namespace serialization +} // namespace ros + +namespace ros +{ +namespace message_operations +{ + +template +struct Printer< ::unitree_legged_msgs::BmsCmd_ > +{ + template static void stream(Stream& s, const std::string& indent, const ::unitree_legged_msgs::BmsCmd_& v) + { + s << indent << "off: "; + Printer::stream(s, indent + " ", v.off); + s << indent << "reserve[]" << std::endl; + for (size_t i = 0; i < v.reserve.size(); ++i) + { + s << indent << " reserve[" << i << "]: "; + Printer::stream(s, indent + " ", v.reserve[i]); + } + } +}; + +} // namespace message_operations +} // namespace ros + +#endif // UNITREE_LEGGED_MSGS_MESSAGE_BMSCMD_H diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/BmsState.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/BmsState.h new file mode 100644 index 0000000..fb5fa0b --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/BmsState.h @@ -0,0 +1,297 @@ +// Generated by gencpp from file unitree_legged_msgs/BmsState.msg +// DO NOT EDIT! + + +#ifndef UNITREE_LEGGED_MSGS_MESSAGE_BMSSTATE_H +#define UNITREE_LEGGED_MSGS_MESSAGE_BMSSTATE_H + + +#include +#include +#include + +#include +#include +#include +#include + + +namespace unitree_legged_msgs +{ +template +struct BmsState_ +{ + typedef BmsState_ Type; + + BmsState_() + : version_h(0) + , version_l(0) + , bms_status(0) + , SOC(0) + , current(0) + , cycle(0) + , BQ_NTC() + , MCU_NTC() + , cell_vol() { + BQ_NTC.assign(0); + + MCU_NTC.assign(0); + + cell_vol.assign(0); + } + BmsState_(const ContainerAllocator& _alloc) + : version_h(0) + , version_l(0) + , bms_status(0) + , SOC(0) + , current(0) + , cycle(0) + , BQ_NTC() + , MCU_NTC() + , cell_vol() { + (void)_alloc; + BQ_NTC.assign(0); + + MCU_NTC.assign(0); + + cell_vol.assign(0); + } + + + + typedef uint8_t _version_h_type; + _version_h_type version_h; + + typedef uint8_t _version_l_type; + _version_l_type version_l; + + typedef uint8_t _bms_status_type; + _bms_status_type bms_status; + + typedef uint8_t _SOC_type; + _SOC_type SOC; + + typedef int32_t _current_type; + _current_type current; + + typedef uint16_t _cycle_type; + _cycle_type cycle; + + typedef boost::array _BQ_NTC_type; + _BQ_NTC_type BQ_NTC; + + typedef boost::array _MCU_NTC_type; + _MCU_NTC_type MCU_NTC; + + typedef boost::array _cell_vol_type; + _cell_vol_type cell_vol; + + + + + + typedef boost::shared_ptr< ::unitree_legged_msgs::BmsState_ > Ptr; + typedef boost::shared_ptr< ::unitree_legged_msgs::BmsState_ const> ConstPtr; + +}; // struct BmsState_ + +typedef ::unitree_legged_msgs::BmsState_ > BmsState; + +typedef boost::shared_ptr< ::unitree_legged_msgs::BmsState > BmsStatePtr; +typedef boost::shared_ptr< ::unitree_legged_msgs::BmsState const> BmsStateConstPtr; + +// constants requiring out of line definition + + + +template +std::ostream& operator<<(std::ostream& s, const ::unitree_legged_msgs::BmsState_ & v) +{ +ros::message_operations::Printer< ::unitree_legged_msgs::BmsState_ >::stream(s, "", v); +return s; +} + + +template +bool operator==(const ::unitree_legged_msgs::BmsState_ & lhs, const ::unitree_legged_msgs::BmsState_ & rhs) +{ + return lhs.version_h == rhs.version_h && + lhs.version_l == rhs.version_l && + lhs.bms_status == rhs.bms_status && + lhs.SOC == rhs.SOC && + lhs.current == rhs.current && + lhs.cycle == rhs.cycle && + lhs.BQ_NTC == rhs.BQ_NTC && + lhs.MCU_NTC == rhs.MCU_NTC && + lhs.cell_vol == rhs.cell_vol; +} + +template +bool operator!=(const ::unitree_legged_msgs::BmsState_ & lhs, const ::unitree_legged_msgs::BmsState_ & rhs) +{ + return !(lhs == rhs); +} + + +} // namespace unitree_legged_msgs + +namespace ros +{ +namespace message_traits +{ + + + + + +template +struct IsMessage< ::unitree_legged_msgs::BmsState_ > + : TrueType + { }; + +template +struct IsMessage< ::unitree_legged_msgs::BmsState_ const> + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::BmsState_ > + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::BmsState_ const> + : TrueType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::BmsState_ > + : FalseType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::BmsState_ const> + : FalseType + { }; + + +template +struct MD5Sum< ::unitree_legged_msgs::BmsState_ > +{ + static const char* value() + { + return "8e007c660c590388bca7c2464d80df54"; + } + + static const char* value(const ::unitree_legged_msgs::BmsState_&) { return value(); } + static const uint64_t static_value1 = 0x8e007c660c590388ULL; + static const uint64_t static_value2 = 0xbca7c2464d80df54ULL; +}; + +template +struct DataType< ::unitree_legged_msgs::BmsState_ > +{ + static const char* value() + { + return "unitree_legged_msgs/BmsState"; + } + + static const char* value(const ::unitree_legged_msgs::BmsState_&) { return value(); } +}; + +template +struct Definition< ::unitree_legged_msgs::BmsState_ > +{ + static const char* value() + { + return "uint8 version_h\n" +"uint8 version_l\n" +"uint8 bms_status\n" +"uint8 SOC # SOC 0-100%\n" +"int32 current # mA\n" +"uint16 cycle\n" +"int8[2] BQ_NTC # x1 degrees centigrade\n" +"int8[2] MCU_NTC # x1 degrees centigrade\n" +"uint16[10] cell_vol # cell voltage mV\n" +; + } + + static const char* value(const ::unitree_legged_msgs::BmsState_&) { return value(); } +}; + +} // namespace message_traits +} // namespace ros + +namespace ros +{ +namespace serialization +{ + + template struct Serializer< ::unitree_legged_msgs::BmsState_ > + { + template inline static void allInOne(Stream& stream, T m) + { + stream.next(m.version_h); + stream.next(m.version_l); + stream.next(m.bms_status); + stream.next(m.SOC); + stream.next(m.current); + stream.next(m.cycle); + stream.next(m.BQ_NTC); + stream.next(m.MCU_NTC); + stream.next(m.cell_vol); + } + + ROS_DECLARE_ALLINONE_SERIALIZER + }; // struct BmsState_ + +} // namespace serialization +} // namespace ros + +namespace ros +{ +namespace message_operations +{ + +template +struct Printer< ::unitree_legged_msgs::BmsState_ > +{ + template static void stream(Stream& s, const std::string& indent, const ::unitree_legged_msgs::BmsState_& v) + { + s << indent << "version_h: "; + Printer::stream(s, indent + " ", v.version_h); + s << indent << "version_l: "; + Printer::stream(s, indent + " ", v.version_l); + s << indent << "bms_status: "; + Printer::stream(s, indent + " ", v.bms_status); + s << indent << "SOC: "; + Printer::stream(s, indent + " ", v.SOC); + s << indent << "current: "; + Printer::stream(s, indent + " ", v.current); + s << indent << "cycle: "; + Printer::stream(s, indent + " ", v.cycle); + s << indent << "BQ_NTC[]" << std::endl; + for (size_t i = 0; i < v.BQ_NTC.size(); ++i) + { + s << indent << " BQ_NTC[" << i << "]: "; + Printer::stream(s, indent + " ", v.BQ_NTC[i]); + } + s << indent << "MCU_NTC[]" << std::endl; + for (size_t i = 0; i < v.MCU_NTC.size(); ++i) + { + s << indent << " MCU_NTC[" << i << "]: "; + Printer::stream(s, indent + " ", v.MCU_NTC[i]); + } + s << indent << "cell_vol[]" << std::endl; + for (size_t i = 0; i < v.cell_vol.size(); ++i) + { + s << indent << " cell_vol[" << i << "]: "; + Printer::stream(s, indent + " ", v.cell_vol[i]); + } + } +}; + +} // namespace message_operations +} // namespace ros + +#endif // UNITREE_LEGGED_MSGS_MESSAGE_BMSSTATE_H diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/Cartesian.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/Cartesian.h new file mode 100644 index 0000000..1c367e3 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/Cartesian.h @@ -0,0 +1,215 @@ +// Generated by gencpp from file unitree_legged_msgs/Cartesian.msg +// DO NOT EDIT! + + +#ifndef UNITREE_LEGGED_MSGS_MESSAGE_CARTESIAN_H +#define UNITREE_LEGGED_MSGS_MESSAGE_CARTESIAN_H + + +#include +#include +#include + +#include +#include +#include +#include + + +namespace unitree_legged_msgs +{ +template +struct Cartesian_ +{ + typedef Cartesian_ Type; + + Cartesian_() + : x(0.0) + , y(0.0) + , z(0.0) { + } + Cartesian_(const ContainerAllocator& _alloc) + : x(0.0) + , y(0.0) + , z(0.0) { + (void)_alloc; + } + + + + typedef float _x_type; + _x_type x; + + typedef float _y_type; + _y_type y; + + typedef float _z_type; + _z_type z; + + + + + + typedef boost::shared_ptr< ::unitree_legged_msgs::Cartesian_ > Ptr; + typedef boost::shared_ptr< ::unitree_legged_msgs::Cartesian_ const> ConstPtr; + +}; // struct Cartesian_ + +typedef ::unitree_legged_msgs::Cartesian_ > Cartesian; + +typedef boost::shared_ptr< ::unitree_legged_msgs::Cartesian > CartesianPtr; +typedef boost::shared_ptr< ::unitree_legged_msgs::Cartesian const> CartesianConstPtr; + +// constants requiring out of line definition + + + +template +std::ostream& operator<<(std::ostream& s, const ::unitree_legged_msgs::Cartesian_ & v) +{ +ros::message_operations::Printer< ::unitree_legged_msgs::Cartesian_ >::stream(s, "", v); +return s; +} + + +template +bool operator==(const ::unitree_legged_msgs::Cartesian_ & lhs, const ::unitree_legged_msgs::Cartesian_ & rhs) +{ + return lhs.x == rhs.x && + lhs.y == rhs.y && + lhs.z == rhs.z; +} + +template +bool operator!=(const ::unitree_legged_msgs::Cartesian_ & lhs, const ::unitree_legged_msgs::Cartesian_ & rhs) +{ + return !(lhs == rhs); +} + + +} // namespace unitree_legged_msgs + +namespace ros +{ +namespace message_traits +{ + + + + + +template +struct IsMessage< ::unitree_legged_msgs::Cartesian_ > + : TrueType + { }; + +template +struct IsMessage< ::unitree_legged_msgs::Cartesian_ const> + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::Cartesian_ > + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::Cartesian_ const> + : TrueType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::Cartesian_ > + : FalseType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::Cartesian_ const> + : FalseType + { }; + + +template +struct MD5Sum< ::unitree_legged_msgs::Cartesian_ > +{ + static const char* value() + { + return "cc153912f1453b708d221682bc23d9ac"; + } + + static const char* value(const ::unitree_legged_msgs::Cartesian_&) { return value(); } + static const uint64_t static_value1 = 0xcc153912f1453b70ULL; + static const uint64_t static_value2 = 0x8d221682bc23d9acULL; +}; + +template +struct DataType< ::unitree_legged_msgs::Cartesian_ > +{ + static const char* value() + { + return "unitree_legged_msgs/Cartesian"; + } + + static const char* value(const ::unitree_legged_msgs::Cartesian_&) { return value(); } +}; + +template +struct Definition< ::unitree_legged_msgs::Cartesian_ > +{ + static const char* value() + { + return "float32 x\n" +"float32 y\n" +"float32 z\n" +; + } + + static const char* value(const ::unitree_legged_msgs::Cartesian_&) { return value(); } +}; + +} // namespace message_traits +} // namespace ros + +namespace ros +{ +namespace serialization +{ + + template struct Serializer< ::unitree_legged_msgs::Cartesian_ > + { + template inline static void allInOne(Stream& stream, T m) + { + stream.next(m.x); + stream.next(m.y); + stream.next(m.z); + } + + ROS_DECLARE_ALLINONE_SERIALIZER + }; // struct Cartesian_ + +} // namespace serialization +} // namespace ros + +namespace ros +{ +namespace message_operations +{ + +template +struct Printer< ::unitree_legged_msgs::Cartesian_ > +{ + template static void stream(Stream& s, const std::string& indent, const ::unitree_legged_msgs::Cartesian_& v) + { + s << indent << "x: "; + Printer::stream(s, indent + " ", v.x); + s << indent << "y: "; + Printer::stream(s, indent + " ", v.y); + s << indent << "z: "; + Printer::stream(s, indent + " ", v.z); + } +}; + +} // namespace message_operations +} // namespace ros + +#endif // UNITREE_LEGGED_MSGS_MESSAGE_CARTESIAN_H diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/HighCmd.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/HighCmd.h new file mode 100644 index 0000000..37aea96 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/HighCmd.h @@ -0,0 +1,462 @@ +// Generated by gencpp from file unitree_legged_msgs/HighCmd.msg +// DO NOT EDIT! + + +#ifndef UNITREE_LEGGED_MSGS_MESSAGE_HIGHCMD_H +#define UNITREE_LEGGED_MSGS_MESSAGE_HIGHCMD_H + + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +namespace unitree_legged_msgs +{ +template +struct HighCmd_ +{ + typedef HighCmd_ Type; + + HighCmd_() + : head() + , levelFlag(0) + , frameReserve(0) + , SN() + , version() + , bandWidth(0) + , mode(0) + , gaitType(0) + , speedLevel(0) + , footRaiseHeight(0.0) + , bodyHeight(0.0) + , position() + , euler() + , velocity() + , yawSpeed(0.0) + , bms() + , led() + , wirelessRemote() + , reserve(0) + , crc(0) { + head.assign(0); + + SN.assign(0); + + version.assign(0); + + position.assign(0.0); + + euler.assign(0.0); + + velocity.assign(0.0); + + wirelessRemote.assign(0); + } + HighCmd_(const ContainerAllocator& _alloc) + : head() + , levelFlag(0) + , frameReserve(0) + , SN() + , version() + , bandWidth(0) + , mode(0) + , gaitType(0) + , speedLevel(0) + , footRaiseHeight(0.0) + , bodyHeight(0.0) + , position() + , euler() + , velocity() + , yawSpeed(0.0) + , bms(_alloc) + , led() + , wirelessRemote() + , reserve(0) + , crc(0) { + (void)_alloc; + head.assign(0); + + SN.assign(0); + + version.assign(0); + + position.assign(0.0); + + euler.assign(0.0); + + velocity.assign(0.0); + + led.assign( ::unitree_legged_msgs::LED_ (_alloc)); + + wirelessRemote.assign(0); + } + + + + typedef boost::array _head_type; + _head_type head; + + typedef uint8_t _levelFlag_type; + _levelFlag_type levelFlag; + + typedef uint8_t _frameReserve_type; + _frameReserve_type frameReserve; + + typedef boost::array _SN_type; + _SN_type SN; + + typedef boost::array _version_type; + _version_type version; + + typedef uint16_t _bandWidth_type; + _bandWidth_type bandWidth; + + typedef uint8_t _mode_type; + _mode_type mode; + + typedef uint8_t _gaitType_type; + _gaitType_type gaitType; + + typedef uint8_t _speedLevel_type; + _speedLevel_type speedLevel; + + typedef float _footRaiseHeight_type; + _footRaiseHeight_type footRaiseHeight; + + typedef float _bodyHeight_type; + _bodyHeight_type bodyHeight; + + typedef boost::array _position_type; + _position_type position; + + typedef boost::array _euler_type; + _euler_type euler; + + typedef boost::array _velocity_type; + _velocity_type velocity; + + typedef float _yawSpeed_type; + _yawSpeed_type yawSpeed; + + typedef ::unitree_legged_msgs::BmsCmd_ _bms_type; + _bms_type bms; + + typedef boost::array< ::unitree_legged_msgs::LED_ , 4> _led_type; + _led_type led; + + typedef boost::array _wirelessRemote_type; + _wirelessRemote_type wirelessRemote; + + typedef uint32_t _reserve_type; + _reserve_type reserve; + + typedef uint32_t _crc_type; + _crc_type crc; + + + + + + typedef boost::shared_ptr< ::unitree_legged_msgs::HighCmd_ > Ptr; + typedef boost::shared_ptr< ::unitree_legged_msgs::HighCmd_ const> ConstPtr; + +}; // struct HighCmd_ + +typedef ::unitree_legged_msgs::HighCmd_ > HighCmd; + +typedef boost::shared_ptr< ::unitree_legged_msgs::HighCmd > HighCmdPtr; +typedef boost::shared_ptr< ::unitree_legged_msgs::HighCmd const> HighCmdConstPtr; + +// constants requiring out of line definition + + + +template +std::ostream& operator<<(std::ostream& s, const ::unitree_legged_msgs::HighCmd_ & v) +{ +ros::message_operations::Printer< ::unitree_legged_msgs::HighCmd_ >::stream(s, "", v); +return s; +} + + +template +bool operator==(const ::unitree_legged_msgs::HighCmd_ & lhs, const ::unitree_legged_msgs::HighCmd_ & rhs) +{ + return lhs.head == rhs.head && + lhs.levelFlag == rhs.levelFlag && + lhs.frameReserve == rhs.frameReserve && + lhs.SN == rhs.SN && + lhs.version == rhs.version && + lhs.bandWidth == rhs.bandWidth && + lhs.mode == rhs.mode && + lhs.gaitType == rhs.gaitType && + lhs.speedLevel == rhs.speedLevel && + lhs.footRaiseHeight == rhs.footRaiseHeight && + lhs.bodyHeight == rhs.bodyHeight && + lhs.position == rhs.position && + lhs.euler == rhs.euler && + lhs.velocity == rhs.velocity && + lhs.yawSpeed == rhs.yawSpeed && + lhs.bms == rhs.bms && + lhs.led == rhs.led && + lhs.wirelessRemote == rhs.wirelessRemote && + lhs.reserve == rhs.reserve && + lhs.crc == rhs.crc; +} + +template +bool operator!=(const ::unitree_legged_msgs::HighCmd_ & lhs, const ::unitree_legged_msgs::HighCmd_ & rhs) +{ + return !(lhs == rhs); +} + + +} // namespace unitree_legged_msgs + +namespace ros +{ +namespace message_traits +{ + + + + + +template +struct IsMessage< ::unitree_legged_msgs::HighCmd_ > + : TrueType + { }; + +template +struct IsMessage< ::unitree_legged_msgs::HighCmd_ const> + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::HighCmd_ > + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::HighCmd_ const> + : TrueType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::HighCmd_ > + : FalseType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::HighCmd_ const> + : FalseType + { }; + + +template +struct MD5Sum< ::unitree_legged_msgs::HighCmd_ > +{ + static const char* value() + { + return "b4825051cf66ae8183b54c57dba16b66"; + } + + static const char* value(const ::unitree_legged_msgs::HighCmd_&) { return value(); } + static const uint64_t static_value1 = 0xb4825051cf66ae81ULL; + static const uint64_t static_value2 = 0x83b54c57dba16b66ULL; +}; + +template +struct DataType< ::unitree_legged_msgs::HighCmd_ > +{ + static const char* value() + { + return "unitree_legged_msgs/HighCmd"; + } + + static const char* value(const ::unitree_legged_msgs::HighCmd_&) { return value(); } +}; + +template +struct Definition< ::unitree_legged_msgs::HighCmd_ > +{ + static const char* value() + { + return "uint8[2] head\n" +"uint8 levelFlag\n" +"uint8 frameReserve\n" +"\n" +"uint32[2] SN\n" +"uint32[2] version\n" +"uint16 bandWidth\n" +"uint8 mode \n" +"\n" +"uint8 gaitType \n" +"uint8 speedLevel \n" +"float32 footRaiseHeight \n" +"float32 bodyHeight \n" +"float32[2] position \n" +"float32[3] euler \n" +"float32[2] velocity \n" +"float32 yawSpeed \n" +"BmsCmd bms\n" +"LED[4] led\n" +"uint8[40] wirelessRemote\n" +"uint32 reserve\n" +"\n" +"uint32 crc\n" +"================================================================================\n" +"MSG: unitree_legged_msgs/BmsCmd\n" +"uint8 off # off 0xA5\n" +"uint8[3] reserve\n" +"================================================================================\n" +"MSG: unitree_legged_msgs/LED\n" +"uint8 r\n" +"uint8 g\n" +"uint8 b\n" +; + } + + static const char* value(const ::unitree_legged_msgs::HighCmd_&) { return value(); } +}; + +} // namespace message_traits +} // namespace ros + +namespace ros +{ +namespace serialization +{ + + template struct Serializer< ::unitree_legged_msgs::HighCmd_ > + { + template inline static void allInOne(Stream& stream, T m) + { + stream.next(m.head); + stream.next(m.levelFlag); + stream.next(m.frameReserve); + stream.next(m.SN); + stream.next(m.version); + stream.next(m.bandWidth); + stream.next(m.mode); + stream.next(m.gaitType); + stream.next(m.speedLevel); + stream.next(m.footRaiseHeight); + stream.next(m.bodyHeight); + stream.next(m.position); + stream.next(m.euler); + stream.next(m.velocity); + stream.next(m.yawSpeed); + stream.next(m.bms); + stream.next(m.led); + stream.next(m.wirelessRemote); + stream.next(m.reserve); + stream.next(m.crc); + } + + ROS_DECLARE_ALLINONE_SERIALIZER + }; // struct HighCmd_ + +} // namespace serialization +} // namespace ros + +namespace ros +{ +namespace message_operations +{ + +template +struct Printer< ::unitree_legged_msgs::HighCmd_ > +{ + template static void stream(Stream& s, const std::string& indent, const ::unitree_legged_msgs::HighCmd_& v) + { + s << indent << "head[]" << std::endl; + for (size_t i = 0; i < v.head.size(); ++i) + { + s << indent << " head[" << i << "]: "; + Printer::stream(s, indent + " ", v.head[i]); + } + s << indent << "levelFlag: "; + Printer::stream(s, indent + " ", v.levelFlag); + s << indent << "frameReserve: "; + Printer::stream(s, indent + " ", v.frameReserve); + s << indent << "SN[]" << std::endl; + for (size_t i = 0; i < v.SN.size(); ++i) + { + s << indent << " SN[" << i << "]: "; + Printer::stream(s, indent + " ", v.SN[i]); + } + s << indent << "version[]" << std::endl; + for (size_t i = 0; i < v.version.size(); ++i) + { + s << indent << " version[" << i << "]: "; + Printer::stream(s, indent + " ", v.version[i]); + } + s << indent << "bandWidth: "; + Printer::stream(s, indent + " ", v.bandWidth); + s << indent << "mode: "; + Printer::stream(s, indent + " ", v.mode); + s << indent << "gaitType: "; + Printer::stream(s, indent + " ", v.gaitType); + s << indent << "speedLevel: "; + Printer::stream(s, indent + " ", v.speedLevel); + s << indent << "footRaiseHeight: "; + Printer::stream(s, indent + " ", v.footRaiseHeight); + s << indent << "bodyHeight: "; + Printer::stream(s, indent + " ", v.bodyHeight); + s << indent << "position[]" << std::endl; + for (size_t i = 0; i < v.position.size(); ++i) + { + s << indent << " position[" << i << "]: "; + Printer::stream(s, indent + " ", v.position[i]); + } + s << indent << "euler[]" << std::endl; + for (size_t i = 0; i < v.euler.size(); ++i) + { + s << indent << " euler[" << i << "]: "; + Printer::stream(s, indent + " ", v.euler[i]); + } + s << indent << "velocity[]" << std::endl; + for (size_t i = 0; i < v.velocity.size(); ++i) + { + s << indent << " velocity[" << i << "]: "; + Printer::stream(s, indent + " ", v.velocity[i]); + } + s << indent << "yawSpeed: "; + Printer::stream(s, indent + " ", v.yawSpeed); + s << indent << "bms: "; + s << std::endl; + Printer< ::unitree_legged_msgs::BmsCmd_ >::stream(s, indent + " ", v.bms); + s << indent << "led[]" << std::endl; + for (size_t i = 0; i < v.led.size(); ++i) + { + s << indent << " led[" << i << "]: "; + s << std::endl; + s << indent; + Printer< ::unitree_legged_msgs::LED_ >::stream(s, indent + " ", v.led[i]); + } + s << indent << "wirelessRemote[]" << std::endl; + for (size_t i = 0; i < v.wirelessRemote.size(); ++i) + { + s << indent << " wirelessRemote[" << i << "]: "; + Printer::stream(s, indent + " ", v.wirelessRemote[i]); + } + s << indent << "reserve: "; + Printer::stream(s, indent + " ", v.reserve); + s << indent << "crc: "; + Printer::stream(s, indent + " ", v.crc); + } +}; + +} // namespace message_operations +} // namespace ros + +#endif // UNITREE_LEGGED_MSGS_MESSAGE_HIGHCMD_H diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/HighState.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/HighState.h new file mode 100644 index 0000000..c44c152 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/HighState.h @@ -0,0 +1,574 @@ +// Generated by gencpp from file unitree_legged_msgs/HighState.msg +// DO NOT EDIT! + + +#ifndef UNITREE_LEGGED_MSGS_MESSAGE_HIGHSTATE_H +#define UNITREE_LEGGED_MSGS_MESSAGE_HIGHSTATE_H + + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +namespace unitree_legged_msgs +{ +template +struct HighState_ +{ + typedef HighState_ Type; + + HighState_() + : head() + , levelFlag(0) + , frameReserve(0) + , SN() + , version() + , bandWidth(0) + , imu() + , motorState() + , bms() + , footForce() + , footForceEst() + , mode(0) + , progress(0.0) + , gaitType(0) + , footRaiseHeight(0.0) + , position() + , bodyHeight(0.0) + , velocity() + , yawSpeed(0.0) + , rangeObstacle() + , footPosition2Body() + , footSpeed2Body() + , wirelessRemote() + , reserve(0) + , crc(0) { + head.assign(0); + + SN.assign(0); + + version.assign(0); + + footForce.assign(0); + + footForceEst.assign(0); + + position.assign(0.0); + + velocity.assign(0.0); + + rangeObstacle.assign(0.0); + + wirelessRemote.assign(0); + } + HighState_(const ContainerAllocator& _alloc) + : head() + , levelFlag(0) + , frameReserve(0) + , SN() + , version() + , bandWidth(0) + , imu(_alloc) + , motorState() + , bms(_alloc) + , footForce() + , footForceEst() + , mode(0) + , progress(0.0) + , gaitType(0) + , footRaiseHeight(0.0) + , position() + , bodyHeight(0.0) + , velocity() + , yawSpeed(0.0) + , rangeObstacle() + , footPosition2Body() + , footSpeed2Body() + , wirelessRemote() + , reserve(0) + , crc(0) { + (void)_alloc; + head.assign(0); + + SN.assign(0); + + version.assign(0); + + motorState.assign( ::unitree_legged_msgs::MotorState_ (_alloc)); + + footForce.assign(0); + + footForceEst.assign(0); + + position.assign(0.0); + + velocity.assign(0.0); + + rangeObstacle.assign(0.0); + + footPosition2Body.assign( ::unitree_legged_msgs::Cartesian_ (_alloc)); + + footSpeed2Body.assign( ::unitree_legged_msgs::Cartesian_ (_alloc)); + + wirelessRemote.assign(0); + } + + + + typedef boost::array _head_type; + _head_type head; + + typedef uint8_t _levelFlag_type; + _levelFlag_type levelFlag; + + typedef uint8_t _frameReserve_type; + _frameReserve_type frameReserve; + + typedef boost::array _SN_type; + _SN_type SN; + + typedef boost::array _version_type; + _version_type version; + + typedef uint16_t _bandWidth_type; + _bandWidth_type bandWidth; + + typedef ::unitree_legged_msgs::IMU_ _imu_type; + _imu_type imu; + + typedef boost::array< ::unitree_legged_msgs::MotorState_ , 20> _motorState_type; + _motorState_type motorState; + + typedef ::unitree_legged_msgs::BmsState_ _bms_type; + _bms_type bms; + + typedef boost::array _footForce_type; + _footForce_type footForce; + + typedef boost::array _footForceEst_type; + _footForceEst_type footForceEst; + + typedef uint8_t _mode_type; + _mode_type mode; + + typedef float _progress_type; + _progress_type progress; + + typedef uint8_t _gaitType_type; + _gaitType_type gaitType; + + typedef float _footRaiseHeight_type; + _footRaiseHeight_type footRaiseHeight; + + typedef boost::array _position_type; + _position_type position; + + typedef float _bodyHeight_type; + _bodyHeight_type bodyHeight; + + typedef boost::array _velocity_type; + _velocity_type velocity; + + typedef float _yawSpeed_type; + _yawSpeed_type yawSpeed; + + typedef boost::array _rangeObstacle_type; + _rangeObstacle_type rangeObstacle; + + typedef boost::array< ::unitree_legged_msgs::Cartesian_ , 4> _footPosition2Body_type; + _footPosition2Body_type footPosition2Body; + + typedef boost::array< ::unitree_legged_msgs::Cartesian_ , 4> _footSpeed2Body_type; + _footSpeed2Body_type footSpeed2Body; + + typedef boost::array _wirelessRemote_type; + _wirelessRemote_type wirelessRemote; + + typedef uint32_t _reserve_type; + _reserve_type reserve; + + typedef uint32_t _crc_type; + _crc_type crc; + + + + + + typedef boost::shared_ptr< ::unitree_legged_msgs::HighState_ > Ptr; + typedef boost::shared_ptr< ::unitree_legged_msgs::HighState_ const> ConstPtr; + +}; // struct HighState_ + +typedef ::unitree_legged_msgs::HighState_ > HighState; + +typedef boost::shared_ptr< ::unitree_legged_msgs::HighState > HighStatePtr; +typedef boost::shared_ptr< ::unitree_legged_msgs::HighState const> HighStateConstPtr; + +// constants requiring out of line definition + + + +template +std::ostream& operator<<(std::ostream& s, const ::unitree_legged_msgs::HighState_ & v) +{ +ros::message_operations::Printer< ::unitree_legged_msgs::HighState_ >::stream(s, "", v); +return s; +} + + +template +bool operator==(const ::unitree_legged_msgs::HighState_ & lhs, const ::unitree_legged_msgs::HighState_ & rhs) +{ + return lhs.head == rhs.head && + lhs.levelFlag == rhs.levelFlag && + lhs.frameReserve == rhs.frameReserve && + lhs.SN == rhs.SN && + lhs.version == rhs.version && + lhs.bandWidth == rhs.bandWidth && + lhs.imu == rhs.imu && + lhs.motorState == rhs.motorState && + lhs.bms == rhs.bms && + lhs.footForce == rhs.footForce && + lhs.footForceEst == rhs.footForceEst && + lhs.mode == rhs.mode && + lhs.progress == rhs.progress && + lhs.gaitType == rhs.gaitType && + lhs.footRaiseHeight == rhs.footRaiseHeight && + lhs.position == rhs.position && + lhs.bodyHeight == rhs.bodyHeight && + lhs.velocity == rhs.velocity && + lhs.yawSpeed == rhs.yawSpeed && + lhs.rangeObstacle == rhs.rangeObstacle && + lhs.footPosition2Body == rhs.footPosition2Body && + lhs.footSpeed2Body == rhs.footSpeed2Body && + lhs.wirelessRemote == rhs.wirelessRemote && + lhs.reserve == rhs.reserve && + lhs.crc == rhs.crc; +} + +template +bool operator!=(const ::unitree_legged_msgs::HighState_ & lhs, const ::unitree_legged_msgs::HighState_ & rhs) +{ + return !(lhs == rhs); +} + + +} // namespace unitree_legged_msgs + +namespace ros +{ +namespace message_traits +{ + + + + + +template +struct IsMessage< ::unitree_legged_msgs::HighState_ > + : TrueType + { }; + +template +struct IsMessage< ::unitree_legged_msgs::HighState_ const> + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::HighState_ > + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::HighState_ const> + : TrueType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::HighState_ > + : FalseType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::HighState_ const> + : FalseType + { }; + + +template +struct MD5Sum< ::unitree_legged_msgs::HighState_ > +{ + static const char* value() + { + return "7904f43019dadf7640d573b4c14b9066"; + } + + static const char* value(const ::unitree_legged_msgs::HighState_&) { return value(); } + static const uint64_t static_value1 = 0x7904f43019dadf76ULL; + static const uint64_t static_value2 = 0x40d573b4c14b9066ULL; +}; + +template +struct DataType< ::unitree_legged_msgs::HighState_ > +{ + static const char* value() + { + return "unitree_legged_msgs/HighState"; + } + + static const char* value(const ::unitree_legged_msgs::HighState_&) { return value(); } +}; + +template +struct Definition< ::unitree_legged_msgs::HighState_ > +{ + static const char* value() + { + return "\n" +"uint8[2] head\n" +"uint8 levelFlag\n" +"uint8 frameReserve\n" +"\n" +"uint32[2] SN\n" +"uint32[2] version\n" +"uint16 bandWidth\n" +"IMU imu\n" +"MotorState[20] motorState\n" +"BmsState bms\n" +"int16[4] footForce\n" +"int16[4] footForceEst\n" +"uint8 mode\n" +"float32 progress\n" +"uint8 gaitType \n" +"float32 footRaiseHeight \n" +"float32[3] position \n" +"float32 bodyHeight \n" +"float32[3] velocity \n" +"float32 yawSpeed \n" +"float32[4] rangeObstacle\n" +"Cartesian[4] footPosition2Body \n" +"Cartesian[4] footSpeed2Body \n" +"uint8[40] wirelessRemote\n" +"uint32 reserve\n" +"\n" +"uint32 crc\n" +"================================================================================\n" +"MSG: unitree_legged_msgs/IMU\n" +"float32[4] quaternion\n" +"float32[3] gyroscope\n" +"float32[3] accelerometer\n" +"float32[3] rpy\n" +"int8 temperature\n" +"================================================================================\n" +"MSG: unitree_legged_msgs/MotorState\n" +"uint8 mode # motor current mode \n" +"float32 q # motor current position(rad)\n" +"float32 dq # motor current speed(rad/s)\n" +"float32 ddq # motor current speed(rad/s)\n" +"float32 tauEst # current estimated output torque(N*m)\n" +"float32 q_raw # motor current position(rad)\n" +"float32 dq_raw # motor current speed(rad/s)\n" +"float32 ddq_raw # motor current speed(rad/s)\n" +"int8 temperature # motor temperature(slow conduction of temperature leads to lag)\n" +"uint32[2] reserve\n" +"================================================================================\n" +"MSG: unitree_legged_msgs/BmsState\n" +"uint8 version_h\n" +"uint8 version_l\n" +"uint8 bms_status\n" +"uint8 SOC # SOC 0-100%\n" +"int32 current # mA\n" +"uint16 cycle\n" +"int8[2] BQ_NTC # x1 degrees centigrade\n" +"int8[2] MCU_NTC # x1 degrees centigrade\n" +"uint16[10] cell_vol # cell voltage mV\n" +"================================================================================\n" +"MSG: unitree_legged_msgs/Cartesian\n" +"float32 x\n" +"float32 y\n" +"float32 z\n" +; + } + + static const char* value(const ::unitree_legged_msgs::HighState_&) { return value(); } +}; + +} // namespace message_traits +} // namespace ros + +namespace ros +{ +namespace serialization +{ + + template struct Serializer< ::unitree_legged_msgs::HighState_ > + { + template inline static void allInOne(Stream& stream, T m) + { + stream.next(m.head); + stream.next(m.levelFlag); + stream.next(m.frameReserve); + stream.next(m.SN); + stream.next(m.version); + stream.next(m.bandWidth); + stream.next(m.imu); + stream.next(m.motorState); + stream.next(m.bms); + stream.next(m.footForce); + stream.next(m.footForceEst); + stream.next(m.mode); + stream.next(m.progress); + stream.next(m.gaitType); + stream.next(m.footRaiseHeight); + stream.next(m.position); + stream.next(m.bodyHeight); + stream.next(m.velocity); + stream.next(m.yawSpeed); + stream.next(m.rangeObstacle); + stream.next(m.footPosition2Body); + stream.next(m.footSpeed2Body); + stream.next(m.wirelessRemote); + stream.next(m.reserve); + stream.next(m.crc); + } + + ROS_DECLARE_ALLINONE_SERIALIZER + }; // struct HighState_ + +} // namespace serialization +} // namespace ros + +namespace ros +{ +namespace message_operations +{ + +template +struct Printer< ::unitree_legged_msgs::HighState_ > +{ + template static void stream(Stream& s, const std::string& indent, const ::unitree_legged_msgs::HighState_& v) + { + s << indent << "head[]" << std::endl; + for (size_t i = 0; i < v.head.size(); ++i) + { + s << indent << " head[" << i << "]: "; + Printer::stream(s, indent + " ", v.head[i]); + } + s << indent << "levelFlag: "; + Printer::stream(s, indent + " ", v.levelFlag); + s << indent << "frameReserve: "; + Printer::stream(s, indent + " ", v.frameReserve); + s << indent << "SN[]" << std::endl; + for (size_t i = 0; i < v.SN.size(); ++i) + { + s << indent << " SN[" << i << "]: "; + Printer::stream(s, indent + " ", v.SN[i]); + } + s << indent << "version[]" << std::endl; + for (size_t i = 0; i < v.version.size(); ++i) + { + s << indent << " version[" << i << "]: "; + Printer::stream(s, indent + " ", v.version[i]); + } + s << indent << "bandWidth: "; + Printer::stream(s, indent + " ", v.bandWidth); + s << indent << "imu: "; + s << std::endl; + Printer< ::unitree_legged_msgs::IMU_ >::stream(s, indent + " ", v.imu); + s << indent << "motorState[]" << std::endl; + for (size_t i = 0; i < v.motorState.size(); ++i) + { + s << indent << " motorState[" << i << "]: "; + s << std::endl; + s << indent; + Printer< ::unitree_legged_msgs::MotorState_ >::stream(s, indent + " ", v.motorState[i]); + } + s << indent << "bms: "; + s << std::endl; + Printer< ::unitree_legged_msgs::BmsState_ >::stream(s, indent + " ", v.bms); + s << indent << "footForce[]" << std::endl; + for (size_t i = 0; i < v.footForce.size(); ++i) + { + s << indent << " footForce[" << i << "]: "; + Printer::stream(s, indent + " ", v.footForce[i]); + } + s << indent << "footForceEst[]" << std::endl; + for (size_t i = 0; i < v.footForceEst.size(); ++i) + { + s << indent << " footForceEst[" << i << "]: "; + Printer::stream(s, indent + " ", v.footForceEst[i]); + } + s << indent << "mode: "; + Printer::stream(s, indent + " ", v.mode); + s << indent << "progress: "; + Printer::stream(s, indent + " ", v.progress); + s << indent << "gaitType: "; + Printer::stream(s, indent + " ", v.gaitType); + s << indent << "footRaiseHeight: "; + Printer::stream(s, indent + " ", v.footRaiseHeight); + s << indent << "position[]" << std::endl; + for (size_t i = 0; i < v.position.size(); ++i) + { + s << indent << " position[" << i << "]: "; + Printer::stream(s, indent + " ", v.position[i]); + } + s << indent << "bodyHeight: "; + Printer::stream(s, indent + " ", v.bodyHeight); + s << indent << "velocity[]" << std::endl; + for (size_t i = 0; i < v.velocity.size(); ++i) + { + s << indent << " velocity[" << i << "]: "; + Printer::stream(s, indent + " ", v.velocity[i]); + } + s << indent << "yawSpeed: "; + Printer::stream(s, indent + " ", v.yawSpeed); + s << indent << "rangeObstacle[]" << std::endl; + for (size_t i = 0; i < v.rangeObstacle.size(); ++i) + { + s << indent << " rangeObstacle[" << i << "]: "; + Printer::stream(s, indent + " ", v.rangeObstacle[i]); + } + s << indent << "footPosition2Body[]" << std::endl; + for (size_t i = 0; i < v.footPosition2Body.size(); ++i) + { + s << indent << " footPosition2Body[" << i << "]: "; + s << std::endl; + s << indent; + Printer< ::unitree_legged_msgs::Cartesian_ >::stream(s, indent + " ", v.footPosition2Body[i]); + } + s << indent << "footSpeed2Body[]" << std::endl; + for (size_t i = 0; i < v.footSpeed2Body.size(); ++i) + { + s << indent << " footSpeed2Body[" << i << "]: "; + s << std::endl; + s << indent; + Printer< ::unitree_legged_msgs::Cartesian_ >::stream(s, indent + " ", v.footSpeed2Body[i]); + } + s << indent << "wirelessRemote[]" << std::endl; + for (size_t i = 0; i < v.wirelessRemote.size(); ++i) + { + s << indent << " wirelessRemote[" << i << "]: "; + Printer::stream(s, indent + " ", v.wirelessRemote[i]); + } + s << indent << "reserve: "; + Printer::stream(s, indent + " ", v.reserve); + s << indent << "crc: "; + Printer::stream(s, indent + " ", v.crc); + } +}; + +} // namespace message_operations +} // namespace ros + +#endif // UNITREE_LEGGED_MSGS_MESSAGE_HIGHSTATE_H diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/IMU.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/IMU.h new file mode 100644 index 0000000..01a8797 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/IMU.h @@ -0,0 +1,265 @@ +// Generated by gencpp from file unitree_legged_msgs/IMU.msg +// DO NOT EDIT! + + +#ifndef UNITREE_LEGGED_MSGS_MESSAGE_IMU_H +#define UNITREE_LEGGED_MSGS_MESSAGE_IMU_H + + +#include +#include +#include + +#include +#include +#include +#include + + +namespace unitree_legged_msgs +{ +template +struct IMU_ +{ + typedef IMU_ Type; + + IMU_() + : quaternion() + , gyroscope() + , accelerometer() + , rpy() + , temperature(0) { + quaternion.assign(0.0); + + gyroscope.assign(0.0); + + accelerometer.assign(0.0); + + rpy.assign(0.0); + } + IMU_(const ContainerAllocator& _alloc) + : quaternion() + , gyroscope() + , accelerometer() + , rpy() + , temperature(0) { + (void)_alloc; + quaternion.assign(0.0); + + gyroscope.assign(0.0); + + accelerometer.assign(0.0); + + rpy.assign(0.0); + } + + + + typedef boost::array _quaternion_type; + _quaternion_type quaternion; + + typedef boost::array _gyroscope_type; + _gyroscope_type gyroscope; + + typedef boost::array _accelerometer_type; + _accelerometer_type accelerometer; + + typedef boost::array _rpy_type; + _rpy_type rpy; + + typedef int8_t _temperature_type; + _temperature_type temperature; + + + + + + typedef boost::shared_ptr< ::unitree_legged_msgs::IMU_ > Ptr; + typedef boost::shared_ptr< ::unitree_legged_msgs::IMU_ const> ConstPtr; + +}; // struct IMU_ + +typedef ::unitree_legged_msgs::IMU_ > IMU; + +typedef boost::shared_ptr< ::unitree_legged_msgs::IMU > IMUPtr; +typedef boost::shared_ptr< ::unitree_legged_msgs::IMU const> IMUConstPtr; + +// constants requiring out of line definition + + + +template +std::ostream& operator<<(std::ostream& s, const ::unitree_legged_msgs::IMU_ & v) +{ +ros::message_operations::Printer< ::unitree_legged_msgs::IMU_ >::stream(s, "", v); +return s; +} + + +template +bool operator==(const ::unitree_legged_msgs::IMU_ & lhs, const ::unitree_legged_msgs::IMU_ & rhs) +{ + return lhs.quaternion == rhs.quaternion && + lhs.gyroscope == rhs.gyroscope && + lhs.accelerometer == rhs.accelerometer && + lhs.rpy == rhs.rpy && + lhs.temperature == rhs.temperature; +} + +template +bool operator!=(const ::unitree_legged_msgs::IMU_ & lhs, const ::unitree_legged_msgs::IMU_ & rhs) +{ + return !(lhs == rhs); +} + + +} // namespace unitree_legged_msgs + +namespace ros +{ +namespace message_traits +{ + + + + + +template +struct IsMessage< ::unitree_legged_msgs::IMU_ > + : TrueType + { }; + +template +struct IsMessage< ::unitree_legged_msgs::IMU_ const> + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::IMU_ > + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::IMU_ const> + : TrueType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::IMU_ > + : FalseType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::IMU_ const> + : FalseType + { }; + + +template +struct MD5Sum< ::unitree_legged_msgs::IMU_ > +{ + static const char* value() + { + return "c2bcd83820da00fff261b67d6490da58"; + } + + static const char* value(const ::unitree_legged_msgs::IMU_&) { return value(); } + static const uint64_t static_value1 = 0xc2bcd83820da00ffULL; + static const uint64_t static_value2 = 0xf261b67d6490da58ULL; +}; + +template +struct DataType< ::unitree_legged_msgs::IMU_ > +{ + static const char* value() + { + return "unitree_legged_msgs/IMU"; + } + + static const char* value(const ::unitree_legged_msgs::IMU_&) { return value(); } +}; + +template +struct Definition< ::unitree_legged_msgs::IMU_ > +{ + static const char* value() + { + return "float32[4] quaternion\n" +"float32[3] gyroscope\n" +"float32[3] accelerometer\n" +"float32[3] rpy\n" +"int8 temperature\n" +; + } + + static const char* value(const ::unitree_legged_msgs::IMU_&) { return value(); } +}; + +} // namespace message_traits +} // namespace ros + +namespace ros +{ +namespace serialization +{ + + template struct Serializer< ::unitree_legged_msgs::IMU_ > + { + template inline static void allInOne(Stream& stream, T m) + { + stream.next(m.quaternion); + stream.next(m.gyroscope); + stream.next(m.accelerometer); + stream.next(m.rpy); + stream.next(m.temperature); + } + + ROS_DECLARE_ALLINONE_SERIALIZER + }; // struct IMU_ + +} // namespace serialization +} // namespace ros + +namespace ros +{ +namespace message_operations +{ + +template +struct Printer< ::unitree_legged_msgs::IMU_ > +{ + template static void stream(Stream& s, const std::string& indent, const ::unitree_legged_msgs::IMU_& v) + { + s << indent << "quaternion[]" << std::endl; + for (size_t i = 0; i < v.quaternion.size(); ++i) + { + s << indent << " quaternion[" << i << "]: "; + Printer::stream(s, indent + " ", v.quaternion[i]); + } + s << indent << "gyroscope[]" << std::endl; + for (size_t i = 0; i < v.gyroscope.size(); ++i) + { + s << indent << " gyroscope[" << i << "]: "; + Printer::stream(s, indent + " ", v.gyroscope[i]); + } + s << indent << "accelerometer[]" << std::endl; + for (size_t i = 0; i < v.accelerometer.size(); ++i) + { + s << indent << " accelerometer[" << i << "]: "; + Printer::stream(s, indent + " ", v.accelerometer[i]); + } + s << indent << "rpy[]" << std::endl; + for (size_t i = 0; i < v.rpy.size(); ++i) + { + s << indent << " rpy[" << i << "]: "; + Printer::stream(s, indent + " ", v.rpy[i]); + } + s << indent << "temperature: "; + Printer::stream(s, indent + " ", v.temperature); + } +}; + +} // namespace message_operations +} // namespace ros + +#endif // UNITREE_LEGGED_MSGS_MESSAGE_IMU_H diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/LED.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/LED.h new file mode 100644 index 0000000..b7150fb --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/LED.h @@ -0,0 +1,215 @@ +// Generated by gencpp from file unitree_legged_msgs/LED.msg +// DO NOT EDIT! + + +#ifndef UNITREE_LEGGED_MSGS_MESSAGE_LED_H +#define UNITREE_LEGGED_MSGS_MESSAGE_LED_H + + +#include +#include +#include + +#include +#include +#include +#include + + +namespace unitree_legged_msgs +{ +template +struct LED_ +{ + typedef LED_ Type; + + LED_() + : r(0) + , g(0) + , b(0) { + } + LED_(const ContainerAllocator& _alloc) + : r(0) + , g(0) + , b(0) { + (void)_alloc; + } + + + + typedef uint8_t _r_type; + _r_type r; + + typedef uint8_t _g_type; + _g_type g; + + typedef uint8_t _b_type; + _b_type b; + + + + + + typedef boost::shared_ptr< ::unitree_legged_msgs::LED_ > Ptr; + typedef boost::shared_ptr< ::unitree_legged_msgs::LED_ const> ConstPtr; + +}; // struct LED_ + +typedef ::unitree_legged_msgs::LED_ > LED; + +typedef boost::shared_ptr< ::unitree_legged_msgs::LED > LEDPtr; +typedef boost::shared_ptr< ::unitree_legged_msgs::LED const> LEDConstPtr; + +// constants requiring out of line definition + + + +template +std::ostream& operator<<(std::ostream& s, const ::unitree_legged_msgs::LED_ & v) +{ +ros::message_operations::Printer< ::unitree_legged_msgs::LED_ >::stream(s, "", v); +return s; +} + + +template +bool operator==(const ::unitree_legged_msgs::LED_ & lhs, const ::unitree_legged_msgs::LED_ & rhs) +{ + return lhs.r == rhs.r && + lhs.g == rhs.g && + lhs.b == rhs.b; +} + +template +bool operator!=(const ::unitree_legged_msgs::LED_ & lhs, const ::unitree_legged_msgs::LED_ & rhs) +{ + return !(lhs == rhs); +} + + +} // namespace unitree_legged_msgs + +namespace ros +{ +namespace message_traits +{ + + + + + +template +struct IsMessage< ::unitree_legged_msgs::LED_ > + : TrueType + { }; + +template +struct IsMessage< ::unitree_legged_msgs::LED_ const> + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::LED_ > + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::LED_ const> + : TrueType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::LED_ > + : FalseType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::LED_ const> + : FalseType + { }; + + +template +struct MD5Sum< ::unitree_legged_msgs::LED_ > +{ + static const char* value() + { + return "353891e354491c51aabe32df673fb446"; + } + + static const char* value(const ::unitree_legged_msgs::LED_&) { return value(); } + static const uint64_t static_value1 = 0x353891e354491c51ULL; + static const uint64_t static_value2 = 0xaabe32df673fb446ULL; +}; + +template +struct DataType< ::unitree_legged_msgs::LED_ > +{ + static const char* value() + { + return "unitree_legged_msgs/LED"; + } + + static const char* value(const ::unitree_legged_msgs::LED_&) { return value(); } +}; + +template +struct Definition< ::unitree_legged_msgs::LED_ > +{ + static const char* value() + { + return "uint8 r\n" +"uint8 g\n" +"uint8 b\n" +; + } + + static const char* value(const ::unitree_legged_msgs::LED_&) { return value(); } +}; + +} // namespace message_traits +} // namespace ros + +namespace ros +{ +namespace serialization +{ + + template struct Serializer< ::unitree_legged_msgs::LED_ > + { + template inline static void allInOne(Stream& stream, T m) + { + stream.next(m.r); + stream.next(m.g); + stream.next(m.b); + } + + ROS_DECLARE_ALLINONE_SERIALIZER + }; // struct LED_ + +} // namespace serialization +} // namespace ros + +namespace ros +{ +namespace message_operations +{ + +template +struct Printer< ::unitree_legged_msgs::LED_ > +{ + template static void stream(Stream& s, const std::string& indent, const ::unitree_legged_msgs::LED_& v) + { + s << indent << "r: "; + Printer::stream(s, indent + " ", v.r); + s << indent << "g: "; + Printer::stream(s, indent + " ", v.g); + s << indent << "b: "; + Printer::stream(s, indent + " ", v.b); + } +}; + +} // namespace message_operations +} // namespace ros + +#endif // UNITREE_LEGGED_MSGS_MESSAGE_LED_H diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/LowCmd.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/LowCmd.h new file mode 100644 index 0000000..32a533a --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/LowCmd.h @@ -0,0 +1,352 @@ +// Generated by gencpp from file unitree_legged_msgs/LowCmd.msg +// DO NOT EDIT! + + +#ifndef UNITREE_LEGGED_MSGS_MESSAGE_LOWCMD_H +#define UNITREE_LEGGED_MSGS_MESSAGE_LOWCMD_H + + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +namespace unitree_legged_msgs +{ +template +struct LowCmd_ +{ + typedef LowCmd_ Type; + + LowCmd_() + : head() + , levelFlag(0) + , frameReserve(0) + , SN() + , version() + , bandWidth(0) + , motorCmd() + , bms() + , wirelessRemote() + , reserve(0) + , crc(0) { + head.assign(0); + + SN.assign(0); + + version.assign(0); + + wirelessRemote.assign(0); + } + LowCmd_(const ContainerAllocator& _alloc) + : head() + , levelFlag(0) + , frameReserve(0) + , SN() + , version() + , bandWidth(0) + , motorCmd() + , bms(_alloc) + , wirelessRemote() + , reserve(0) + , crc(0) { + (void)_alloc; + head.assign(0); + + SN.assign(0); + + version.assign(0); + + motorCmd.assign( ::unitree_legged_msgs::MotorCmd_ (_alloc)); + + wirelessRemote.assign(0); + } + + + + typedef boost::array _head_type; + _head_type head; + + typedef uint8_t _levelFlag_type; + _levelFlag_type levelFlag; + + typedef uint8_t _frameReserve_type; + _frameReserve_type frameReserve; + + typedef boost::array _SN_type; + _SN_type SN; + + typedef boost::array _version_type; + _version_type version; + + typedef uint16_t _bandWidth_type; + _bandWidth_type bandWidth; + + typedef boost::array< ::unitree_legged_msgs::MotorCmd_ , 20> _motorCmd_type; + _motorCmd_type motorCmd; + + typedef ::unitree_legged_msgs::BmsCmd_ _bms_type; + _bms_type bms; + + typedef boost::array _wirelessRemote_type; + _wirelessRemote_type wirelessRemote; + + typedef uint32_t _reserve_type; + _reserve_type reserve; + + typedef uint32_t _crc_type; + _crc_type crc; + + + + + + typedef boost::shared_ptr< ::unitree_legged_msgs::LowCmd_ > Ptr; + typedef boost::shared_ptr< ::unitree_legged_msgs::LowCmd_ const> ConstPtr; + +}; // struct LowCmd_ + +typedef ::unitree_legged_msgs::LowCmd_ > LowCmd; + +typedef boost::shared_ptr< ::unitree_legged_msgs::LowCmd > LowCmdPtr; +typedef boost::shared_ptr< ::unitree_legged_msgs::LowCmd const> LowCmdConstPtr; + +// constants requiring out of line definition + + + +template +std::ostream& operator<<(std::ostream& s, const ::unitree_legged_msgs::LowCmd_ & v) +{ +ros::message_operations::Printer< ::unitree_legged_msgs::LowCmd_ >::stream(s, "", v); +return s; +} + + +template +bool operator==(const ::unitree_legged_msgs::LowCmd_ & lhs, const ::unitree_legged_msgs::LowCmd_ & rhs) +{ + return lhs.head == rhs.head && + lhs.levelFlag == rhs.levelFlag && + lhs.frameReserve == rhs.frameReserve && + lhs.SN == rhs.SN && + lhs.version == rhs.version && + lhs.bandWidth == rhs.bandWidth && + lhs.motorCmd == rhs.motorCmd && + lhs.bms == rhs.bms && + lhs.wirelessRemote == rhs.wirelessRemote && + lhs.reserve == rhs.reserve && + lhs.crc == rhs.crc; +} + +template +bool operator!=(const ::unitree_legged_msgs::LowCmd_ & lhs, const ::unitree_legged_msgs::LowCmd_ & rhs) +{ + return !(lhs == rhs); +} + + +} // namespace unitree_legged_msgs + +namespace ros +{ +namespace message_traits +{ + + + + + +template +struct IsMessage< ::unitree_legged_msgs::LowCmd_ > + : TrueType + { }; + +template +struct IsMessage< ::unitree_legged_msgs::LowCmd_ const> + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::LowCmd_ > + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::LowCmd_ const> + : TrueType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::LowCmd_ > + : FalseType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::LowCmd_ const> + : FalseType + { }; + + +template +struct MD5Sum< ::unitree_legged_msgs::LowCmd_ > +{ + static const char* value() + { + return "7a33b01032a894134df9b65b5cd356d1"; + } + + static const char* value(const ::unitree_legged_msgs::LowCmd_&) { return value(); } + static const uint64_t static_value1 = 0x7a33b01032a89413ULL; + static const uint64_t static_value2 = 0x4df9b65b5cd356d1ULL; +}; + +template +struct DataType< ::unitree_legged_msgs::LowCmd_ > +{ + static const char* value() + { + return "unitree_legged_msgs/LowCmd"; + } + + static const char* value(const ::unitree_legged_msgs::LowCmd_&) { return value(); } +}; + +template +struct Definition< ::unitree_legged_msgs::LowCmd_ > +{ + static const char* value() + { + return "\n" +"uint8[2] head\n" +"uint8 levelFlag\n" +"uint8 frameReserve\n" +"\n" +"uint32[2] SN\n" +"uint32[2] version\n" +"uint16 bandWidth\n" +"MotorCmd[20] motorCmd\n" +"BmsCmd bms\n" +"uint8[40] wirelessRemote\n" +"uint32 reserve\n" +"\n" +"uint32 crc\n" +"================================================================================\n" +"MSG: unitree_legged_msgs/MotorCmd\n" +"uint8 mode # motor target mode\n" +"float32 q # motor target position\n" +"float32 dq # motor target velocity\n" +"float32 tau # motor target torque\n" +"float32 Kp # motor spring stiffness coefficient\n" +"float32 Kd # motor damper coefficient\n" +"uint32[3] reserve # motor target torque\n" +"================================================================================\n" +"MSG: unitree_legged_msgs/BmsCmd\n" +"uint8 off # off 0xA5\n" +"uint8[3] reserve\n" +; + } + + static const char* value(const ::unitree_legged_msgs::LowCmd_&) { return value(); } +}; + +} // namespace message_traits +} // namespace ros + +namespace ros +{ +namespace serialization +{ + + template struct Serializer< ::unitree_legged_msgs::LowCmd_ > + { + template inline static void allInOne(Stream& stream, T m) + { + stream.next(m.head); + stream.next(m.levelFlag); + stream.next(m.frameReserve); + stream.next(m.SN); + stream.next(m.version); + stream.next(m.bandWidth); + stream.next(m.motorCmd); + stream.next(m.bms); + stream.next(m.wirelessRemote); + stream.next(m.reserve); + stream.next(m.crc); + } + + ROS_DECLARE_ALLINONE_SERIALIZER + }; // struct LowCmd_ + +} // namespace serialization +} // namespace ros + +namespace ros +{ +namespace message_operations +{ + +template +struct Printer< ::unitree_legged_msgs::LowCmd_ > +{ + template static void stream(Stream& s, const std::string& indent, const ::unitree_legged_msgs::LowCmd_& v) + { + s << indent << "head[]" << std::endl; + for (size_t i = 0; i < v.head.size(); ++i) + { + s << indent << " head[" << i << "]: "; + Printer::stream(s, indent + " ", v.head[i]); + } + s << indent << "levelFlag: "; + Printer::stream(s, indent + " ", v.levelFlag); + s << indent << "frameReserve: "; + Printer::stream(s, indent + " ", v.frameReserve); + s << indent << "SN[]" << std::endl; + for (size_t i = 0; i < v.SN.size(); ++i) + { + s << indent << " SN[" << i << "]: "; + Printer::stream(s, indent + " ", v.SN[i]); + } + s << indent << "version[]" << std::endl; + for (size_t i = 0; i < v.version.size(); ++i) + { + s << indent << " version[" << i << "]: "; + Printer::stream(s, indent + " ", v.version[i]); + } + s << indent << "bandWidth: "; + Printer::stream(s, indent + " ", v.bandWidth); + s << indent << "motorCmd[]" << std::endl; + for (size_t i = 0; i < v.motorCmd.size(); ++i) + { + s << indent << " motorCmd[" << i << "]: "; + s << std::endl; + s << indent; + Printer< ::unitree_legged_msgs::MotorCmd_ >::stream(s, indent + " ", v.motorCmd[i]); + } + s << indent << "bms: "; + s << std::endl; + Printer< ::unitree_legged_msgs::BmsCmd_ >::stream(s, indent + " ", v.bms); + s << indent << "wirelessRemote[]" << std::endl; + for (size_t i = 0; i < v.wirelessRemote.size(); ++i) + { + s << indent << " wirelessRemote[" << i << "]: "; + Printer::stream(s, indent + " ", v.wirelessRemote[i]); + } + s << indent << "reserve: "; + Printer::stream(s, indent + " ", v.reserve); + s << indent << "crc: "; + Printer::stream(s, indent + " ", v.crc); + } +}; + +} // namespace message_operations +} // namespace ros + +#endif // UNITREE_LEGGED_MSGS_MESSAGE_LOWCMD_H diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/LowState.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/LowState.h new file mode 100644 index 0000000..5033aad --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/LowState.h @@ -0,0 +1,509 @@ +// Generated by gencpp from file unitree_legged_msgs/LowState.msg +// DO NOT EDIT! + + +#ifndef UNITREE_LEGGED_MSGS_MESSAGE_LOWSTATE_H +#define UNITREE_LEGGED_MSGS_MESSAGE_LOWSTATE_H + + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace unitree_legged_msgs +{ +template +struct LowState_ +{ + typedef LowState_ Type; + + LowState_() + : head() + , levelFlag(0) + , frameReserve(0) + , SN() + , version() + , bandWidth(0) + , imu() + , motorState() + , bms() + , footForce() + , footForceEst() + , tick(0) + , wirelessRemote() + , reserve(0) + , crc(0) + , eeForceRaw() + , eeForce() + , position() + , velocity() + , velocity_w() { + head.assign(0); + + SN.assign(0); + + version.assign(0); + + footForce.assign(0); + + footForceEst.assign(0); + + wirelessRemote.assign(0); + } + LowState_(const ContainerAllocator& _alloc) + : head() + , levelFlag(0) + , frameReserve(0) + , SN() + , version() + , bandWidth(0) + , imu(_alloc) + , motorState() + , bms(_alloc) + , footForce() + , footForceEst() + , tick(0) + , wirelessRemote() + , reserve(0) + , crc(0) + , eeForceRaw() + , eeForce() + , position(_alloc) + , velocity(_alloc) + , velocity_w(_alloc) { + (void)_alloc; + head.assign(0); + + SN.assign(0); + + version.assign(0); + + motorState.assign( ::unitree_legged_msgs::MotorState_ (_alloc)); + + footForce.assign(0); + + footForceEst.assign(0); + + wirelessRemote.assign(0); + + eeForceRaw.assign( ::unitree_legged_msgs::Cartesian_ (_alloc)); + + eeForce.assign( ::unitree_legged_msgs::Cartesian_ (_alloc)); + } + + + + typedef boost::array _head_type; + _head_type head; + + typedef uint8_t _levelFlag_type; + _levelFlag_type levelFlag; + + typedef uint8_t _frameReserve_type; + _frameReserve_type frameReserve; + + typedef boost::array _SN_type; + _SN_type SN; + + typedef boost::array _version_type; + _version_type version; + + typedef uint16_t _bandWidth_type; + _bandWidth_type bandWidth; + + typedef ::unitree_legged_msgs::IMU_ _imu_type; + _imu_type imu; + + typedef boost::array< ::unitree_legged_msgs::MotorState_ , 20> _motorState_type; + _motorState_type motorState; + + typedef ::unitree_legged_msgs::BmsState_ _bms_type; + _bms_type bms; + + typedef boost::array _footForce_type; + _footForce_type footForce; + + typedef boost::array _footForceEst_type; + _footForceEst_type footForceEst; + + typedef uint32_t _tick_type; + _tick_type tick; + + typedef boost::array _wirelessRemote_type; + _wirelessRemote_type wirelessRemote; + + typedef uint32_t _reserve_type; + _reserve_type reserve; + + typedef uint32_t _crc_type; + _crc_type crc; + + typedef boost::array< ::unitree_legged_msgs::Cartesian_ , 4> _eeForceRaw_type; + _eeForceRaw_type eeForceRaw; + + typedef boost::array< ::unitree_legged_msgs::Cartesian_ , 4> _eeForce_type; + _eeForce_type eeForce; + + typedef ::unitree_legged_msgs::Cartesian_ _position_type; + _position_type position; + + typedef ::unitree_legged_msgs::Cartesian_ _velocity_type; + _velocity_type velocity; + + typedef ::unitree_legged_msgs::Cartesian_ _velocity_w_type; + _velocity_w_type velocity_w; + + + + + + typedef boost::shared_ptr< ::unitree_legged_msgs::LowState_ > Ptr; + typedef boost::shared_ptr< ::unitree_legged_msgs::LowState_ const> ConstPtr; + +}; // struct LowState_ + +typedef ::unitree_legged_msgs::LowState_ > LowState; + +typedef boost::shared_ptr< ::unitree_legged_msgs::LowState > LowStatePtr; +typedef boost::shared_ptr< ::unitree_legged_msgs::LowState const> LowStateConstPtr; + +// constants requiring out of line definition + + + +template +std::ostream& operator<<(std::ostream& s, const ::unitree_legged_msgs::LowState_ & v) +{ +ros::message_operations::Printer< ::unitree_legged_msgs::LowState_ >::stream(s, "", v); +return s; +} + + +template +bool operator==(const ::unitree_legged_msgs::LowState_ & lhs, const ::unitree_legged_msgs::LowState_ & rhs) +{ + return lhs.head == rhs.head && + lhs.levelFlag == rhs.levelFlag && + lhs.frameReserve == rhs.frameReserve && + lhs.SN == rhs.SN && + lhs.version == rhs.version && + lhs.bandWidth == rhs.bandWidth && + lhs.imu == rhs.imu && + lhs.motorState == rhs.motorState && + lhs.bms == rhs.bms && + lhs.footForce == rhs.footForce && + lhs.footForceEst == rhs.footForceEst && + lhs.tick == rhs.tick && + lhs.wirelessRemote == rhs.wirelessRemote && + lhs.reserve == rhs.reserve && + lhs.crc == rhs.crc && + lhs.eeForceRaw == rhs.eeForceRaw && + lhs.eeForce == rhs.eeForce && + lhs.position == rhs.position && + lhs.velocity == rhs.velocity && + lhs.velocity_w == rhs.velocity_w; +} + +template +bool operator!=(const ::unitree_legged_msgs::LowState_ & lhs, const ::unitree_legged_msgs::LowState_ & rhs) +{ + return !(lhs == rhs); +} + + +} // namespace unitree_legged_msgs + +namespace ros +{ +namespace message_traits +{ + + + + + +template +struct IsMessage< ::unitree_legged_msgs::LowState_ > + : TrueType + { }; + +template +struct IsMessage< ::unitree_legged_msgs::LowState_ const> + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::LowState_ > + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::LowState_ const> + : TrueType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::LowState_ > + : FalseType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::LowState_ const> + : FalseType + { }; + + +template +struct MD5Sum< ::unitree_legged_msgs::LowState_ > +{ + static const char* value() + { + return "481f8a83f729a25e7cc170da192f80f9"; + } + + static const char* value(const ::unitree_legged_msgs::LowState_&) { return value(); } + static const uint64_t static_value1 = 0x481f8a83f729a25eULL; + static const uint64_t static_value2 = 0x7cc170da192f80f9ULL; +}; + +template +struct DataType< ::unitree_legged_msgs::LowState_ > +{ + static const char* value() + { + return "unitree_legged_msgs/LowState"; + } + + static const char* value(const ::unitree_legged_msgs::LowState_&) { return value(); } +}; + +template +struct Definition< ::unitree_legged_msgs::LowState_ > +{ + static const char* value() + { + return "\n" +"uint8[2] head\n" +"uint8 levelFlag\n" +"uint8 frameReserve\n" +"\n" +"uint32[2] SN\n" +"uint32[2] version\n" +"uint16 bandWidth\n" +"IMU imu\n" +"MotorState[20] motorState\n" +"BmsState bms\n" +"int16[4] footForce \n" +"int16[4] footForceEst \n" +"uint32 tick \n" +"uint8[40] wirelessRemote \n" +"uint32 reserve\n" +"uint32 crc\n" +"\n" +"# Old version Aliengo does not have:\n" +"Cartesian[4] eeForceRaw\n" +"Cartesian[4] eeForce #it's a 1-DOF force infact, but we use 3-DOF here just for visualization \n" +"Cartesian position # will delete\n" +"Cartesian velocity # will delete\n" +"Cartesian velocity_w # will delete\n" +"\n" +"\n" +"================================================================================\n" +"MSG: unitree_legged_msgs/IMU\n" +"float32[4] quaternion\n" +"float32[3] gyroscope\n" +"float32[3] accelerometer\n" +"float32[3] rpy\n" +"int8 temperature\n" +"================================================================================\n" +"MSG: unitree_legged_msgs/MotorState\n" +"uint8 mode # motor current mode \n" +"float32 q # motor current position(rad)\n" +"float32 dq # motor current speed(rad/s)\n" +"float32 ddq # motor current speed(rad/s)\n" +"float32 tauEst # current estimated output torque(N*m)\n" +"float32 q_raw # motor current position(rad)\n" +"float32 dq_raw # motor current speed(rad/s)\n" +"float32 ddq_raw # motor current speed(rad/s)\n" +"int8 temperature # motor temperature(slow conduction of temperature leads to lag)\n" +"uint32[2] reserve\n" +"================================================================================\n" +"MSG: unitree_legged_msgs/BmsState\n" +"uint8 version_h\n" +"uint8 version_l\n" +"uint8 bms_status\n" +"uint8 SOC # SOC 0-100%\n" +"int32 current # mA\n" +"uint16 cycle\n" +"int8[2] BQ_NTC # x1 degrees centigrade\n" +"int8[2] MCU_NTC # x1 degrees centigrade\n" +"uint16[10] cell_vol # cell voltage mV\n" +"================================================================================\n" +"MSG: unitree_legged_msgs/Cartesian\n" +"float32 x\n" +"float32 y\n" +"float32 z\n" +; + } + + static const char* value(const ::unitree_legged_msgs::LowState_&) { return value(); } +}; + +} // namespace message_traits +} // namespace ros + +namespace ros +{ +namespace serialization +{ + + template struct Serializer< ::unitree_legged_msgs::LowState_ > + { + template inline static void allInOne(Stream& stream, T m) + { + stream.next(m.head); + stream.next(m.levelFlag); + stream.next(m.frameReserve); + stream.next(m.SN); + stream.next(m.version); + stream.next(m.bandWidth); + stream.next(m.imu); + stream.next(m.motorState); + stream.next(m.bms); + stream.next(m.footForce); + stream.next(m.footForceEst); + stream.next(m.tick); + stream.next(m.wirelessRemote); + stream.next(m.reserve); + stream.next(m.crc); + stream.next(m.eeForceRaw); + stream.next(m.eeForce); + stream.next(m.position); + stream.next(m.velocity); + stream.next(m.velocity_w); + } + + ROS_DECLARE_ALLINONE_SERIALIZER + }; // struct LowState_ + +} // namespace serialization +} // namespace ros + +namespace ros +{ +namespace message_operations +{ + +template +struct Printer< ::unitree_legged_msgs::LowState_ > +{ + template static void stream(Stream& s, const std::string& indent, const ::unitree_legged_msgs::LowState_& v) + { + s << indent << "head[]" << std::endl; + for (size_t i = 0; i < v.head.size(); ++i) + { + s << indent << " head[" << i << "]: "; + Printer::stream(s, indent + " ", v.head[i]); + } + s << indent << "levelFlag: "; + Printer::stream(s, indent + " ", v.levelFlag); + s << indent << "frameReserve: "; + Printer::stream(s, indent + " ", v.frameReserve); + s << indent << "SN[]" << std::endl; + for (size_t i = 0; i < v.SN.size(); ++i) + { + s << indent << " SN[" << i << "]: "; + Printer::stream(s, indent + " ", v.SN[i]); + } + s << indent << "version[]" << std::endl; + for (size_t i = 0; i < v.version.size(); ++i) + { + s << indent << " version[" << i << "]: "; + Printer::stream(s, indent + " ", v.version[i]); + } + s << indent << "bandWidth: "; + Printer::stream(s, indent + " ", v.bandWidth); + s << indent << "imu: "; + s << std::endl; + Printer< ::unitree_legged_msgs::IMU_ >::stream(s, indent + " ", v.imu); + s << indent << "motorState[]" << std::endl; + for (size_t i = 0; i < v.motorState.size(); ++i) + { + s << indent << " motorState[" << i << "]: "; + s << std::endl; + s << indent; + Printer< ::unitree_legged_msgs::MotorState_ >::stream(s, indent + " ", v.motorState[i]); + } + s << indent << "bms: "; + s << std::endl; + Printer< ::unitree_legged_msgs::BmsState_ >::stream(s, indent + " ", v.bms); + s << indent << "footForce[]" << std::endl; + for (size_t i = 0; i < v.footForce.size(); ++i) + { + s << indent << " footForce[" << i << "]: "; + Printer::stream(s, indent + " ", v.footForce[i]); + } + s << indent << "footForceEst[]" << std::endl; + for (size_t i = 0; i < v.footForceEst.size(); ++i) + { + s << indent << " footForceEst[" << i << "]: "; + Printer::stream(s, indent + " ", v.footForceEst[i]); + } + s << indent << "tick: "; + Printer::stream(s, indent + " ", v.tick); + s << indent << "wirelessRemote[]" << std::endl; + for (size_t i = 0; i < v.wirelessRemote.size(); ++i) + { + s << indent << " wirelessRemote[" << i << "]: "; + Printer::stream(s, indent + " ", v.wirelessRemote[i]); + } + s << indent << "reserve: "; + Printer::stream(s, indent + " ", v.reserve); + s << indent << "crc: "; + Printer::stream(s, indent + " ", v.crc); + s << indent << "eeForceRaw[]" << std::endl; + for (size_t i = 0; i < v.eeForceRaw.size(); ++i) + { + s << indent << " eeForceRaw[" << i << "]: "; + s << std::endl; + s << indent; + Printer< ::unitree_legged_msgs::Cartesian_ >::stream(s, indent + " ", v.eeForceRaw[i]); + } + s << indent << "eeForce[]" << std::endl; + for (size_t i = 0; i < v.eeForce.size(); ++i) + { + s << indent << " eeForce[" << i << "]: "; + s << std::endl; + s << indent; + Printer< ::unitree_legged_msgs::Cartesian_ >::stream(s, indent + " ", v.eeForce[i]); + } + s << indent << "position: "; + s << std::endl; + Printer< ::unitree_legged_msgs::Cartesian_ >::stream(s, indent + " ", v.position); + s << indent << "velocity: "; + s << std::endl; + Printer< ::unitree_legged_msgs::Cartesian_ >::stream(s, indent + " ", v.velocity); + s << indent << "velocity_w: "; + s << std::endl; + Printer< ::unitree_legged_msgs::Cartesian_ >::stream(s, indent + " ", v.velocity_w); + } +}; + +} // namespace message_operations +} // namespace ros + +#endif // UNITREE_LEGGED_MSGS_MESSAGE_LOWSTATE_H diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/MotorCmd.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/MotorCmd.h new file mode 100644 index 0000000..e89f575 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/MotorCmd.h @@ -0,0 +1,261 @@ +// Generated by gencpp from file unitree_legged_msgs/MotorCmd.msg +// DO NOT EDIT! + + +#ifndef UNITREE_LEGGED_MSGS_MESSAGE_MOTORCMD_H +#define UNITREE_LEGGED_MSGS_MESSAGE_MOTORCMD_H + + +#include +#include +#include + +#include +#include +#include +#include + + +namespace unitree_legged_msgs +{ +template +struct MotorCmd_ +{ + typedef MotorCmd_ Type; + + MotorCmd_() + : mode(0) + , q(0.0) + , dq(0.0) + , tau(0.0) + , Kp(0.0) + , Kd(0.0) + , reserve() { + reserve.assign(0); + } + MotorCmd_(const ContainerAllocator& _alloc) + : mode(0) + , q(0.0) + , dq(0.0) + , tau(0.0) + , Kp(0.0) + , Kd(0.0) + , reserve() { + (void)_alloc; + reserve.assign(0); + } + + + + typedef uint8_t _mode_type; + _mode_type mode; + + typedef float _q_type; + _q_type q; + + typedef float _dq_type; + _dq_type dq; + + typedef float _tau_type; + _tau_type tau; + + typedef float _Kp_type; + _Kp_type Kp; + + typedef float _Kd_type; + _Kd_type Kd; + + typedef boost::array _reserve_type; + _reserve_type reserve; + + + + + + typedef boost::shared_ptr< ::unitree_legged_msgs::MotorCmd_ > Ptr; + typedef boost::shared_ptr< ::unitree_legged_msgs::MotorCmd_ const> ConstPtr; + +}; // struct MotorCmd_ + +typedef ::unitree_legged_msgs::MotorCmd_ > MotorCmd; + +typedef boost::shared_ptr< ::unitree_legged_msgs::MotorCmd > MotorCmdPtr; +typedef boost::shared_ptr< ::unitree_legged_msgs::MotorCmd const> MotorCmdConstPtr; + +// constants requiring out of line definition + + + +template +std::ostream& operator<<(std::ostream& s, const ::unitree_legged_msgs::MotorCmd_ & v) +{ +ros::message_operations::Printer< ::unitree_legged_msgs::MotorCmd_ >::stream(s, "", v); +return s; +} + + +template +bool operator==(const ::unitree_legged_msgs::MotorCmd_ & lhs, const ::unitree_legged_msgs::MotorCmd_ & rhs) +{ + return lhs.mode == rhs.mode && + lhs.q == rhs.q && + lhs.dq == rhs.dq && + lhs.tau == rhs.tau && + lhs.Kp == rhs.Kp && + lhs.Kd == rhs.Kd && + lhs.reserve == rhs.reserve; +} + +template +bool operator!=(const ::unitree_legged_msgs::MotorCmd_ & lhs, const ::unitree_legged_msgs::MotorCmd_ & rhs) +{ + return !(lhs == rhs); +} + + +} // namespace unitree_legged_msgs + +namespace ros +{ +namespace message_traits +{ + + + + + +template +struct IsMessage< ::unitree_legged_msgs::MotorCmd_ > + : TrueType + { }; + +template +struct IsMessage< ::unitree_legged_msgs::MotorCmd_ const> + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::MotorCmd_ > + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::MotorCmd_ const> + : TrueType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::MotorCmd_ > + : FalseType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::MotorCmd_ const> + : FalseType + { }; + + +template +struct MD5Sum< ::unitree_legged_msgs::MotorCmd_ > +{ + static const char* value() + { + return "bbb3b7d91319c3a1b99055f0149ba221"; + } + + static const char* value(const ::unitree_legged_msgs::MotorCmd_&) { return value(); } + static const uint64_t static_value1 = 0xbbb3b7d91319c3a1ULL; + static const uint64_t static_value2 = 0xb99055f0149ba221ULL; +}; + +template +struct DataType< ::unitree_legged_msgs::MotorCmd_ > +{ + static const char* value() + { + return "unitree_legged_msgs/MotorCmd"; + } + + static const char* value(const ::unitree_legged_msgs::MotorCmd_&) { return value(); } +}; + +template +struct Definition< ::unitree_legged_msgs::MotorCmd_ > +{ + static const char* value() + { + return "uint8 mode # motor target mode\n" +"float32 q # motor target position\n" +"float32 dq # motor target velocity\n" +"float32 tau # motor target torque\n" +"float32 Kp # motor spring stiffness coefficient\n" +"float32 Kd # motor damper coefficient\n" +"uint32[3] reserve # motor target torque\n" +; + } + + static const char* value(const ::unitree_legged_msgs::MotorCmd_&) { return value(); } +}; + +} // namespace message_traits +} // namespace ros + +namespace ros +{ +namespace serialization +{ + + template struct Serializer< ::unitree_legged_msgs::MotorCmd_ > + { + template inline static void allInOne(Stream& stream, T m) + { + stream.next(m.mode); + stream.next(m.q); + stream.next(m.dq); + stream.next(m.tau); + stream.next(m.Kp); + stream.next(m.Kd); + stream.next(m.reserve); + } + + ROS_DECLARE_ALLINONE_SERIALIZER + }; // struct MotorCmd_ + +} // namespace serialization +} // namespace ros + +namespace ros +{ +namespace message_operations +{ + +template +struct Printer< ::unitree_legged_msgs::MotorCmd_ > +{ + template static void stream(Stream& s, const std::string& indent, const ::unitree_legged_msgs::MotorCmd_& v) + { + s << indent << "mode: "; + Printer::stream(s, indent + " ", v.mode); + s << indent << "q: "; + Printer::stream(s, indent + " ", v.q); + s << indent << "dq: "; + Printer::stream(s, indent + " ", v.dq); + s << indent << "tau: "; + Printer::stream(s, indent + " ", v.tau); + s << indent << "Kp: "; + Printer::stream(s, indent + " ", v.Kp); + s << indent << "Kd: "; + Printer::stream(s, indent + " ", v.Kd); + s << indent << "reserve[]" << std::endl; + for (size_t i = 0; i < v.reserve.size(); ++i) + { + s << indent << " reserve[" << i << "]: "; + Printer::stream(s, indent + " ", v.reserve[i]); + } + } +}; + +} // namespace message_operations +} // namespace ros + +#endif // UNITREE_LEGGED_MSGS_MESSAGE_MOTORCMD_H diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/MotorState.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/MotorState.h new file mode 100644 index 0000000..788a7f7 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_msgs/MotorState.h @@ -0,0 +1,291 @@ +// Generated by gencpp from file unitree_legged_msgs/MotorState.msg +// DO NOT EDIT! + + +#ifndef UNITREE_LEGGED_MSGS_MESSAGE_MOTORSTATE_H +#define UNITREE_LEGGED_MSGS_MESSAGE_MOTORSTATE_H + + +#include +#include +#include + +#include +#include +#include +#include + + +namespace unitree_legged_msgs +{ +template +struct MotorState_ +{ + typedef MotorState_ Type; + + MotorState_() + : mode(0) + , q(0.0) + , dq(0.0) + , ddq(0.0) + , tauEst(0.0) + , q_raw(0.0) + , dq_raw(0.0) + , ddq_raw(0.0) + , temperature(0) + , reserve() { + reserve.assign(0); + } + MotorState_(const ContainerAllocator& _alloc) + : mode(0) + , q(0.0) + , dq(0.0) + , ddq(0.0) + , tauEst(0.0) + , q_raw(0.0) + , dq_raw(0.0) + , ddq_raw(0.0) + , temperature(0) + , reserve() { + (void)_alloc; + reserve.assign(0); + } + + + + typedef uint8_t _mode_type; + _mode_type mode; + + typedef float _q_type; + _q_type q; + + typedef float _dq_type; + _dq_type dq; + + typedef float _ddq_type; + _ddq_type ddq; + + typedef float _tauEst_type; + _tauEst_type tauEst; + + typedef float _q_raw_type; + _q_raw_type q_raw; + + typedef float _dq_raw_type; + _dq_raw_type dq_raw; + + typedef float _ddq_raw_type; + _ddq_raw_type ddq_raw; + + typedef int8_t _temperature_type; + _temperature_type temperature; + + typedef boost::array _reserve_type; + _reserve_type reserve; + + + + + + typedef boost::shared_ptr< ::unitree_legged_msgs::MotorState_ > Ptr; + typedef boost::shared_ptr< ::unitree_legged_msgs::MotorState_ const> ConstPtr; + +}; // struct MotorState_ + +typedef ::unitree_legged_msgs::MotorState_ > MotorState; + +typedef boost::shared_ptr< ::unitree_legged_msgs::MotorState > MotorStatePtr; +typedef boost::shared_ptr< ::unitree_legged_msgs::MotorState const> MotorStateConstPtr; + +// constants requiring out of line definition + + + +template +std::ostream& operator<<(std::ostream& s, const ::unitree_legged_msgs::MotorState_ & v) +{ +ros::message_operations::Printer< ::unitree_legged_msgs::MotorState_ >::stream(s, "", v); +return s; +} + + +template +bool operator==(const ::unitree_legged_msgs::MotorState_ & lhs, const ::unitree_legged_msgs::MotorState_ & rhs) +{ + return lhs.mode == rhs.mode && + lhs.q == rhs.q && + lhs.dq == rhs.dq && + lhs.ddq == rhs.ddq && + lhs.tauEst == rhs.tauEst && + lhs.q_raw == rhs.q_raw && + lhs.dq_raw == rhs.dq_raw && + lhs.ddq_raw == rhs.ddq_raw && + lhs.temperature == rhs.temperature && + lhs.reserve == rhs.reserve; +} + +template +bool operator!=(const ::unitree_legged_msgs::MotorState_ & lhs, const ::unitree_legged_msgs::MotorState_ & rhs) +{ + return !(lhs == rhs); +} + + +} // namespace unitree_legged_msgs + +namespace ros +{ +namespace message_traits +{ + + + + + +template +struct IsMessage< ::unitree_legged_msgs::MotorState_ > + : TrueType + { }; + +template +struct IsMessage< ::unitree_legged_msgs::MotorState_ const> + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::MotorState_ > + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::MotorState_ const> + : TrueType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::MotorState_ > + : FalseType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::MotorState_ const> + : FalseType + { }; + + +template +struct MD5Sum< ::unitree_legged_msgs::MotorState_ > +{ + static const char* value() + { + return "94c55ee3b7852be2bd437b20ce12a254"; + } + + static const char* value(const ::unitree_legged_msgs::MotorState_&) { return value(); } + static const uint64_t static_value1 = 0x94c55ee3b7852be2ULL; + static const uint64_t static_value2 = 0xbd437b20ce12a254ULL; +}; + +template +struct DataType< ::unitree_legged_msgs::MotorState_ > +{ + static const char* value() + { + return "unitree_legged_msgs/MotorState"; + } + + static const char* value(const ::unitree_legged_msgs::MotorState_&) { return value(); } +}; + +template +struct Definition< ::unitree_legged_msgs::MotorState_ > +{ + static const char* value() + { + return "uint8 mode # motor current mode \n" +"float32 q # motor current position(rad)\n" +"float32 dq # motor current speed(rad/s)\n" +"float32 ddq # motor current speed(rad/s)\n" +"float32 tauEst # current estimated output torque(N*m)\n" +"float32 q_raw # motor current position(rad)\n" +"float32 dq_raw # motor current speed(rad/s)\n" +"float32 ddq_raw # motor current speed(rad/s)\n" +"int8 temperature # motor temperature(slow conduction of temperature leads to lag)\n" +"uint32[2] reserve\n" +; + } + + static const char* value(const ::unitree_legged_msgs::MotorState_&) { return value(); } +}; + +} // namespace message_traits +} // namespace ros + +namespace ros +{ +namespace serialization +{ + + template struct Serializer< ::unitree_legged_msgs::MotorState_ > + { + template inline static void allInOne(Stream& stream, T m) + { + stream.next(m.mode); + stream.next(m.q); + stream.next(m.dq); + stream.next(m.ddq); + stream.next(m.tauEst); + stream.next(m.q_raw); + stream.next(m.dq_raw); + stream.next(m.ddq_raw); + stream.next(m.temperature); + stream.next(m.reserve); + } + + ROS_DECLARE_ALLINONE_SERIALIZER + }; // struct MotorState_ + +} // namespace serialization +} // namespace ros + +namespace ros +{ +namespace message_operations +{ + +template +struct Printer< ::unitree_legged_msgs::MotorState_ > +{ + template static void stream(Stream& s, const std::string& indent, const ::unitree_legged_msgs::MotorState_& v) + { + s << indent << "mode: "; + Printer::stream(s, indent + " ", v.mode); + s << indent << "q: "; + Printer::stream(s, indent + " ", v.q); + s << indent << "dq: "; + Printer::stream(s, indent + " ", v.dq); + s << indent << "ddq: "; + Printer::stream(s, indent + " ", v.ddq); + s << indent << "tauEst: "; + Printer::stream(s, indent + " ", v.tauEst); + s << indent << "q_raw: "; + Printer::stream(s, indent + " ", v.q_raw); + s << indent << "dq_raw: "; + Printer::stream(s, indent + " ", v.dq_raw); + s << indent << "ddq_raw: "; + Printer::stream(s, indent + " ", v.ddq_raw); + s << indent << "temperature: "; + Printer::stream(s, indent + " ", v.temperature); + s << indent << "reserve[]" << std::endl; + for (size_t i = 0; i < v.reserve.size(); ++i) + { + s << indent << " reserve[" << i << "]: "; + Printer::stream(s, indent + " ", v.reserve[i]); + } + } +}; + +} // namespace message_operations +} // namespace ros + +#endif // UNITREE_LEGGED_MSGS_MESSAGE_MOTORSTATE_H diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/a1_const.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/a1_const.h new file mode 100644 index 0000000..a588d04 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/a1_const.h @@ -0,0 +1,19 @@ +/************************************************************************ +Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +Use of this source code is governed by the MPL-2.0 license, see LICENSE. +************************************************************************/ + +#ifndef _UNITREE_LEGGED_A1_H_ +#define _UNITREE_LEGGED_A1_H_ + +namespace UNITREE_LEGGED_SDK +{ + constexpr double a1_Hip_max = 0.802; // unit:radian ( = 46 degree) + constexpr double a1_Hip_min = -0.802; // unit:radian ( = -46 degree) + constexpr double a1_Thigh_max = 4.19; // unit:radian ( = 240 degree) + constexpr double a1_Thigh_min = -1.05; // unit:radian ( = -60 degree) + constexpr double a1_Calf_max = -0.916; // unit:radian ( = -52.5 degree) + constexpr double a1_Calf_min = -2.7; // unit:radian ( = -154.5 degree) +} + +#endif diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/aliengo_const.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/aliengo_const.h new file mode 100644 index 0000000..362c78d --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/aliengo_const.h @@ -0,0 +1,19 @@ +/************************************************************************ +Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +Use of this source code is governed by the MPL-2.0 license, see LICENSE. +************************************************************************/ + +#ifndef _UNITREE_LEGGED_ALIENGO_H_ +#define _UNITREE_LEGGED_ALIENGO_H_ + +namespace UNITREE_LEGGED_SDK +{ + constexpr double aliengo_Hip_max = 1.047; // unit:radian ( = 60 degree) + constexpr double aliengo_Hip_min = -0.873; // unit:radian ( = -50 degree) + constexpr double aliengo_Thigh_max = 3.927; // unit:radian ( = 225 degree) + constexpr double aliengo_Thigh_min = -0.524; // unit:radian ( = -30 degree) + constexpr double aliengo_Calf_max = -0.611; // unit:radian ( = -35 degree) + constexpr double aliengo_Calf_min = -2.775; // unit:radian ( = -159 degree) +} + +#endif \ No newline at end of file diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/comm.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/comm.h new file mode 100644 index 0000000..6657731 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/comm.h @@ -0,0 +1,168 @@ +/************************************************************************ +Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +Use of this source code is governed by the MPL-2.0 license, see LICENSE. +************************************************************************/ + +#ifndef _UNITREE_LEGGED_COMM_H_ +#define _UNITREE_LEGGED_COMM_H_ + +#include +#include + +namespace UNITREE_LEGGED_SDK +{ + + constexpr int HIGHLEVEL = 0x00; + constexpr int LOWLEVEL = 0xff; + constexpr double PosStopF = (2.146E+9f); + constexpr double VelStopF = (16000.0f); + +#pragma pack(1) + + typedef struct + { + float x; + float y; + float z; + } Cartesian; + + typedef struct + { + std::array quaternion; // quaternion, normalized, (w,x,y,z) + std::array gyroscope; // angular velocity (unit: rad/s) + std::array accelerometer; // m/(s2) + std::array rpy; // euler angle(unit: rad) + int8_t temperature; + } IMU; // when under accelerated motion, the attitude of the robot calculated by IMU will drift. + + typedef struct + { + uint8_t r; + uint8_t g; + uint8_t b; + } LED; // foot led brightness: 0~255 + + typedef struct + { + uint8_t mode; // motor working mode + float q; // current angle (unit: radian) + float dq; // current velocity (unit: radian/second) + float ddq; // current acc (unit: radian/second*second) + float tauEst; // current estimated output torque (unit: N.m) + float q_raw; // current angle (unit: radian) + float dq_raw; // current velocity (unit: radian/second) + float ddq_raw; + int8_t temperature; // current temperature (temperature conduction is slow that leads to lag) + std::array reserve; + } MotorState; // motor feedback + + typedef struct + { + uint8_t mode; // desired working mode + float q; // desired angle (unit: radian) + float dq; // desired velocity (unit: radian/second) + float tau; // desired output torque (unit: N.m) + float Kp; // desired position stiffness (unit: N.m/rad ) + float Kd; // desired velocity stiffness (unit: N.m/(rad/s) ) + std::array reserve; + } MotorCmd; // motor control + + typedef struct + { + uint8_t levelFlag; // flag to distinguish high level or low level + uint16_t commVersion; + uint16_t robotID; + uint32_t SN; + uint8_t bandWidth; + IMU imu; + std::array motorState; + std::array footForce; // force sensors + std::array footForceEst; // force sensors + uint32_t tick; // reference real-time from motion controller (unit: us) + std::array wirelessRemote; // wireless commands + uint32_t reserve; + uint32_t crc; + } LowState; // low level feedback + + typedef struct + { + uint8_t levelFlag; + uint16_t commVersion; + uint16_t robotID; + uint32_t SN; + uint8_t bandWidth; + std::array motorCmd; + std::array led; + std::array wirelessRemote; + uint32_t reserve; + uint32_t crc; + } LowCmd; // low level control + + typedef struct + { + uint8_t levelFlag; + uint16_t commVersion; + uint16_t robotID; + uint32_t SN; + uint8_t bandWidth; + uint8_t mode; + IMU imu; + float forwardSpeed; + float sideSpeed; + float rotateSpeed; + float bodyHeight; + float updownSpeed; // speed of stand up or squat down + float forwardPosition; // front or rear displacement, an integrated number form kinematics function, usually drift + float sidePosition; // left or right displacement, an integrated number form kinematics function, usually drift + std::array footPosition2Body; // foot position relative to body + std::array footSpeed2Body; // foot speed relative to body + std::array footForce; + std::array footForceEst; + uint32_t tick; // reference real-time from motion controller (unit: us) + std::array wirelessRemote; + uint32_t reserve; + uint32_t crc; + } HighState; // high level feedback + + typedef struct + { + uint8_t levelFlag; + uint16_t commVersion; + uint16_t robotID; + uint32_t SN; + uint8_t bandWidth; + uint8_t mode; // 0:idle, default stand 1:forced stand 2:walk continuously + float forwardSpeed; // speed of move forward or backward, scale: -1~1 + float sideSpeed; // speed of move left or right, scale: -1~1 + float rotateSpeed; // speed of spin left or right, scale: -1~1 + float bodyHeight; // body height, scale: -1~1 + float footRaiseHeight; // foot up height while walking (unavailable now) + float yaw; // unit: radian, scale: -1~1 + float pitch; // unit: radian, scale: -1~1 + float roll; // unit: radian, scale: -1~1 + std::array led; + std::array wirelessRemote; + std::array AppRemote; + uint32_t reserve; + uint32_t crc; + } HighCmd; // high level control + +#pragma pack() + + typedef struct + { + unsigned long long TotalCount; // total loop count + unsigned long long SendCount; // total send count + unsigned long long RecvCount; // total receive count + unsigned long long SendError; // total send error + unsigned long long FlagError; // total flag error + unsigned long long RecvCRCError; // total reveive CRC error + unsigned long long RecvLoseError; // total lose package count + } UDPState; // UDP communication state + + constexpr int HIGH_CMD_LENGTH = (sizeof(HighCmd)); + constexpr int HIGH_STATE_LENGTH = (sizeof(HighState)); + +} + +#endif diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/lcm.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/lcm.h new file mode 100644 index 0000000..957b7e6 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/lcm.h @@ -0,0 +1,82 @@ +/************************************************************************ +Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +Use of this source code is governed by the MPL-2.0 license, see LICENSE. +************************************************************************/ + +#ifndef _UNITREE_LEGGED_LCM_H_ +#define _UNITREE_LEGGED_LCM_H_ + +#include "comm.h" +#include +#include + +namespace UNITREE_LEGGED_SDK +{ + + constexpr char highCmdChannel[] = "LCM_High_Cmd"; + constexpr char highStateChannel[] = "LCM_High_State"; + constexpr char lowCmdChannel[] = "LCM_Low_Cmd"; + constexpr char lowStateChannel[] = "LCM_Low_State"; + + template + class LCMHandler + { + public: + LCMHandler(){ + pthread_mutex_init(&countMut, NULL); + pthread_mutex_init(&recvMut, NULL); + } + + void onMsg(const lcm::ReceiveBuffer* rbuf, const std::string& channel){ + isrunning = true; + + pthread_mutex_lock(&countMut); + counter = 0; + pthread_mutex_unlock(&countMut); + + T *msg = NULL; + msg = (T *)(rbuf->data); + pthread_mutex_lock(&recvMut); + // sourceBuf = *msg; + memcpy(&sourceBuf, msg, sizeof(T)); + pthread_mutex_unlock(&recvMut); + } + + bool isrunning = false; + T sourceBuf = {0}; + pthread_mutex_t countMut; + pthread_mutex_t recvMut; + int counter = 0; + }; + + class LCM { + public: + LCM(uint8_t level); + ~LCM(); + void SubscribeCmd(); + void SubscribeState(); // remember to call this when change control level + int Send(HighCmd&); // lcm send cmd + int Send(LowCmd&); // lcm send cmd + int Send(HighState&); // lcm send state + int Send(LowState&); // lcm send state + int Recv(); // directly save in buffer + void Get(HighCmd&); + void Get(LowCmd&); + void Get(HighState&); + void Get(LowState&); + + LCMHandler highStateLCMHandler; + LCMHandler lowStateLCMHandler; + LCMHandler highCmdLCMHandler; + LCMHandler lowCmdLCMHandler; + private: + uint8_t levelFlag = HIGHLEVEL; // default: high level + lcm::LCM lcm; + lcm::Subscription* subLcm; + int lcmFd; + int LCM_PERIOD = 2000; //default 2ms + }; + +} + +#endif diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/lcm_server.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/lcm_server.h new file mode 100644 index 0000000..d9bd662 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/lcm_server.h @@ -0,0 +1,106 @@ +/************************************************************************ +Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +Use of this source code is governed by the MPL-2.0 license, see LICENSE. +************************************************************************/ + +#ifndef _UNITREE_LEGGED_LCM_SERVER_ +#define _UNITREE_LEGGED_LCM_SERVER_ + +#include "comm.h" +#include "unitree_legged_sdk/unitree_legged_sdk.h" + +namespace UNITREE_LEGGED_SDK +{ +// Low command Lcm Server +class Lcm_Server_Low +{ +public: + Lcm_Server_Low(LeggedType rname) : udp(LOWLEVEL), mylcm(LOWLEVEL){ + udp.InitCmdData(cmd); + } + void UDPRecv(){ + udp.Recv(); + } + void UDPSend(){ + udp.Send(); + } + void LCMRecv(); + void RobotControl(); + + UDP udp; + LCM mylcm; + LowCmd cmd = {0}; + LowState state = {0}; +}; +void Lcm_Server_Low::LCMRecv() +{ + if(mylcm.lowCmdLCMHandler.isrunning){ + pthread_mutex_lock(&mylcm.lowCmdLCMHandler.countMut); + mylcm.lowCmdLCMHandler.counter++; + if(mylcm.lowCmdLCMHandler.counter > 10){ + printf("Error! LCM Time out.\n"); + exit(-1); // can be commented out + } + pthread_mutex_unlock(&mylcm.lowCmdLCMHandler.countMut); + } + mylcm.Recv(); +} +void Lcm_Server_Low::RobotControl() +{ + udp.GetRecv(state); + mylcm.Send(state); + mylcm.Get(cmd); + udp.SetSend(cmd); +} + + + +// High command Lcm Server +class Lcm_Server_High +{ +public: + Lcm_Server_High(LeggedType rname): udp(HIGHLEVEL), mylcm(HIGHLEVEL){ + udp.InitCmdData(cmd); + } + void UDPRecv(){ + udp.Recv(); + } + void UDPSend(){ + udp.Send(); + } + void LCMRecv(); + void RobotControl(); + + UDP udp; + LCM mylcm; + HighCmd cmd = {0}; + HighState state = {0}; +}; + +void Lcm_Server_High::LCMRecv() +{ + if(mylcm.highCmdLCMHandler.isrunning){ + pthread_mutex_lock(&mylcm.highCmdLCMHandler.countMut); + mylcm.highCmdLCMHandler.counter++; + if(mylcm.highCmdLCMHandler.counter > 10){ + printf("Error! LCM Time out.\n"); + exit(-1); // can be commented out + } + pthread_mutex_unlock(&mylcm.highCmdLCMHandler.countMut); + } + mylcm.Recv(); +} + +void Lcm_Server_High::RobotControl() +{ + udp.GetRecv(state); + mylcm.Send(state); + mylcm.Get(cmd); + udp.SetSend(cmd); +} + + + + +} +#endif \ No newline at end of file diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/loop.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/loop.h new file mode 100644 index 0000000..c58d67b --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/loop.h @@ -0,0 +1,58 @@ +/************************************************************************ +Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +Use of this source code is governed by the MPL-2.0 license, see LICENSE. +************************************************************************/ + +#ifndef _UNITREE_LEGGED_LOOP_H_ +#define _UNITREE_LEGGED_LOOP_H_ + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace UNITREE_LEGGED_SDK +{ + +constexpr int THREAD_PRIORITY = 99; // real-time priority + +typedef boost::function Callback; + +class Loop { +public: + Loop(std::string name, float period, int bindCPU = -1):_name(name), _period(period), _bindCPU(bindCPU) {} + ~Loop(); + void start(); + void shutdown(); + virtual void functionCB() = 0; + +private: + void entryFunc(); + + std::string _name; + float _period; + int _bindCPU; + bool _bind_cpu_flag = false; + bool _isrunning = false; + std::thread _thread; +}; + +class LoopFunc : public Loop { +public: + LoopFunc(std::string name, float period, const Callback& _cb) + : Loop(name, period), _fp(_cb){} + LoopFunc(std::string name, float period, int bindCPU, const Callback& _cb) + : Loop(name, period, bindCPU), _fp(_cb){} + void functionCB() { (_fp)(); } +private: + boost::function _fp; +}; + + +} + +#endif diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/quadruped.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/quadruped.h new file mode 100644 index 0000000..0c23f62 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/quadruped.h @@ -0,0 +1,48 @@ +/************************************************************************ +Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +Use of this source code is governed by the MPL-2.0 license, see LICENSE. +************************************************************************/ + +#ifndef _UNITREE_LEGGED_QUADRUPED_H_ +#define _UNITREE_LEGGED_QUADRUPED_H_ + +namespace UNITREE_LEGGED_SDK +{ + +enum class LeggedType { + Aliengo, + A1 +}; + +enum class HighLevelType { + Basic, + Sport +}; + +void InitEnvironment(); // memory lock + +// definition of each leg and joint +constexpr int FR_ = 0; // leg index +constexpr int FL_ = 1; +constexpr int RR_ = 2; +constexpr int RL_ = 3; + +constexpr int FR_0 = 0; // joint index +constexpr int FR_1 = 1; +constexpr int FR_2 = 2; + +constexpr int FL_0 = 3; +constexpr int FL_1 = 4; +constexpr int FL_2 = 5; + +constexpr int RR_0 = 6; +constexpr int RR_1 = 7; +constexpr int RR_2 = 8; + +constexpr int RL_0 = 9; +constexpr int RL_1 = 10; +constexpr int RL_2 = 11; + +} + +#endif diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/safety.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/safety.h new file mode 100644 index 0000000..0013f61 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/safety.h @@ -0,0 +1,32 @@ +/************************************************************************ +Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +Use of this source code is governed by the MPL-2.0 license, see LICENSE. +************************************************************************/ + +#ifndef _UNITREE_LEGGED_SAFETY_H_ +#define _UNITREE_LEGGED_SAFETY_H_ + +#include "comm.h" +#include "quadruped.h" + +namespace UNITREE_LEGGED_SDK +{ + +class Safety{ +public: + Safety(LeggedType type); + ~Safety(); + void PositionLimit(LowCmd&); // only effect under Low Level control in Position mode + void PowerProtect(LowCmd&, LowState&, int); /* only effect under Low Level control, input factor: 1~10, + means 10%~100% power limit. If you are new, then use 1; if you are familiar, + then can try bigger number or even comment this function. */ + void PositionProtect(LowCmd&, LowState&, double limit = 0.087); // default limit is 5 degree +private: + int WattLimit, Wcount; // Watt. When limit to 100, you can triger it with 4 hands shaking. + double Hip_max, Hip_min, Thigh_max, Thigh_min, Calf_max, Calf_min; +}; + + +} + +#endif diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/udp.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/udp.h new file mode 100644 index 0000000..35d318c --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/udp.h @@ -0,0 +1,64 @@ +/************************************************************************ +Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +Use of this source code is governed by the MPL-2.0 license, see LICENSE. +************************************************************************/ + +#ifndef _UNITREE_LEGGED_UDP_H_ +#define _UNITREE_LEGGED_UDP_H_ + +#include "comm.h" +#include "unitree_legged_sdk/quadruped.h" +#include + +namespace UNITREE_LEGGED_SDK +{ + +constexpr int UDP_CLIENT_PORT = 8080; // local port +constexpr int UDP_SERVER_PORT = 8007; // target port +constexpr char UDP_SERVER_IP_BASIC[] = "192.168.123.10"; // target IP address +constexpr char UDP_SERVER_IP_SPORT[] = "192.168.123.161"; // target IP address + +// Notice: User defined data(like struct) should add crc(4Byte) at the end. +class UDP { +public: + UDP(uint8_t level, HighLevelType highControl = HighLevelType::Basic); // unitree dafault IP and Port + UDP(uint16_t localPort, const char* targetIP, uint16_t targetPort, int sendLength, int recvLength); + UDP(uint16_t localPort, uint16_t targetPort, int sendLength, int recvLength); // as server, client IP can change + ~UDP(); + void InitCmdData(HighCmd& cmd); + void InitCmdData(LowCmd& cmd); + void switchLevel(int level); + + int SetSend(HighCmd&); + int SetSend(LowCmd&); + int SetSend(char* cmd); + void GetRecv(HighState&); + void GetRecv(LowState&); + void GetRecv(char*); + int Send(); + int Recv(); // directly save in buffer + + UDPState udpState; + char* targetIP; + uint16_t targetPort; + char* localIP; + uint16_t localPort; +private: + void init(uint16_t localPort, const char* targetIP, uint16_t targetPort); + + uint8_t levelFlag = HIGHLEVEL; // default: high level + int sockFd; + bool connected; // udp only works when connected + int sendLength; + int recvLength; + char* recvTemp; + char* recvBuf; + char* sendBuf; + int lose_recv; + pthread_mutex_t sendMut; + pthread_mutex_t recvMut; +}; + +} + +#endif diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/unitree_legged_sdk.h b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/unitree_legged_sdk.h new file mode 100644 index 0000000..a93a6c1 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/include/unitree_legged_sdk/unitree_legged_sdk.h @@ -0,0 +1,19 @@ +/************************************************************************ +Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +Use of this source code is governed by the MPL-2.0 license, see LICENSE. +************************************************************************/ + +#ifndef _UNITREE_LEGGED_SDK_H_ +#define _UNITREE_LEGGED_SDK_H_ + +#include "comm.h" +#include "safety.h" +#include "udp.h" +#include "loop.h" +#include "lcm.h" +#include "quadruped.h" +#include + +#define UT UNITREE_LEGGED_SDK //short name + +#endif diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/lib/libunitree_legged_sdk_amd64.so b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/lib/libunitree_legged_sdk_amd64.so new file mode 100644 index 0000000000000000000000000000000000000000..eb0ada03af1bbace17035d933c91d0384c4b4ed7 GIT binary patch literal 458984 zcmeFa3tUvy7C(Ll1|1Zcu{80O$3nwL%BUDx7Rc+2qN4a9wE$rdidQfwW)EsWnI?+f zR`+)8dF^$xZr7-+Pz&sh*1g$N=;ch7qL$f{-*@f3&#)O7tDF6P_y75K_?)x$T6^ua z*Is+=wfEWQ4Cl(E)Z`$8LD7$3!Plv=yN7`qOTuNs=#n5i>15yZw4)t>LQLfWsoacB~y_pL{eSz#!+nY<# zp=b_k+W=$*<4l>mNcm{Mdk1Td9a=VJ-_}=74Su{}K>B~qqmoXXHk?#nADqjTEK{U& zcyiSvmZ4?2^~UO{xp5f{+54(zUT3VyN?W1S_6>5nHd^io3o`9#+catOw$p}(1#h#N zf(22^G=+1;k*YY9rxk9ALk~V z58|ZbA)F7hl%hNW_?SpP4){-;PvZO+PIAu%oKNF?2IsRlx8i&Or+#b`i5-A1;cOQ8 zPCy!_uL=AO0SUY*(k*~*;rutwcW}OoQ$F4U^1ei%;rSuXk8rl)`~>IcIKRM2$5%KH z;5>-)5YEFmO&6Q4u6uI8C1qzkY0pmn`;|u)EPmjDZzp_r#x;A-ZFdctaQ-=4=igcM z+`-CccjP|!-H}}fPru~*;KrFXTW0LLFl5r}&W5@};VYl)d+JZ4&YAo0+kZcF_+;xP zTTEBPT|VN#@M|B59=ran&5slgyJG53&d6u7(>Fy8c>l?MJHEX*dCsh_{$@J8Zt6*o z4jkV4?q~K7ot}ArpAzo5uQICl$?<30^4G5xR2y%5@5#RDvuEEmZ{_H5|33Oc#F-z? zeR}J}j^LeNSKo5?)q{6dJu-Xf=(08U4!q{AnxrT0exqT)B@;hg9rUAV*O9|3t8ZBO zTwFu`b$ie4e^JDanrSaq*wcm%`?4kR5w&LSUm9N6kz0D{Gp~0ne|_(>t6kelXDxo< zX#BnlONva@FEsYOeg1zAhF_7h>cAO?j_jHoVZG$sTIe5@y!`XzMIHBgo+zAt-|O!# zUb3Y5{b8HWzJBgkfBUF!zvp-MI&X5)b0?jA__~Q-O=)f$xNgOi*mp0<7`FS^BPIWQ z;BQg;V#7T<`wm)J`{|)Kzdc&@ZNi)1th{Q$l`B@h{_?@|3!7#`(NQ0X1(OEANFmXne^{3zioKhzJBwa)}k>tK0o1*RhlTF&Bsl^YU6Y)aEt68%q@5sGy_R7&~r+i#g`R@G4EsEyXZqd%^y>r2NgdX+oK!Q9_5M|-f^eEY5qQ$*p5-hJAivqt zGym`a{7C`m`vbK1)2N>H-xGlUGZ?vl5ACWC(5_T4_tY<659yhnKeT81`~dB`2*P`k zpB+F>_~4%T|AO|aJ+x~X`nMl}u7uNzboxZD zXZ!mq%h2WD!u$~Jx{34O%7HQ*Y*cTfSeyq5`u;Pyo>jEy#xalsWdrk1)LX*|QKG

8h+P!_;pNRCC=8DiOSW;D^mmBuX`Uo7a?py9;7 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

6{}j_MYVe=071|!7Bn5ek@?|ZvvKuC6IGPihz5w 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�{|?a4gyozjaSAQ8fd@<9Q2)^oR>cuW-bgyW2Y6GDx(K`(u+|Q4 zB&VMNl;8==*1eU=1=NeMt}PFv$qdc#M4~hMoTWAi&@2bmy;ZVs`gm5Ni9AaVUxwpu zaX}We9Wxu7HF#!c*lG>~ezL3@p)By6N2q8y3E@Lh++sA6$NmFrHh9)fvpK&2|HI+f z@ODqk7CV)yD7Bh6?7Zymh1mN%OD#ZH! zV2*RyZm(k#jgVJX+Qda5tt~^eIZ+{Vp0GIwfIsMR0#}7jwN}X1(Khilkof+y&WGeR zX&cX6yO2zr0(BYK&n~XZs~!gw-9mo(⪙0BZwFr!DS(wfg$Jo_W4T$-qGdgwp%z; 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 literal 0 HcmV?d00001 diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/lib/libunitree_legged_sdk_arm32.so b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/lib/libunitree_legged_sdk_arm32.so new file mode 100644 index 0000000000000000000000000000000000000000..40c5b0d626f7af92e23cb2df1f3fc051f198552a GIT binary patch literal 476408 zcmeEv349bq7I)2+o(Ta45+Fj*1_DF~FbM$zq7IO79|MVkh-N}EKp>Z4I7JyC9CApM zfT+04D!ZbhM#U8sWH14P3yO#?vZynOZL%m4S6y)z&G&!R-ILCcpsu*z_xpW@U-9aA z@71eUuU;KpJ-sY-+z6dc$J9Rqi({0sjbSW_;7tN!MrKN4A`?*7oyAglp<@SQYS@bm z3P#{lK(x_c#2*=>VB)ztULNxdV=>R@c-RJ_xE73sDdl>=+Gi=~c!&l=3RJGv5rwoG zVv$clEt@2{vyr^ykLaxklTog%|5H>*f#|`O!ze%l!pI3Xv(Cepwtpp~+mWL99eo$q zIZXL4?CH1?Wl#|l5yBCMc)Bx#!EUr}V4bS6&!>1|jBMQQOlf)Kx|Cw)aVImc*L#*T zYxG*Z`Lq<*_4%|vc8*R7z;y`9BW_ncLm05HK`y>{<+^SFU4A$G)IGLl% z-7WsTQ}1cZ%u&1ZmXCxUKv4g*%AAeN9JK&&juOuW%tI(ZC`7muVIG1TA@py) zlCcnQ5yE1GB}yKFWe6SwYSsz_`Xha-e`^rA7h#=}u@P_+!UIaW6mToTHiU8)w$HTd?Eg@5eYCQ6;uA@&Y9ojC++uw2^qv-JW5@28 zIIBl=pN}TIvaesgq4JyJEq`2bRi$V5*iJo)7I$HtGaqla?!AlVcfX#s-@Z5JzE5sk zHK<~~%h4(3i{mM~_Z}$EE?n~Ju^*=&`(%C0%$HtUc<;gQhSuD1z}MoTNgsUK>Yl6x zb)RjGxw*$zU%$J4^AmfVaU-S+fBW&d$7^569lZ0{hqp|b^5)-T%C4^ryQzQb{WNGT6P%Uve$FhnMz$dzpeW8`+jR?ykPEEp51xm ztR9gWMK7!$)n?B_or@Mf`M@VP=67ygl)dre;^Gs|yQS7IZ+RlUQ_L}O=1Z?uKd|)n zk`cNO%5vkUe)-_yK_hDJSoQqXJK1wdwK?B@{qCb5weSy1egBK^_P*j;Q}#$g-n9?B zzAP$nU%#(Lts1k-*6Z4-Q%1+#(5iOT+dn>cIK@3>hyI<4_p2B0KX7_Vr+W`ZY`blt zeRZ3Ue2-e{OK;xZCUR8y1E=?_)phEZ|MZaP15^L%9Miu%`;M`*dfb&%mAB~qkH(M5 zt9f(5Ui8nVnI~tM;-ddG?fADJ7EMa}uuIY6iVvK3x7+vChtjk!-%-q~5vUy@Ck@QP zBfFo6`@)}rwP#bzJj(xTOL^@Zr=y}8r@d_&r(YpQt^83@LrG5-5T?II7A<#LgcwBgnwj+e(%;d=C>t;Uy-K0RP?71{KX;t ze_sgwv{nuLsp$3){N7y~%Bj8I(|^hzMPH3nQ?kA*#K!6UA@x;j?1||6#5TrX6M~-@ zQvX~{dx^ehi2d%rx-q|}LiGKT*ton$h`w(Q>CdM^@J|>T)7OXa9~j=a{M`_HstA#< zIz;|?tsCe`6&iIh5$PL3^fe+x-a{e!>m5?AYhcg$9oJMq`iu`LS6mCvrLO23BJau& z`>8;EF{S7i;C5jx*&3u{vA!g;>cS$~Ul57FV#fhH?aErPyF0-rY`_{4<&0^?$=MmXj0(TrJwT5I2n{om zX9^NTDcADzzWeGGulUHPyD)|+9#q~Hf~=hZohtY@ppz;fuLo(8_ZIl0m{rh`QeFl8*lfm} zN_rIRvGl$MeS?TG=vVD89R!^Y`aMef>h+9Wgghi4$&(ky*cVvb-GVgf<0SMdrZWbW z^71{<{~}F)iQtnA{VY<-Tcf?7I^}g0wPy^*&rzX8R?O=m0@?V|RWQEpy|H1y8( ze--qp;THpYoH`aZq?GGPpEF>eO8qwUPbKWpr=-t|jqS4s@{99{#GMD8T}^$68~-( ze}3>&$KNW@8#kkmmGT+T#}L>P*#p_rSwO8lK4OHv(7)(%ZqHG$hZ0SHkBwz4K{I|H zLPdqM8~XQ6;BVL9zlQN$3VXVl^J~d!fuEEEds6g0J7j$1TnpP&);m_n_YnM%vlRBC z(09Xl_hGyzAx-`HG5Wa@?WZ)ge|`x4kFdY#FqU0P`CO!rLw`^+Z(m37Ptovy6#ZF= zG)#!w$m0gxje_KqRV=?g;q?@9Exc6@b)d~4Gh@E=6~rR;@q;E($M35=)g<>)h{sXezr z@oP2xwxSF&Z6&>B9V>6(C8eeZ={O^WxpmNS{6Z+4N{-ZRtry^v&cs|7c6@!n~zOP1l z1MGc>!fz4esnpcJ2lliG{pVE5pQrJ1XTx||8Pa|y{E;;S^AGey@;nLqNYeO+TOn`h z475R!_Z5s6yT<>l1OG~lSA#)r?^*%|wnbXAVfit@8d}5Bt{6KaXJkIa<;% z|D1yS7oZ>NZ)$%l;Ex-RF{7kU!=B2}KA1K7vpp*enUDU1f(vLbSn~GWNA|ZEHVnCm zUrG=7NAwTG;_|SJj9GaF`5E)vnMLl543;rEeSAi?tH?DgXP(WBpkQXOeY8L9L)Fk^g1(fs_>1?;!0BPB6}{Xn?| zN`Cq+zg6Q>f6GQCgf!~P_DhP5v(L_T@SYhkqo81(JK?$+nb{dL=jUg+b6}HMnYpBCRqN@eAjQm8~ z|3F=rZ_Y0>SEUDjd)XTg!%I8*zY+U4w9KDn|G!M;pVGjuHFb3~QC}t`W=t5{tSk7n zH4Wh7o_qHEg>&TDDa3CNPfVRWHVq36zGQIaXJ=&Px-#?U7i#@k^W%L+<~$eo>;IER zG{4Fiz!ywtX<<=LzI&$JRCNV20E-TJK_xF~Qq$ZCw)y!vcg}ZZ6uS8wp)3)oBq`f9 zGjo2f8_TX-m)kWuEdfgx2d!dQ;e7WzmgmZw=W??`nO6qlnKQA}BF~;*$XttZ+^9Xx zJqXLSJgmUnEaX-+|o zlGiM4!{pa23h&frOG75>U+E=e8|)7wyi(KR@C34Ind5I~nb#G$&|d`$X@K$Jg9TDS z7Oj6T(FD!g5^U?Q z^gT@}CLtqZL0;3Exl9{=?PRSO&Tq8wR+RQX;;v4oipwjUU*yVIkW=KIpP36wnK1Se z`$}3kJJZbvb$a@5>kXTnQTyMV;z*)7Jk<^V;byeeEy!Z?3bN*6s-KaQpUq}w<-2o( z6Lj8uw`&o`J0|;_e3v^TGdsJ8WfkP-W7mmBXS(1XGUn$m1Z756VPQsL5#RJRH9)9t z%z(3Lr`ms1&aBzvTnk*e>F_7iXU&R>Def1OB+AXp$@vM!TnRsc1zzr-KuP#X6uuCl z36ZI*nafG0t~#32VnV`bbja|$?37G*X6j@p^g7ZfGA^shOUVX~D_Ho`RPz?*xU=Nm zO3h*Oa$PQ3G&k8{1G0*;`X{D3=I}*$bMjx8=5nWD2_7Q4x+s)w4t6=0)}UF1i$kn& zem*a2Mg%gmMiu;2Be6uzF3iX+SeW$_`U`S(WHr}*KE8O<7O;6};brkAyRsI*6%+x? zEGo$35qXs5y9+WeM|#~zmzz^l-w&d`=SP>9?fphHSZgf2JV`>Lq7`f?+?OArLC($V zC1C(rY-&DyV?ll%b^>U39`z#p51Zw37v^NMd0Dev*|g2zk@>lqRBC!FumL$#(p(3uP}A;%$a-#*VH&sxFqy< z6wJ$^)4y>!dC(wr_)i(MN}A{>Sm-Kp6cxDPtQ%1hmj)AP)=R342BV_sHK4nOD|-K1X8qr=CK%FNG(WnhV& zpf!A)xT{_ATd-D6O0Ed&2EAWtp&N6)k}?OUmn$uDBgR)!Vs(sMX@RwTucW*hCr%xefD`$ag*!-C@ zT}3!D!H$}Cw2KxcBqSta-MFvT*(^6Bf%bLNT1;Tm~24ui|GH8XCF=PJB4B9W? z!68f~*OgDpkY8>_gK$PGAJ?Q#=Bs4b+n|gL`3NbuU=}QqKi;F`9aL~d8mAqnKi#@3 zRja1!e~wbGRJB^m|C#kRRa`hg_ZRSzY!{57U~zLxQqBb% z*vplx3zz1kxZFaL_$M{7l_E(C=g-K^nKzrwTv(KYGxm9IT(7{Ay6KHuV@B#|_<7hG zjsHA?2FtiCKHuTcJ}Q?E8>mUM`RcDZBAlCMPh5b@BRKVJ)>|hR{1gVU8IET|MVKv` zXG2eqE{j1L?T>w0$R_tP`VV6N9Q6m0f2Q_>_>Gm1bFu~U1pzu&N1ul-Xs!=QYYD0hGhB2yv4D5|{QPIArUAU*wbgs%*~ud z9f`;KSHzvF-Gep3m1L{+(#_f(*H4ntM>AaV9=_QJZwX1H1HOa5;#z31qbsZjjX|rN z)0(nP>e12770497dW#v_)pC7Tob45oHq?R?_55maFX4NIzEC9sp;Obh!B;N(~?2c+mT0qR6bZ!eshn-=!S6iXHEGiO}R{O)X*E)RHfVw zerxaFif%KrXO+BYUZ22TQPMKKK|^n1U6eACC-cICFpUUSuH@ax(-w9@Nx%2pT-;O- zV*w>y#LG?W3nlHo_5oaB*0cX0O@H(o1GwtULCQMo zx(iJ(j?z6nIL36$DFh2c97A!5<|UkM}_o7(?wt`Xr_Qig$$wp1?am z1pkb?<^=IR%SD2(L(znPFWy;DU^?{Q4rwc;@g76G0!Jxu5tSo9iqdnSA4&s8Q~DVC zli)b?AHi49KLpR9e+WJUe1dP|eLsSKU@V$ymU&K2A1o2+MY=Y&u?@tgf zJ-7*`;Z8omLdHAX5WEliC76Tv5eUwOy%GF7-WekJB<|i5 zbfBLJF2uVs1aY7LD8Y4jkA&b}=$GIsyf;H|Bl?@52l^(6_Z6Z^FMolZ6ZAqa1Yd(* z2;zN+ID$u@UxNFfCxQjg6TwGep9Ed7PlD@V{{+{-P6?@17x z0zDFZA9^Hs6nZ512=qwsIK~md3h0yIA?TCfa_E!bA2DtSPRDp6I0*VBcoXcE;NPH6 zf)B#}38uh)366k%3F7^dodie1-U&Vo&rzmh?J*@;31V7_B4~o12*NYP5S$M^5rn6R zC1`=32!=yX1Y1B)1S6m)g0Smkf-RvZf_Rt1P7v>4r4Y12PXt%P?g-*t6$imw*d4*P z&>O)>=#3!Wz9apg)2=pg)2=p+ACg&>z8TVXp*x!CndWhP@K(gLj7r z_J!RN><7CgXoKAnOn{#tSPA5gZ6RCU_m}m|!yOnBXq>4T2xS zzYrXZcgYA|kM|u34uL-*cmw{3Qc^UCcZ}#->r%7)Wo-I;-#AS22H$J6JM%{yEXA#O*~r@pRS3gYvSWH z@f1ybh$fz-iN|Z=v6^^{CLX1UM`+?kP5k0_8vSeHUufc=YT{=!@spbPQBAx;6W^za z@6p6}YvMaK@$H&;sV2Tb6ED`pmuli}O*~f<&(_4JYvSpe_&7~GMH3&Qi6?2|@tSz7 zCLW`SM`_{_nz&IDzxXeW{x$J0D2~4<+YTv8+#wlkoBVola}9n?sru^re!9==>(BaJ zI<^f%DW2_+;(>=>3}qd~8?5p5c$jjZn%aLm%NaR?j0gWkDK29IPd z59@G0@f_O58z4S^yk@!optUT}9KQ(gG9#pb-*)gD2ikE#xgnG7J;=xFZ$tH1;U5gP z2e?dFfQH8*&%k!nyjEZT`CAAvNb5vzHE)ktE?MD6_RYlmcHqAg{MRDB6yZ4ZKzb?! zzmntQtGYXnOZz76kc`$6)OSm@$+5`~chyl?QgUwA+#Tnb-5c=gc1Uk7dAW}C6?Rw8 zx;O9op{}G?hdKl56|JS9n^X-KdwMDGbT)5wtgQlhoBaRzvHtVi1n3!Z>8#%B?pEZB z8=>bdH4%Vj8xK`c&W%+Dwz<~8R@YjYx4Im3$p@j|E<2`~P3s3tuzTM6(sOa0M@af+;%Mmold zCnaVhyvfyZwqglWYR8h}8>%-HPI$i`X9rIW30^EksTzk%-jQWz;gNns z{c$$x|Fmi>T{;@krU+Xxbm9m=s_>_|?A`#`;!MQdGjyyJGMyg|UTAwP?2mZr(C0s( zTv&4Q+?eoB&c)roLz)#{R#&s+hdN8iCV$DC4t31o4SWC``(3a}*qFfzzT(Cz6ZCI& zZj_=CeBm$G2`$7rAM8_Da_pQ5VLoWOThZ6(BcdZ)Jue;$U!u5t7~9b6TC68ZMqsUkcm&x!`c%gvtIcAGRL++B%Wd~}fKTku z7IMX+p4iLutpRmV8>sKLIq@Dac#?mMzYNX4evoPUXlSz)+MlYghlVB&G}MNls_!a= zrj3U7n+%zj{2STURL2f!Dr6?VmJa#JPeia1$tz0kJ3)^6=kTe7_!puVvx*gz0*NeYq(izlEc~p0DGj+RBw;Od*n+vJGtXpbwkxsELuZpsIxDI})EH==G%JPaL%kvtU z_T7Qsynr6GIypZSec|*580>KoWLu=@C91FumxW{#>>hs#`Xq+>1bs9edDKUO=&9lJ z1$+zFKkutc`-$Y!_LE>+U30(EPxmVD{PO*^ViWSIeTE;6lnTLz^p>mWZ8p-Rw-`ll zzr=PzWuku0RbboB< z%KnY|tn#)?b)?FY4OvJAl7(a-pYuz{8~MJ_KKcmtQ{MXuBsqpa4((V|WpF|Ury>K5 zrC;jzsD5o`r!6YFiqD*sr} z$0R~Om`e?|t=zB1U_C+px{P>tMcpWmU|S@8;a049;h)7diof0p{|$es_-i{~%ank> zyvB{H{MI&vs5-gS?kVo~=8X$tLtcnv?R;AEdhWMd825rRF9&`Eq zX#2*hD21odN$bR0sx7>1EAJPzzRHn~ofH?1`ySR{BB`y*&A0XsN_{-QQhd!wK?warmz8?`yYs%bCeP}@s#l58eL zj}3KrtFe}osNPD$-*cFxmd`_jgmF5(!ZINBQ@*k|ZVOt_>g>0)Sdx{~Mez&Ja zHXGV^|F7DU8~sZ*@(|!35q_>cZ3b?rJsqFYggw!^1U_f26Z=;9touRdfzKpcT1q|> zzNfL@+0tkYLVidc$ErU#t~(S+0WFQg^SX)v`5hX6e0;#)#E`#19<4QLJwoGv#sHPO zQ2#81;+y3)EZIHzcJ9-i-T>LWh;pYLzMcHD9s64tsqC-WO**8z81iz19(KkXYf6t)nAQ$B>Xb= zkO(o>jS_>upfxA&Gx$yFGn_GCj@gKFp)EDE2c-Fj<_jZuoy0lCNt$zT?x1&WQRb`F z!Tp7Hz6!OMXz@{LJ7}YQ~y6e1m*-{`m%b zX6;--dv%(B>Xdl_k2-L^02=}g@tjKi3%C&QVT9(|73%A-H$VFY0?jdI=W2Nlau!Rg z!2@&8*?%IGrO9iW(D_Fl12)({t#9Hnw@t@bq%!~-i!_JQnSl*wD(aa5&CfQ>&&e2v zEgkaN0qylGP#>)^X}lTi7{A!-GwkoJ$frDtXCj`3;FyFnJUpAA{pIC)lt}yf z`vO+Tu_wwG(0NqeI2$R1j!V3OBGBq^&N7u1^Lp}?^mL>hnD^%(tw%YH11IuysCNwV z$Ua6PJ&t}V+~KX>`_6&S^jaqV5X!vA0x$TE1^R=|gmWLPpI(i~ zq_fPE68X`WmmToK;i%9+IooXgSq6peSZxuY(^TfGT5I-j>X z+lqeiRiLjXSEo}yVvNwbl=g;tag*PQJ#(@s&nI;5Fco%p5%tqpvBD0=A&<_84Wc)Y z3|fpkth@ZxWGC53k6;zjIGocSZ0)Iv1@5OP7nSyG1Rug(0ceNZBOzP~LNwy^JAIXa z)CQg3TW$6|Dvk5|qzM0`lEdeb7-T2^n=E>ybiYR$;qyt^$bVlW8*e}G%%CA$2lfPn ztG9Urgg;K9iGb{HhSC9loFZoy%BG@^#{o_U90TYC90f>yPd2|Dak6s^saI9qSQYv- zl&N`1Xp<3P1f8AQ4oW!B51gNfHaZ}aNav|E4|)UPWmu1Tz11g5(3c)>^@KtiR|h3e zR}Y>;EcY*QqW|C*!pja}eeS4k<9tIJfxOoC6;)jvtEyUf-;g3o-jG^)-jG@qz9Dt; zuc+!^dqavwxC)^oLTdyoLR-*w0*pcEjBqtVBtjHIJB0QKeypRxb4x$1G~_dB%5#L@%s&mGC15-s(`%bgDzsf{}HKYUf7D`cd; zD}p?;ovW(EWN$!>^#<0%uEhv%U?ZMQY!EA?`;aENpS^&-w!+r1UUOpK)E9J=KO2zx zwh(ol>Ayod(`|=D{Z3bL8P*HdcQNm8uF;9xrGL!9`Ly-0q!Vckb4C)Z zXC#yD4E9@Rr0O}JoMTBV1G?mu0sWAb0h8^p)Gf*z=oaS1~}D3)GrGJ688B0PaEp0!ma;X+-f zl6$LGFPX*9^-IonsJq8s|5+sH`+kbG3t)8F38@3OX7eE0^Lcyn*(BF`(@Pn$DoT+7H@_4WQi+Xr<7u38C$v&_)A_ zpt%OLT|n0re8P>OgX}FJ`&A6(kWZ{cfcj|j`gYKd82(S~tq8FA6@e~dxzyDNJB~((M*vMX z(8MBt8El^wJ}NzV(;EKV>4|IBRK4gpA9%t4RiMoNUZ7XsHC1}wacTWctE--8{|vn7 zC=cjin=jhS{d!-ybT9Jt_7liAe<{s?rJ2ETqadyJ2 zD7USUnE0slUfUDWN&N}wMB)kQ{jRVPj02{OgK3G70lK1b@F2!79|stNx1sLoT@OpQ zqx>Ekr;bOZ*>;R+j1v*#Mg;yH`onxpnF*W>w8aVhSH6?ydv#0?B3kg92S{U@pP9fn zViq0_=QIp(=`z|q+@V_)zXe{K>Uh(YZ4l;rSJvQPMh1DBJ{poW|E%Q&Dd^`1gj45x$L8Mjw0})_PVSbcc8z_z*4O z;Zrc_kc;Ns;rto6$4@#lIwGakTn{$~dI8ttfL}p79Nn- z!+~oBpD2{6?V~=UGc($cWMjUGQqH`n-avi*Y0{A@GwE$Uczu9%3$6EP-ACn5B9HKK z_32d|aK>RCFtV-EQpyKTGWZIpe*)6fHau59OV2jrHFD@N=g_m_c*yY)%A=L_!bs52 znsErAV-)TQAdJGs?0kH~^B|AIQ>Amt_S6P=)R)x$>1hA`Nb|nKy!qC5^=B_&p79iV zsu=LS!*Q+-T$;NLz$-P#`+lR1=7iFkba5+qY~^EM8OjNl?4O|xr!c25+aatAPePX` zB|XhONOw!3=eUP3c28n0cv5PGe1np21PnvI3HgFkE;Az?hOyd;&sm^{KMeB&)?&Jz7x6sf>Al?%Bt$}X^ZY$8X@u5!0)e7}Spx#zQ z2OrVe2UscBYel>b@*_bL1^l+4YsX}nBS6PM*H)qHW|nCpK@-IeVV!gc`;U`SH0auc z?kX$n8TApJ4s`8RI{0B~V+YVhTMuC^c1Y?3+!)Yx1YKtlx>e|CPVcDF!8Z|IC(y-+ zhpiffvyMWt_2457OYbjhF_g#7D4GX(g9L3ab{j(}chE~0)POms%{ozm~ugJy{JkaPp` zKkk1rVDw?!!JpE2y%Bj>-eUjcx&G4>9sd@`O<1!nuPXM7xU+H-_Hjc?K9+`gK9=m_ z$I@`;$I|kI<$g=-ioi3Sh2rrDQMRsEXBSAG$RYkflsvMlErx%>(A3z%j5Yk z*5YBH?SZ{Wk$B*0|E=w1Dj4kljIbsclDnlf329 zH1N{u`gY)VU4%M|<$CV`Z3bwa z$e#|}+dy->^JD1_zg&M9hmL!VZ~RkUw7(Qj21`NEO?4@sjU4@m~Bzq-ZH zGc`|DH}vo5@Z9MufzcLhW^-^~}m zez)Up`wnTh13^TA&&kwxY_3z)`GpDtE|wdGa3z%D;`9zUd9C9r2rv9i_kX2Rd`)a|a%Ni2h8zJ-Fv>Ro12vO5GQ}k=N$b zFX<>}OOBtTKDRIVrq25Buj=ee&QF*XF2|jSvn4*1Z>*xdzwxe;bNUt~=lI_0Lo_iPhDj${3tf3pI>zZ@I^{eZ~J5NZdjuX-Z?El93PDm+!?DbI=hJEq~ zl$o&CHdby3Oa#tI;DpuQ7nn!+M>hnFU)&d%i+nfoOU{PXS>H0&&GDa*ihMF1@tBYD zT;LOrJmB>h6I(~L#E0k~LfQSmc^GBZw@h{0d@`>RKk5Sg11MKzcm#Nxfmbo6td8ha z84dvFW#spm*1fJ`%*%Cj|C8i--F8Cq`H62>-Cuksq=TTRwWASy_X3~RkguTJg!x?< zn^bpbT3MYH`Y|SBpN~8V_#XkU$DAH@p8=0_cgA-@`V@Q*O+!84V*2mJCx)^1uTfn0PdYb@#q*Id30o5@FCu$ulc|so!$)^YNPw$3F#i-lYU8eOTnMyTLwJhy#RP5-$LLJ57Hg! zjQBr}GSVH%NqXA}oX0@_2xy5n>F(i!GN0`VpGS!g`2Ptws{V+cc$3}^Qa*Hd1o)&o zAL!o#4e5|{R|)<^|5w6;d~Yax%Yj2YNMEGCFR2_dlI~>r!s_ZkOS-Gcly!F=v_|mw z?BEHh7WiKUPDuagBHI<$9qKWm?KDQn?)32+6nlKRj%?0~wHWEci04Xcpc85@>4SV? z&Dgz=w~X5X$!)kkmiObE*YDwe63eqL8;Wsd$G95CPDsN=j1lN-#9UjQ zdKP4Vq>SrASKBlH2z%J|AoZ{fOJ1ud_oZhm?FKdf(fOvxgUb?@KS(-k0{U z_obJt?{mIka|dz0w5})pYWaDdOFg1xHk9t%FFmg7F>Q#;PxxqinvvuBfEXUAMo z=&deJDE6DthLt$)r9A}k9_oKj8s>XXvRmJihO_sux5wEcY>xJdG$!A~m^^%&tWzWE z3nLv+eM%nIN~gnNd;A$U<{7dz^IdD|I`mHaLLghfI!K2*-Vs!9o0b0Mww1hIs{fbP z9UfA*S*iOAtPQAsvOjJ8HUCuV=XZyuR2y(cy`Rn-@hl9lrgaQkzyAwbE0rm03p^~~ z@;(b&^eTC0kVkez?bwR^4NCq8$R~TC{JW9ANXb90!FM5_o)ywMFx++oW9bOS(h-cM zBN$6ZFqV#BEFHmEI)bru1Y_w4#?ldtr6YVS?I(G#&Uyhbx=%{_f4W#OZzm0(jYG5& zygQeS5QA_L@6(+@IEA2`<s!0;Q+jUkJb0Nfz9^nFbd@x;^{T3+ zBs0<@5nqgW^3czuGq|Hbc{;3bb|UW+tYawsY04_8P{EgwHz9vjRW8z-pa%WG+QGuH2M9cX z{JU?Y=ciMu&m^xx-}nvtk`I}%FUPiE3Vl|!bKLX*gnLVs3H~&^BKdvTNE+6FEc`AFZ`@VrNcRsKB78j4P3jCYMOG&eYq6`*|I9zK%RSd=kbObI#)02p>J)r+o=@0UNYhH`YdpumSjj7T`^N-b(Za=y^EVQr%aw z-i?ahTcJLzkE^4Vy&kq5KshP3MxPkXD$Ms3jR5VS*W7ur)})3oc~zzuCz zCGw6V?8e1{Xtay$gxaAjGT?1N;XyH3<6jN0eKc`N#e+UBd>F7dN3c1N|qcGtFY zc&p27M*|*e8}!TDgl7cp(N}7l!qBExXp?S;+*d1k8ya-|I8V!cMYclk)M?wK?W;q; z4QkyT;TmgyZ{Qn|-Vs?I2y3&h zhVHnXi7u7&W!q}}$Y&+q>L_}SV_lE8+n~O%Hd|`;0yhHwS;z2f z(gt1$t7`PlZ8hP*Wn~-jT)-Q!h=`Z0mW&94Kxe_2#n1}(6k@)|^CvX-tmCKOJWSwuEy~Cb(R~1FD}N@0^ClYagCLtc-nZ2Vkdemw0N~S|FY@Pf z|JWaoZw*7Yb_5SX90e?*N#8UUZk^z%qB)oR7>$FS=j%V8aP=zwjLw2{RGJ^VfhYHK z_WiZfzp6h=bn8Oswt{Y&Le~;>5ztdR4c!FL(O4wfkrU--L~6ZjK&!LLb<(^qXz1)p zeUalmRS{SRsWc?(Vv_Y5g-)sS0`gQ@6F^J0#oxoTdjr$c@U9Z>IMA~|x<6?s#2rT4 z-?$IPnylkK`1yMHMM~pm!D@uciCv#rbaXr!ZDgyVn@Is9 zYQrpdFpTO4E#@LQY)XpJF8>_y={Tb9X8$4#i-~2aiT-8h)u_kM_ zjaP%_q7`@6nB2w~rH!?aC$xRtTH^gk_ynW4v8o#7G`=e_{wqN{1p24@v*ZUzN8|&N z!23zyXzAVu-A?3{fUdL|x*niA37lNuxPfzH6TCYECkZ&zXKH`J!GHcW0^M8R&`ZaL zz_)yZ-`JQ9=tf9Jh(&sL6n;Mf2gYzo{QK@UKs(ZvC?kI~3eZY;$WzB`I>v1J<;H9! zjoInSn4Mnjg3d$rrya8|p#0a4+4s=a=Em$pN?EgGR*{#+tOsL?#w@KPX#O_)(g!xw;s{(trw#@c6?h;|FmNbmj z@9LTutM*^!j~;HOotGP{{Xuh4l*cOhm>BB{?vH+eJfUsWj=2jc|EaM$8oYO5+-T{} zg6?tTU2d#i54xWktBJrF7&2BF^2`V{R!{ZNF}!NX>}Y%;jX#7Egr)dB9U~6Z9DpLy zNeFoC%Sv%z9|K$(tJ_hQjldA-8HF}jF~>8zH-Jm+d@i36CCL0u z;6GBsf2f8(t&0w7`2V}^QrVaGZ{VG%@ZPP+UWc@#;oVEan`D1V!@C;1`MQbT8}dx5 zI_2~QY*;Uavy$5Lna2X66VDi}@_QomdjyH_5ws@JqmTXoKGB66t6F2tN;W|IKOFn4 z!>*;eJ=R!EJSBx;Z6Lybkxz@UV~;47*U-CzX53As_xQ`%3V*ryK!*t1mUajx)CC{; zKnFpT*FDji^M`S$&xXAsJ!67pR)e<==e6Oqe!}|eEY(53n;{^*1-M46-9@bZqal|O z{OB(IT*|jUDn+C0LyQaczEcNki>9swqz56?Vs*%$#r;CvOd)>%L*1BA-_O;}1mHHM zn^?+kLN~|HHP+2pr2mO<6qoe>8{Js{$GUkPvi@A%2+io`Bk*WSH}@i6Yd4Q0{WL95Et)Yk9qDX@QUSWb-d}I`20X@+TK-%BFGvSL4u4a4c|o!*3lKtfO@8l0c2JxEu+GCSn3Q|7R*gXGV_!&kl2b$;g z>pzExuSlq0@J-0zzv!)g!8{{5V|4z4g1PwMQJQ;zdwyZAYxJ1$muWM7z1P8iZJqyg zHsc@o6Ws-(E3eSKSma;3A3Rw7yeQgrTPl6j{&tbRJt}seC+5r(Gjr*Sp^HU)_C6n9 zMCprJ0eBn%!WFr17xOdoT-k$x9xvj1?>Pk&&yLHRcWt~#xF8fW-C|bZe99L&JrW{* z!oARyl`}KPmCbmygGGD@PE@}tEY8Ho?OoY@*=T%Xsnn0=iTMTY*&#Be=4Wdp zqRJ8mCH74inA|rZu|Hr!*gOl6zSWB!K&4=Vfdb*n3bD@FO`Wog*^%jiY~<& zE`J44r4^wYd>ld??HJsB9&fYKM*cxXaYV+*)btVKRBX~yNO@XlIX+}3(r43hGIMj5 zKrx~NVkj!*-%b=q;Fs-1&IZ?&+3;L^DlC7N2s%p2{JV&h?V?O^grZ=zY_O=dL20Vm z1H_BBUHQ_ZE1THx9Hn`R?Bk$A5kKi)P_($AWlEU?-!y?CiTI+M$Uo^O78c~@WHlhl zA7~RN7tAPdi}anghNdv|swjWXt*@#l{xvgE`2-n0h{oGEVzP)H#rs|3WH?z#Pgc^o zu32P*u$o!3p}LvWF-l%mX6{TitDz40V{477!3QJep}xTheQkZ=r&*J~Ij`pb>K|Kg z^po>)UB8-V;~#LpGG9Rm`Hl4}*8b2RLdU!7!^daPHx4uKH3(G0)A)WNPX^1l-)tyT zl1%$;r@@2i+dBpM_+rcaEVr0HKR1^ginsvdix{gmJ$yWO3OV@hVbG{iPvfyD%K^lB z?#%ow7iUDSBsf^b(X;R=3>uFxv|RGR$_H8Eu7wd2zh6QtfBA%y{$g6qr!)Smx`UtE zkgI3GuTO|s5G&u6i&2EBz#)HcMw=PVil3=pR#x^DtFPDLH>Dfmxth3>$9Hp_bWQ#! zO?-$3$EL}T)x@JU@d%1PttX!Gu}19ujk}EOxX!rK$iC1S&luPqy>TCM^hU3dRTzvL zjBKqDcqex^&{>f#G;T+^&bZCU{5s=t1KXuHmLW%PEH$#d2BXKwE*gNho#>wGM)g@! zrsLVa&bXV9y*N|wP+8e7-aa?QpD}a1Jvy9pmFbOp^vtIRkEtAw>ml4>ET$jZLoUuS zcs|!5enKpl&Bj?pye4mmaS?MPFPie6=Dhpv(HZxkNnF^SdJ?l%Pt7hi7%Poz4~cx# zVBD=pkNXNwgZ4?TuZTDiPdklHmJ6f`%2#Ax{(^2f;&@{iXPKIOFU5Dapf;oFyp93Y<4ElUQB_$Tqvd)U`9 zK1BTe?{^LSu7Te*@Vf?n*TC-@_+10PYv6Yc{H}rjk2T;Ji|^8mp|6?Af1!|ao66HG z_(2FH6_1L7`3jx^KN6-bSF(Q-fct;-TE@5s%2E*c=2u$~5)Y-r@0QhTLkN1aNwu9S zB*dQ+Z%a8 z*3G{yhgV1#&I9O2TKG5SNRO2M_Q(1Hx_@RuJR0}Ua3_Gp;XgXx7JAVa_;BY80ng@e z#)NNq0Yu|JpfX&6;oqh^j*g+Y-_97Wrm^!t#x*sruOI8{3;cLH72Qxkb>My10`W%1 z{tZa=|J=V?d`C?E`v&d%J;*vxb@Klb+>LKpRcyoW0uCQOSd5#TIj?X=PG-KC+_!&U zTc3fwiwbiRu9Z`4XgmbZbY;%SVY;q}ng+74Ftg603)iA(fdp3H{| zi@;?*2P&984ZpF8eB*6$dE9h7>p_0$9XS6*zWPUFNYAp~Q{}N{;2e+!fbu7oAHofO z+0rlEi7`O~O8MIfsArFDR?FGl_-rQ~xr8Ei}HYtI2_IuS3$+xzM1d zHT{f6KQ7LjY=t52Lub8x$ScuWwJDFZ3V@DQ@?kgEvZc#ml#J$yA(jhoATfsP z!)}=X>+3MS?PBOA#nSr}5))d}uoz)^$AZMf$T{FP(lXtT#H7|skQimTNDOXm`3`j8 zuspUAiQ77?LdjIi3)_*HepLw)(=CnzNZiiFaaz)0y&dkb%mM3c%Yw&{$O!L)#B9r! z6-YR_Y`K<4NFg)EYz2ctX7-^Qq6OY1uj$reWOeA>s^i&v$-Hg_hG3-5;)XziaYLY7 z2NE53KrX@Pq3CmvN-(ZRl;i$c#qEjQHsBCOIp!B&GgqazC6ftz9vKOrZAHett=>jl zFp?!CoS%oBbv!5GjeNw{%W=OCwRDUiD^0~?EoQ{3WuJ~E7@(n!ojP71+D{1QYL1hj zr~GSp{(c?4w9Rf}9Wkz7*F6}{SQn#i=tmeyeOK&2>n-D3{1u7FcUF_Zt#9=aSPz>X zhnm_`mgRo^ovj!fk5RY;CF>CMl+Y2Lu5wlouT*~mvmO;ahLRT=<4r|2vpm}#|7{B= zN_M~QZE!D(k)7os905>pc&CHyeTI-qmH)-0~8J0hXOLa*L3Y6~(RiJC~&TW-W)v}|uns79ae zEb`0)bj8SfLij62;7sJ-iJ*tymD|b&l%%8hX<__3_^Emnl?02q2<2v1 z6hBKSi@|}lPsbRyyePbRw_JJ{C3yNJ^Jl#lv_a|Z1MVmBWz_w`PK9vIb#t5>IT#5mo{0+r_70zK*&VzD0!#N=Q&;(Mi=ipZ@Q@XV_L#8mo zFz@*QIgaSJp~CoAx+5N`6K=l&77MYHfHoL`D@rNupc9_RLocE@4Mn$7G1o$TyX!&S zTPIwAaZ-DWP_#lV<_*!&cxEHspdW-57~zWz6`(+kttbPAD2BvpfXM z_bh@a{I8@;H#CG{b$1Yf$LK%SYcX7h<&Km(GFTaV zkxtkN-}-bAo5$!s*6XDSz;>DkUW->nnwK+%UmY~BX?kIC$o>x5+m*pUShsO_>g zJM|>zuv#Zjxb<4v~1Q1cl{BI1C$L$kjKbY^fnuD2MvO)I-#Nu zV-r!96D;Q{2=<$-&JnLH2l~T0;ScDWdw_c1rRdDmb_9@i>VzYxllzQaz1b=_h5eDNNq7(dm=P6QC0?b z&NBMDIw9{q1$`(`Z)pOZ>rO@w=!7u~6!b!%u4@KeEB4nqVZ~O3W+(7p3DWSM<4V;? zq}K~);edDp-UBM$KUW&S(KVQD^uopn1@i}BwMC-A<8h~m@O*k@j$&Uh`yaV zUv6NsUhqXKNRxn&8AOV*!Im_&577%r0~O4>fVDn|Nxh-PwCe?<+M+)J>!lzjRjgpP zAu}n_3vE!%9EhWP2Uw?7OnLS*<@E*9Hofo}`rt95{RRm2Dw0k%1CDe+FGOCeAYIiG zFYF=6y5X)u=Jb|c7#pV`-3WxyK_oudWu!BD;nQ*jDGLbsK_ppiyt+;X;Rl!|muW2! zHV2VNZOru6bO=7!AarDsI_izkl?@>ATymz?rvzcX#L2zN} z=Fa9E%DxWL%jJ^|!sGoF`j(I;5<#Z#btieH8Mded=*&c$I?HVaVJTcG;phhAKRY3l z(Xn202|07XRSn451|e*ujH8(fwvcr?l%GYH9TxV+v?>gf6XB5Ujjuxj{Fy?jE`>4j$4|HRcR2;JO!*Hz&P0m zi`ndRbj>dvC@yo$g~e)vI4z##O)EF$x?;uH`;Zh|eL1m)iwgv^DY?ScFR zDhrB$cWlQ3q23_$LC5PxqHw&5z)aEDJy-;zuy>t2@9JiuERV{0|M&XgZIs`3-Agpz znYLyl(cUQh6-p%>T`B(Cp(4w(MlZuVK$@2LWCKM{qcC%_jHo*d?01QxLB2aO-OMt? zDE#n&!u2f5zirHw<4iINsmByPt)Qr@5Hx&Di4#$CrcrnwgPx?)^#{Tr6^Y5^xkllY z<4Q$oD7%%)Wn0gM8@DVp3Wrr;=b>zI13fQaVH7Gbig@!kqwJvu`X?U%eF^Hveu}$_ z7g6@QO0T#tj`WaG=!n*Gq*FkkAHbGdBD*h+^q5h2=}!vM4?r-tRgq-(#gU#f3P)lU zq^>~d6GW0dlkZW;bjT>Y2;K1NMgn1S5J`5a9O(n2&}X%RlnaFAjgU0U3=>DMG71X^ zD(H^@_30pbaN1)s=9fm{gNGH&L%=%T2vb2~CgJ>11?emh{vAYW7)CO?aFcLTCj~PK zbJ;ZrvhH|`ZL_EsQ%%Bu$N&eR&>lpP^%j-}gmjZ|HI}w-w~+`y6UG6@+EDM&kk@JbMgPn2AI`j447`g)-6R?y!AYIP7@qc@KEh)MXc zy@L4zu*^|vLuDi3NV`pf4XWZIb_GIW5J{sqj#+6ErfpX+#{p|f5L31k-9WgYA521Y zfief(353-_BtC65@U(ICv0=h9If5r z_Nw(%0q>tdD$bw&Q!uX*gqRZw{|MMc2LxF+#9u**7liL#R*({aFtibpj$_(dqlYaw z3Bob>2Hg~3+^%9V(@IofnJNgMbx>Nq5M>+G@&@HA-i)K?3&I7sRIbuL1NBfd=nd3L zJ!=GESgAtz35dRLf>6_cyfUvKe0`Tf6A2;d=V3G^!nG!k501W95Tr>8`Y@nQZvtJ@ zlbq%)L3sOGg=PWp*9U2MPxAj{qvhxy3&Lrag8nC<9%uqRv=!e7Lc5g;&4<9RYlcQq zl*KH#umIv3Hb*no6``T;dAG{Sl|396YnWO1VZ1^!1o*c!LDR7LlskUBStwSOTL}Dh zP0;YBXf!<4EZp2xsb?qfUvGk@VFNAKlVujZ$AXHt=M?b&*#r%DIP{;QgQezn#!7`I z;wqfxA;>xiV(PfliU0OZ*zh54mIz=)R*Mwz{#d|!8z zx3LJ{zaXD6>87E~*-)O?6Xjhj!mDt8T&^W3+oYB^oVRfOVO2%w{VYNZ)+!wRNua(G zL=R4a3g$$MFzHwDMdDmeRzRq*9Q~X{c&@X8 z-Up~RT#C+298(uAOzW>;P65`eAf`sxYAnYr)^OpRYPQRPb$<|3BP_@4A1=IewZijh zVEKZWp~73H@PXK5o!`b?}T0= zHT2#Iy%zLA zdFITSveR~U?hRq5O$@#Q(Dna>t2jY!3p+pJv6Cv>1Jn^8S*BziC>g&m>|7hm)*C>5 z<|E4}E66ip=N&eGOa*itinu(?zc&Mcp9?#8wf5jm0PXlsI40Xv;pecEc)y1n3Dku? zvW&8KVC4}Xa-B4&&^`_-tOROuhkYco<$>nAPOB9j z=rsU7_d&imZ+;;%*SgNqdLBH8eS~T-rU1@|n-0B9_!#o6QR25`_ zhB7-VmEEl>{c0-TQ8j_js<7A{Hj-|MyGGnA-NmCAzRKM!?ke|TaaX%9io3==C+@ZG zAL3r`Rv%6L4Q@wqZ*qr=d$T)F+>P!!ac^;-7WY>7BXPI5@nab8PPd}Cce%C2-R8Cx z_imSaLRN+C?qYH8ac>iMr@LR=UGD$H{W|>#(ffz=OVHS?3O}a*BJ`ir)5bFVOZs$i ze@(9=?r-Tm#Qi;e1>A09#$KW-_OhU}l zojL+LCc09K$XlTIO+e*VYE}0L_CZ6L7*{K`uFKa<>A$}Yf7|4H@DObQ?n#*AFoCDR zR0*R7%#^oL6-JGkD;_inCX;$GN{q5w=KLSBH>Zf~m6$aDj!0F2&4&p*|L?N33cgR- z$&VS?HLN7%wsl-)BFUZ)#k zmQv~3_yntR1NSo&pH;b``;)khT#F5~a$`3tZh<>@Ji|@hrQ$Yo*NEHP-6(ELH(lIT zZjQLE-Fo7-aa)Sp&izu{Lie<|?cHK&!;%*bS$lWV$SNBnI zySc~3?csJ7x2M}r++OZTaeKQ{#qI0S$j^0jB)%Hn zwq7`AhRRLURev21>WzB*gbP(}vI#20X;dG}7}2iZg?OBNQTd%0dQy5r%8k0L7{;4c zR*>!&lOiHxg0#xNILVW8?LTxmUqY!KPw3M4sYf0}{Jb9F1BkwmfxI5IT?|+8CCOIr;sQj^2qg9FUokuT({t00UYe1&`o~%^w))dONm(!D<#`tAeYSf-@*ma;s9^ zLG9~v(s@WBe@H@4s6-)Cz`2Orxe%*TB+=21y4NJCSAw<1k8Iduoopm1YTOOh-WXe7 zUMgaO)BjQr^Bnl6eau(Y{bZ&%BX)b3ufYG+$1D{&d>4~H*Qtn6bR`Hn6)`Kpm;x|q z3FcC#cNY)S4E**!#>m++7jl+3_qR0}*2BS{7{i!%QC+wU%U|wn*ot&61MkWhUo&a7 zUjJDRfa{X_6?z-zTL9QbkQCdDCsu%cv%|lMS%V1r5uc@k@1Ufu{H{r7K!c}6c@j40 z3{*{ir_e)~9uPc z0Mpe$4A2L39Q;T1p3XoNm)`}4G2~ca)i2Al?+$fEwN(A8!l&@pdjL&KN2a^40Mv5F z0FZRb3pZ#LS>}8&5VJW-zY4r-VFC;(!@k0)j|Gabw}bUSjBVcj&DeS~PK{mTZ0qF} z_^}w@JN6RfbjYev=$?g0tHw3%32|4upNYH14NNBeTDP*e*SUq_Uhj?&cda{L+;#2^ z;@;ry5%)&-gt#}kynWKDvEKbo+zoDdbZ}OUo83ZjH@d~*-r`;*?k4vxaW}g>u4dKP z;=U#B?e1^l-r;88L9uFVb(@QOw>wna9qwXrcez`{z0W-)?r!&txO?1R#NF$bo5uJL zxb?+-(CsGfK6iq+``r?8A9A;ed%!&;?!)ez;vRH=7xxjj!gR_xtx-uQvXqhsg+=@dQ;M(Q8e zFwiA(4+2kVb~iP*_%Wd`8LhFt0(cGZ_RGpNaWd%`QzBGoVuAE(0H!J?;ZBHV7PH9|Wjs6FyJ{u@XNXS{am zEij-dK1h;dk*I83d7)}e$AJ^5OUiPBq7bPny?Yf{nY!wy2n0#bev6cgwe!#c1KdNf zly>%;SAsQHJ1^vzvU@2e#|V2`Pq=8Js&%P$j$i^L!XAABF&1ejr=ubK8H=I(1*NiT z7r1Fq#;V=a9gazbRlAuxmu{W0F3(h2b;h|oZE4k+;I0(acjC@>!9gbXs1Ygk3+_l&V@X<`#q?pa~1L3c< zleihL-9bJ^Rsl3p**lJc^|N-qy2~i~zR#+}C1m&tU6IdcC7zKCU!$vY6Qa`4M-bSi zt1$=3{zgK*rI;p$>ehFo4bgCTMy+ns^2F=-&u>DYWlB|)l{qb1w;)s6c)a@tIIU7! zfn%rl!Gln@ZSq&0aDWrq%>Z#BOn?DRpC-A;N8^*ofYtbH7Rs;jeT%W5 zr0U&<36`zf##d>ItZLjpW$T`t~07L3o zM$`kHU!jAre~Ph05^5pZ2a&pEzla>@_&e6ap5)#GklLuJfu0rj-2K>XplID33ATj^ zFsM>`<$-urTzj-f44!!Z2iDja+f2u9F+#45+gZgEaybAiVj%sZ2$F=Zk854a!)yV6 zr;mA+m|J9c)HfvTMjgLFZJq+)qz^KJIE3n(5)MA(VLk!>dmkf$WHzpEi#vpz`FR-_cgBr=(wmIe1-~&d?~>hR+a$2>j_Zs{(nTQmibYplzI+C>9dS+2 zcJw%qr}(Ut`4(vR#uaWut487KrC_ZjTZE?E*BrD5;@0EwWu@xd!MfXzeOw<|3F3jc z-Gh~4JJJPN?O`8_TZ-rM1>pV{!)p5UP3TWlty*kfMYXD-{pjbkg{M5B2@j3a_X^$! z{ek=hK?%@<`9xYd%&hfCiCaO7eO#auvRm0GP!Mp$_(Df#A!jg3zX8As1ThpH~>+y%?;SvW`s(zO6?gfaYu6rB7! zGAN1Ps?XevGfMhU;-|>k;sQ*D=usCPbWs1ju-XFtCB%M{5*X04C_(sf&l>(W;Qj9N z=aC=(-T*)!O<lxlPJ>de5kg82Ko0aUX7Ys2xCQ>X&XY^MM=RRY6YobP#Y8ku zL1}CiWN%e(M`e^yXp8$T8mY94(6*{`S+6Niq4-0uIsK50vvZKn5Qv%#6Oa&n`rASP z-482SL)~zChuIhHK|nj7@(~_rstbWegUw#~-boZDY}Q%mx2{;Jr`2XjII- zh0u7N)EKqMePsOycoyV)8m~sn2u;&Yn`xd#6~W6TU*tD9hg3ofv@?piZ2@}67*Df; z%}eIcGVT0S2*5BfC-?vsqqS&lM$lfsZtpiXs)GE>g z?XlexeIT)Ia>aDKJem!9MG$jg0t}hHFVx-n5Ce2GP}`I9EpgIo`bnrD6VE>gwytz< zT!arurFJc~s&rpm8d-v*N7Z|KC?BZ#?yXoLrN%F(E|^O#%X^AHb_vmS|3NOlQ01WRf_Phb>?6yiY+5nS^1D z)lS7hCXGMIYDQL_&tV70>*P-`7Po;vqct{xVFC=OnZll|lZRh!*iFH@AjURDxkU?T zrcNHV*nsp1ASU^!G6`LxogeQspc3$}@i9fB3?KjCcI`Yf8NDtjTfx8I#~3++xgQ^$ ztTmWp;Ggm_BB#NBrB6{=vHvq%ZSJMoF6!S}+PJsZXJm*};b+&*4#R&yrFtNmrJUeAIa($)q`) zlINAC`Ly%#l_t$O@Ui-o6C^opd_`87qcF)?2E>+9A;NjydFEB6t^((v zFC<;s-HGJmOE7%|=Vfrtzyugj(}nwT@_-$N`!zWDeA95HcD$ZIaBn7mFxudB7C?DE zP}DUkz3q%c+okZbyvB0hE<_!XgeI_kJ&N~rD|yi< zlr2)$T7m1r1SGfXy~K%5G6CI;KR1_Yd57HqO9%!4DvxD%77lX zom;Q+Kr;cj%m;}iIhz*z)OJRrx$5h|+~fl&7@rfM`wyDE3zF^#R;4 zYr@d%?c7K{b`VS$s=bpNu7P!_2}8GcbGz5UDH9Wha_{9fz~pR`2}8U0b6;tKH&rGK z^*+cwgbB`W6NY{t=B`5Ldr-oSpx?RNJ&6CL2}8e+avwqb6DAD(KF+-fP4U}gI5sRmz7`feT$Ut{{taHMHN z--8&Bf?eo4{RDh{>D##%zTxyevJbuq^i4eo-$nG@@(_Fr=$p(K%jo;xc=%S+_uW|d z*3;MT1bnv(?Irkj(sw7@;XeAlKL+1p^wlQrS^5fzJ4N6ASK<2~eJ#(x_Yr+5Z@~8r zeTyylexr}e+AbJ(-#bR+D}%pAV}^f48o<1I+8bCL`SL5}x2r6nC<_MBFLv zdbp_<#^JdyI2>u*3FA?VOEJwqQo9eDeu!JZ1y9uGerJeZ9~B&}{Sco0m8>2U(x_-Ix6xSFc+J>#inB-jd}M5*-Idj>>vM~-EE^`r{Q7w zm)Ij_7``aqyq>F?W?>mL#7+B~gt20Q|3f%uZsAA}gHR zQB1@*P%Z;T6w&{jNo6C>9^e`RqaUJ#*i7nww_wEzLU(c`{n$)OvY$Q=BVTZN>RC+x zna~2jmct|uTZdr+1e2m{(fDJ!mRXm?53*?U^X9P(G1IS#POK$KWoG)@(88$O3)J8+ zJf$=JHAt1peN5I-vizBT9X#sKg2LO^9hd+Er8E5o&l`3XuxiKHrVdJH`Wx|Bh>Xra z^z~6?62eS>eGLPe3jQ1)^NJ`Fo9T}{fK@6eYrwzR#~3-WnSPCa2D2CZ!#+mj_%r<- z-H?$}V7}!8q(ElYycM-DL#M_)Zj@0dM;E5F8YCZos|GWTka|$TTTzCouWiB8iekAWLz;Dd6mK*LAaAwE2`a?oujd|Wm1JSF&-{50DE5$5Ho{otz z9)UwxB-0?_1jD>EVNTkzo(r+r;UCG$cZN>wuGRZAjz>MMAuyGDg*I;sSs}oaU(cs z;QZkWi7g?z&d0L@PFi=kFaZYqCB)$y47V{j9b#OmNw076mJs7=8Jr#g&?Fxy>c*B3 z&t7OSi^0CyhvYLke+jWS4No~JcY=SPj}bBc5@G}<^u#;^{>wf_K-5-^igey@|PfeFg5Hz zStkH^-3N&%e+lv{o*)5z2f&{`NF@17knv+6r5x0)3}X~x92LjB1fR1~pLoPms5=0| zVX!&ZP%-Q9G%`K9XQVj4ATA$Be7;G9Kodd~9T_K8$!O z|4+<2WI(UwgRp1G_aXwKN9Cu!N)T32oqZ5iQM{N*r7kK2ulZ$>Wnjq+s`;XFoGhi) z!_2DrYG=k4OxeI&0Ha5mu}6$%Rlin04$705%LRztK7fkPWBA* zFMHU7e^D0B4V}NiLoAGmQ?tZ$WHCQm|3TVO2??`%u@z<-U~DfdZ@HInNVz8ob@{HHAJF?;EQ4utwnyU0G>yq%C2!4 z(t?slpkyAF5m%H=%T(%OCQ-U+qh+Hbdy!+5Y>m&2QvQ)*z)$2kB+<-{gP?QY_7~GcFCm8 zh|)Q3+r?N__E+k5eRvZho~n=iX+)F+7-t~gtm<2GV3l_5X|?l2>lJ7ed zT=Nmmhpzbu=OcGIq+1m}cI9In`4r|=tHBF+mkZHrsSdZS%{Mgt9}D5VN3LtRbrN~B z$a3o@a$#QY{yPD2Te_77q06j%8z%C-oo0BtH=_9TNeDR&6JW?=_jMNI`4#q8VEr0n z>$?O~i6RC$ryF>$jZ+6=5P%U8=C!fBwRYQ;=ek^{dE*oS z9suMhBS?{6GW!3oEH3w_8cFn=sfOdJXcJXy5(Z=O?RO^PJdyq=w#I}gr_?bgU zxbf7xpcs}PpqJ<+2(&J!NRUq5*b;V|Mq%EcX2BhXhnH@)=dSWxo~3KAV5ziEu?T20 zGPQMg^U+*9VwzLsmrPp=&Y0xykf%ISIad%%js9{LSmU#w#nZy~=cBK|pxtIt_M>OK z@V0#jPtA59LHLzhBRnHJSl0_5J&y3q?16nvSWf4*X<5J{dcoO9OJ+=MS{3l5Ux)|v z+O#hCntq-qY}2NINBv~4s7+zP1yC!*dvw}dP|yYb)OQ-Q5N0QSKtbC&gE8lVKM+Cs zBdNvGlYQOW48ek{?e77%!7$7X9=~6ywtoeZW!otbckT%UU90@YLR|iNBcxUXx;9LJ zAyq8=sO7AE$>VnduTPAxrxG-XTV`!TR-=WTAV3aFw5?z{{BD9sJs;L0MwuySZnm|J zw;Ih7G>=ZStztQ^LOFu;HdwoSbli#?z|XUsvG*x8mkK@&-t**(f`(t)a)x1)kURCx zf%i>}uRn!;D(>u$-Asdy>8d;17bzNXo}B*0zu3+%X1y zAQjI*$ybCi)gybJY#hn=4961`hfD=ouH8pY^_tPV5oMZ@?2eW;qr^sdPeGy6A@E`f zWvH|n-8j+XuL5s2nloK>KL3CLY4j8V{UMz>%bmCF|Eg4aC8|64P31SK8^#I&K5c8$!D{V$`=QX2;n|bLT2k2Esk+PO3elz+D9faiID*%2a zs8p`sjCh<{ilH1TvocIsNwH@19lA7;)B*thd1YBiv1X((LbLkxNC3viK&4yfWttIX zr9M>-*p}lXM**!|9m9UhNit|umceAI8B9LR2Ys5Mcj^ZJ^wNO^EQqm^jF>Q%M*m-8 zl!2G?J{CGw~r0F z;{U(INZ0?8{(QQT6I10_8CAspf5|vPRd6Y~J^wOs7Qz`3Dr{wK-HVAYvK#+%Po)Z5 z$4l2b=Hdx6RACzl;L`59fGKPn*9b7g>0td(8U39fr(>dg7j5Enk^tiT2uxw;xQUFD zRM^v68Z>i6lTNQxP7{@h(^~=|6-(R^$oy6939&`DIdWf<^zAN@Ucz+XNU52_07$3xN~Tkd2}Eyh?M>KGsDfN4_v3_v@& z5lU0>t59+sBWd3u0Hu$m<38!^Y}Q+)T@OK-YF2av;yCtL*muga&hz~;T{Ckw$6g4+ z%Q~9fk;(_;zGH3xScdlUSpboS&2z#bS#q02JnNBRbm`3f3H=PdamouBNROI@QE zL6^cQTGHef{2qB3$roz**qk5q8*=8M%{a+WPCoXmJ{r_gE$bpNEmm*9)mF_(dtqNI zk+t5DSgK>Xv1r%FAbnmSkwe9B@?<244#MME*x!n>(&v%P8aLm&N4pOMZ@ne?UKfiZ z394wy?cm*EMVb7Aasdb&PhKz}pBU zzb12~IebM=V_8oRB=DjFld-#W0h&qSQ(Dv<+=PK=bOLWK&@B{xnftJ|E}Ro(2QrjY zQIbAXK1(C>D*|>WGv|xX1DF&t2aW~*!SZZ7xBUx0+G`&82_|E_5y30kRTDwJ%M{UT zBr`EBK4uB29~q5eIaL*~%_cUNXa>d-Q_+E}oxxTmF2T5LE3*WPK65L0bF`4Sl=GTP z#SS1JOXow#gytGA)W;RE}Nf9p|&G zqUsU3tD>lOqTE$cR4-BPlqhN(VPmw4nnc*bwrXDTP}s@j_B{$=69vC%74?b8oft)ZBmYCVz79BPZ2#z`9Q&=Rw0XmWWAiSC`hldbC;5;h zJ&3vt^$OyodZziCiUsxH&oX~av8g%y<;~wwRKqCTHQW3J#e1FbX@Bj^#u{-?;L+(; zC#yUC5B7n-Zq_*Zd&25gFY7Y;dtD8G!>o4nj~f7gqw<64pI;gN#^o=fKW{tyP0FvJ z|C`hBw@im>DpVbhRky+@D=YL`3j7xs|FF&QcgSRG3w=#|m&_T&s8;{d0V+R0LcJgj6T?1|I^`mAw@H;9yW5z8AYKk#B4K|05SI&Og&=m7tEXuJ>kzZ-QnEtyCG1N#Oo?DpSl_TUeXWpS_;ka zRxFjd@fooCMM;@Q7A-VV<|p$|cksFkZykBGz#}&EVe+n#G39>pXo1Jd$$W&oHNtz2 zJX+wLW4x`@ab7Bu;msF@mwCJzsFw+qw^hVq@VX1f=EW3_%^MYZ9EMf+$>Z3DZSK}W z&X?$FEi<17QJvOFq2wJp>C#FV{_Mm;A@!QR9MI%_ z+M=M)8QpLUli_#xj?L>B!eZwMCG62r)!_0od&lPHOOTsAVViqij@V)O$Cj}CA%$RFl~7ms)SQ1E^;lN)|h zZw4q4AI*pZuZ`jHJ9~-ZX|xWLgFYP%kKf)K9!IyHD*73+*k^`e@`L>In4_4NGe#SJ zrEe6uO9!`r{+6LfpK6CdS1mJua@fu?;}FM9%^Y|8LU}gN^ve^!!RWlUCSyMWFqoQ z`O;F>olrz7`YEg7b^{ptZ-C)cZkz$|6Z^j@=ZX1=3f^l_yyl=(K@ZUGDgZ_r06)+- z0Hec#3gF#ic)Sy#Ebr@`;MFxn{|kBS6HS>)C1+Od48Ry^*t|c%sK=5~nYUqt=`&Tj zKVGR&s*}pR<0x3mgvDDH%CfGEfHhbI^5TWE0x!VSvd<&Zl6V(GnOM=zY>XYuOpf<6 z{Jof@+sj;sak|f2B7m1Shya!O-9b<%NQ%75p)^G^PtI)SfU{i+e36L@rU)ko%Ld$%avK|u+d2K{#S}OWUb+8s_866h;Jo@mc zv15t;PQ)TDGsD}@M`SMT0^aMQN^W^iUi_$Ec;*H*a0Dzzt z)p-TRKLmfqN8U96-i`4OKpjlg`a}(Ymu47%^sseBwHx@Db~jG|Z_^MR&`EyIr*pQU z^L7o7o>mWYygs*Aq{CX{g&Rg~%Ea4xvTw_v!$RP>>(V4u8ZmvIsz`^ic|AvIraku2 z46+%Uw|11~NTvPwBx3KZNQbd`nMc{Qg?'meJzA7#^So{!ikE7D7>Z9f2D{C+ZO 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≻}MjWidcmFgwAVecgO1?^yT_IS$Amjw-wuP}AvZBEu(z=&=vAyd-hlBBefE?~EV zWto)*%l}&%QqKEZ8kfhNdLy>^Ynmh;n8*bv&>NO8uL9Gxk76}}#NE2dc<4c?F`uU= z>hLUuIUSL~bgp?BqaxgyFcFH0w58P*mP)D)jTXUYt%T*LtCD!2;U?0z#OQkQ13GU~h&H?)p7**x7{RU%YB4J|M+zL1NkUVedYC!Bi067BB!^F2Z zVDNSk@i=C49c2yx^(U}@Aig^SiAXUFlhYCUCh9(c*|7Ttm~NFfA3@=PtY>;6B24l} zP#Yme9T@uy1SY{V2Bzj*$eRhg+Cu!harSBuHiB~#q013?9G*jja`{H6K1OJRWIG## z@4){isscPR0UuGV@B+`*u3 z1Ys?SJrH;cp3^Yn2^%&Rlv)=S0BPug~DlN!nF_S zs`UV~w}SH~ASYq$TM)Pat)LZ5wa*V2xc1{TO|~u6&0=sDz}UY6aUVR}31^8A8Svrl zOsRYe?m3v8ufb)0=OTUR#2a}?(zG%?ofc51SHT&CVPpVIwJ1^~BH+VnCEFE2oB{4M z7?d4Fy*U)3sxTMG+M$@3D*;#vQIPp>UczB)5CDCGF{-dg^O$BIVjkC-8*YQk;062duX_7Rp zOhjUqzM@c;bUn=X>%d4!6A|!XUNIGc+ZiTjd|A0|Sn3h9VbgXXQp8OLa5RjRINADV zs_2P22+nSb`njwqEQS=2-|sML&xXuaRZ#wqq4yiJ#SlYPRI3m`&w)0_qXF2QNxTM{ z`bO6&z`7SKF50SqqBo7Z-Rs__qkBt_$Fc*a8aq>Bv=4kT!DdI=3fyKya2Oyn;3NL1 zY_qE$5AJ9p8XhzVSs_Yd-J z)tkOT$Y#7@kTwXWHgQ|137Z6jz7<1U4(@!I98NxBJyeSW2(a*D1WD)dR_K23z;-a0 z7>$q)FDsOEHbcTjO1Zp@l(5Z<53_o3tQ`%cKUSL=Q9qE%TncE$X^ij>u|Ln^9f;O- z=fyhzK0|+8Zz%X5qYq0e-9s&dRP$c+#dqR0ODjPhkD?Zy}_p zw-K4axP37TkKBnC1@ljEgo0EO|6-&H0D)StM8J(AfRQo>pusUROoSknRG|%~4)6tr z!V>rZffMpZ5%w0~&V-2&q>}jOJB#28tb`@-4gx2npb}n#!@UhALXb+@*Amlt_yP~X z5_qD(2{}@L!5;1jm)`~pJeL%bsf#dWcAt}Z86LT2%rNGoycKlt_2g`aeC zAgUK^s~IdwZp$Q*F%y@{m9GS@mK)@f+Ci^Q1oEax0Uo7ZVVk#1W`+BKa}79tQ!&%c zg&_TRQ{jb^)>G%jI{)&>hZvn__)8~)^O$PZ1*kIXO>kxQ7d%?Qkog}u)^~=CHnSyr z7ST!kw=8`Z$}|I(uREg7RH17t%U@(=FqX=sNOZB7;#bMAJC{ z_b5z+_{c4=RMx0o$mUsirLLQ=ZYUS*X36b$k!?~~WB9+aIrY)^;<1{^Kz&{|hropl zwB-$RDk&EQQyvkl2CzhrpAlnHaV_+3-824xUnSj%MOIs4iei{|q);^)#30f~$LP`^ zlKA&+^FRu$hJ|O&{E?XmXGBx#&!@@1wPi4F`3&3u3wLi>e1sw*C9qUdd;tb}_yVV4 zi6Hi+5HwNg$IJ5)QI)~Swf5p=7hHZ}5MhMKv#`_z{zE1H&=r=%wO9Zdgr1#-t{U!W7y+pyo`=2=!NAq91pe=h z1;P=5ENp(4c0lGye9^E5A3%HdH)`a zB7{u#Agc)Z22|Sx6{gCIm}+h!WF;Z|k1s<02WlSJIWRI;*hR>8LK^5ynJcscs|AeA z70A}Y_T~!x!07{npG>C@5kQOM6_b(a^b{Z_!Q{LGPHb#a%}S6uDVi34%$>ak)I|Va zE@E4}30~PDP0H=v1k$`<+dKt*1<@j6oIck_9Wj<2n*$5u=f$d zLK#9x$SahYgs@Ov2m3V`DU`{C)F@jhUxW1}j1&slTG(Ep;E#t?91MO^DDw%RbzY%V z0-^#;&UN6NUnrz#TKxHi(iq@|A~tK+Dm;0tb?0}eYeAH)vCe2CSXb|WPD{S+e3!ANFCgRhEUnBT>OFf-uw_(^6;2%vRdW_knB6DDT^IDTfb_|Dtn+8s5` z{Y%#LI-SE&;yZmYzTUY}_rDPpu7>jy27ctgC4JyWSkn8XtOqZH0=_}9IJ+PSCPI)( z8axkg*%7p=!4i0l)ug{3#3)F5n;3oZY|?LZaLR@BF){jV&?i0F73Trpt-!DPu(8n; zuhPH{tczjT@B6LqYQ0y>0F$Ic)4+go6xJ8YZH2oZCc@|s=q0e{FN1|4Z+QU{Jq^GA zKe?v=f4-{p;bA+q7f>bWDy-julGzaVnt_siI7U@jcT-C9dp#+#=fvBdD}iG6oTi+4 z9#s?4Io$R7Uc*;l{#92ct?7aF6@Y<(u%xIO0b?#{&!EifEF6D>I}0X4WTZDNmBfFB zSPWm_MpzQDDk4rAj_xG*cGZ0NRR-fsPQ~kMxV-W@!U&O-u(0vsg{J7&5jqpEc+t{;OWe2S=giLUwz<7O~gzmqU<`InUu#)veAh3|B`K<*rP{mH!1j(@phtpXj| zi5d@4R8nQ+Y!|43ld%5z2Mc~FPf5cn7XQjnnbk7oNK^u~xzDOHC^hXU9tOD9{r@H= z!XzU5XgvW-CGr0;Y62SQ2J8HP!64Z*h0>b31MMhyrUui#MhDL{_gX{-Q#;cLTW4^u z`iCS^jid;LMjFAA=#dWaL5pgrgDvm|_QUeEkYwLM>7b-0tKjnLOjc!3{xTP))d)+-DH26ExS@5fb$-V{AzQ$avdd{1Oypqiu~HIf%pd?zreKN z0)mJD5q2QZ(B|Tyaw2+c7@Nz94)C;rk-c4FEqvXf?6-BfUyv8s+r1F%=`dz*cMDUj z;$gBL0ET1*yI;Wb2~5sbV9l__ zyj|<=*ZRcoq`M zL5xs+l2C7NcMmvs!r&(Z?TC>8&?*OtzqeaC2~QVH&UA46fmZf*s}uwHu_Ugm<*`b* zx7!lnMliCsy9l1SFyjf6z1?F79fUD^yH(<`fPWAy?(H^8#xCNU@%R=Q$YJ=OxsdPtk3X`%^Oac`KJg zGlns3aT6eFJ0V`F-wxI-Fgd%y`CF-zq-mkmNS0osP?q}3h;b4|N}Y&+5A%xZb8tVU z+{eqxm3gVnqCG|(V*9+|Gz4H|UP^Z0W3oL_J-}%XlhX&BQWaH;atN2*=T)s*k5KBJ zm+>|U&jgX7Dr&(oD8TNXVLa}w-a+^iU@r7%v$6S60g@J#!SJfQZ-H4`ifPWqAe+O( zPhlR*@15@hH}E1X86WY zu%}_9OZ*(3k706V0?X3*+v~2CAnOC3h~FrJU1DN7mKiY8B{qSl0gQBso0#Mo;=L|$ z7&wCnWtUh2&*g-&1K2|7&xCqi;#P3(fWfaWUw6Gj0IfW@%tC$Uman`X0qS9xoUg$( zTBAex9syH1JlD(v(CqXB!(d5i>h;JAhh~+*a{F^Q-uJ-eTe=95GN7s?Ug1Dx0~=sT zL@qQcVl7j*fn3;-!5Ev-g6@I)AWVet2w(20q+bW%BP;jN?mYC5@L7CWQ<~~bB-<*p1r$(8yr_XsvsJw;L?snq&@CXnU5sv4K-uW^ zdy+mlM&}AhC0z#m1kx`$pMD+cVj<}(VssqF-e_{r@<75Adpr?R|LfJ^PfLIY~|msiczx2m}HFLP8+)8hR5^dKHvj z1Sx`u(nJwa5fQthA|hhPj=g)aBleEhhF86Q@4IH7ByxZEe$VsI^UPjr%__5|?Afzt zPu3X<@A*OG?{@g*#Mqg(ES){a!r=~d1O0$*S` zy}EEwdD3=zhq24ttrtAu&-SQyVNc$HxV9Bh9J62{km}kKQv7WmWn(~#RCNO>s#+2L zV@y2QinoId3R!@j&J*_>-@F%`&QTu6cl|({N}Y%A!2i?({xK-}+2&?Yau2TTc6@QvI4&&@y<^q#=bV8Rq0;o$g--UF;q- zN50b$7g6T!fh`dcQmL?D1s(x_Bap(B47bI_irmu_XM}(`i*OOeC;oneQei%(oC^W@ zQ8r9zE5fKP{GP4u!bS9=(?WSmnHC}?i_zeecqS^*Q|?=ajNt>*`68N6&HA27rTq7B z_cuT;Bf^xnBCDXswS$w2OI?XpDn)L9cvEEar+P1lbVeT8B)x`z?)zN z4#ray_(b68#P7AIq2htZG==c)ejP_7f9pwI7FG9Duq`nuLLA?G!nj3%IR|hNpE##9 zs0(#B_z=1R@Oh*#rL8HCA}eM?+t=VL+3SlMm zDCTZ^w&m+1zb{a-=S9qF15w;QFnzt_Zvx-lhs;ATxgV(+?|Di%#~=|`*4X7;{v|jc zBemoU>2m7x;sVB7DlV5s_%@o6hC2eu%6$MP-=kbmL+0O3&S1(ML2g^{TOsA20Gs#R zLP*I&HHe$g;-xhpbaK~HhZD&N$Pc4VvUi_SXX!>5*ai_AS%Tels`7O>YSgOQ35nma zPI}6dS_mFrs^aXSb_Ldco(Je_tHgc@-HHrnJX@x!dE_t(PebNR6g(X%tU+{)KqUA& z3UMy!8u+OQO|Ys9I+KIqNow=LKi`0u4u@fZ!(%P9&quPVzNy6n0NR7Vf}3_3{IOeG zRXw1Uh5Y#@A8jHG_~~rz6K4;DOvM|JX$F~!G}KcT6A_-P-UbzW7cMgXIJ$89i3hR| zB5!nmEJ0=b6+ho#{9O-cu0+~oNAO_n_ZUahiyPo{UOXcts;wthY_gkzWrKBYIa<$G z;A;uXUqb0qB&%xg0E}>W(-;z{iQ4+b3VIt{WmSCwRu`~Z3u_4TDo!GA0P;HGNU1df z2sl~zN?sHMhFJfWamCY=d+gdxo--hIJqw7H+ z_ao(Udx{Er73}(7P+fY^FgKrE?nS)`nOCXA-Kmp6enBeXJ`mi94F+-U9ax zB>a{0I|TU&bwVE(oW(kQ1jcs|`i6pa4V_dk)?Droe->ns_*eMeUSmuwG6&}32EdX%~kejIB)xoWW3%v9}4(hNDk5j3` z!w`B9$r>9msKb;UDWzLJO?Jw-EUn$9;yaLe zGq^V*6|z7Y^zp(!`-YS-3x)O`2##i9Ur_rheJQo?N9H5Ydb!DK70QwgC}VE?hAS z)PG%yWzO?3(Fd2h1#0~}*;Fn|hr+)}fXksan#JwpTZ&7)Zn-!%g(P*_4Zby=b&8FB z2TZBcWN^n*f_0*Vv)s9dr@}>34FGG9o1!eP+3@Mbh z^+jm$ZSh*zxdy2v_pK=4M5SW3Ix$5QBF+KPES!)=SqPryBn1Q{M7c!)B*h|K%0I~1gyjAkL>C~{Bz^#K8jw*)9eB`@YED!)^b*eV^L*pkV9%m_ z8HfvjtRYbd;#wfrAXOZOBDY}p*MYCi%&>XkA6hBZ<-79%$nHlfsWGWo63Hx6=AeXp73(6!$sWU9#j2|l}gKZB5Ob3A*3*+ zEy@1*Fj^MW%XQfi2B_cx9p?ltVvhS=4a`wC6*sw!8!CVlrnHsH?1RnlghLj;=9=tC z2F$ep>9ohC&YYD>kqMXK-^~DPk-`+R(m!Tf&I2lKiQn8#=f01$C5UFS2^3l1*0NSX zM)5`$o7~d1BFV_-ZLT=aO8)1P|5F?EKl3@+*U8IPr+sbWyCU-nWH{3+PMN33Y|njD zWI98Jlc%FGo!7}UXd3EnK_4{+pU;6XrLD-5r~;n=PGwZ@QQAwTNcH(xW&sXCGLMPP z_PWF9?tPd_YoP~0d*{dCy4#R#=VJ_FpqEo-I{0!)2E>0-zZ8|?zfSf+lD!B@IU-7_ zQvC#_xEFB_BxWO7f7nYP!};3!)23uwG$d9yK75;Jn3T;n|JCaC9?&}-`vVZOcRune zDE_? zf4bZV{S7kwZ5yj&1%&vqiTea*+XhW+RV5>vU(hx}jjUjTPG@u_IOE`c5{&(h6W1se~J0^C{n&Pu3l#;Be2{6k!TOLwmMQfx*tZn6)qH{0mdb6!u}bY zDP9s7*E<(4^?QIX_YZ!%Gy3%nd`7?E048{(!TD2A64K!QM=@rRmepWxV;VW#jtm}& ziVi>;_jE6Ox%ausWd>5k*NDJOYZmaH? z<&l=ny$A2GNHtTPSnJF&Y*T*rcNcs<1J|r$nBiw(q@fm{Bw}@$hP%lQ-rpVz^+HrH z)d`$f47`lE8)%JT=dU(+3Gu$bT^CKHnlzfgeB1vZb&0zJ{Kzj%r5!gk4|tLM@J*`Y zyYe59xq$hLOOapPnD*U%w*haOd?#@KHMlHveKQcB-_H#9stPchrLb`K00x~ZZGmE~ z)S&M#K>nU8ma=1!->UR0$qy9KLE`SQp2%;Th!%rWXdzXeG@JMfEU;bDQsNVa18<+a zmH7U_z&j+-2X_&gR#hb9H501=8+ga0r-|p^0=zQ$1LD8E1H5aY_|Rn-@O}nAQ4GAl z_~Xuu0N!P-9<05aX6nb^&~VdDod%$OZicDHLA05hX?*8TF#6I=8!SZ!_|i?i`4f!3 z3{zMB1fwt0)bBXj&tH=E3+wt4Z2DWI^ZzE@1866I%k(1R{0T;XX?kbk48`RyOLvG* zLc99gWMmNMPcZu1X7Il!-6m*1e|bhf;`|9le`U%9+AoIx{u=IOST28p(cjhJV|D@W zo`#xY1+Gpct)jr{~fP8x~E;dyglEH{osQ}x=X;N*qg zLS4$SJ8#xZ6(L z%~EBTfYZJak1l0fxp{#~=SH+#x-aTXRlPHvMBg}5Ex0edV8TKx&{>F>aQ``0po`$K z;r^4YK#kxDri`wQo)E44<0HI`7=@-oVBC|iM`$`=NOy`3~u}{@cOG9X^|nqo3A=dnm5S`3>9jzvKIHP9bpCXU5>0S z?>K>xPAtaDBF?^2kx>mRGP+?!PHRw+F%2tnx~YhYaCnVP4dICq>M&~xn(vHo28dmb z@$XFW?>5KyH%?5v<{1CR3x$6+?qb=2$<7sMpgn=8Pg5HDG_|2m(;E0Ry`fJtJfCDZ z&J-eKTKX($X|2lGZL_3*Yt-p%_Sr)8Q2TfTpDjcmwT9#F93cj%O%$6W#9;M34a^l{ zxJv&5#5^HJtDk6Ker|KreXJ^=fdyG4HY(}Sh0>!BDe2Hf(xFc(>CeSdg%^}`=MrhI zSIpR3Dx8yH>CAJ5_`}NG5?JA!g#DW^otW-h*|4crHEgQY4VvowhE27mVNlC8pY&rP>|TEu6Wwq;g1)Gi`8*czvO1gRMeruyQK`S2$xn#o!5Dj_0jJMYq~g-BC9F>wZV3X!W;)4(-CG*#KWt9A*|+RFHz)O9kI zZ>ed)O6)O{yuHMR37^ZyP%ski3r8aV!~nJ;7okOLt8cHNygU*5_8I^pT?o7H zP;xSaaQY4qq2@#XgokVjXLK%HXln9|~-iJ<1d=l$( zNluL)?Gh6as&`KNb4Vp5f0cwDDeKs#w5)waX<3`LrDd)0ZyzuclbGx#qiO!eYhPw9 z9noX3wIimH-WiJxDH1WMF(=TjagesRg|N6riV=!WBfB}8*%M5QS%XrA^)Q6qs}q!I z_)I+LZNb<?~UJu@7b$qd( zcLN4OOio}PfK+BL`1jSxNEt>ZH?}i;5SdrNf45FX$}uu|u}`2bBJ&gYf7QtxLiMb& z8r(iH`Ei@*YjPL|MUhPV7mBaKFNkZ4L1&kP*QJhMQqOM^Hwb-b4+n2t9bfF{RiN;g z!r1-biw{e{UlEnD^3FwmOi^qAEh_9Qz`CZ6-L(i4ZcNiejuy-A`YlIfvqT!Mu)8jX zOEJw8*@2zxu9axam=fXD*j<~E*Ftzb>|rmlj-_$$pxJ+g?J%sFDoW?qjT|$%#vzN+Z=~f>VPeaI^jjHPXl7i&=k#QiRa5{tB5DW~{8gLS~JbAnUJCx`;KB z^;alE)?cYIH-|E1{gr0rW`=T{k3Yg&W}P#+_0Hrqa33TfpLcGuTT@?3)f$v zLcwEA8AY=GipT0lg_=7@&>kb>z2{!2#1tayuTYBy&%IE~`sZG#w83*P)Jjy$`YY7B z!TKvymQ{`3H0!TW8+lqk>d5*l)K(tX&p5LF3YCk!m(BVn)J~pUubcHvsJ-xhH|v{F z2ciDL`evdNs&Z^N|5csyof@N(D@qUysWuGUDIpfuUT`2y2-<|$n&YY z_|(SpsfU;tPku^^>RBM5kss?)XrDp_IyCq(hx7Gyf#lkHH@5<+9y} zUxE>Br-ZJ+NKC>*+TDvuDOBOID|E4y%r_gZWTWzY&*FkED!&YL zWj!rF*B09t52#o!24Y9@GKrTtyqw3&#k^d>%MHBT&C4UaJkQHfUOwgJpS=9VOBjzR zw`nbAsiWqNwD$t!1`=-+gsTQ$!^fTwLG{>mAi_d~)idir#0n8njV}ffCq%OPcsYo8A<|S5rknVP5RFy! zK@bT-hxnEmPo}dbvsH;SQ_EbbJg%qK%6U_pz4D=Bw?EnVbzqzt`M=vc|n*@#z{uh z?0lf!xLT2x*ux(1J~mNVdQ146*t7BPD6yFTshZfUSn_?i4-9*$h!j zX^f8KWZw>GxVV8}CApDe2?=+t#?90y6p4Y?>Wy?b8`kHdX)N{XOCVz7SsZj8nGPyW zeMIWVn=$x&>3L8|;7{7`NG%KAk^+@l)Frj8HwMN&45EDu2ezyBV5p{c5F)7JR)DAw zBCPytKy(x$qJBdSQY(c>R%3EOR0)x$n(hG6Nr=X(awUjrA#zpe5D+y&G*S0G1fr`D zP1S-ML39(Mg*tKrh#o1A!_U_0>T(dhl8=BWS8W^FR%##dx;IvpoqO}IA zJ)1zBp86#?qt*VMAjYQi2>DpWbE&Ckh&$ueaJ*Bbo*BdS^<=eZ4~TK0ZI~^ltIN*^ zFn_i}VcwH|j?PZqjcG+^oM5 zxJ9cLl;5gb3f!jq3f!*83%pV<7kHK4A@FMbyufSpHv)I-xR%tvUgrzEQMVF!lkO() zW<5#ZEqaZ>TlMt&4h{b5ldTb#aP&ncDO$c%LpPKr=ObD1}{)}s=rQ-?4KH)Ug|>VaAol= zIYd02YW32UII;~ofZ4z%;&Cd}2ypo1$s>n|)n@XHMONnB>ewiZ6x5_9$}#MOu@^%! zt7G^ImYgTE|9BgC=Y(4^$WMdZc}Q!JVjgaV64J*FpJP!B zpJEpYf&s{466OszwtociUv2M76x-`DKJSIx+ejZG#XRwU+eTRSonR*<;EtrDx{ca>ugg@{3Zgwc{q1USwE<4iHUWxTkE&bh)#By zEb*P}Hu^iE+v90z2t}0;}~Hfn79r>7DEv z{fp4uWX0@cch`KkbFzDAt`eQ>p1Qff-uh{Qee`Pr`|1w__S0Vp9H6HPtkv@b4%90I z4$>D39HMiiyrJ45%;}`>MxQ!4)tYNFC#SRKvd77((eI;)oSd%uOM%_A+nRKDohz`1 z?j*3M9xbq!ULdfyz8J7{*J?Ztt78vjB1*%!k!`Hp5|z@Qm+O#YCAhDczSE8C`|fQp zqJ769oxO31^xf?*;Rp=0en9#aDP}hcFk_Bl(sx8KE?8W`c+9gL7iax1+l%fI+aIFS zn?bG?X&6$>O@FhE@aGuNG|ni(mOlcKk@wvO`}qMod@ra0XD^&><;U513^!>{n>^)g zD?hh-MGN6*H3ut0Q3t6gm_kS6p4ZXB^q+g3>| z?xH4bVoRTX93N%NW0&WEJObP;9Hh?%p{D!;j3KdnMq)xDt8iH4iR-b{EyLkg7&*cM zNZ2AX>_Ob4g(Jd!ufx_DSjVGm{5stE;EW8fy2i48LGB-Qob1sHz!@D|TWFSG$=Q5D z!E6f5T6t3F_<(hXDb#KYR!6c~s>hxf$V7qS#!#@%h_VqFuTEx4VA#2y%p&kt*U4Os zih6ct1jg?3WUd1L#yXjNvBRIzDO?oD!jq{PGVDjdf3{A>lqE9f1_t%^WR8Q+o*y10Ac>5(ySHyMWYz|DU^QhIfmasg+bkLp*Z-XiflDGoYrq3) z_lLj`3Q4oAw;#U{{3`>WYAl)Q?6f+b<-Zt>?-cfptVJG>jv36j$WFZmDm{buU55WK z1IK1AJ}&2@dH$Idf|2R`EjB+7LMH6RTFfpQ8F~lAC=x}d#oay!lQYZW`NkMxkiHxE z@Vk3K;EasD0924y%e?P0s%gJ3x+U*>p7*w#;u_r>YEJP6T_tdn9xZUQK1bjdy;0yL z`VN6x^|Jym)t?HyOxta!zfETgyj)ia+^&ZTyh4u?xI?cKc%|Me@GAYRz^nDo0(a_! zwzRWLHx;;B_Y-)Xo+faQUL)`ZeS^T8^-}_G(_ahRtHb5gzf(6AxKH;Gc({f)r;bYeU559y`?@7H|evz@L~P3z(@5D z0w2?{?WzB`ZYl5yJy772`W%5z=`8}E);9@!Mn5C)i2g$0vpS{&^`Fzt1wOC434B41 z@!(Q{FX|m0yiedu`YjLsEbwKWTtPc8>$U=4(L+7B2r#oaXs7TXMP_k~opMl+ke%`m zLDK9v)+Mtz(~e_fXBKDMact$x;ygQ!&6`v62UZex&@%{|Pt;t8 zJIyC)uF#$4Q}i;)pQ<+toThIOI9)#|aE5+O;7t96z_avU0%z&GD(cVH-2~3nX9%39 z*9csouNSybKPhmL{!HK!{indCI=K_|m+M@CD|82eYji(>YxQ`67wBaIFVvd_uGcpS z+@N0&xJe%sxJ7>lc(Kj@=&(!1`$PUs1q{JcupdXHX8K$00EKpGF*5meuA*CvNChM`SC}caU^dI@ZVy)ar$o5w0(fkWH;d_IS9jwx~^E+{)XGBCRhF*F?epkS+G zS^P;fxDC%fEC>UiVraN_tRRGTJjc-R?W2PJc(yDxG@LtL&>BN^jiKS)#|3X-xNkBv z-20^9A+-M$hK7Hi7HmZST_cxEKtX$%ejzAorA1ZPJL4gbC=SknvtA!KOy_ie%azF6ZK8vcD(uzflX zEgKsCeP8g)AapU_F|D}HUD3Pj(YUwqtn~juY$RIK?}vEYtswmoVppCHEQ8oli~@fX zVh1h-R!Z!x$AMK4yB%ZH-;LOV_W~P0Y~};NMiRUFK49aCO{d08V((7|wt(1=6M?ND zHuNQ6>m~11V3!iRp5t&Qv7e3ryNOr{<@OP)q1*$+4!#NONn({pfxSd5@m*j?iLJ!i z(tn)T-0i@=A+|0A>=$C^!~(O>FtX5YmG30?=Ou(3r*(gQNp}Me2pp=93LK$-6nMH0 z^&o$&E)sZ#?&ZNL0?*WIJ$Qq_ar#LQek^djc6w5Oyv_&AENkZK4(OB2vgWQX0a9{k zGTuO<=>Zzcew!`!ofy2#Xy6srKMCd8{GJ(_eodRd*CjqBdEkKXY;L*xFzpeS= zZ1xy}++)DyhhiAbJfh7z`cZA(%|F)W-TV`6-pN1J=AHa=J*SlNUubzZmp9`#RqGe= zpG^&7|r(KJ zz_H@jUjV$y;62c#?YpG&O*;PF5x{HGDASe^W9|fkC)!DEo;745PpV<$X?vh4Pg!$X>(%;F%*oF-+) zi!U>cFP~z}v_H$__v{CJR=r=c`;ed_#>|fYS2MCzk?_qM#>|KRuV!SIB%u_KYc_Tf zx<1<2gV7k##uog4HFjS%cESf6jG5UD%y54>YDVz?WrmyH`1j{;W*IwCS2i|qMezS+ z1H%J<_-M3bnT6fr$|`jOrXFsOsgt$%Hq*(h;KTE#%(g14g}}b79m`2{kSy?ozNCsJ9f&i9)kZgd7Fy+%ij&LAOzmb(Trm4khG zFgrlQO)3y$4{6-F^B! zV2^MT2|4(=<7Y%dZ*0JpOuB4uasSWerxqM#N`b-*Tgv2ipqIUd*=O6bbH&|3lO5u3 z8+1yR_eky));nl(SJqrcz>0Mi@A%3gDvoW=?L;ZS9JUDbeH6wQJ8|3&=N6+^CLaQo z!&E$*oI8$ExY;`k^v8`|d4-Z{a~D!nq&zE-cpZ3qR6Jd{pFFv+dPX4VK8jqNK%PAf z6FBj}1k4bXR~d8M#5`4{<4w0gpi0GZXH%+sY6UN`&tg;0a$>pZX(~3W-8^JHWj-)< zEGO}d9m`En^F1?k?`C8zjOT5826M$nV(36NM(BGA?31rm+$*gYFa?B0;2~IfAcJ=r z_fSve2L>(%Ki1TXo2w##(^XTEeWPiicbUz?Y{A%QDE(=+%IkR$+hw#ly&Ew$m=zeo z&Kae$Iel}=Z!moap20h5hdrL z*jd~zuIyeZdXvYQPkyX%15F?Omuhh>+&x+W~U?A6`FvddoGBP_e@)jh+q%U<0( zEW7O0eZm}QPIbSq?5~F*Q z46=BEL2hM+9_kNXf8n(!j~DPL8@ivo4RXg1C65>I_&GZCAbFdGcQ$#vfX9G=p&M$! zTb#sVxZP=Zq2~&byG(MqM;X=NCTGy)c4W}yPFn1ATuQ$@j2*KI{Q?BXG^tEmggk4j z9SMeSvm@tbW9bXV>;;(b!nfOlI9P+$>{!6?UV9h^STJZ^YA=Ui_+DGlO7JqfYy!*R z-V45i;t9}7uG?(MYUMHZf)RANx8nXd9RD_%Y(CRBZ;!Ji{zm+k=;uaCU?L`?n$EV( z-4yPin2{Jb6SHK^Kb&}GuVXeZFxaRObn+ep^Cu^PQyq6%%ml_EY{UXTje@|ZMw{C& zHg98(xAipeemBn$ZpoOLK+FeHec)9a9=B;k#q;PgOu{ui43AqkhR127(h7WyD%Q+4 zOz!9WjX92WIcmJ&CXaDsmVY<0KQP&Wr@DaXYs*BtiZXRGxJ?o@m)7ca5MoVjneDkR zbjs9iWCJG`LaK?GiJzbpFEB9-)eQ_>0Ok;5;`=%ig2`jdD~{y{er7vWpj1Nn31J>MXc-&EI$UAX6cr8uSbC<3D5o0v;w_2 z7`vM%CU^HvZ6=w&LYGxQ>H{&*ltRYOAMr+8Get`5Q>RLnS&oD{Xz*u?v(uwmrfhi_ zhYn*dsu?T#>;Dh^z>TZHA7$F`P727=T(E}2mnDW6xvl0=@sOL24XgMiUg&C;+A__5 zUB@Ga`-JmK;15cyu;mHNElQ&;5~1^ZgZH*L$z99(X0?SM=z$ldn!UCxWw@PLuj@@F zGf_~@-L|Y{xX*d2Kq!@sd!e|_{m%v^NHYa?4+X!6S-Em!RPGZikjW9|m^+{Qr1e!c z%^$ey5Cr_TxXumK|1kVDZ+UG5xU>2n0xhsWsEIcM+;TMnGQk?xwvB*5e{%@{xJ8n?cymrZ)F{>uY2+{^dz%-=0N4ZEgiOEL+&OrV>z_JH!pk=C)4FD_I28=EiZu zvW5LpDgm{*pWLwQ$2pRJ%OapQx0&n9Hr>@&WPVL0pb5Un*E`^K>CM%!v&xqBAYbr} z5i=04N(S$KTb7}G=db5^1M!iO5IAhhI+RF1aZB$=cn<7M8^)s!_5~5r^Lu<2zXlI3f$^><;topcNFP$Nee5-cL%V3?C zvJlxpm%IBNZ$!VO|L(+c>)z%m8!Pm}y~uh~W>IeBo7}+aFmnGicNq8ez3d+^L-t=L zo7?=Jjkn)I_B&#OoBp2gEVO(2*JcLcHvljDqxH!C$k@oN^0IAW@RHvc0&^dMM5TGJ z<;MbVVupZM-tP}U;1@Xv#E%GOg~MeA{>uy5d;3PJQV#mEMA(nErkYkCBNSbB=QWAa!oVK>ew?Dqd=wnsy=LclCK()dZl5|hOE8`4&j z?v=*mxBt!LCcA;BLcruYWQwOm>OCc8Jk3U(*Z?&(|D^$NSJyXy5HQ;pnbPS*jHkqm zr?2cXCU@8T7n2yC^(KXY$=8r6o)V#_^0)FFHY~Gf8-Hlr7sJN>uQmV0{tpnZ8&^WW z{#VEpmx)+nmYA`M1}@FJ9REa{9%Umdv2J*GSI9W+hYyj_EiE2+U^6U1W}^)h;$i*=m=VBWSft%~7)2bIp;n+U4d5T$u7nq}Qwd>50w%QBL(X`t2<_KHu zMsuXDc9S_8SG(C9p{w0uj=t4iVvexYZZ${UYA-iO=W4ghk+#g*wRSAe&}G(MV8`-s z+nm{RW?2K9#w|dzI0IWW8rTzCErasgb_1L`~G7afr;G9;+g+I(}N`HvBmfr<)%FvmR`oxa2F1KI18jB!nyFFpz z3~RGe03=TY1f;J;%N zP=Q}RO^Ni#YAozGgiWLTC|bXavby)hmdlu8+a{zsKbAId*zofVpZffW+Q7TUFJMHB z`Pn9*I=`(pEM3^&3!B>fADAxD4ylvl^|!f`udaD)4tB z#l&)uHSHE1%`};iKg1aM?!OqR-C>M;2>z!ulGMNmj(FaQyen+py@T?q;vU4}*ZmIn z+|aZ}gJjb3=s zJPn6KU<^`Bx)eH49+ArO=OZs6%=H1R+z#SOn@!`HSs68xw#k^e8WPvhOb*RlWg9yy zE&p`dd32qz^8<*6-uR+su16g>>W)L;3#6FB2HyBA|32i!b-o32{V%|<$;%E2x}1xG z9?sScx~y-|rN2R!rMZjF#uuK;<1dR4Zw-8VgdctSJ%k(Q44?Vv5S!c;ZT*+q>S!uH1w_0dh-Ixb0c%1?ne5;zhGoDu93)ooTMU9N{H*P6RL#n5(Hz#SnigN9Le{FPQRG>+RkfR%n6#@l z!yd7!E;I>^szRx?Rb#oO#}HC6JCR4s6W)TRJ1HkP2~MlCKupSuX9bYk>I+bd<-d^= zn$Y1%uLlo-H6k+Ut-x(SipRm^q<^G7OuQpXo^&+rMdH`Ot4VLCy${?{J!$5hnB^oa z|2Y83{1-+FO54Tb-=siOSm=QHm&k9Uw6an<(!|HvEIj1{`uK_93D={NkxAbMdt)w8 z_mT0v*HC+F8}ssyd%LijWas8{k%dobG7^yK6i+s|M8 zi!5aON1pnK!|QtBP9z=mcC4}dkt?5i;ec(8trGOe-9Y;bdI)IY&=5XmVRlD=#w^Ra z6_{Q4Ry>q4kk?Y}v8)x1fn*ND83Q1N$FTeJSSF-8-Bpc~>d4~Z@0R`XOnicZZ@+|y zbVN>X4ew#H<-Ui}BtXg+U}{_06k`E@OFCUqhR>9sxE3wE?@2uVo8dfd&kydv|MvhZ zw|g@3>$8HEFQ0-^QQoSRg-_mZSuX)yS(xR+A-B%3P+o}oOazA4oSwa>VpYoAl|8dC zSv^klukt5WqGP*6%bxZoPOpJt*`3;rwXB(j_^Z4m55dstT?d5TBJxW| z6a}R4SNI=kj=Q0-suUl-fc;gTfOnR~z*s-VsawO`m4$EPA(4RT#;s=T0Q(x-zixnK z9mcY(9EI3BzXVlu+61_bhhKgZe1b$eWB+?1o6ZOBL}ZLb(np~*^)x6$#U~N#Ed2%Y z<|FS7FK-d1!k>`09C?uOGtS;B7^!At1AB_?cWV*xZKh?t;AiRAfT}BfI||v%(qG5; zfNU0H9K3;ySCD#L0t3Av-fo6vud?O8_fI1KpGa1(ePB-Zn41i z8}3KOJxKZ}l-Oeb^h#NXyf2W)lKn74Z=}VL_a7~`f-RPB``SaWd6au);R*YFa7>vuocmZlY`F)49Bgpz<2zc)S zVYR;$p8WVl+Be8!we?RxSXVzP5*3Y6bMU*`8UQNBV!=Wrf)5zk4(3$S*W1B^Ejxw z@pl+aafods4VP+K^G{^_ill#n5-atHR~-6H2T_+#k@u?P(eHv}uX6M*b%PreTvCjO4bm=q((K6;PUC%7i=4hlrpv;n%Vs0vEF^siOtG^^$7fRj`^r2O77xS8SWXuwK_T>rmz@ zq;cZmml+Ik@*wDYkb32!Z9jtUK-`)qJi&EDCfYhwMRv;W}FoDXxC6UFlWI$1Zl{pcaNa(gGl3N;eW8~XUp;I zvg{$ft9Um)A5Y3^h6t^Y=CaNvDagC_ZXZIsBz{)VCXSo2Bg(_7@gkfpAETf6Y>9G;`EK6>YP3k&W%ADFN1k! z4hOS6WCDZuuz{|VVR``sRwBV-TUy-ae-t*>!y+0C1-t|5Iy?I0v><`* zMmn`Zq3pqN07=CvX;>hKJC`zE3dk4aabW<;h}s8mKJl9YFE>kkTr^}v*ejB_bj@c> zAA3cy;4|5uD>|@0^BH8vUeTMlHH6+RcpnR2z;7mCLlT+x&YThOc?q)Kg1@gJWvvEr z639;^Hi5`0K}C_Wt_0BoNN1#pH-d1sS_O^a>w6>3VBlRh6qBhnnDMCW`8I!e-dcpq zDSpp4els$WJ-@l^9!MSLSJ&5JerU0$L7(~ zjv#gb*+!x#h=+mPPhtp&<3K(@ns^2X)M4Tbfo{PkF!{H-;HQ9b3k_bz+KjgU4KXVh zb*-w}Dj^&Fx?m*n{DVJg%+2i^N|7-ePpe}OTEvwgz`xwAROW8ICo820BQ4U$oqna*Cj z8uaDNlU~hi&0c*G^s~&9-p%Yzx$i-LjdZBh+F1KH`O1hrt5jWR^KsmEFqWqm=ngjE3+*HKp(L;RI7-3NIi zVCi-v?kq*#Smbd<_M|6Qw<25M8PLmtaDaT|X<^}&w%%i=?TjLOfp9$O1D<#U1Y4Ej zhdpM&5s&FHtobFl$(=I$0ShCZ-I?FvQ)Z+w!p4CZMgYq%&=NNjyGqf zDL9}v>HZHb>n^0$=i^3Wn&MaC<|lzLO}#!cDH_4KIbVaArf!WiPdScPRHUgZ!p)PA z$26^7Tu#7>nJTlK zxYnu1a4RD9c*t(lJZ3Yt&XA`5E8Kh`redb4Q^U$d6A$P`N%!WLqb-P z2`(KV?q~QIU(?LNz|WHKF(uYC;Ipj5CHGU{jr z-o)i>6PY@|3_p*v_?xAO=ZsA4FKrRR+>>M?QwNCq3&!Hosx)8nB{Fq@xc^vBT-qjX zq8&!2_LnE!NSu+W{q2(OCeFyz{`Sew5@%#;e}^Rc;AdoNe?>Cd*YYzmwZCH$-aN1Y zdkZd=$tlcYWNLrcLh*r-sr~&7exew7fAPmZGXi{jI(O!hOl0Z+aX%wd`>)8{Oq`La z{a0m5J|k26cV!Tdarr}d=nBTA4iF#0ON(H@#P%74iSryckf6$e3}tMeKw=UbYA9p- z1dnAiYo;N}-_vIK6gOWzUT5oskF%U!I zr-A6>GS*M%wAkm+27}!_7@?ulQ|Ey*+GVVt(Af0zK#X-6>nC)ExHH~mte?=CF}z17 zyNvY{8W-XcV7kj#KcVsB+box{enJ!bt$~3#mY=bHbU?af4nzHfO5(x{^%LXvfv{`>J|;iPvZIYc~;iTT5+>mG85SULPZr#KVyhduCGlw;WD z`*oyaxLE-IV9ifik*bzI@ZrFiKaox?zXG25$J@Y7%%88J9}n3^NctBrtwhHBp;!}! zNFjpZ$6`#(AK1R&f7#xZD7G2%r#IxzLYhn4fBfIJZ7Wa;wu$)z+aH05`rQR3NBzdF zW@UbcM-2RC%%AHa_YBgDNZM%yuJ}zc@tX+zz8LJ`W&NPWm_G@v^>FrnLYW>fu#KK2 zu&rJqu${gMrksTKdcVL9`VoN@nn&-Qgi75@V3i&!u#-MhV6~npu#3)aO*urz6xdCt zNPc&nFR+I$71&c(3hb@l64*x{7uZ*SC$OLXm%ssfk-%DgzQBQcv%o?6DuF|ED=BBF zP9#k1q&u)4iPgHhz|Oi#@@sUrGUj*H0|j=|GX!?m7YOX3uM^l)KP<49ep_H~{XJmI zU8}JLULD&j1`A)t{7FW*pH95AMUEHq2Yq)9sA%6MV6aB}jzc<=F@Ml^x4(o(B;?j0 zU4*24ZD2zBj$+bxL@+K`oQe4Z+kb%gueKTU2eujW=RwGQh{V{HTK~=Ve2!h-B?hsZX*7q3<&)Q?H-KylVT$N zB%lfGZ;+{p;f|pBR7U(s8Ptx#wpGlCKdEhETR#0b-e}8XV`B0C#|S%a+93UV7?2Tv z(uTxNqk)Cwq?v#}3t@7A#@96@O~MwDQ4itZ=_rWyDQEp22j6g#sqk)@e{Kbu+QTJT5L$(XW4#svHknYrLEuahx$ z81N^}1pHxz?aRU69hK3aAPq#qWzS-&B0i~d32B|5P!`CB#rk=)6+)I{USxJ*wK zdYg&HlX1D;E%bJMpTH~hlLB{`s5}{0>I5uOos6q=slcoC7=b(WB7wW~CV{*4T>`Ju zF9_VDzYutXj%i2zn{{)6x9PzG_v*O<@6?+F?$fslyjwpfaKHXk;62)EPyGWrQ{cV2 zy}*Ndh`{^wVu6SBCV}_sI|M$UUljPD{#M{aI=ut!JgmzFKB`9wd`!<1__)4Q;1l{D zflul;1U{vI68N;%=nN<08QntQ5nU_rS$(#^=kykV&+D57zMvoV;0FR<)C`*AWW1;w zcO-mCS9x%Zz?bz>5AG27ioVZ-?*gV}AllDgf*{&YW+ihF?WdCY1~e)2h(ZXUcXdD*g=0um^D#z{q1B;(p;H4SyS}yl0Q|)bs{}Y zHxW2pR|%Y zGqHZI2P-nJjg@C&{j3&lTPx4R`q?04xs_*P{ah|&J1ft``nguf_Ew&W^>eF`9jrVP z>*pRJE37;d>*rx1J6d@r*3UCSBGylyiS_fUq2ZT__4BTw;h2f_^QocXnThrDy`kZn ziS_fFq2b#{66;4LOEuw~iS-j}Xn1F0{iGTi?wMFWd4`66Ce{y+2B2NwpNaL;&d~7B z#QN!CX!vJh{q!|7{4=qBh8Y_EnOHvzn+$vK&&2xSe_euxecxt;h%~1vjwyjW~`q8do;{gKY?|`80#l+2{Fd{30y^tv3>$K5M!*L0RMd{eBe@G zhlnxOPvCK4jP(w47>C|9Y>G1oLf&H5pWBmkza4XDM zKY>JIKfVgAF)_ya2^0}yte-$@VkMNTBvwPY9>f^yCoqs0WBmk16JxBOz(isz6|h;v z80#mnh!|u21XdAate?Qez+{1)k1#)-c-e*=r=Y)9Jq;`tI8^r+I6_Yqc)C7M;8=a7 zz%%sy9y}`WO#Q0|Q}Gmb3dZRU9vmrfyyg)ar(nFk9578G*3WHyh#=O_E+EB>_0t5g zehP=`w?R9F!}N;+hnt6V;aL5((D-tX4uG*w|A76l)78ckh#Arh8_SI_ zjmT@W;fzvOfWx=to#e=Cb8P4*=$x&-_}b_ktk)6FOttJAqw`9=PRD;jXSI6hE2HyO zy^e6sQ(M8Ic{io5oJ(OwZBrGVZw2JgH_t&~U!tD!9PAcV^j_{KoipE352-Ib?Xgj9 zD@Qno)Q_IxqNt*kJ%7g8mb$}M$5Ap%+FGY%Shw2h8?SDA>$Mh4fYxWW8sas`Gxb`+ zI&Q1e!D8)>*J;JNY>}7M9RMuqk2)p8d0rg?hdTUUEK?^H_#QfkZS^m&q%yLkyA10g zTlqZy2Gnc)%69zCR$IR`MNO;M64uYQ+6flRI=@aUXUdW}mO8F-zBNia>y!-V1Jw*1 z>Kv@oQHMF2TBH3urMIF=_S#{XSq#60t)_ZS|4UTW<3B+C?zXxCBaGEbNsD&*XHd74 z@VnURSMXVMd-93c!q1*{&NNGnwAGnjqYjDcTZT2%Ry{n`Sy5FK$o83GtJl9UrCwO4 zWmr>e^^7+<_ta~R+6S%WFzEHg<54Yp%y9ZD{3W*9@tyJYcvRJ%PJZ^Ba~4}_y{$6g z5bNsTLEB(>8~$2bwe^}gpM0q+FP19$5|`I)bqmG>^{b=$9_wXW-2)bdM@Lny*j7J7 z>sIyZk49-;os!|)sNMsIIveYCeuoF@XSLJ2cWQgwx z5iumHZz*AAJL+|hHH)l5$at)DNB!!tE{s~WR4#l}m5$nlfywu{J@p2K)!tECJl4bY z28GqeQ3o;1sdcp8U<^GR;iwT9b7cKkZ%|l+9o5%k#bwrcD6Bq?n&7dTk;QsrPUSQ* z$5CbIYZ~l9mYEWSb(W(FJ=VB-gTk8RsA`XOZoR>o93kr*wF;in;N|rOg>}B8=6bAs z^#+Bt0|K)cA~#omfg6n%EG$bQMY-l#$=f)M_@?Z z6#K$| z)={6K>B)cS6#K$|%26$GXOsWlDfX{HzWUrz%{=>moMK=2A3N$o&wk@9uT?z%h5wB7hn8Gn;D>dC4nPbUs&_2Td(^2uB{pF|F7yfUKde_t6d5ZnBFlbb!Qp0hN zOZ`u=FZ@)c4tO2@-YNElpQO|ap8g-F*w116w^QnVZ!9&={=5IeFH`EHFHQNK$mgx> zwU6*yD)om~{#f!Gw2$H~^SG<#W2CcL7Dw${N?4D$Y9(0IxHPJ2DL-rdhN~`zHnr}k z*Amt%uDT8^Y8|Q9`h{clGgmD@ov8J3y_T?!yJ{6!)cSY5)`uAM>ZGd{VT4jEJ;!SS zO9|^ISFHw%TIFOBvDEkIFBS5sU1&FI4UcMh_l5BNK6Mm)YAlGV8vX1k^QKxV+ow`6 zuBg8ys&5%qhEKU(yWAF4wbThXqFVb@saNV#by|ki!lycV1sAR%f4j1`SR(Q*!HS_&jSk+^3#Ht5U0sEFzW?)?lA{3oL34sMqSu{+{YnoiGtm zcve))Qx*P1pXvkaRNWX=_1b0X>!DnZ zq0K%O=Z(By{$>e}8}cvqsWZK1PRaAC?&)`e2WpQ`4fXWflg}!7H4*+UG#$ndYclc_ z{qg8ob0k!g|}MR)9r^9qea%b*-hZ-}}`2(B_VQ7FnjRh4r;hedVz#>a~2R znX>(A0}N7YSiP38{`9FUJ=WRvT6gj;P4cUs(Y`F=qIxZ1#ru`z-ETM4Ydr%)s>rY6 zy^;TDy_T@@{pwC{ULCutr01xYmI?yjedT0Gd$$y z#uBnjYY3~CU)|%edev+B*&1X0>i^^HJ;0-=y8rRHyR$pHJCgtj*%Ux(LXbcp5Fmu! zLJz%2fP@YL3L*j`O#~FAi=c>zy@I`gs90VL*4Oe{vG>>VTCwo|e9oPj-5`E{&-35s znYrbB&bjB7xidTG-ZRZmKXO$ixP&w&9Bk*3mL|CF;thLlI9S`gUM^2?329b1*aReM zcvph!W!7s&IM^I&P_b7$E>}&VFAWD@0-dZsc&u)JE0(%F9Gro%Oa8PbZVg?2p>GZc zi`}tVL^=hz^d6j1ZU_e_VNj5N*h&0C-xm(v2|C&4`}|B9!T+JFf)9m*z1?f$@@o9< z9~1%I7Y^2UFVKV4gt(w`_SFmFV0(nr9cqZ#I4{=sK)Y-c>G3CNNHBkap&>(JXRwZ<&2zf z1s8)vuHO<|LTX|KFLJqR=XrGY&%Vaa~P1tMoD!PbL3>C>_fu@ z-VU9E-e&I1f5II_w?kfIXmkZ|TRa>aOEE`I#`&*65aj&{vCNe+Pr?}E=rcJTK9fn% zYc$|4xl=k$M<6$l`Y&6rad^|#Ya2eY_1cDyZM~-96I-uo_{_el1@WKTvbI517HFTz z)L3bIc>n=jP zRLAK%H@|B(S0bd+XL5eGEMi*HXENIq_JUt+{r(<4llA+1_)O;e`!lr94IZyjcw)j4}_sZ*mDXvG1>oYljiqkkBWzuJI{&XobRdku9b@>DhmVc(s z@7*8q*$KVayoUCf3^B9*|BAt&gBbCd3^8~9{}salY-pd!Xl(9w@EUs^2wr1L{Qqj~ zm7^7u2T_95aH7hQzIuV8CpmR=?4%tt(1uZ$dc3*tF?HROHc5U(REATOXp<^nim-U8;R zc{$F@SkGG#QT_>(JCU(GM0d;uaK}u@GlcL2>Wc_gs36@i7r5@23E^Ta4T;blbE|Cm z^TMTBYMTjqi0+sR;EtJKuGDg~FJv~{F|+l!a7$-L=#IH{ZL#um8COC-RRDf{T1|!e za55=?J7#ttS9(bS`u$mm?wAYUj+rYKx%$g3b5tI(;f|TT$Hib$xW0je24K!8fIDWY z$pvD7M0d;uaK|jQ2A>i>wuqM5mhPA_ z08_Z=Osacw1y_nY<^s55E*E~3ZB)=5a{=5jQ*2whV=jO@=CerW>}5pm-H5DnYjAvD z!dxkkF?1jsBl0Z)2Wqj^4^#u_mWzy>1o}NWE5Y&7Dd-`(V=jO@W-7pSZ*I%d9diNP zF|(vd3uLn}B{629^#8F{=#IGn?wHBVJBNm`!Hf{yF&DrcGcOa~O_J^mA-ZEOfIDVh zHseW?p%tmu6WRZYGxq{7S4q8DfDxfP=7OX3xwQDIQ_<;;x#0X%&J4UiCAC(B?wAXf z)#jY|YIRbesHt-obPN%*0N1#rhqUD9w{(k&b) zYUlh8i40qZbvVEcxulQzT)@YW%k=_9?HyV0Sk%Fh1&>7~jx2aA>gdRV$D&S-EHp$Y z3m*}3F<+pliz5pli@G_o0J5m3!!aKy>gC7+$fDkkEPyO3b7TQzQD27xEl||ok%f;% z0~`*lK+!;FvxI{jj+j8vV22|kP&CAmg^xu;9eSfq*PlkU_#!20a&chP9yU9!O$jKujk&4QQRg+ui?(EK)jA#xBX#n4EN?)EzyzT7jWUU zEy(V}_&q}qZ;?HL@j*DXZJE80@xhlM-a5M@#dwpO5O15a zit+DXN4#Tv7kVn(6jxQ-ZZ$q-{EalkyX*KFn3>x4%;I1Re@A>-)=XmZh#w@Y_QS6e zKUl}d5#Sa`8Tah2#N-E#iycWg=F@ACNRdQMvo4yXI8_q0O@83G zSg$b8GWmhy;+jIKYw`of#kC~Sz*G+-QQP5U(Zu8jj*ByD@XE_KEUx;?;YI!pBC-lu z85yIR;8ph3sqZ2ygFFA)?Uliw!LJ&(yGACRj4{OApfUWaal1P-rX?}^1=DrsAjI)i zWA;I}ANwQGw=qy76u|KxkKz z#uI47Mjj+>z1%78Cygi2*yxdmN!uv2S4rauv~u!YM;*^gXE9vCsA-XBG4r-NUvfi5 zUT)Ony2Yr;6^2ps*%eY2=7HU z+;}rPL^s|gaN~_x&-jEG|2D3eM9rnO`ry(jfg5kaxZvxgTfWAI=*GJQZoH|DxS8e& zA|7B#gBO4ZH{KL6!WSViW_iW2{1DxEm%xoTRpdG{mDG-0OI!js-lTDDnb3?7-FTP4 zjW^5YQZucgNOqfpZoEt2#+!)eiI5I(iLX8jBHVaW>gOaf;`ZED_5j>?laULkbnggv zFJu`Zy74Z78*c)*jO}j#y74Z78*c)*^6Dhzlos;~6@(jaqPY4kp`Z)sdNBZS<4pk9 zZE1jJrW@}PxbY^9OXZSjbmLtDH{NUwE}u(0n&?)K(2aLVm5ggHtJCVSf<}aHyh~<@ zSgy27=ww9b#=GP~A#w3tGHHzi(r6LL^?1nwyWb7c!=ek9=p}K5=*GJQZoH`{m+hV0 zOfr8(=*GL`Jpo&MP6h z@h*WIZ$7zk?V;utL}XPNX#WurQX8(7PpYBSbgeC2-@-Y%YLIRN4KTvHt-8 z;KrL(R`7bB$+m*+SNCyvfa_pUGu+$OE@_<4ta^2u&_q$l8rJ zxw%j@x$MU|lC>Lea&!G?qHNt=DT2{%yeWe3mJ$lMT}n6JB`cKtkKj8eEkqB*D{6xV zH{QIn^EFh0<_^S1Mgagf-h6}{e+odYF5lo`pkro)OC-&lud$OgTb|tTfbk-(kf_P^ zrm^&zxF5|xBX=lm6X6EXMyi|n(DnDp>n+Dj6SNe|zp zy(Ll8ZPLSc>10V1ne^~oI#m*FOnUe(oh^yB=F^lmM-s(G zgdV<2m&gMl7wJkr>HnhL=;6Ecg7{C!j+$K2+m;@_9eDWWa$Ut8bw-39zMa?PD&yi^ zog1QuZwDT}dGT>AubWK|-wr%{Gn-3$T^aQ7?Yt$qTwevAdiZwW z;hWi4dfAFGXvuZOA$s_B;NhE7H5Ul$Ih%O5JbL(cewIyt?~*PLKRg*BdiZwW;hS>{ z7ZacS9z$1}9=@GFL;zPBCj_`U(!;j{58o`4OOPd7znWo|5u%502Ohqes`LSjp%S;S z67=xxz{5A^^b0(M5t_qBfroE0auKsGup2#mcPf<53(>>30}tPnqOBzXAdyJTH*TYC6*;NhDqqjfb| zt`VY#ZwDT}sVG-VCun+z$>iOQ9=@I1r6D8q@a;S-YI8ZYRy#xw-wr%{Q_dyKW<-~r zK@Z=ZTL?$SrNH4UQY<`{Ukgrs=+wIloO<)+N!RC@fKzWKGU(L1YZJ{zr`}zQM0y6D zdUtKF<81S z+FEC#O={4ocdzzAzP(p9=+wJchu~i7UV~1(dzI)!+6ZG8GCR-*HzV*hN1w@zE;s6} zfOZtfy+NlGh)O2}N&*6BA~Tl)88Jj2V<(Jy;?x`RQoH?wJd~G^Cke+Anp(efs%kg zjtbF{krntYYC|oVqFX$po;dY}*eHhZDVq{aoDeGsh{b%T^<=~lk&HnkG!>`b5Lx+8 zBKZ|Xzv_~JNM6vQDI*C@nbMkyQ*Vg9yZb+AiU}|wRuT}q5}DGXjA%_6)0&D?Z-`9C zC_QE6x%1H1R1y%$ySQk|2sM@8@`-F%W>GeNXk2mX4f(VFNq)0r`I3NqJ_Lx$j2I%8 zF)bAh+=5QMduP|&2dQB?_3quG#qeJEC%+IGz3J4ucaN-9h}Y~ru?Z4ACDFiWN~hj^ zO5xPI>|DKfwQQl@gIac;-m6-+NbfN%TdenrmMzhHO3Rk&J+5UJ=)J0C%k-YsvgLX& zYS{|Cr?hOP-g{bhq23Eywp#CLExSnXeJxv~_pFxTJJI;x8Yo+*_o$X_(0gXfF4cQq z%QosgvSpj}-qy0sdXH+^7QL6X>@vMKwrq#&SG9K%L7cc!9wYe8zCEWt|@7LlH(8~HX?n5WDMqogeIt!7&z|+(M3G1sB3o1*&;wg;odQ@JU+?{G2y)uB`GzS^nxg1*oN^wV(IOOPznc0L+v>8EPQu8pKdY3n-&#Sd5oq7)$RHNx_n5Bo-tJk#6#auApI`!^b zY`+I-TAz+_UZ!OCE~ z1BhWH>Gl_)Q|}R*@7M;C5oNRV8O=(T%P>d;xkxTu=&n<5 z^78^nD!m1rdiSkwbHHk+-h<+icYx{3kv%A$&HD&QAE$wBWM)M-k&1l zX#kGmus2AdgXI<(G_1>zr=5C3%4wjj7pLB?nB|_BtV{JxH5G{3IP9$yvjI-MDSWwM zy-hiX*Pt08X9|eP+JrnYbm~opkpPUNn4J{UL`w-7R%0ZcE;nI*m`Or2lN}N@ITuCU zI9oSrvc6H1`bJHb7G5|PTdOat!Ph8ZI`tmCqh>B7bfr`8(QxX`Qe$gz(}->7ZDj;* zF=O)TtVC{@PQAyr%K1cueSn+@oqCVCT6nlcN5389CLSY_hmkV2y}UT&t{qL{J|81O zr`}`RrZK^dJTgp;2%UP5xw00y2l=__+NpQCcIu6QPQ9C%a{-E)oatJ0?S}URwd@9% z{W|$l_3QU|%r;q{akg_KMCLhPBC%0*Z;kzi-TMrih*d8FMq(fm*^*G* zhmn#ai9q*Zq|}i_Fnhy05LQp~WKVk=iPJPs_7+m=Yo6>iD0Eyym*<<0kZ2?cGkZNL zjU^GvKKL#YxsnKHKgL9!B&_VGm}n}ANcOFtA<;|{(d?c~oGyu2c3&o%OTx~sLZTvt zi>c5Olc7#Usw7Tiwu7{a8tFTlq3uCzF#7oW-7|BKA+x5Ri6{6MyA>2y)D67$9{PR& z=K7z>RxjgXw5(w+h2j;b)!v0fO|#--B2fW5*g;JOth6mwpO=T z)U9W>-V92+jGIxB(~N?K6&(ZDW00Rd&{L)~p-d;?*UEI3cqqQ0>Rh9uizK4)0cRT( zT_v6pA27wJ=qB-6x{U4_52B0=qw4%%Meo3g4`EhkAzd(@D*EU`%=_7aWez=jD033~ z3ZKqJA{ZY&*r@2|v_w2)PGg<>3rjRUa}E?3U{O}ge3~6Gu+B3msB7U^)T3fh{69#v z4;H@6)ZlEUx&{kZGgU6~%7TT*piIS(x?g}cAXq3ZGE`{i1pCpEam6r6ofpJsy88_p zX;d^aAI8*M^;V!_R3HTdX5ApKCZm&UGA6kuW0PufMsiKY>6(}|Ild|~e}fjWezT{d z{l+`dp>Wq5&@0WjbICCkHHFV|`yZ8$|nmHIv zJJBuu(#z+jUHIsCT{Gio=!tIWqf%Skb=9|D9nMVo4w-K0FE@Jow`H?xbj$pc>~875 z4*%%-E1x)aIP);s-O{D-OFufCxdr_^(Jj4={KAip&HW1f5Krj`8lSDUsIi|TBg;nZ zF>h{F1AjttLijQ?Q5wdq`ehPMGF|axY*UY;V^mJ~EeJ4TOZwr&`%&y3o*v`r1)kpK z>2scb;wgX&D^`Q2x;!=GsU1%}c^bmgc%EkQbRJKudD_C$4LIen@LkZy^&BT@&Tf(p z7&)9n9`w>mr#WGGbWYoxB_y40`gc0uWt!gizJCe}(&Q3w+JKQH6sLXe`D>%Zvy;UWGekTdt z%y~-C%^dC!4pcUCxF0ye4ZT&Rg03;l)x=ZhbmvE5Io;s~;Xvi-4z~lh;#S_OE&}T8 zv4Gm#X^Ip>?h0ne?Z2(Ky|=2HpwCP~7dRsYUEpvlaGM5AP0%eI?)QywJ8xB)pr1}cw{-3lbW4X@e*={*9d7iEa3gP3KSBSLgf4X67j&T$ z&m_9gX^k+#UAk2R1l@ReqKjHNDM$q>TRGh9%aA*JTXExV)kHxLO+vSJN(J58;U?ce zWow69dLxg1580Ch%{{sj(d*b@GsKk^s4Q}33S*ITpD-3Vual8`ajT{Z{*cc|4zRRw z_6bWH=VxJQf`vee;T+z7YQR^24%r5;*RfOK-Igr$?iy}3+tBW|FwtHTYq47stEA$QRR zD!Vz{GRu(rV;OQYY@o8c!=0}Txy_X!_p}BodpO*{%869UN zmarEa*}4G&6K=Dg#Ef4E`YdX&@G>EwnL zZn#v!e$H+;Jm`k+NZ8-`!wtDLF;Lmx;TFV5@CP*MNNL1pMoag`lBTD2yP07^ocKaPMG*`~Rv| z3A)ypL{&#RzYBV#!)=6tN~DSAzQ3yT1l=_WJ<4f@RG@N{6K|ly)(At~>Q~iA3H%%n zE-7F~JEMhXv@=k6Mmw_+_TkRHs&dV9TQwe!ag4KG7{@ppgmH{>Ckx|lK1}k0I#!Jl zg^hLSk(%M_!ZX(SnLOOVS2a-c)E?{B-Ye$}=U3r5!-+Q}?-@=zgc0uAtJ)@@vXfcH zIR(fHRE~2-3ClQVA;J)M>s4jxr4|c49>6M`i2|>1b_l$};TFHh#Xkc6sg!VC5_-I| zQPATZ?)D2*j(0wzaBk15;%hR6MZih$3C=-*PjI-+FHkwb;hw$__vPU}EAYS>i4LFW zd?oOS4)^y3DknPJ%opK?ys9Ol3tf+UZByywAQh;rbhxjNAvf_wxDl`FA^}ZELRUHT zI3B31a=4$5AvfmeSCq+Ne(ydg}Cvqs-s?t|8Np~vU8ol zCp+B07pR=vAr)&7YB>0&Q zzl0U2Jk$9>;AcAATo>ZrxT;1PzQTj+Z4H6S+0GQO@f~5aPwS<8{n#1>Jn;=Pt^G= z=eWSna=4K$PHK6`JwzHD!>wv~6sUIm zWZHhj=sfduell$Yf&66JR7S?N!oMg+4jjS)Dnwc@xEGd}riMXt-=cPxx5gi6q-g1D zaQ_o{_nnVdjV1hK+6ctjsuF%O?MjKZUOE*yUBSA%0Y9169ns|t_{p@bh@EK7Po}*_ z@``08Wz*nuhq=p3_{p^5ZY-iTKbf`|QC;@**Wg-S2q%`e<3M>=Cr-3(j@hhncMr!; zrnN$fI=15{)7I+5iPrpN+EEurnJbo0dI~M}mP;qYBz`ijV-MjL+hc>t%?;zno(9^a zA?mxY3=w`Z?Q=%>$+T8|(ZKv<+J~rhg9iL$S}k0eCtCB9X?+o6{rJhW5zJlQ;6E?o zgBiW>(xRD(@rET$d3ez^cOw2x({1pl$Z9@uVioo}*5-al#3v!%gmI%|cVe&jJNE4) z?AsdK%)A8Ub(~3#=RFQSM0?UH#*@yt(UE&9gTMYA`*!UF_U$Hu?a$XaYC|}!5^gmX zV+BJH$=#tUyh$62Q?sFnpdrd|6!F^xYC|4h3(Z4%CiCPAa2wk3Ezr$KU(dXAcoA*r ziHpT}73rsO48-?xHp)J=szTUwaSYmwTb$Y=ukq_*u-3#e=z-6Xw>6b!lpB!Vh@;`= z^I^5X0K6L-*2d=_7U4XUA6{!%bE&30EfmRX)D3w%fo?Ryi_G>StG&oeZlv^0M6Lmt zV)^y2{(SeP=7;N}=EoMmkBEun?zWSX8lzilv@Z_b81oymG3FyZn|ab0^V_g7_94B8 zd3mhn{LUN>&mnyT$Dpe3k+;BM1KCBG5OA=8&XopQj?@6=j5gFl!93FjYaMa);NbcZ zdO=k8h?e{ z*V|%kE{?|UBk>I)U*W*VefJ`1E&x`}U?NxJ!^jO3BY|V^-AG_I=Q~|BR^0-L#vz=_ zz3Z}^ABg&fm}%7b$PY07B76yYG(e`>{Vh_B$(Idr88{k!3>v%An0hCrc2vd`Brq&lxWCI259*+u4-}fz|b<@v6 z+}!f(iDlE*@tSI!#pS2wmLE?nYnTOX?*RFG6v833fb)iGRa*@U#*A)8!v>(=Pj(!j zt2Ra>?o&L1WW#QVyo5-e(D3;%a6y34s1gJ=V8a=RP{*Evkm;k*0+(32)FrZ5&MP^% zt_-Srh3tMj(bX8rN_6B~gdpcOOy7%);PXcHb?76fX}ycnIvV{&K5cy2z1nZaf1=7UPU?(*MX+^@SJ zkH3npP)C26C5D@a(NTYyC04|^{=`eHi;nXvEwTQH+x$vPT9XW1U*HWt+z$DS+x$vP zT5cxg*!)UMT3*f?V)R#9VvO7TN=sVPx|DD8D=lgHwf7?)+k?|XN`Iy$#vGfUX-R7q zXX!RS(~{P*;NOUM)SqdIF>doSEop@i8E^D`}J9cv$BoS$h) z>z*q*@G~uG{dJt5X-OL(`q=zTOWKa?br8`}f2JkIxXsVBq+MQT4CDMvOWGB6B%hyY zN!ybn@xzmpk+!!!;}0v-F<(I>_B2lDtH;^i%&@u5Iz3C*lH07)vvtk5%{o0t*M{4y z)9dIO3`YOd&eAQxO^vm)b?tYfrEBNt8go-)?K--aAEFgAnrHpW8go-)MnQH>mdj0z z87;E&8Rw?PjF#Em80V(OjMmvEBQ!y#*B_I zsv_PL`e$^jAwB;_8sgn`oSPamdS*#Wb5mnRS(c11ZfeXJlqsWwn;J6)>o_+xW(;W{ zqkx+lGsbH<+|-y+sWIHtm@zeD3Ur9YgD9Mv8Z)NF&ql_$uH9h$joF7%aedK99Z#uw zKNK{U(nuXomBfh(8mZ$o(q8~70-_kHD{_w^v!+kV_95-XN8U{3vbO@rJSYP?xsGz+hb4v|B-3;d~>WXQu{O`g9}SRHCYIk`d3BXuuel z7uPoJLoA&(?RX29VV)6hDLSe`n6cx95)T#9rX6o3iD;BI?RaZRq(o`cju%OyR+Khv zd?|r7&xq2d9d9d%Y^`pws9P^e3vRq!hFOC)?ST#B+NRww?RY;Y4}?&38Y|sjSfYhAYR3mylog9U{Rt=o>oh@0T?f&q9Ul~L zi$we2AR4vfgR`0H8XQEUcD!8Vl?4aUs2v|tw-;ywf`g<D6QJ@ip&vEBX$9;+VSzu z6eRWpw1yKz!&?Gc!-*o|m4Mc;Qc|#LZ^aWud`jSQw9y@wr_|JBrKTk-H9bkG8Och` zbd{1JIZF~T-PmVJW82Zz?77*}$K9gi*z$8E(JOj@7x7$4^o?G~v3Hgv21YL>>}*L4 ziGE7~^CU4Mn*BKv^CdAR`XdFL(_jHAUlDCg0SoFeu^}p*daiWp!Kn1X z7bZ8=YTZ=2buNjxNnK6!h8qFu_Y^ucSdh~hQ=Fmt ztxbi*7TJ`pRR7Bzq*`Woy&4Z{NDe}i1`8!w7s-V|P+Mj02V+~Mu*j8MhP@2g@$*ey z?Az5xLzHnK2z@ui68dKKQO5Pupe8coID$<1`W`PzX>^<5gQrtfwn zlk~kUNPWp=*bi-lzQaw<<{k1&mGK0$<$g}Db=QwT6{zhafImT%nDVu~s}S1$2iaeE zr2nV3l&)02q}JVx88gwiH>rL}x;{!($zs^&EP|?AO-@dU zp==zB1l!oHakpK@RIoUDH6AFRqP}$;t}KL7l9Gpk%*NX=z}iKzanpE00n-)q{vIaC zacA_{wG){3sVmD-F@7t3sz*0^JW2KrsRNgTv;^5Jd{Sly+(LsTDXnn{QjFRK(sdqL zz04-ln2srZo4c4pp!46f*6@u4rZi>pc`oJy(7*OE?jOeh5pN;tHfj|8*i zJ)}EZ?_KF)nt@*EVT|QvQx_P)E~&lI{i+wT%RQ1-Rnxns4qgoU6wuD{>7u5lcT1hn z8T8elZSv`&qNaCGEys1Kt^;kqPZ#z287Mf|vtb8b->UzK-=S=;hMyzV0VCsooP>He z+==1;xvBcMWU^1go)`ePh14KExdi*xV}~A$Trhj`93$8-?ZC~3@n~dF`#7Ne>;C&D zypo6vI*vvR4oG2tycro3%|dEm4pZ+$jHO(YnpwLBpLi#4Qwq-jS^Z`DofO!nmL5ZL zfFy&#Dd(TSlR>S>9Zi*S+Frw$G8c1jtXA!Ar@QIvL5QW*ylAO14qgTNo)o5Y%+uWT z<{C(+htn`~aZ;SJZ3WYHA4TKJB-yzuo@zP|#HpkH{AlcH4Cu~dnLC%c+HF=_K2-A2 zx0wG0f`+8c8g4pZwB=)3Z7;2Kx`~$tosY(Cy>zyiIxX*rX%8bW@`(pN*$@ zY2f*!&c^`{e<5^Rok(})-MlkB$33F>UBN}hlZ)_LPw~To4e(9DIla-nt1$CtnS*S8 z9XtEQHMk9!>r;Ey#8U5LLr|++$=VW_hic~HZgLFbzrzt^LJ_B0@Ah%q1Ft{@k|LmF z;Yh-@LbegTBaR|=#>i=0rCvaR2kK(dMa|oLaDCkydHwbQTG8sa^HIniWtnVcbB{9( zxIRB(Z&3~S+^T6_V_l4l!S7>;nfr>{p^(At4j_JQI`fUZ!QGJhw{y>DeJB?8DGR4v&rD`=2H(Jjf!mD~@e1jv{2RLZ~ zqjWR=a+AUDx^J%Me1I!l4-AalmDO!}i{|3mH@B zj2l3@vpPBVzIhWXWgRrm~)Uq}`C6>JGzNYR%&5l>gv_|ABN1+@kE?_i)SBR4Pe(HAId0`5B_ zeYDhpCqs){sjTH^!LN%CVBK|V<}~G$u|`=Np2RH<96JaS?RhfFg2O@IrmXX?fsa4X z?!%$S@Lcq^Q8r;7=sT44L<`tXK>Ng}`$CeMv+Ti@fM21kJ^wb0=T!qZgVrO z4?x!`>lu_OmrE0%PWO<;aG~F>tgCVP3cVL-wLWOKl()k@zE)c~MIc}RUvH0QJgXlKCsbRoVA#!}7(;Cv6H z^e_<6;eeHn*+4*-0kGEx$yA{wJsYqF^|$;GZg?*y!mkGP=s0r=7f>1LDS z>IAJnF*Kz(GYkKPap)?t*$ng93Ykcg&xSI_Xt`qMcj#^A86&I%gj4q z>f9+G!Mj{xL6}&gG_!~> zO%4~*f zY1}|X{)M1joS;vje!GI!#`P}!TF`Dz(4XoD`o5sm0kt5TOoF}*{b$}3w05EX zLjMS~FB0^dF$kdH_9$90~mf zR4p*fPNwze>#o#kpwFu=RWL(Mt2b`_EKps76PMT~$uWz{QF4`Oy@rckK>Go>*8>@v zKHIb&e90~7MbKU&U60k-JHUUQX+7mB`z>fcCHRHD%Cw%qB`MXfQ5WyJak%_9<4$dE zM)@7wsiF|Hj-*Rv_4Fm6U8a?T+RA(~0)UA=NKan^+Gkq#UhjhFzihP+($klK_M6r- zcz6{_djPoE2kDvV(W{`-lcsey+D1S}0C>R%X`KZ0x@omov^!Lg9l6@4NF zZwBg0A1O7?pUz(F9kRIAR^16AS3Yaabi0N5lr$n_omT2fc^!Zce2{Ju0Zj>6TQRRm zQNIHaKFyP)?+pSvKV(hZ<$@XjQ0#*!DY@MQz8>(~TzEO46McA6y9x5jkoBLqi(CxU z>S{>C6wqxUi~lu5#XSJr;e(ReO_2WzS!e8akz8v1s*ltoMYY2e^k>M*I?KHWeFH!M z)3$Cqd8$pw%oq58uyy-DR5A;&d><;0%Sl2fhOMW)q0$4WVLnpi=>`{h3&U1$k*niu zpw|2yncSelb7|O`=-t5g0)KCHo}^Y4_};Mf#MN#QF9Q1h-{E*y%(i$SY|ZQ8B7Xxa zwSm_bqIRM!H2m4H_14X9)8zx&!G|-Z|Kr(r560M=eHt6nJjh!|*s|z+R{C!OaC3bw zzYrIhZCQ0+apkWAYMYOwd>2$;S-*JCAh#p?P&JSeWPT0wu-VnJj$Q@5UIpSm9?CE; zL=ol~%lb6aRqB7BMH>FS=DODeKG(8-#gr;_Xas2Ye}E@3Qrs4reYOxy7J*R-5T#FtN z>rea-7M=%yf8`WBi9esZ;|E2o)n4O%4Scxq-)k;a;mOr)OvGXhq?`u8cRU48;t#Yg zXL7{)?J<{U1n_fD!IStKt$CJ4GR%LuJnMkJ%IEQsN+z9lKRpfIo{U)IFVpb*fPBeE z``48oj&e_Ew}Qj|nTXY(M6-NBIPR-@?n|&F`mx<1Ts`K|h;`2b%~BWe0-q%TG;hRM zGT)0>SKv8KB=rGm9FctN&~F(05{&!<8v*}3Vtozm)jYtK`a;>pm@@j~^h3njj@FQ3 zb^x&3lZQ8)t3m%OViiJ=(C-87V1j-y7xY?D>$kh~J0|ryXzwKGMNL6(7_}bi;p+P{ zXf~L%zJAT5{R~s!g;A?6o>in8xque?aQ`OgBFm%J(3f3gIZzXQq%YV-Rz|I5OI+k) zpf2{2>@&CY)>L**)SC9Ni@X-7yM1I*>4Mx8wT5?bkw=00&`0{ECkwtRYOO+(OSS$0 z)WJn~QY#py2)-j~wRqY^<^k2tMlojOrQELUBcct_t zKyC7oCo3!PZ=%+IJfsNxWcU#`N)%%6?pfUb>A~Cd=#M5{th=xL5_@BWskbZ6+mtF zkx9y4^#GKe9J7w&@0_S`3s4XF$RuS2xh7`4{G^NgH&FCDds4r;!$9EMV^(Jm9>kxE zbQ~wa4O5Ue#H^oj*@+4*fa>fcla#ffqMhG*HuhWRkLid^2Vp!=EjYxe}-y zKJw(275Jwy>-tVE`~aYj{vD2gd{p7rn3cNUMZN{pmp(E{*?ss&YDR1;11j891J|92 z>8v&m-2kE$PlkE=KAh^<*5b$Y+ey_Ds1hH^YPq0AwpF^;1q}yah7a<^xi5P}=2qKU z)zXEp0`!`HfJ>LT{U(gpp`6(+@HcF0 zB%ZJYUgLDU>%ehRQzX4ZEq(VlJU+c(^&6#(K0uDckrIUAn-Y`$E=f=R&<8q{_L_ia z&(EVL7Aj*A(3g^9<+4+AoY$KiECVj)&+nm(TY!G(|KKoEZou<8yLam7+u)|7A0o%M z!SFQ%f@17nI}2K5_ixB}>}`nZ@L7=(8`^Xf=G)L_HOK3_b4G&8v!S)=qKvQ5$4x+K zizCQ{B2GQcuGhHjfg7;0k)(m3R8+@(Pn>5%Bd6h;$*k3olVm32hb_cR7Ie*I2aw^J z$$o(x&rHUA-%M7YQew<%;abTKA+9_N*>9+>Zy_TJ7BUv(TgZOefW9ff`#&5(>n5;@ zmY#)d{&B3q2C1b_meM^7+4W77L3|&O2NIG33BHBwm0V4o0?I5;fNvp7r{{xq1 z0ojD(GD1a=XCYe#EBMXGy@wQ0Qnc_aWbI*F{1-^CRwsKFvKukfXd(LwefLN=zWGS&ld43)xXD z>!=U%_aOa3vb2J4Asew7OKQ-QH8CwUz#(L*h_=-D7P9R#lu-;o|LP#}YNT%=yYd_@ zax#$T{2iUJkj1v^4%z_F1>}(EL-$E9-KpFjfw8VJwEoA2=(6Es0QOY>a zM@t=eN?6G9cPV41576}^z_*YMM{Dj!#sdUNYx9(_kS)iYb`-QXap*Ce%WKiMkdtvtFfB&j)l3)ww?VYx7%1%HRTh8I}KMxo>6a_j@tKo6O)kX_r*rB4HGo=4Y{ zr?%d}LN*?=ga}y=zz!cI+G`LjWZ^UybO3-StATW5$b_unu#o+j;lkes^v6@crR_8v z7P7auy71K2chj+T+MPbXXCaHS4}A;S16Z*|jCvEN_XuWZ8lHtLH35c& ztnn5l7!_)ZdkPM%nQtL$fIEr^%LT1D=_1Uxko84xung53v;hfz&q8)HOh7U*P6h4E z1l_Zc{VUU@Uj*9v1l_ZcefFoWgSsBHTN8B8Lbe1WP|AN2wC56Z&q9`pMYuA_eFEB7 z3A$$?`(dn04;7>SINbVs7P6Zza_PCCHTUVhh3pqRrK;}8A4-~BHBy|6G~Ytj6|3*m zbRgzeLnSO^Z{bd&)`7Uu0~n@fA&cO(t;oCyv^z+b!Q)%V9zPenPaywAk5?wFgoSMS zWdM8v;#VFZVIhlQ873c$R0!{~Z5o@*g%&pViJA^T&k5{xPWu(Jo&rFj;z<_Qj1 z$R5Lv9s<=AoX#SL-$aIIAv>P#N?ix~Hey&mE!DG--Bi<+a~tUQSC`{k$a>*=mcm{J z;0+Ii_b%nQN?{@UWTsot_n`ekx-_KeS;!*Tza{*&+GANG4tK137BYNJM_0c!XzfYY z{GNsEzO&t_Vkl@89=|(%c^0y~(_GL(09N`SJ$-o=vWuaq%uH7TaDxxh)0bxtenYmFX|;$pDz)yJWGiJ-*2FJU1YIMs!h0NT%o z`?tM>h3wjuE^;zZbE_c}7P6xgUC=rJb|ygH&CW%_LRJ$?@I}wNfI8$OrN+L6?BH1# z?XQB!kGtrK=ynr(5iDd+%yy;xN&sGsCTi=NpI{-|kmiEw0g&&5^u0kO!9rGwW&fg2 z4**8{pp)B8;INQgI?#pB19YViPii+o!a_C{i(hsB19d|+q^lw^F>zofhat%kgdecL+bT7@NZP- zNorMr!$Ni?7B36@dq7pGS3^-oUw?vxg>0)g!s`Il>Lg^MeFY8+S-)v+)Aa}R3?I&z z{(s?F$k>>^h3tuJSDh8WZT7jeIw-_N!a_D>j4S^ZpzigNl<$IIAzO+48PWqUBK!Sn zASFoOLiX4QbR9qJ^1FvJOfeC`Lbk-4FEa49?Q|S^6!=QHvzfqQAqx(7>(C3($^QUP z?mA(Fh3uW7F5?AYy8IN3N&P20doAm>kuJ}jz(4g5JZ@EBA)7S8g&za-_^IHDo|GbB zA=~S?JheOH(HDoVzVxJ=^q>_uEM)2HU3gDGxjgk`_{p_^g{%+eCmDt30l(oNc-&gR zLe>FyK7ro==%c5CpHvH2$d>hUdENs4$5Zem{(S0=hlOkh=TV=8h3uV;xH`81w#OIB$|NjgF-%UP&jSEF;>k-` z$gaetCG*eGq-x4g)FC& z3oiq7v=8@hf_VOF3hiMbdjgL>B6uE9D}7|5Z8Z`WvX0owF32l^y46Rr&)m{I3)$`X zmoLaCfqKnHCYA14$jaBa$Zvr%yZ=+Q1P%+?CwRvtf=>gq<=^263)wxG{RP<cw?bsr2ddCVCMhdOSje`tcai;on&2Z(R#xD!ko|?n zY!SQ&&~<-@CoE)-pW!0+0d<#;Oj1_NQ?QV=xX?vD57aw8GD%rM!a_Db>LPyz%I@hk zz{$!A92T;My-xC@R27g>siQ_m$>j(0R8aq@PvizhAUj;A3!<1yjDn3*0YeM&s7G$*RAq^;s;&a z*}$K;d<$7hQ+J!(5TM5SNLDLhA=`ro!u`ll=K^qv50d7PQxY5&vhjF*An@w|J@OB5 zxft9l!n2S?>${Bag6Z=FBPOwgg=}~_y@Sw zLkv=EO)*GK9_SjR#IzJ+a~dmE18nEIqK08ytwx=PDZg(2Sa!uFXqlW6hhJwoH{~|G z`YmnI3sUT?yAbcxg8$TW|M(B$U25H23yxxddj!W5RHh$@+Nl^}BPLEw}mC_A7$@J6WQzHhVe6)a)51sBUpZF+1P^jE@1W;R3K+?3n{18VO`Gdq;i1q z>wp`wk^AYLQqCyceI@|63dcH@Gtw`IFsTD0FxvG7d9P~SAAFmlDcO(RgHq}YjJ<~J z9g3+s1Do4;`?mxV)C-iw7#MFwyyC5S0F)OKtqrG1@*yX{9M++)8X;a>YU39qr^mr>3>yGX+8?BNpLXfKfP7W)bb zZ?hkk@DBS82@lx+lkiTv_73vjWfw|#x7}aDd+eza-fORr@IL!W3GcUOUQYZ2_Hqdy zw6B)%A^Wg|58Llcc+j?Y5_ibXlkl+JSHj2aDH1+zua@wLeZ7QF*iT9Lr2VOcPuYJ; z__Tf6F3S0r-BrS8>`DorwO2~`oV`oJ=j}V)@FfY4+TXfi>J{XF!EWJ(10{UXKGO{^ zk?xCz3vt;&H>BXKfXt_^^e zsT#hbFw#j}rKZlq(mrJ^>1fF1|1miT)*P!8zN~5GDQg!*bDl79MJ3U5IDuL%mDL+V zn3Ekn^Q&>>mlHKIa`^Vt>IA#ZBz&|PIlVlPk;8{Q3tQec)WuBzY%@KQB2X)l^GRcX zMkuS!D)`g{Xd^+4Bp1RJW>$r=Ry5I|yH5p@#+jn5mWws$O&=u1u}O@a)oi8N*kc8C zne#t_rlUBcqIq*3c^n+el+_4#AWEO(aU_;37lrBHXap-Xmc<`xXh?+xJP>!G2uAj&>IbOYQy=cCtrF*x8;WVON_zjKU4O z*?&p8hxq&mV`n%$*MuAPvbh5~+_1M@Bw?BTf`onTwr`v(aJ+H)lwWG|6$ zu)RjYa(kF-yk>!H0MV4d}g9@-|_T`eZRoRWt2 za%`W15sW$YJ&-%J*9EK2WTcij3gH#L;H$=H4c(U z+juIF4DD+J*6z(3#QmRIk_>G&i957!4Oq?b#+W%T5Ofhlx?$EwJV7-aIW+F_6_QL_|INr)Iqp!!Ihc>&- z828lU@P^kmrF;lh-24l1vr)O-9f|1FH$WJg!ad~1V~V6k!)qS7)-Ya%?pq*gH;y0^ zN-(AT3TmT~PQPpLPY0y?JhD-G$tqArIV-M$lUwAz(5hE}MSHCBR?x5VF}f_lEV0V*@FAG{K!41~XgPZqLe5HS zKc*74ntBWLPdtq4nu9BG8?Cl>UI+Sd&_d8sH#Ef>k1Kw}vC-z5!@B87PSpn>mmq1j zg^#ZVd6)Hxjdi%xwWCimViVB1;YR&xjz%6LB{|GEqB7Anje1A!$5Rd4L@^iM@)}{< z`=Q=*5K=xN9b}8AR?_MNJ-X`@A;xuR;l{;w zdx#7-Zf9SB_6Rp_Z|`K-WVwCL)eKkIH%hq19=4b1i|u(5Zm>5Do8jDP_B;uv+iNA9VegS}rhTu3v+U<2 zJk$PA!r8WYJ^AL?xf0H^yGc0To+jY}dyRzW+BZtL(0)e3MfNcX7u&x`xYRappqyoP z9SJYATS~av?j_+x_CyKS+Vdq`XI~=Wdi#Kcm)eIU++@FsuxFD?Fsh;}l*48GE$JU4 zx=z)3T46pOjQ^j}yOlKy)8}M71g8}}(TLqg<9P^E(pP|ve{v-X@~5Q3mn-8j)@LthH&7H){*=@be@TUW z7^G)CvR-!MO-Tc~xvOs8_vqe~#5WN=>+#<&hbG^j`$Lm2rv0J0e~U8y0=D@mC~}nA zbVe*OG$|)W;;Dybn?KORfSgs0T`~C&L-Px~roGBXlUJAM56y$eabE)90fJs-i}*wH z#<&tiU-e1;(B$KYKQ#IN%paPpfecM~Ia5AunKH^B!UIxy30D4Om%~V>oOwsNk8;O*>cJ5igTZld4XFO$*o$pK^>g4828f=u~?<8!=b z6Y@JCeddu>Au-Oi-?I8-sU zIRml8;GmosiKiYMOO|W)4b|8clm9R{X2X>7kdJ23xHr$G1CUqsL_Wl_-eHoXL#_U{Lx$K{;UB7AAJIMRchv)tq*QfofH43&3NRU25I7Vwuf9TzDfr6Bk5A-qu;?LCKazYsx;;$(2rHaxCOq-+SkFm8C0K7 zs=onbV&q9n>#mx8Ewr{9soKjiLX36;FwNMx%4&`akAtu|(Cs`9`P*xhJ%Z-43-H1O z)ffQUIG;`q4azq{0KvJ^-ak>?JRp|(C}}nM7zQt?#KjTg#51iDqt>y9EBm?Wc=Bc> z4V)68A`)R8B*I}Mk@LLB6NrqbAR}O&*Bm;m#akzI-cGcf`VD+1a0Hn$h6{bGvW6{n z>DlA45(bCR)wKk*k^#3!<#5EQ7^#}?YGu8KD?sE9MQ)YP$C%5^$2WVS%8@6U7ztXb zTa~p9m!2?hMDDfKnQx}Dx_CZn*|Sw9n@Yuq(-NLlR*MyG@h>6wZC}EEs;xoqDC;0D zUn%A%0E`J<-R@0*jwx$ijtj~G;B+5ENm>mp?n}6wI__%S3#bu3lH!t)!GQJL1Xt!< zpqBZ_m(Z&&av{5?IAHCMx%Z`=Kwax0_3+H(zu=UILY1iN!z|<==udkXrRz$JJtAOD z#hVEMeE`7MK1kP9Kr;i@ixC$To@f}gaOlpaUPeA&!PrX!Rv+}NY6@a|A0WNTj&V^p z2dtTMfEonE7#}5KTJZ_jo~JtBiz!dZqG9`?fYlmP6p?BLPHQ|CqZQq2+2<(hkM%zK zNWki{N(o5a0pvYIKgPmkiLm{Az`6j-5k%Sxp#9sIrs=N*tTiWeA?m-N{Ybj-x1y6B z`&`xPHFkuoA-3NOSbK7nfK=T|{B_5nFOgRCvSTk$#cw6hp9QRYQE`G)f1HL8EwW{i zu>D=Y`o5nlZ5C)}lP(vWrvDbODm%ISmw>i8!Oum+b}(pV4|3~%3up%tbS@&couKu^ z3Ab*~g7#8^&PBv_M$me$hb#X}(7sF1xro?4EohzS?9yY%sENbXpZ^H#+@O^^Ov&}E zP6w@3g3ftZt(U^ky1f9{?E$9u#v>pk5q1Q64_wct)YFh!?qy)dY8vON5>zt*rrUdjR=IJYILK&`*rr!?cd4phN!y;>SMVdB`(l z5uiQBv{vG7t&W4pudC?mF_Y^VQx=BO2D?*9Hb~7pvf>n_OA*%~_HNS(VTP4SrzcRu zt0Sd2jlA8oYE`;O_}?}zsE(9LQX`)-ts8Oo6`7XCSrva`$ni@`%d4S`9>?*JmGV=l zW&=ps4%&4-U7i>8Wbj)tK<}wg<_@490^&s0eisXVIrAF;Qq6-Yc@`Q^^wi#k;Th5!6Kfoz=U)Iscs6obc;C&^!f$KBe0&@T!JPBYO&- zRaD(+PDilrbKUyZo#FJcZ$m!l(-%_oA?I9Q^kYe)A8*dNOp89!{4`HAGmY%l7znEF zMCY<((N$VB=+mnvontf|9Ne-K|2#Hh5CEnaaVhT1=im#w@Q{S`pQJG2QaS`jf&vqlkvS6-MvUoGW-c_E+!;KECw{)6Z|6}oIh^0g z{`e}qFwXC6-zs4j`)SO=;rwp4x|?BlJ5|CSb~6ck+Px+0Wmieq+dfaiKK3>V%j}yG zj@yF)-K=xUeiV1DnmDS+Xx2O!U#WP$0(nNZ`4UvbYN7Bf!(Y+!HVEEoA=WE*!y>!` z=~C;~7vLrxTwmk(0Y~sKiqNZt{y)y%15BzSd*i;E1VjNv0Z~k-=$b{r9Kf72DvE2?Ma8h@z^>>TFfK0N?>%+9rw7CL|Gs{ns;*P# zJ?B=sRp(aKtt*)Av{8T^J-T4obUf*v^H;i0KnJ=%=)q$WxIwt#xac!gbU)*?70C*j zk5C4=c|iI;a4Y&-WV__uP;1Wrp06H-Ev~ zKBVZN?|_p-HNT+d`YLJ!SW`ulo1ao+I#ZgM;aOZ5syXUdK(OYP&nZBm8@I^S#7%HJ$faL?ZY=oUoelh_X3w|`%<;{ z=d}7A!z$Xqr*-Mg0GD17_@z}QN@`-@RO09 zg0^op`sr*gzd*7F1#NdWI^$g0sF9t6wr@A;dI9GR8rdai`%a_8#VooT*)?eUZlg}z z!_AFs-!5qTUgJ}0Gympk()G{Awab|f_B085zwreTdS*|PvJV>TaGOz{CTSlw&TU5a zJWbj@YJ4bbuCz8~lf-@8xE*zNtfxucCyn)0zU7`Kd7n0ZvdS#_PIsnuXB^ zlD^Ly--Z08o+f=?G=2p6YdlT*b~V1FCp(%wP5S=TxHIzid7AY7yYcpMY;5o}>HD&A zcb;MX?rGAuyYU)Em4A4e^nKO%xWV*(o+f=?H@<`(?F&znzW+4-aRl%CLkG=!_MvuF zqs`wQNNATr<0#GC?-aV_0782ex_lC$EJT{`JdaSJLib)ssJ23HK1HZPq0KbX+%^h5 z!b3)G7lr0NOz04Wu6%&dP=$_?#5jfiiRG0$U7_zWyL0C%H2P&iODyg+LOKSy`E_cC zXDYPkIYJjI)beFQ8x-m-+>Hv|{|2Eu73#K=(8CH}09+p?j{>S)Th8-v89c1(od86$AsJwahe{|ld{Fg0=bI&m%XD{St zv%$XVh^*zd)QH?*LpazgGAJ9sQ-SP+L(-yE?S$=&iYYsxc1l!{LD|buZwH*57Oi?! zt-PeJ`Uqh&F%%i}-FgVMR9&Z&l5a|_%)U;il<0yj z+nh-F-0bN*j@=0FMVuS`1nR1teiviEg!B5`24>)pbKvzIsr1#pE1t|=l)A{>@ls8u znGq$cC+J&Dv$B*lPJ>9v+m@13dcz|n(_y7jqEbtxWd0@$Q+VTWZbCXGR2$Fs6(TX=g@d`Hn zqTaFWi+PB!>z)Vba*0^Un@DW0^bU+=H(C&P5__m zr%5w7MWbWc*{z*bkNXWk4waIjsnYJxRVMl#R$wNh=_6W1;4=~xh8kc{)i$7fKF;9Z&{R2k0 z&0JNVHh6H@>__-O<UA$#w}Ki4wO-?8^o*q&%|iZL%}`D;HH z95gfDi)p#HkEQ26f&8pq;}7KWM}4W!a@qvXTL`6OqrHna$@bZpDzuieRW|9R>}vg3 zEVp$LMQ2owWuxU@UGePr-Ath9ifdCk>^f;LsJ(YOIao>sg=MxK;QyyqkaZO0^=>pi zj7dDDWRI?tdX}wr%OpP2HJS8jHa=+iHMf7~v*X(?@yANmTpD((>h7He#-QbHLE6Tv zpXVXneh;brz#!jppJD1udQSqgUz!zd%}W8hc%>KA9>2if9_OC#6>LO-r8$ibT5e=v zgrv4%4AaQ=R4N@BBb^4~pygG9w2gm4PbbJ{e*o!pIFKRndH-V?f=(%CS(ss4QR=!A zEwu+T$CUp8b4=5GVtN^dTjVeEFkxglOLZ&bqZ_zj782=pQP~oLmgmwuJI{*$gZZKr zKhOwLSJ%kvZ1|lp310Grcq68N9?Vozd6!f+FKb!Ti%&#?Uhjln(cmUm3mdONmdn#5 z!QcIdlX6_2)vf{lKTtScUsvkVI4`UG=RCgw-?==$0YBpMv;jXWt5v?H+_JJ-=WBwb z%N^H|x~y(_=hAi8EZ+!cM0V#Dbea^p>$N-x`s1RaLiVWam9;|lR9Hu+*e>5N^`&B5 z_M7d(9fPOBKR1Q(D_!;_rL11HRgJFZXHyZFn4Le^)fAD2LhQlL;^2XJKdsjY_K z>=Q&;y~B-9COsv4{&t2gpzd3|y=iHM0z2>{>yX-N@vf#ere)2_o>vlHt`Ye@5NBC* z3OVg3^EO26h)tRRgKG=u*y+OEFnO>A?_3l{0y=w_m z?YV^C=gr>3=knfFkyq@@^LrCN$@6;?Kh5)d5s-b6q1^G3AY zODw1&-|i$*vjf$B%Bbv$ZUnm>n5*yRWbuE;Vg7$%`2SJ(udR0D#zF)w|J^tUx=k(a zPV3U1xRa&PzK$~C7`oeTGm5?^W0xtm7^~R4px@VY`rT&N`FndFb;)GEbF!e1tn>KJ zkiPLg=(%;W(O~@Y?$Gn=WVH_Ir=N#jSZC}gPuu)Zw{D%ZgD-a%*D^!4+rgc*5in2t z_quiO)E{Qv@IHilbh=jYni%ZXyHgp-%F_~0w?3W93737?L4~j+e*%S&cOy@y-Hz`w z8sW;StlaoFr^f_Lt)jh=yz5U%nWg(8MQY=$&wtK?Vo_eS_7%NZb9n--m!oncE-ETG z%=iT?-n;O+C`>2L7Ey+8Ejl%|!IT28K36 zvq3cbjl(_2)nY66pCYquGb^#9`l3Ivm~+DSoD* z*)E!0y;`VbC4kdYpwJNQ9L=sshDtWVyEVlRm6#dVJ(~SLhAowV+Xmnjfs`+&P-tjo zN4u0*=DeX9&2B;!S>k^J6rma{@m?fm25i4*_U3cLi`NCvRG><|-q0Kr&3?2#( zz}u4I@7IjZx-(SrEPxkNpvq=+_1mG6&*6QW;_ugtF4!FAD{oa0)WBK3oI;h&NJd-g zc_o_tQ0MTvJpm1th!XEb(#>e!lJMfQ04xwlQ3Cwkp!4hjtWWt8`tH zGDb#ZPaffd3+b%gm+1Z$7ZsJZRTkF@*}11O6^k>ryUZ}5t#Tn2?ly;tHt@TqFjZ|8 zJJKR$tDF)z!?|gI=Stvur9h#yt#YekQnre{)$XOIWS4TN!cw5_D!iN1(h8+*6-^+e zZIv@wt5mYw%Xsfgz%s1RU)U-i@Mz@%N~#d&B}|FL(zZ&I<2YkZdYS`jE1+`X2e<|6 z3FWHF%JOHT3oAfpgvuHiGS2_!h5swUf9-A__YHPR+8X$#rwg?E_#AZm4csYfp#L#U zY$^6_}KwX$`z^WJrhBKt~?0#7|iR+BBW}BiBk<1KN9? zvIahcnX(47`8s6{d_am)*1%_k%T64lLRgYNheAkM179Iv)_@gO#$M}#`fx06%SD>0 z!X$WLZAM>ibApv7K@n=Z>CWDQ-n(&8QI&o9tGz@1i}2n`@m+6$(tY`n3sI2n%b#BC z4C(d(k7IR32N*ilmrpWusxM#6GOj?bHC~4_I^CDgrh&j6DgeK6f>M>r)`#m#cADUv4KUmpgTNx*7g>oSFXN`&_Pg-wFz>cxk$b!VtwIWSi<5b9iyZOC+!?;$ebJe>GsZMkt#hU6whY>FOX_zv*B!9C6 z!bhs#5J=B}WbBfj^BzTM{pU~TWb~g_h?V{4t&?1^OYLSiD!;=;MOF5nmooEb{N&j* z0G#pN_X4H+&)88YNcW#x&vu4%y@2HhN@7he2W04EBh z^74Aq{bx1y9a%A41YqNSno|8|k5-|khX8EbPgAP@+%VAvsy_EVfKO8(-+!ucq~}2c zyQk*-tAZ-7ZsJ!jDDh-i+>orsVTlI6)4?| zrd4T1zb@mw4v=mw-a3iYF?6aK9cJiMGrI0a4|4Z{d^n9xH=~=FG;E>-=*yk&h;Io@ zH=}nWF0g&od*JO$@%I~sUt(>Ml*l*CE%t4 zI9ed(%PCaZj0RffQp0f3gz&l-0NNlCD@zkeH={f2g%`gcz>@-1>PROqKUoqp_axFD##8ymCe*=W2|TehQawoy<7AYM3s-g<-y^1J3 z6eMFhrK!g|c$5CMm1C8<Tk;RPl?260egJDOvOYbzi+8@tY%M$}DoTM5y_hz5x^qab=4QIU9n z8?0X+Bbp_aaBKBD#E4dj=dOq7S7YOK^izo|J3ZRecj6B(mMDb>{4NOe_5MorpBM^fU zd!=AvHP(iMk%?=$U;0g|`7E3XiMuyIOfGv3Vsc_64+QRojBoI zh-tZMHAf{bJ{4lRrEOl~N)^b=A#b5zVUV|#YUrPBRg#S9Hp$g(QaTe|1A02AW>oYy zZUw9RQrWBn-ij0`x|yQo(OO4Rqooa>gt;eDG=exeXPyL8Ftzs5J>!9W=5;I*OtBtO zdcj0^|BWOibgp>jg%_DA>6&p6Jv`zLAuJg_b${aleLz3Y)5&3;ClyBrrC-wi2h8_O z9Vb?WIZgT6>C>b$#(Z*ac3GQLdiqLp;9q?3CvMm#novQ7LwM~<*cTDP;q|llc?j)GK=&1 zw(xd)o{m5>UQjxjiS7ZzeNpH{G@nA#92VBkjX*5*2%VMY>mg+RgZ_3vG-{1N2dG&i z@g-Jzp{ih<7t}dlm8I-%BIQBpzsCT$#shTP+V239l(<I4ND~73K8F17=tw z*XeIQc`BKpV&h_1bFE5sAY5gdf{JUOhPB36IwLNVwKfTByeZVNahVGH+ymj6MVN zjL1nmc@0F;h-6~>T8L^!6ejAP4Uum|N#c_g5PoE+l_;j08CYnXx``h5Llha&AmJW? zC`q14|5A}Svpz&=fm&~~AXi(%EB@An+`Mm@(Ghu8JVC|x4-4J*R zdGP03q3R&L%0dnKTWi3dZ1Or_Z-4pH8&<;~@9R2FujuRALYcRjD!1Zw>3YIasKfax zuN9R3t0}DIu0XTahopH5Q32`$OZN(Kip$sZxQ_Dk(uSxwmEnBA+m=Y3?w65BI!HT21r&XB#arr4?% zopxAx$)M$QFaw^cr$0&S5X8z%hwP_oiY;lKjaZqZpyiL-kltKRf0EXbiJ8|n_ANE_ zCuyCen0f6kO^|-Ip8h1Q0~Rx{ZS0q8>QB--cQNzYPpKvUQcr)9)^UuL*Y?%b(l9^O z)Spynr$=Q1!YaL~2YOby60MwQ2Z&eV8{!ou@E&qCc94H<3aR9U4e{}D0JggF-726z z02Ie`)?jh$3H)T}`wy{9D`-ZpfaS z-3TQo2fEtp&|BPLN_tLC@UmM0wC8;;dJgcMS6urU(mQpy{5~UfCHeg=rZ|jWNlY@P zbF`8%w}JMl5G~uDOd|z5t@IDtFHlc74S4uQ_F9?PmUZJq^GLHYeRv!~L zDXMVUdGB-X#;_A|_Cl<3v0)pd_YfL>E78L?#bx&nAN(2NYicefK1fXZ5Mr4PyZ*Ut z*z&@jFk*=@pTarOI5~+y??PN;L^9D#$}Tln;l*w}dP;)VT&>~#+|Ykw>Tcv3tx4wa z{&m;D8@`SEcldy&79and@IV{b{j*>%(Dp1?ll3vAhYyM>=|giy92~v=Zl*fnCw`_l zMs!b@)!ugT5%Yr)J&d3_ZU8f)XZ%oL$n=f=Q0`wc^D_PNH4Fw`roR!${0L^mfcQ$u z6pk1cJvGa3Px3Oui+3Or%8W1~C&*g^X2i(&J;>x`HE_Ym_SL0&=&F(3qqj2OkiUs^ zo;3(Y?{*5)I=%o~pP*&0JjmM&Y~+CW_e8hZ@&M`%h!%8)pN#duzttM-XhOE`;1?fC z>-5uQ{lIm!c=C`qmcQ3s?W692JvLHZ|0F>pMuh3=>x@0t_6%>v(r0%BSuB@RbMr) zfvMz#9sS@Z(7rTcw`Lphd|JlQwTw6{T5uC0Llmt7_3s3h9?C#I;?k(y8go)2;h<9; zdc?Kfls!W{4NsL1S3&6v?%oksc;TD>0I=Z3TLBy#t@gZ_dj9oUu}oQh{^5>M$DmhwJ<(f|6OW9d-^i==ap`!BO7tNvncKJ^Vh4W*O%z$Y+%=}zsh`u+0cPL zBVMv`UAqB)$KR%6ILWMA?Gmiy2NhANKE>>bDOFizcdVuy56dk)o%qC#GG@(_HenJZ zUV9m$T7l+`xVs-`I6W*sD)AjopTz3dGQau188@&Jh)c#aon-S+nmVzYQ?VC7G~dX~ zNiz1Nf_H3C@I``#{UU{J8syzgO2&+-u7u<&zUSwc5OG$1?0Si4f~w~?#}RY3#q@k? z0pW9e_`|I%aMZSD-SG#2-4J<$k%KMC!Pq*r+d%gGK$!Y|RA9P27+Y@f3vM7UWBwbd zrc)iAt`$_gNJ}5{hCy}4qmM0Joh0@*-)ZQ`$1wVPZj&+leDrElGq4OX^ zFsEDxW4`ol{o~5$kIp3eBd_Cssc5GVIagVfE_xh9H-EG197*5StT*s!{_n#8ezfAy z`I5f&eUH$Kwm4>8#2!6#=H&kOrdM!&Gf;a?fexgsR1hY;JH6JJyL}pUQl&-v&c$xz z(yvM9n9n`n=`=tgGV#4Ku>$LA%mWd-Q+2pysCm8$Ww$RBoptG>Pjja|$D(OlYyG8* zmH&Z0|2qHD@*gZ{gv~dmTC|#u!n70z6&E)p>Ow1c9gG>qUbTkUi!4^hWLD-bSTLav ztVbi&bZn--^nww+h-&Am=>$!mPqRr%PsX|%)6u6?r)pO6ES0_|J6cQ>2CTbo4BbHR;oW8vbMj<+n1U1h$E-Qt*b z$ri`<;3s4E6>#4iaFdK_G41vm0BN^k0RU}O%vDS>_GSx$qX-tq&MK6@yt@3g=8M_i z(8cB_V>%p?Nel*$;@B5(ld)&GSBqoX%ax4znR11T!|?IzQLo()#W4kwG3_EMj(usq zPGu~Pbur(^Yj;m^EOMHVzu3hU-%)zAZw@mMg{N&5$=H$oh1N$oievg-5Q#Kj@%;@` zY<}M7tXoWISFstt4 zdqcfyMFlZkJF?X!F8MFrK8hk21Gq8;3XWPj82&S^-uYZT#+sNe_O=_^cUVvoDbH@S zg)_B8L|PQyL%Lokhwd$;Kb8ig^wIke)1mMUYRO{%3qR}D6lM!bgPM*1#-$D}ypf$6 zmalU7EmD{;Oa116=~w#i`F@4S^@TrJn16ERpysXXV2>!-%S%X>fEQ;H;UWWB{ zitR`A*u4Y6EOsS7lWYTh58!`kkP1AAebf}tN>_7fBNwP7T&>L*z&IU3A3H;Zy=HW)>X?{>do5nA&(1}&>_)rx=QQ8|$+Z!3tq zurA$2^mjqcIV|TP)`x8hCUz|%52VC)RTbMUu^UV*mvtA!7M~c3y^YA%DY46Pt6Z(= zR>ba<*a=q^nApvGeT#ER8j&TiZ(bFVnG$(KBJ?%1m%jg?pb8`Bx}51q%+uW)xxo3` zcb;zF$i>dzzw>neMy_!F1`cwYf?vyl^4w-_irseuZ{v7AwdKGKdig*Xyvw7>Dk~76 z8*x#i&LJu=z`pJw;69jJ(|`-ofR!hQfHz^jmjVO{YBq4w>#Lx1630%4m~pg zAGrF=(mgd?P=n;SyH)pQ`&y55hI@&G)uoNv-Eagd-GShG;4F3imPl7^kSoYqH+)!S zHrw1@HJhi9%}12YlTfl&ii~CkDrUAE&2mz15d^!b4XHyL$olP~B zbT-ev#09^B|Kn^<%nP$QRFE=~U4gUIWn@!Lk(c{{taY!kuAHjPQtqwH+Psw)!hTdX z^}@t_DKg4!P1WX4jYGg1nCGPd*=fL#Iw9bCn75_?>1?VYr?aW1ozCXk=`Q#b{2ym? z_uMd>9RyLAkcYF>Wn@#gPLM0eTG#ZX%53i4FPp2fITDqNyTLHVNRd(9)48a@<|d1p z3-kCi;E*)n%U?NwLK@D2c|i)0&Zcg@bT)N6rn5PO)%_R1|8X{J*9x;)TaYjCzDw!O z$fj<04tIdVXsO{dR|90RjiJfdJKPPq+PhI~!DP&iTCK2%oC%870l&quvF3|e9MeX( z;@C9&WNhU`b9GW`GNyBIb5|Ss2}6sQjHy@6)lqN7 zu>+^bzsr0b3EJP7#pWktiphNvVE>rT#!SZ4VdZM5OU5)v=4yPxgd=IW+M`t*dxiWZ zW7<2HtNmET#!JSuJtbEgTZ&_4CZcUox!P(|Y`l(IJMIo?R$ns6ZAG}p%Q=`+;*3ji z^05TP*_GlfOmXr!3PYS&B9u8h#i_=p5X7kmCmGXlk*jVi8B>3ojOp&n)eWAEsfFh1 zCP>Cqi@9njJOU{AEWzTKmW(hZ&3_NM;@CPwvL-f7j^3pImide9zfHd860#j=Ai|)2xXHC5xc+uVb6^e@FPQQ+fsd6OQV z%?{wQyssX>+$nEFo~C!qzUf{Tk-h*uy>nFWYP#05--hTCrKTZTahpx=>WS)Of|*1v z{q00v9wV@7W$#nw`QXZ+%PNv5g+Kk7!q%AzjX+@&B6~}r0)gpMXkXCf)knR)L+|^O z1fB~noj@bd$0LVNpaQE_owCI#i6Zuq#;b4iI<>OWI?zROT)1S&OqYAIEqGNqz?O6!wxrS#iBQ#&d%rADBZ8``H- zfxuF#kWcBWS9_JCDXu?kn(qQl*Sry^+(D$JQ~{;bek*UY2B0`8=SS(jl=K(4_0KNw zedYy>-~zjew9-`|@Ol;WYANDL4KL>9g0jL-QJeSjBEqd(U;Yri{{2K;>c0Jem_uqk z1yOjZn^pnU*Qf@;_{ZMjK03I7*SnARUmBZrg8yRJtfl_TVzZX{FM`cl?!W9c>qP$r zuvsho7s+Ow?7u8F>lFV5vRNzrm&0bQ@?QX(wc39vY}Ok8<+53)`7e;oI^BP%Y}Q); zg|S&@_%DUcI@5nqY}Pveg|k`b`Y)BuI?sR6Y}WbyOJuXw`!9;ky1;*VY}Up8OJ=h! zu`i5uo^_h5rcau6o^`sbrf-d1?&dF?7tC&!-$BS`aimslYG|PdTs~*f&W(L?BRJAA>T^h z>YRO;y)bydINI0jN!dRg$1D1e(H+8{jf-xB2oBKKm1a+`d2Jb;GM(TGIH#t$)V(6d zoG@da1*lOaKJO{2_?QOex@*UuP1ibaSi$%$blCIj)f?a8EM6I@$Sb@0UYgqMPI(pd zus%KAYUp-7;I)xl@sR9`NzZMM^JIv^J-XsO5WxY9u7EqR=1a5{-N8wutK&SE^eEEO zqd+XkeGJh}ZuHzBIQCPQAH3^czmgZ4g7+{Ljt-XJ7^$Q2pyku6*=={2)1MYybcU9H z;#U^@?48F9GmM_BbiS6KFs;N?+*1QR=i7**bGI^P6H7-OP0#AIu1Z#zqWq`fzvJ|$=Rcj~<*%p|1uc!e!`RzNaL=>~ zW7pQ_$QL$sPX7|0nijX&Vb5>q`I0{+EpPmmFP0(ygVUcPbWT|2)s6ihV@q1chxrWn ztLLsm`Vi;zFL50!mQh@_jo;n#C9iv+vH%#?8L(!T=c&b(>D4uNbd8(}8ahw!wC$s7 zl+i%=m3>+r-lCdyXT!5*wx}$w(cBvLqI#vP{^lF@Soo80(dX6d#~hMs&(c}eh~8OB zZut`>!!Gkmu7JNuN?y%S!iMvsiTkJBz(+JZxcMVza*KS;U3XNiQgQNj(#IWDRzsJ1 z-z}KIOQ$t*%I2NIH5a$cDMyvh)Z*50Wh#0=?^l9g@yOB_U-AQEA&45d=$m%c;Wk=E zd3HcwSrSibj)eDtl})H-WlBvgECkibco0*h<~^zT(0M&8IXw@$>A4-EN^;^U zJ=c*7>DdV423+)GykLx16AyCdK{oGsGkwH8Vid*P}hD@6l7_L6YGj&)9JtahY!>`t0`A!dnIE!n=Mx-cooMK%WO8c zTCQfi`dhF#runfm-8IB$t}3d>K(|qzrVfL%oE{D@g_DeFHYQiINc}BX9MhcBneIJe zH2)LT17j6YJx0E6qMG5z)yz!)n1aPI&EuTuYHsD|2V7JSm{mme*jWuuGNxIB-1Y?f zTaagC6CF*=Oo{4&w2G)6QwPEE+Xa>pIvO>n@c)sE?V}HxN3b}i`S@gP5RH4}XfAf1 z2C|Vo>IK2S3AvGP7O=2CfVjC!FbX%G7#fTVFKy35E0m0{kq>MOf`+u#Cd=NZY>pz- z(JfnFpPR~p6QkF1vgcghTB&mw*(ESiZ#iq9zFT-l54NEYrGsK89?BrJRlv7jrpOeS z#7&cZ41qgogEa`uU2z26FC*}(l_R%t1D;H9<;Z$*KFCRE-`oQV*;h_dc}`e1a1PVT zg!ipnR*&Ldtl+-6Pp@RI*AUp~3y*w*7a5GPZ{@;HllgcxMz74jxh)%F%|XcKT(+^i3HoUp4_-tL~wCRfCTb|f(;qI!8{%)XJcT5^YxfnZ`o zitpd_9}_!uW^#&rPW-VeU;-n5A_woD7X%GP9^8idKOc>Ai@MPW2q}k!TxXPGSB`x9 z70M8Ov0gS!H6?q&Q%o1H#><~L17mF~ff(a0X&_%yh`)y^$PN7G(2bT5={97+k4Wy$ zPCOLhii9hKpYlOX$^L;zgS`smWnA`Y3z?_}=6%6|MJ^=vGuWTtXdxv4<}P9_$c>CF zA;J=|rG*O`a@pq?O=FVVFbry}65&RgUU8i9r6r~JS9JbtdVAUIZxoRGyMO9J$C0Jj?Hs zRr4#Qf1AS5U;KZFDxcraB_g@SXj*_P5^k4W%KMg)H&U<*fvm?_eg)v&)&0_S6YLvs z#HoX7u*sPg%JQzDZ42bx~N6$z&|7E?Z#o|64c3idsaZ*i7i!C2?nFI_p@ zqggoeyAxKG{7U(=16=Se|Bu4-`K|XX`Bfsq{EFj@FD(s~SwBG?Z^w9%K4qnU?3;gI(JS(o_DXySgM?prPA#T4D^Q1O? zAY-HDHSLJKT8eG7oy9j!iafxG)hua1wD-x-p^@(M-z9@%AzNyY4a#*WWVFS0>E8d; zM}LvWUA~b1B9FT|M%YCjcTN38MvO(85_wB-KFaES%NT!qQMUyS6DP z(Tn%Xk&mvyv$Dv!Q;E}Ql+joJLh*4;D-|Ett5WfjI#N99q~%;>Rdre9K}ik;{yw@Q zKcp@)mjZ7wZQ9X6Q6kpZ&T(z3i`{q`Z{ZrXIf_juX*BcCTFs{fO&v6|iNMyT z4w~6tVShYl`9{hl>YmTYyKl%xxEfly@eTP1*TM*E$Va%&YA$Cxors^mz?Hl*Qdia~ zpwUSv`isLoeYLdr3VgL3=&bSiYU$wYNZ>~8S^O{T=xW&!jV1bM+tDbF>cv$nofV|a zGS2tq>;ORuUCS`#dW$ytm=e+ZR{#Bp^lQV7zGCp;71>_W(x`;xt)lJGE+T>weQo3g zLebyw(&g{3a8y?P8B@YS=i?)7Rd#2)J?tpRo1azvSXe-DQ$J6*Za1HaM> zuXg=J1m!wRHF_-)R_KcJ)qQq73#$t`=cCHPr-s<5=n{jIhSB)V1@C<9SBO{1wjkCgt1F?FOOy59&oD0Y|P5(85|! z@-f}UIDpYbc>5LElG>Fgjge`${BOd=1q#Y_kZW`+LAxDo z1#a53#hi&+Vh6RB>+sg-hrj2ytzrCdh-RNqn*=+;x6z;^u1BtxZ73j-0Zxitr?rc{$p4eM_?1|;flvlge%Y6-d zx8xq&M}2Jeh-4S6X55L}j|RELN46uP1@2B)(3e<}qJ}z$n8R_6b)PjLm#ov&K@-Wk zhKHQUM?~vO2lwM5J0N}~ut$V$u~s|?G{M!9%zY%Ex%)ROOJJYPiA zv3w0~x3n*Yi1IMvaJ2-x%V}8Xj#w=zZ{`}tzab+28{S<`LtcuPxYsp^YrKnhl-CTe z;UMHL3Lg*Xm-TC`#xRC>zG$dq-0SLIsAQ}rx;9s>fs0%N(UU+IT>LzU8tRuM6)~yA zyDk<{$Fc~(d`a|xxR}8Cl4u3NmDH)vvnxHQD?Q<|I=l{a7}3uG+a|f*5W5I`E}{d( zZv_4;q6tLxgLz28HJ(duq$($P6;*|uU1a@hVD2ZnIs5}~ky{`J6Bvk#Z-9uOk5@xB zibNA$w4pm7@&Hj&K}{BNGemqNUM;CU@M%KF6Tb*oSB92kbG_`^g2+^2E`@b5EJggL&Q}O zUlRBiu7)~JNmlccH@eo52;D)@oy}kZ{{X)fq8Jz11<`^)Gn~&?0oXoJJ#aNNK1)}= z*LA9^ANh=^S@34yB0C|L5ja7_3lQfLI0sj2R~_!X?}%x58uFXMwzZrG&{2`4s`b>b zo(v>iBVxXyRc)WB+IGUa7Hykw1v24;i>7f!Psi#-WWzlG|2~{qbwE=p<7uc=nz|Q( zJ)fyAD~(C3`w0FAmFj#0RW=xj>Qb=Jx~wrfNS+$#&*1h5s|FfZ!?Xrjy9cF*YpkS5 zG!oQ8RLOWqZCg3(4!?_V%9$`x!=#fj72e^vFjr|+@t|F(Y7eU7Qk7PbWjv`c<2Dqn zq1!@N$O#68qIOHHLi-9`LAS(yw}Rja59d~h>sH9P1*FDqfol=J8fUkFWOBXC+Jd-l zf&H4k0C^s8M4h;r{(enffTRJ`o;?HuOr*PK9g{Tz-d6T1_5cPfz|9S0Par}Ow zBd_9J3v!c0pN4pXz+<=qStyd?Y&U#KC0=%kxa^V0F?c%wy)LO~5Z@B`53b=>u&Jl! z@Fpziz@Vkk#`{VK!*7R3AEL8*F$m!bnuOelA%)3%B+@q0gXlW&%W(0I5d6w>C(@8_ zCihjXOAQ;|qQGS2A?Y1gH+&#jD58mMu}>VK14A3Lqa<#_32?Ps#BD^L=G zavgjhoeyxo=X4o;>67jKlgIV0mSVke$#c39W?b@|ZboAHNz!&6+RU6ZfUHPO7kEH} z@c`5Y{^%h2avk^k9Tkv~Hh3o20;4ZzDoFLc>;U4wKQ1m%P~Ke+W0MK;c(|C4 z)3mp*z?A5O__@SJv|M6ZWPAGa;F}6Q1EcM1{x8PGg^VAE7nJKu0MYvhn$i0@P018v z^wvf}Q2vzoZ~UI$wua~H5b|jD&WwV}rj6Ls31!n(XMU#(>RO1PL|-VZK)`jyGox2j z#siRy-aA~inRUVjSsXi&Oqc6x1JP+f(~sb!bO|3D=pscy$t0TX3523o;Z^dwyUc(+okp_-dA_e3#NUn|MZ2g`OjVL%9{V&KgR^+`m8~;fG))*dDNix zYoQ;wd~0(ylk|bBV}!NP4_s4gfF(K;s~#$%P4TSC8s4RRbX~``KcXT-Q}KnwlNzQ~ z3ZgCSw6ms?={(T|Q}{m$7nel5Ctgsl?O1XK6V=qIGMs5*uqvC*w~ zb~)?n^m16fLoRoT+i=wbBkvNZcamO#f)6g`&^fo1anN8 zUayE;FtYH992C&kMuS%=9~i4YAZL#g8@UUwO>e3T7r7Z?41uAzdUfb@B*e@tzJ9T2 zr1>@Pf@==zyxv?F7c_qGfA~PMf}hbYP>c6a|1QyySMY8EbsaA9EX3alY{zA*v?Y~Y zss6&oR@xDj`-foO7f!v9a5-sQd~GA^g(B*Yegg9Yj$h-}4EYs6=`5?0kXWSKG!hc& zOmu!9nh~yH1Ne7`rU4B;sIihnwK5?s{vwo!Y$mF;z_`dph|36EDB==`=LkH7t2GFG zUG*#yj|3uP`(lxEh}j4KdkL(Bn0rXTRu>3$GglC}2lM(eCUADW?gYAs(DkMg zI2>2wzpRu=(gin5a*QjDl%x7ocq;_14si#8%_8CuuMv0&*Kh|?-Yk?snBzv<(i*8L zn&ezC$aKnA9&&a?{-fes4Ch;f|08X@;~nH+u4Lf~SB5f?V5`#cQsnQ#pG&MxC#r*s zTmsRHKo49{R|PfFF0xYsFPFwuK2|Q{0E`hRDBO@+IQuiJl{pdj+QxDPsPIjMt#Mt%a>la^BCq6>4LD5(0 zQH&{HKV*NA?0?~8CqRi2F<0Ef zeZgWEL=r=V>jUd;FmK_CzN8R@i*5qf#jR6f5syB5L*jC4O~RSf=&r+h0B&DBqWQfDg4KcA|DXj7j_@ve}R}l zV4R5E5Q_;c#1&}nP-2m^u$~s5%UdmPJTqy^&#x{1yQvL5=}#>wuq|j2iV`^^ea*Y z?zXGRuSFDg>1^W!)Re@I% z*dRg`_#lD%aaMs6i=>6q75EbT7bKtx{FuOpB2xq+^EMWd*VDT}xeX`ou4>$jL(_0vrg3u-^m@f*7&nhX>lC7taic9mIYTf6iTl48 zH=mM%Xt0X5LkpX_i*6)s+zdy}5S$q|O9;%vnQZn+FNpEkef4E&?Cp zYW)n}j2ns5a3vlZH|0Z_jKrC7b2fp~M98>#n83X_FD>In(orv+Y217Z=rc*lxS2eR zUJqx+%{l^Wai(HFTsInJ&(nZN`Qy51=SPQ;mUBT3#cmt@Mgxfb3Afo0shLf{1vGH$*l z@D;A%gGl|kans6l%2ysRZeCRJ$+#&RNwyksF1VanlR- z!NSY9nMPm=&Kox!?ILGNAk(-x0l*T0ym7M$6jNlNFm8U6S{XO%0i1_3o?v$0W#h~dJqanZks(Abziih9S{*mx8$p8n0Jrb6SUG3BmmV9x1pF_Yjg8_)Dly^M z7>uS*7DQvCAkj1=H8z$4DaPq%#?7n1Tp&L*ZYJzTwJNX$ux2=`Kmj5KD@0Ni`0p=? zQ3dt_(*tJ}C>)RI_+bSeD3~g643N<{tH2!q$iMkO!wNha_K`S1s=)V*EkCmYPXVw3 zXBBu6feUd~fkHZy%B;X!VBaLXjGM;^JSsvJxRbz}IIBPjN7BOS3j7NGmlBY16VWUl z&ML4jf!eq_A0k=BxKRX_CVme1bOp8t+!kjQC~l+@6IS2=*!=`i1qu>PLsAtu3HC&s ze&;*gFAJ%#{fwJWi4KjMZMXA`dw$Be8UI67@_YNcwPQ+(;-E$k$JH%cQTs z$+&qL%!@d0+z65tOhCIpp8~2hZoUBZ3C@h0#8}E!PBS->%C1zOY1}jbQ(rh4H^Swl zaaD|)&R{y>ln@y=yMfY$C?Oa(WnXhy&D;zJG8ETv7yREDH+xLzOfTe(oB4oe;LNz$ zN#J!6GH!Cl5x~{D8N3-c5|0ETQ^rj%_#K4P%+0L?t`{NW<{bh%a9&!*jijSqI@7o* z8c!MG%(z)W-~zAf^k#-8zf}hd;t0_iOaZYJ%I^+oEbNh z35>&;aU)?mB81b%&AISS7g)y4b^=d|kg@S20e$+#jGNecT~@vf0~t5#{{v3OO+%($ z%W-Dh97Lca&R=i3NqwX1rHq>qFb4~*>#ZQLOoXm?HGwN|X52^;L$(mflyUPEyhjC= zaq}MnUy6`%Q*<~M9j@U9r2gEvDKwq(l?RNQTfRYojGOidx5b%pGl;+doEbMlM}h{0 zq~oQ?8sTN!OoKg1co{b<37m}c#!W2*80aOCY1~`_;39#%adR3dmJdN;+`RJ*nq=JE z3E*~|88^=mcv=!>+^k1{Z7C9XFDs9m+l-rc;O~@xjGO-u_(}rxrCr8NOK^W=+}sO) zf8$1XpuZ3GPY<$GJxJQP5u5oV0})@2AP!nLVw*Q z--FiJ7@I@@XJexP%)Ny$jg48tX>2S5Qxj)nqY%uo;)i47@b8Gw*w_Y0E1ZpuLjllV zm=81@8~eiUg9D_oag4F$XO4{%0F1-g*tmeeJe-YXs=#Srrr@jsg@_t1tiS@nRDnx?EXG*{J_w9PY<^`0o(20193WNT zR%6T0tiY=QY`|Fs-b>(aoK>KZJU6HCVFmsj_IBY_f$tM|PlPJ)X97RstO6y*9B(L` zuE1(jSXIYa1vVnkK!hr=JArPvI@^$`Qh|zK<`Tb(aWe|=2%J@*xRFXsSb=k3&lW@# zC`dF7NmbxUu$SZXJKyO}8AgTeXWTqTv>7)gPtW4v7eI6co-JKz0hLv|WkKE{vHCAU z@cz^{3mF4uEdzEfFk3>c2FEX<&MH)xNubSl&*n{_pIhohH=9 z3wb-~T)?YwW+(kj;5!krlbTHrf=0Mn6Tq9DByoBbiHDOw)8HS5Gdt;d0^3B$PWqL= z9-Nn!og`^G97$)|N$qE_!4GG4(gp&Th>)H1B7tXdreZ%k=|hwS!77wtCk^-o3E4^e zK>s9h*-67@GS7=MJ81=h6L4lHNtjgtr6je&bsM}J1eV?M1%Z!5$Zn~@9a4xhJ4tVF zGd+f%vXdVC8Jz5-K45y`%uX6dU<}S*ub+*pn{>UDopdbBqlMP>HW0W>gs%5EfroKs zCrOgcLXu3`Ngu;|PhiPx%qq{G1dk)3oI{Qd1D-GTl-)IY=BM)e?RJ4tL#;4={MRqdp}5+^^DeOIz+J4uWP zow8@|XD79?X!(Wkx$cI&pf$`^ke5a{8)gM?K?p*S06+u2pU4=l8kX2G6;1EgVAA0YF-=?Yi4mH{{cXT$7y1lHkfm=zuq z8Q<{XFnb;BYlPP@`yhe)MQE6PoxrO&8)hZOOj#(L9%jFQ|Ct12C+#Khs|XFVHRdqg zimTHdnJUAqB3P5g*Dq}+wFKN8XTz+xkxEQB%=U)eQxFZaf<)7h)G#|1_F*{v%uc$@ zt|mXUlcvyxS_RGpb`;JkPyjYrbgF08=Lf~f*80&*eF zDsTfZ`VaFfEASTBH{k%O07NWhKbZ!d(#vRKO&;>R7(h6+*QS5?Ne*2O1 zpG0f;g@2_!F5$Q~(3qhSlpMXB=OGx87I>ymoAolbP)Tade5U95*Q&fn5!?1z9MY5@;ULs+e)j90{f*pM*h1qv! zxaF&;U$mipW3)InkKVF;2PGN(5t!|$)XQGKe{o7$(l1Vl2ujvZSEJ=qxcPXN3VU&_ zWE)qmt9b2kwRl}QDADI*wWT$3Xe$0|pCZ5g?R$ZmN@m-^E||>!kvQ7~8`rkjpnR>2 z+-nG?x4)$~4ElX=FJ$b4d%^a>`Ir1kmLAT=Ljk=0_D7la^QX_s;ds*yC+P+4!ToA-wDEFIjzbfP{0b#VyB#mh> zW-iTma~+R44m}!N{ndLX4 z+`V||GgD3BP71QYW=h@dZoE$SubtBRRa_@uG_d1azpkwVFh<$7ydOGhTVBvhXTa)Z zY1BntNnJ~?VFyihi4l{S;^zNzTwI`F`J4o=$Pn6jE*&E{x8cz!rlsEIx&rn0(_!6? zv*)U4y*4^-<45Rk6sP1x>kU-$njFQQgj+QKxFdsTMWK`&3axLt*8dsZ+pry{5-GFj zc;a%nM_(guaYkG%;)Gk95!Z}3S(Z12aZ4OMX5<9)jE?5g4rg`@6`?rmdpEN21}vUr z>^-toqCcI(wGltw3F*4W6meTm3;(U1B|_ zF8AWUKQ1m%u)Ibt#Y#x2oNmQihrPU3yqi(KnBtj>%Piizp|>b5qj*1tejk@AUMa~w znvMfke@s|xk8zz;@y-rQ<+Y5sB_Zy!jJVT?Q}Je@P_k8u_oQerbA6~NRlFBvt9aLu ztr8u^+yyze7|&X-jzam%;%&OMvUqinN~-m0X(H&QGjA#0HK>c6i)X5INJP+7m-ru# z`B(FQJuWU#uzVXAe1uTlbn9Kt4p%GQ`%&M9;%S1*EZzmsM=36&c&~=O0+%XYDR~bcKYBlOZRZ-aky0JO36y-lW_Gf z3rp=pB2%S%b66_pWyC!g;;zkzdyY7j?$cphM(IX#--!e>cZ7;k#k(i2;?)7LC8P0n zBNzD*&x%4>3YxwTxqz2Kve|c54Hp+ED7hgQdl52n0G`3szJjKL+~1yelKJnBiwhK# z{FGqx5245yJcH|Q51I-x{7M%b!T&M1xIjV4K;X*>Mb_XMTzzlQRFLi6vB3G)Uh23& zK}n|?*qDSOFX9=Q%+X|4|2TV~+Lw=zf=6)RJ^RWpge0meXHJh`h&N-?XCMI z(cZeeHy)3VcD1yW%pv`HAu4((UOIb0$-Tr+RQ#-}@eP^sS)_QqD4fRoHyEys*4113 zK}q2ZIs$<yJ!L9GGf|NzQ}HUxj4Bg;_=SAifd8GixX?k#2MqI{6N-F;m%eDw zRFI*E(BUuzpdFNPfr66uHQ5UW8EJ-Ra5c7!%Lsc8H&$2vwa+sybkIwOJjKq**A~yn zEIbp{lSqcB;Im$4+XMe6;^IOFB`auWXA+8Dh-Y$UE{#6F8t>;_leLA|x~KC%N9ni? zb$R8$x}+DmWp13yvLCL)KhToZdlIUaK-G<1~Z%!J6$89hP?S)cU;LR&~kcS}gSY8gdx z9v57TTkmGgpAEL=TcqS=BA!!9wjrc4`6VMIJBd@7)Im)~ncS9VNm0N0DTvIZY$_rt zZIzTWvxXqG1b!Dw%EOsSiOgdfr7|gJ)_RSk971GwT>W)nQcepmt3ufnCgp~zN%>cT zq}TweOlPKKeI6+(R7&Q>cSvXrv(vOGx8cBoj6zw=1sC8JEk5EnKDwS@XbdiaUhm_U z5Lc|Y=b^XZPU2J$;_51HFZ3SV-Hs2b2NyWK>6CkHyeF(tx$}V?8`rhq@dm%%^I z^9x@==N{6>%uF2;yt3Xc;3FRrd(eFL6yxdyWbb{dqTx^iU;0+)_szTZRs>xsq>kv= z1MfM+RbMBn4ZC*6Ulr89K4k9-*~g0=(HqtjA^i8?|Au%ziI(_Mv#_OPw4n~e4;t1b z0YXVu8Y+1?k&~H#Cl|?B{Y{kq?j)I+9UqOlj;FG90gl^nI>!K|@6zdH?QopGH)h*i zx*mER&fXasid-zXvkXN?)_ANs9YcCW>Sj8f)oi1ww53L`W~wd{#tR z>V=vQ;QvzsdZFeQ0zZk+%u4YBp6+n9BxB1BQW5hi!sUi$@SEUlx#183y+vrbVKRZk zab8->4U&#~>CEMZMSzZ#)N^3YA#j!mEjQdi;5wYCI8g7?JPh?9&fck!zO0~2Z6=96 z%9^bFXvN`G*e~O3#o^xsc8SnCHL+s};B3V~!r3OAUU4XcS5p|R0JJ60T7*^r1``;F zOH1Z>N!AV)>usEBV|>v#%i%3C80eP$AMmi z)32`P0wh%}Sf=dlir8wvnXuR5Y&GC&0vm9)8X#+?r1V-cHx@g1qkoA4vsIb@TMu)VC*gA`ShqS~xB#qsNMROUn{RFuXE|6bn`R{#7 zDOZ+tG7sHzaW+9NKqL**1bLxweV7zk4Q3_ICdh@08ZL%9RyZb<0MoS5B|t91*#!CZ zz?cCyA6U4;u^IL)I6#^p-(qa}rYl_G*b3lroK29wNni)gCdh?kgiqna6^<`q|4VpH zkOzyIBp0Cx^4bu!a5h0Mu}E4tJwe_Uz79RJ3G#jf4iTXV@~H$Sz7{PI1cb4oK2968>z&E6Xa*YUMq+uiv@|MA*l)St6*P=)6ZVu5-gsEC~{2M};CoFRq;q9Gsz!NCw0?on6k9<^4nT5FZ6 zwbs#U9d%WyTB~iX+G$<2>eK$;pYL_u7OJFe@#v-7X{NBQ8@P7>EQOE{g z2+sI<`oTYtKagaD|0# zj!oo|FtH1cogmA?go%Uj9RQgyq5Sfh4O9+c;+unLkA#VKqK}45m^dBBsq#pexE9CN zkck9J+`|&b!o+up`;Nep44%O8xI7Xj-o){1C{9`GQbxi=A1_S&Bo-z<0sXO3NSIJr zWiCY|O!V=>gi9e|q5^rdw`5L!CQK+*?@SGXTqI14B6?%Ugo(*GCP5}l2-_z!NrK{2 zxx9u}!o>bW?($OlY=+89nuroN$;*&}qSK zU~d)P-dq=?2Onm4px*#Wgo#H$JqVdF@mn0fflQcCs?sF;v@r20n7;`pVM4gF7*`-n zR4$|W5I++p)E%zd6%-2-n*bSUFcT(}AtDD){a8tRXeGtMgd%crbdfM|m!(}xQ?&xI z;+inA6PfP-8OJ{y$832dOq_~iwLFp%Zo+XrWWvNBtb9F3Q455LKTr#U{Rqe-N}~*3 z!SQo>Buu=E<4=$iCVH{8bQLC^A;)fo3EJ#mxd6c(D4r%v%$fSc5K5LXp^t0iA>$_k zaBaoI#7~Y8PW)sDm|DpAi4eSU!PE1Tud7=mOiTbW4l;i70szDSdjj?RWE#=CLx99j zUbSdF)BNOc0Ea@xPZr}?1Q|aOl2iOBEc`jbcz!a9 z=#2#tKT#yC*+U|JvK`UeLi(97AwU?zdd`{JV`y5KP;@?yE)pgxnKXRdfv2V&X&-|F z+2HR*5wjp0d;xL>i-d_oh11|SgK2_n@P!Ku=Li3Ks$zq`9LRBy4SqE+tYP*{245d$ zJR1U}!5?hVdZq{edH~l#Hu&pt+zr{_3yJwG!u!F0is&bV*WmvO$LsQF@IS-x31ow> zWL&)ViQ~cVdjj#04gRJ$M#-bW-x-_aQFuXW$kL#4YAoPhi{$|CN3w@MUXd^ z9c;$3#|U@?GHK#w67m~JPKOSdJu)p#ybb2JkVzA{6G1^HO>9`LTJB6DNfWC#X0#Wh70M zduiequ{3ch=!=y?(!>VJDsw3!X`BKLD9D z@gj~FAd@CGfaSA?8r!FG2WV&|P5hbYcOa7{2CqPxhnzH_1eKY0l^`umOaL%WApbLI zLbHtvNj&wFH1SQ9AZcO-*lEI>G$9CEN{s_e(7cRI6LUZv4w*Eu2FGg1qzR=eNwQB% z6PJOxL^w$k!i6!eK$=(w<`#&bNfTvjdj(!>ve{J>x)O9@eDn+ zts_lLR&EkHjsh}AX_Ub-982YqG;t1&vmhr;Od@SpY2q_#SSU@%Vv1=3+qsh_gy6W9 zr%4lsP9C%=B}lhVs4|B5C4j zAWuTZP%_qD|BR)HUlaWX1V{{})IfTs8Op~1K7x#)^jU?m7czz-BtlSx_Y7qu(IX&Z zD3fq(Baax$emM4ljG-u5E>0XXlzGIrD1oGjlW?3Mj~L3OI4*{2dy%q$p(udARl`%i zn4#PX_?wV16vgHejAtkh68(T6Vkm;}SKoa$5kvVI(a%HrnKU6l7{huVI{82bFfmOi zIv+yR0k|p3Gm<85-pmg^e@rj)Uyu#H5L_4K z=?DK^%_R+f^=i(bARGLh0c0}n3Dk>{TM)e&1W1EF-9UP#2Y*KZQy?4s190pI+29Mw zTT~I=4}Kfb^Msc)u@c8g@@Vic$8jlSgRf+~TICbRgMS`K{~;U?%A>)5701g^ z?JUw1488&|b@Hsqqz3;lfd35H;42n;XN2*CpT}PU+2AWOh#}G7*AhAi(yw+O98Q{8 z-HRP)-*EEgoV+j=4-%Wb^6>hUG%*ou9pt5neeJyKXaeRyCQbZ?g!~4O)BXc4-ZCvs zd>hQ|kVz9y;CLMRO;#rzlfX-mcw-9^NRS9+jtC_<)F|$XY~u!x`bSBq?}CMr5kkoZ z9w4E>vhm_Ts84@|5(7f9e?uLr6N&F+^?9%PqXNb0L%r@0inCvt)fc=JFJ>O< zv>=p8AQbaXMZ&MUM2bOMN?3EKQ-e^42BBE8eph65OmKmUemfWHb%9Wq2EUWlt-+gB z;#0ZrszzeCq11NAU`tkOGCU|in!&zK|Gfr9KVz^O0L~8FFc^dF$tW0u{VUiHg|E;J zSwRAO+RA_vCk(a^5@t`x7_82`>L6pVO2wyMqU_TQwh2t5aAL4RgfXsw!5#;u6VlIk z=LWEFSf3~J<{8bKn0G3I@2~pkBHmfL+S1ZBns1|Nsd(qvWPc`P4DMzeH_9W{_Z*I& z$Rnm$c?#PjWV~}{a>``%9L2xz&f}DuVB>()L6*TZ9J|UR-gz{R`Ho zfOiJ(XZMA9>a^GKP9baU zPvHW?m1G#KSM&9PY5Tkt$TuO|J~s!(hHXz^e*1io=m#J`+CIlww4RoiH|zfl!1Iu8 zpTEcP4rJS>kaSpt_uHoqeg7`Jw$J`}svz4w>v4>QZ2MHQT%0)GK6fL2suF1XJOszV z@@V^9g5y}Ib|NVYwoe6cTFX$zX#E~39rFF496kzh<7f`WgS28|b;uFV% ze-`m;l|X}k4UVhi(cpg%$30MOCus@>Ujba%;8~ra?$LMIo(B9RWP`6*K3x)F{NVqZ z=r;t>;46|(mv~4t_#YGf5u{)3^3@UVZ0W_|?UFx^!K*wolUWx~g)4u)M~Zh=osOX! zstnmU=7K?L96_SphJHAaAsR;LOrobjxdC_<;An$tgqkp#kSp+A2pzgDp1!(~)lN2i zJ)WmVD0}N}!^e@8E@r(0?k&i^U@ZV2kN2?hr*h-$3)a~)GMRsX@n5j+tLtHlEJr;p z$8{SoR*t#?HVE`U$Z`}QFtA|pH?hYPUk~{l@5=5YLfGpKuM=ApZ*>bl`}2chms zR3>}-Ca{^^(1(@fWJH02OtjZI}rs3qjDJ#7r z@(Z$g1o!)2pU-0Nnff0mo19;94klSc0U%?weUJqFXAHZ=x zWEB(|3CdD-t)Q(XMFug1Y}=KsD)|DrJeSU?B!lXGdWRgt zEOQ|IK$7cQJSy~6c7b}tpgwP9HwzmH4)@bzcOFCZXDx&(wI};brVro!U!hGy-~KNl zDksw40I0<=P@cE(?1W=`Xo*rQ-30wTfF?YRP=)@)g<{H*e4{^ev5erQko}p9^KhIc zkN(WXojAS)C3(I_=!=9r2aR}=NAxEz?B-$aIBgJq6co#yR-Ov%b2Dw#D?`4|2&&aA zJ)Aob-_5>_OP9Bn6I`iFuIE_d*R{OYZT*^BuY0cfv&am}jF^2+vGlbg!6smSU`h4V zujjPUsY}KR<^~nTlJ1O2q>FEE4X50pkSR2iaZG|t2v?#o&QVsb z^C{7U@O{DT4LK{9fITvsZ%i40YPKQ!*vfS@s8+~?@N;mS1(^`8RHaGwX(9XuFxLqu zAzZk!7*`;K-wS3vq>4xbtHI5;lT{J)uqN7R2Hj@~{wZVz-QVMQM;_^A;n^gBYLvzd zy2_%&W#J9FgNfe=GK20mI3~&?rEMP^dqFO>bT_3AUFx(!cOIY?rIIFhGLBX9NTa&~ z$5$cC!VJ21;=2PfgRb(+XO>er)VvMb(jKXKj}iSN$PBu_!tuI1Qu{u`@d;#RStaga ziDQFqU#3?DWCq>MaBL!vbi!S5>;%OrOI=D7MEer+p~M{^u(Zf?aGWlWQvL+TBaj(( zRc4t>iS}q;V*VR(?+Yv~a`d^B3E6wQSXOgDUmX(jqH+5^=nGGkQDn)|*Q$L^ne{4n#*6Bmx>N*G%XML@$Tf zHFS4dAY>fN4bb04?616Zjr)8+=L%SeC>9#Pbd` zpa*kbc>Y`p`0`y#%5oD38gv0=LOJ~+DB9ZD|?D`*?oe}$NF;HRv%g? z|DiimNBse=o5`No>~4IViJ&%^!2K4qzpmnr(DE$Qt*4N>QdjlYSr^?*D|=4sTswtY zN_C!0>64(5dZSSgCJ_*+%^L|LwRvCS_l7F>@IUOlumBW2ijRnkM6z1l6u5O@Y>=0Aw(p`o&t) z-hlUnOlwkXF2Q)Msg>xtf=Fu;B#0rA*0h4?6CwRfWfm-qVGP_O3`(LhD>@%Xr&MOW zhVvUD-Ba21Y#5!{AS#Ho*@L}TZVf_WHn>|Br@nVL}!^p>g>v-8(Ly$l&U*LR=)j>p;5NX2)HqwLe{ zd?2{~kh7_QD2s6g?7R-l7)TWnJMYDE2{MyZ5!m@S+G*^3cObh$#?BjY93hX``SCcG zK{ZNa>|9xtxGX$7zkvAjlt8xETX5VgkJ$MmI39vrYO!;r4qfUrJAVbx&y`B-{6ie? z%OiGPaWPvQWLX$H-xS{{$k@5^%V*|LIoSC(cA`CE=TnHD3>iB=2*&~P>_yBX937A` zWhL%miDPzt8gZuxET((~j<3oiru4!bOq*&oX3UGZyhTn5!B z{e*82@)o{dLX~>Od$yHbxe4_+qQ@s{p5F5wayfe#Wb9m!2xu^4=M#t?2eIRboeRXb zlPotte;cv!F61S4J`K?B0vbDCZHP%K@6&MZR4`)abBRA3%88wS9mjQ$v2)@1Rtxx; zoj*(5;{uDF_xmcU4rJ{7RLgumVA%P`s({$}B%-&0jGga;V=sBc&gbK3g^ZmmF&v4+ zF*{#D+=&9)Uzf!36?w$YZ^LmbMC--QCHOk=SO3D!8`Ltf^M?RE2pKyUECSP@$Wrt& z@f)Csoo@ivJv-l=7_swZWbfH|J3(USXIqeC=M#|!K8KxO3_O!rO)GmgEIW8NYAJU9 z9;Lqv89Nt*KV1Su?EIZw!HAugeU14589NsSn~^ZD=En;nc0Qcwp@Qj;QwS2+Qzb_1 zd|RToh5(73Uuo6RvqT`z&i4W^3o>>-7spYMv2!7_mdfy+ou5eb@xqIpUxecVdBo1w z;kX4dcCN%+6Yzz_?EHts|3C?31l@q+MR~-|-^1}PRC_IH3fQ> zESm!)lW|Y#?S;k{iGBeBq**rKKzgQU*&hM?9vaq%4?a3cw7_)9M|W z+HV4UBV@Bou^6c%jGtxSC;C1?G|Lo;f!af&S@r_a&q4atzJTzvlwG8DJ#)z%>U(!^ z-O!6+oREK?Av*jtB=A5zb2e?};`b$IHBxqS9?3X<`CGcwpjnZ(9-p}4Z+v9a-e7eG5f^r?*Ris#}Ly+v-r zDJ(I*9|r0W$c*p8g>h~&zCW*`)y5@Yj)kn(gv%$m$oPIX@n=H5jb?lov^0TYd>=Z4 zEMc1?;l0wZ%p)X$jYCBV=`prmvDqb z=i8GVt~=wqB6*3$vfOCr2AZU4x*s|01DWw%5ME+Y6(g>HG;#BxXo|}C-ph({Pbzpr z?lR@34q5|pHDndM635pdtDw-xke0G*1x-9rB$t#tglyl5DtRZl+>y?yB!$W~jTc(WfzoFD$L75Tj zIQl4*=XNC6jPE;Jxq9l?bJFNq^AcU|*oL^z@$+u@XpIuf85d1Tt;C4#ybCrIxm?)S*kA z*4B3iw5w7{TW`d1ggnyLkH@hLvMfwnzX0EPkZJ46kE2s6hqiv8+9PfKCZcbIOj~~t z#{=^0Ma;`MHbACxD{&7?9Bb=;Chm^{OXm)6ptm5?xrgBx0>vpghE+dC+WI8oCJ3yQ zN8^|)kF@ohaa<3XwyrWcm{rP1TYrhTX9bq=z3fKHgiKqXhGQ2+u93EW1JPFrFKzt=9M3^cTVHFLk5huQw*ET+ zZwusqrmd?PTrS|LU#zWXzs^CwVJlbVIY~3rbaG@>?Xw?MxQEbTfCfRiTk-6LW4b)o z;JF&dw-i; zgPFEIo9Kfeb`5Fk0&y11Q$MuzXOx$;^#y>A5zw^tcMWl^%KJ3zr?yC2Ka2P^kZJ2r z;P^3Q+Pd(lMc`v?{jbFR88U5s(lF(FafF54fB^r(8`$3mt@ z36smz2=i+Gml{UtQF{=*8)SNvAVJ2J2h8hHM-Y7&1W0<6{s_2xmhf++t#<-g44EEv z7LK)$=~2QXn(#Ed*Q2f@`WoS-t*^&%w>;9Lp2P7BWO|g6arxROj`gUwh<{TFq(}W7 z$7k|LkE;15-2&BClBPh9QUEuHctg|rhD?uAEIUVp@p{y5L{Ak&dXyr0X~IJy zJ?b!`4}tVEZC!vchB0uvFmQ>suIPLmozm82e4j$3dn&u0+mBwMv@ttZGQ}_h z62vSAF&gTH-Zz!rF zu=Cq!r?K;qKt@2u&Ue7Ey*y&)2je&ps!^ zQbz229dS1aEO!1Hjt%lC<=}Os66p@M%7mROWyH>B61O{K?0f}|W%9`QejkqSLi!my zpHFID<5Y7!JO3@wzY$*S{4*S%K*r96<&Qe5q^EKxt82v02j0d?gN&U|$FT?G*!d#M zykw>4s8V03Tu0u>zQn=Km(3<`eWvnL zqW=aNI~ODZ8qC;v(0e2uC zL&nbQaEy^h?0gR#yFtdzm6$^l636WPFyi!iU}NV?a2zX-*!kHw&V*>a*!keKa=NFn z^B=2lvGZ#I=_7Z>&IO3TDR#b|_`9KqosR+5Jv%>%I*OftK=z)UKS+?+c`5Tkm(Gu4 z4_ZqGpTo}Iwl3N*TyyEz7Y?JAV&~6L`qPlHb3u3q9f;U@t1x2cZxR0{Wb9lR-hvtd z=GFYSG$qB(|4#I0kg;iBY zlDb8B&(04a`e5P3&KKe6kVowNEF5bgW9LeSk;EsC*||Ote3cT2o$DK!cgZ7m{tS+% zq1q2fQ^3v@z%cOCFJ|X&0@erojGZf%TW1l*v-8i0{zMS5b43O*Bx2`PcQUOY{fwOp z#%(j769ZRyc$%FnA|FSm*tv}Fci5cMQ$Iw3lSylXz9mI$4w>;?08UdpOapI&z6_2nHp||? z@k_{NnULI0iST}weN6O6!fTdQe1~-o*(}=v$7YbtG9}B!iQ`$eBk@y|K(p*X9Q(_o zS+)?z0;u*uQWnfI1+XPW^@xn`rvhFB*(_5me{(6q_*r%Z(O(rrvrLg(eD#oMmfcD8 z9gu#tW0*o_bMFPp9O`>BzVEbYFNSekb{@l+Ie~|L-cmOAh=M#!LyHpr9W^gD+ahK`rqpoc)z;dF}>6{!G+6&^_7j;(L&oJsbJ1#65U6 zxr+@An(z>w={R-Ylj)()n6{I^Jym}8jA1!_ z$@Egd7b(FBc<#q>FT`Bdw@7cc6na)F#cAc!)F6G7^jSbZg@#;5mg@jy{F8lsQf}~7 zs*b*N{|=b9l;IG4MPER^Yh`eN+vX}>7w{CKvfo982ben_&j38tQ0@vmV{wdzG8Os? zz7q3Sn0PWQnexfG9yxsre|G@8LPIXb5U$uT!3@dfHq4=z>xnu7%wbS&J)WgFmdJA} zp0D7zPytci73*GPFSNSqsijjsE?bqmo8X%P-lUYz;CT?o1M)nK=QSL!LKV}Q+DgaO zC!gBZ!a)STPyAn$;21pRcf;+VTqB+>aBK$Et|v{r7KXFx72uxKBU3(%yO;Vh|BisC zKs|m$6NKTwhNod>_sP9L=s`puAjoSkItYg~9-_7I2SPiDZinnw`v|dXV5w|`ZX>N_{Rfr?hLy`&1~`j^`E} zH$j#9R&p=EnauDiWj1irqrmHf$v-9f325jjqCbG)zfU^ZYxQx}eRKBlIQy3T&`AK! zqpp2O3Lsc|D&K(>A~Rw)A7#N;M!}g%ebHHQd>_aadzFgSXPrN!$Umys*}mALU9P#~ z(#7(%x}o!Z-lzFukNYei6}voL?2~-<)M}Hd)OV*9hdk?wt!k!NeSCW2JuGi%=sCXF z*P~*6YWwcz`I(_t`m8^VO1<3I3;T4s)C>6Tt1nd_$5tFNq$~9-m8vgf&!WTzmHMDB z^Gcvacd25g)xGk#yYYbJIHRR{&k8R6jzcycx$$km6?V4i{anN}`nNeoqGj-@iDmA?h-O+if=E?uc+eykd!3_n3TO&R_S zz$cI?!?8!o@PPGfZcvTVm@=#^xPq@NyfQqR_$?q)hGUPE;oS+{6>_Pi3@bGsF;(ic zGJGhY*^nv2u}8{qC!vd#MNKsm?@dC^#CHZ{+M)6*%_uI?4zD5VD#*0M@8b9lWZI#y zWtnkc(GIUs+oc^oP4r{J%h>xVj=w=pJ5+-5%ycD4YlnTmXWP4a-+rbY3d@w_sb8!e zZVGl3L>2m>3M;-(W)3;BgJj#N!WcrQ0@xACjl?q-#~i3qAIuiMB69)w?BYI8w}RJK zv(F-WEi^!XIz^C5gOs10t;p$*r(93mwb0Ul;$kzPVmVSoadO9_lgRB^TW< zu6OyIU2>xceU9j71UZ&{UL{n;5UfbKRfPVI=(i#JnOZ5_fEbtUto=w8mRgy+7nH~t z^_Aeb%47AmhP^us8LRw^Q47Mw8G{3aQJ*QG z81*zjyFI1@5PEeyA6cp3&qeX{B;MtuXA z>mXy)_u=@SJYv*8$MF)hBuZzD`ev)Eo&}8hPXPa*lw#ER`-p{%QIEp0F=UKd=@55( z>X=b)NBp)*AV$3}j=kj(qh5$(0aUw=GzE-W0qnUv^@|zxseso&#;6sG928+ZqrQ^p zuL&YXtw;2iYa+2H8C(tAfU6w;2Lq`;p*rnd-!ysZU{-g2ri(vIIC{+E#HEy4tu4Z^&de^N_Q zddo*de*l@@B1nmqr)osnarymhClDa%ErS8MXDR$hiJl?6^p-g|j+95*@d-GVL#DSV8DGlsiDSLxeB#el0_iO`;<#QO=`9c7xF4z= zMVfdD=mYr*a8K1g){dVC{48X8i!i+G&eJenZ+V;O-wGnVMUg=aiS(BLBKlKEKhur{ z3u71qUUy7dJ63c)jwY9IAbFGauP79=tbF%mvW%=bh_ty<_RN0YXE32m&T^)wGj9GifT|ogq`X1<1#+Smi#L z_yZwRxrO16qVhD&)vMg?L?11PE;-&oWb{mC(#b@xg7mAD()A#)AXD1kDzrv|sT8kE zfm{q#O54#FbF!J?K+tslxB!SY&~FjF4jL)#<1?$tBp}i}P8CMl$B&4AL>Orw!i1T9 zgkeLg6Gj`_Ys9|_*@pHJjt}I~hF1LmXV*}T(%5FUo-7ddc}AOAD6J#ZCT5%07Qi=y zZ1WNhvEQRLb3*(gy|P>XpF(!e)%c90Q;Y zG8VHM$4Ys`Vxo?YROR{f*m4HbROPRNx&$&+`Cc6BAybt#_?#C2MpfQJgD+M2r$j#m z6?ihHDwm=HVc+AaU!*F(1^7)RkgEI-9RCH;tsk%S3RCTTTxLF4jblA4V(3~NKg4k} zrD~rp`+KJL;wbV;ANgn$`46lhggL{*r5spfAIj>_3j|t(rhMtIjAeFOrl|EXrwX;rr&r)Ub6bVa*wK>bmHf1EyBPWPSF+Y#YPUTLoU2?ZDa3mA#qDJ7zow75uBsDpWRanu+94nMMwkNrXCXsX|s| zwQB{E2(6C4wtjlxn?xO(l@OTQE{d{0)OOR3RP)#YuWU&Un<>>1SMle{`B$&cg-Q@g zj?7e_NEUi|F1LV(W&JW8nAuFY?N7^QR`TzuP$*EQdJOQ3aOJ+vBZkM#&1@!Ybuaz~ z5&zx~g+jaFm7}wnr|>-=2mdyEd{5TO&3#(8;O`NF3v~LET{e>it-ps?adVwQGsDhn zAWk2e-*`%Q+F61`y(~PY_HUrVOuE0?xe84LeyhQc9=k!VVBMz zT${wk51&U)L$ibSR!)yO&$t5xnlo)UYCiW>Do)CG4!(M$<64?K7cQPWxpB|N#Vt+k z?F*Y5+d7uCEbh$A>31%c1GQm!k7J%kPnJ=flKu=_v#8oPj8zy-^X|Mxw==BVpsm? zN@vB@y<><1n(vr~Q5TwBk`3pa$N7V3_FwupUveP34s^h*Y_B;dpHC&A*^lO%AEbez zWq-=`>I|;toNGU(m}vG7%I1ve&)?{UX8$ZarheBW(G=K zPXA0C#GsUBCYNttzFm2ZRJ|}WzA88Ho~Z-b+3K=84GQ`Y8E#kJ(Pu{0gz_na=2m5a z~kdY_>0Jc;v*m5cQ7B zXw+0c9-G8D_RaRolV|zCRBY3@6EhusrdgeKh_j1E8Jk0TjNwg%wbC>^J6rB1=+4{GOUazy#jUTQ%!#S4 zYz#eda$3;AY*h_*b2UH<&t_-XD&M0R<_ee=2V0jUT|GVLr~Zr)G_sy1HW<{;aZNv0 z6n_-eFHAqbW=+gYqY8Vn^fP<;rrHG4=CQZ$n%>;HuFGf$JNjtI_f7YSg4=21etvB8 zoCIwbk38F`o5AP+I0(mnonCGlkAvfOQM9Y*Y!{@OPaKpq^blVo3ORIQvSA*kU4Wh^ zd9+O(UX_hDpblF;N2CjhwyS2ptsWV77gYS+1351~`yJw?5D zl47z-Y)kz;(lEKY+pxLm{49(RY$B~6g1GZqv_x&F^&I>s@(v}PANgd3e`WiE=7 z`94f?JhnJWImYW|aY=T^aKsiY z&s~>m;vmDgO+ZcoO!rvz-;VlXzT%)6qnmaYe_QRp`oms)swvC*cRiA0s(;DL2@(G4q z9p-eyL=()-4{XQT{#lpr+U&5*kSejoGx@88OKCbJM^6y}d zm`p&K-v%q;*UenN-`*KbB5Ret(5j`u@o;KEsG#pgIEv8{y4!HdO7@Pv*-iRXAw$*n zIdEX#Y$aS_eQKPQ{(D);`5X&my}U(J@5?4a9`?%Y2sromX1F3OiEhy**QGZxP zTz?Fv5)Trt{Q;AP`WbaVp%3{!A8Py1!>LASB59AnI!3n1Sn&2>QJ-pG;>$&DN)#** zE>1)_`f1|U;A7gIN+YH{!N&1%m#ZJyXc}u>V!=+Pn~kEI;+!*EC%P&5q_34yYK~2$ z?rvXuDyc8Eh;mk6J)Oj)@^xkYR7;Z%e};Xh7=WV z9zRo(xVBb8^c|(Rf>D5y=(O?Dq6M2PZD$RPPjS0xuWE7skGlRGF+D zH+Z$6s!^{+efEp2$+0!FOp1Q38*G{*{jw;&u=Ll9Vl_TWovgw)iV(%|zbcA%Bka<1 zYpp0&bM`mU!eCr6{AH1vOBMcGkB!gXcfYJ5DxzstvuX+idF{cwShWW?a!(Dxw^$0`Mb75IEDN#z>=*>6Y4$o z8@JoMuUX`mp?0DVqMeGN=N&*xS+K=@gta2tQD;PkiN6wvl>*lOvC@0<1;@b!C40&B z6Sc+9O%?fR$Zi`$b3>3*eMGPJ5;1A=Qhd8NXhM+=HJS? zUm;ktmILIZ!!#9L9@UXj*gw+k2Bc+02O5~@<29~V)un@+2Fk_vbc$$J)uuJ+!Rhv^ zaMw{7N@AW@OamoR-A`EnTiY+r)Ea#(mQw znSQf$cVa5>ybR9YLkuhytK~A=W#uqj* zY2XBlNbS+CXSZ^aEcOrIDpvp2e*A5wdOc*DqMHiuiz`AluB^$@ z?zgwr0f-D9ICn_v&2IVo#k*r#KP`yaiNOt>q~#dY&P6p0B~b5@9uQ}BnVJsLv=y$% zAQH{H-F$oKl-+&*(8@g`bz)k&NZ(P@qbb4RuYkXttZd&eHzER zWP8RktmY4dv*=gZiEb2}x#oChC9<*&>bxG@_hZT>g5Ql496pJ{* zcZqeV?~)@6_V`8+F@x}kIR#;4)8q^$M@5{cIazyHQxYA}#ITmc&u55=RKj^(M%XmM z`H}Igtx(-LI&G%HjuH=&HOQ^3_IP&qKrWH^PO$*5@L)JGyC-vap?9KMEGpDlj`b6r zn8k&LNN*9vERqa|n@^pI4xvRV9b##sDjesuhh?7i+XUu#RYSdCP_YT(__Xw`=~7@7 z5qmnZa4u^8$S6`I#IA@mij~Q9bQ{I0ctYBATy4^jvrfp`k+5=EJEYc}QlQqH8p%m) zT&ERiD5oQS6dU9s-TjO%aavqa?AmT)rCpp^6cdZ>XVEulGtk+Q$mVB&Q)bRdgloE8 zrjST?KF>6R^G!3jASr~@aS<1Grw3dVbx<_1WCC$|z{T0N+UYb$t|TmF&7x`wy{e!~v=>|*Nt0H2ztm-;nC2C0zY|^? zrL?&!UGzGoL>|F>M?TkQq-)~1RgrwD zY0S}F!iy3{&{f)u1i`9APOMJJ%Kg(Dy(?{i-z=>$>WYDB49vg;k(#s&Ij9I>cIJ&D z@ijS>BTLs%$IAvsa_x{}fzL^tUTaDEW|(zZ7l~@P-#@AAh)9am)X;&PKMoq15@$!T z5zF2Id=tMXfo*f&c{hMN};Qo^9Oh-AVoUGd12X%5C=Td^=awos_7iv+>?^pH!8 zb|-5wgLE^BQ#CV9u^=aCWjIMJ*3h={O=0Csj4RC?cZs)VU1X3bEe9ZyBjX$*kt~uW zDPcPgr81MXRvpuckI#@L(-PDUe#+PyS8h&%LX=Ez&PmtpiYuo7d zOV=?ujH63TL^>cXA{|&HA|2Fa2u(yPk{lx`bao^;r3A%f7do_nHP9Ctk;4jQti$8+ zwn?BJ?Fe6e3-I#Ok$zUww~gM3lr*PMerhUKOpfxi7ie=APBXV)@vttw{E1w__>gjb zS|V*rJZ@=n9M@GyJ0_l~)+_C5b0i5Za8g@GBF8OEBq{abqJ;l&yF`N0;;1JSy@Vd} zhTKlqS?j!kj zT0+j$A_;2MrZjoA2~a0@FF>u4^c4#?>XcKu6RA$^DpH;1MXJ+dk?M?;NVT>|q&l-e zq%z4cE>*{4>6K_3B75pNDUs@26Q8=u;^$>yL#5hV&X4SNwz=q(EIs?!woKc;uuG`U z$_j_aae%KB8O^ogE+(~8*)CB&@n);TGFD0KmsE9GEP#cH0LHtICZ$EZNC#u_2A#k( z4qrpC=Y|3cIhM;(JUNKOqmsDp48FFMglmLuE6k_GxgOn=#@(otgwyq6l#|-ZleHvS zu2&?l>2egsaycs5ax02UvD+q zaxGVxHpUJE6OX8+N{CJ z6xt#ZzPI$#+gE9H*K(B4nBrxOg|IM4Sz|3M+^;0h#cM|r^tg1qYO5Pk9+9xk38{N6 zTctbGivklPfqLsmZr&!Yc091Id$vtW=aY)1>jFbzbQfuIq9AM^XKPa|V)|2jpZN`G z2dCKVnBJD02EkRSL<(|}oxwCmD{(YDS$91 z{lMR_N<=p5t)9ZZm-JMm2Og1Jt~=6QUJ$g=-TJiaQts|pBoZ}6>$IR%N4Y)4p8%x{ zeXheX_a$W~3#P?w)w&bX8qaaMMKzcg517s2NT#3f#|D(7E)8uPos>D+4+U)cm_&}_ zvQ!}+BcGqh=ujQ;#3eVkUoDLI=^~#WFsysgT91{r#Tp%P`6baYUFSAj#Kne}o;#6V z)~%2xIc%A)47KKNlj(Nw*W(>uDd^w=QOxfrCnkLwSL~#8Sfs~c*h^X<{d8q<=O(LR zRbf;TvAXD%kH6$Z*QG8wr52d$&{HHy`A~nE$BYZ77DzK1U6}@bE-ibg$ij@*6sR$v~bPC9*}Ykn;#}N2urf15eG< z3kn4-ryQD87iTAlu2{qQNaU zb1cNGvbV&B;9FhB@w9eReVw;#4`zYg7P--2zs1?<9la&lT>9ZzU=IyM9{gwo>6P?JqywV{mt`Z#`~ZQ%W@4=qgj; zl_jUr-e085eBa&pNljF{x@1#cRrx`xll?^|U06!kPjZpzhsh|#JAK3tALEP7f$5S)dtT8{4rs{QGHTel^ zUt|h+vWp)3RCjvp(_Qu0pL#v^89QxwHnr=zvzX^heSSV^BGrsr{z8LkYy^xocL%aecB)<~%5bjrt)a_qHE7|JxntD8? zZvV1qYOo!`5nqo+4EGzU%QC-;))1{x$NxIz*G-}Hj-~iFZPq7ug(8`0hBu04-ePml zW%~1GR4)4|=KCx^X}SDgzjVps`nHbd_N8-M>YGQ8uAh|Y8dQH&Tj!F(@S_$kT+&(J zy0oLYvu$BVcX2Jtn_CujjkGfATb6frlO|I?f8m0b`bBN^OFP;+7q_%Dwztfi*D|+p z$=qY=mn?3sud9pe+7;n4Y;QZNeqM8PebeFvW82$0mM$MVuVZOT(@|~nTk9u9sSC^Q z4%)TFpNFdNJbqD2VekC&>|HN(EyRV-Z8>V`yuwUee>X4eXl03HYFa|j zqD7eii)%D_Er55D+ZQfeRM$)-zs{wL+FO*3%66GB8;@Pu(zvK|vGbExTXW-*&c$sV z^IV8~Q_=Oa3+ZTC)@Y$kyw6AwTs7^bYE+oF3JdGP?rwFN&%5eL-8)+t3tm2q>fgMe zsdK)nxTJIL+?G~y=Xx&grp2lbZkx0?%TR?H7aX-jZ!R`=62K$<;=)q{ zt~kM%x903@TVOrT`fzK26uj`?Ob2x=6k>4`TaC-Hy>U@fn;!>TNnqJw<8Dkwi4m~e zmo?9CS}fPnB`r$|#zeIx&aV$&eO@_jaudL+XvMa%VYM~2x1GSOSHrC;q-67AQuw(Q zHJ%Ysd^Gc#+U09%pSN&vTj%@*>3-7uv5IxHwJuz|fHz$`8|S)yRn?X?tIw>g&i2N( z&KA01p)0L18e!oUEi!LGGnRI?wYPO1uf(chdS))7+AXcD;JJ+p7x}^ISh}EPF>^Y` zX}WeUTtJXpIM%p@9nDJ@FK+2**1Cu$bU~UWsfxP(oO0CCw)W1kZ5{R+x0@TpFp-++ z>0_dKs3{P+-OM0KX9q|(!!$94S+c05nLy_8BDdh9jxd-e-q_amg-!9)w2-5gv@|Vl zo*!kVFx+&FFKKDID9uV@HPhXC=v?3m^j>BHeU;QhUWZ?%@$;*!Xwlgmbg1SzRt#IZdy2d4iy&ziH8z2q1rZ>0PPFsO)wx|?(?g* zAl>4ob}G;TS{+ByzRaDu?M$4-i`!aQss#1p1*xWX_RwX=bWn94vaoG#qpb)0NIG!A z_O#z>Ww|$YHnFogR7X>cA=jwpQ8rZD#y@T%6P$E>Zp8K z8Zg0fQB&42lMK}x_tk-Tpl?x>_gJoN_t;5o6oMf znyV~6^qeF#UzcCQ*Zs2Dk|69sg2xo~SePX6;h!bpNs^MVx2m@fN#4wnq%Q0`E9^Zc ztO*)$29xT-{=uJC)X9BOE~^SoYY1!dRpFrErj>QTc-0{6oew@<(Gc)9|Db&J8Wooh z-Y?1K?=2}I-8Cz+xdv6wl{Jnx?0s2zvdxeCKTup{Qrz$ZDDKxms%d?LQ&-gmf6u7) zKcNkM1N2?BVfCs8>QntcZ816hdIjZ?@#Ji-Pg0e+`^8mBTK>OVn|?`cdd;Rbzf;GA zHS=lzn6NDP-YOiyk27@|!+`fZ7_+kAl@;o$$1|sQ&73;xK&5i$%e zKdCMp7(BJorN1InXy4%U6P^E)lDY=L^5C-JMtK2A^c~mxPp)hThSO;pfO>*2%(jNr z0WT=vK6_=|z2?bMy_PzhwNxV?9CdHlyE=I1B&*Kl)|S5c`fvno8eSKUunK>CQr)1S zpU-&a8nt0|R&%vKB@L>(S^;n6vQ_wl%U5K>!NJ?Px^RU=I zVquG_tE#G^;^G?j4d$yJK}7?@P)9BL2FGR_6moQ`Wesb{c6C5RO(s_o1OqM2eJ8cj zcrEln)vZ?5{gj4)d~kqwxfT2&D|n4YkbHl6f@Mq#a<;a@uv%NwOr}tuY#3C9)%m_* zFf*(k8$IjuTZJ>J+I|dFLpYOXow@76AU`k66B979`I%ukn+eIBlhFJ=CHZhm#w3GP zE*uf;S;v&=6U5l0i6 z56&Z6!SAh93Jba+=YoErW$S__yO2FB-);g`$6)*HnpRilk2%z?&i4;@4~}hMee7C? zYX{BKiiR+k500%1dj+Sga=C9AJd~m4Ss>e6Df!^6Rg5Abee%IoR{Ore2cepJD*b-6 zl36>y=5wHt7jWRw9!LDX+lo_1kbld>urqvmdLh+5-;|Qlus-P7V7}w(>hMx=wW~+4 zt2(7`ur{9!?x8|_3o>|HCFX-VG0XtbjjY5odzcc-BU9%Sk#cr$$Fetk>gtBax)er`G8#3 zP?gP}G9zD)!6!#?b$YIW3Fk^m@-yv8pV+^_1&nJLZsI)eQl6pKu#3$MD=4FkRna@2 zZJn%8*%2$_^(OHl5b=_AU z+~2|OKyw;f0r##8vvuqu+PPZcpbyG}Z!q%Az%p7_rWxNSThc4+p_rMjUPFR=;4Ib;|Hw3` zALzN7e6Vg+tG1dNwwmGfVa?b&{;3NG)R$C-wZ^PK1=lhI8KpTwgnfs>APT(Om$ zE~L?A!KX|w%eB=!zFL3Gy@*iTGm%zG4x?W0Ix%kGIP#Ua@*NXbo+5{`ps_AEK*GmQ z5mT6sN8n{P!PyizQivlOUX(MtCU>~Ic z?Hc(sn^*5(FDLN4P5(%ep`7cHWO@hdnLyR~;0K5T1A>R>r`mv*lyTp^646;6gqbqr zOklwSz6amRiMdt>UtLkRM*Vm-vAu&M)hT=UZuq)EOag28KPqoU<53;_oqC7C8Yh(e zohoe;94= zew@4apGj5-M2AIEkJ^1EqLi{>3lDzdftN`pUX@@EB@l6j_!=aUCi=y0Rkvy1MI2E0wDyQs);)m@xfZ2n(5>gZ_c#7bLq zl-Aui>-?jj%bON2YQo+iEuUWhW+=smoLGVJq%E#^ zy=j$lovnB560^CFP1V213hb)u&Os=s@bH5iQ->es^Cuih(Mdq!ip;Roqww&9(xTH2 zGndZwryZQ#q$eYB(P@XAYL(2Z{&+*K)VT+zH}159a9Jk(X$M(Grya5eM+aE`w1Zfk zb|@=%+JURfX$K&6whlK0v{uRG4!m%<-c6rqD2W?50i(soi3Yx+6AcHo6AdEW2^9{E z)x}2}Li(c(09{Tah%P=m!`k2FfP%2X0}5qZa6kd#a}FOgkakEFpB1=yqtk=rtRN0! zVpGxBy3b@uTleus)>`t7&G)VhGvAX@WWFafHs9keG~cVh#C*>IL_Ex9Kjv_tz@E>k zSGV?j?EZcSP22McEw<-ZBtz;?d9Yp=8Tq5k{;x9fQ>lN|$p7Cl-ZMb|g7F@7k@24K zjE(oiF5$SVg##isUuKjBn}DXdb9I>MeReE_yG@%hR{hrIj?Q*>(ZPWdGk=^R5!??F zqrkP1PlFRcd=9|$&4hd)I9J(-a93;EXBIVf)Lv2^vt!KSnXj)#7w;2}nt&p{rQ$|n zB$Q>WJ{+0P&J3$!cQ|aXuxbxt##e>Iq!c!U0}{T&NsLgf=iHEFXj7 z9hQ$J>C7t2@aQ;0beaCy06PNtQ^!*^`mElGi=Cwf&rtK3@F%RyeTDUS(7%ZNE`0N zE{EO8j4Vnqu5@@fK{Xji|JQ}|c}Ri1#)aWNXsZLphW$s^TYp#OH_Erjz=^#f%pa{> z_?N#eiOy1%-vd2fx?Mi#Xpqe$?7wwA=HTVRZtXjuzKR?Njx|fmA}Ts4sX7)PRi^4a zrBqG)bHG;Nye%-tgw+$m0pr4X45#WRBehDemtn$Hq+S)t&mwqV*>A!Dd)0?!_2Irg zMU)`=*QHZtJ|RXSa;U5e%h9T3gmu|={Z~eZur<%$=(L7Uvkne1%c=a+l#S|EW%abM z@jmOYKPO7#!rF1+(6M1{eOR?pO$p1;o^lvr^ba`>*1xlO$A^Em42S9;8e)+ov41Na zXo5?#+Q**aLi5$aU==WE6i9EIf1U?L{!_vs7EXorZ*amIsvJ}|$iBqF#9&4DjMY=7 zo*py|<8$Tocjwe!MWW>%6h30rpT4$H}lq@{qe{4(8zVqU#%c=| zCa8*FxuC3MVO^TOW5bd>{l~N$h%3Mb6k^JgEwY5Qv=PTgCAKTb+*YZ$0%AU%>no~WK_<{9dZ%yf!{L+){-OXi9T#bD?QMi%1pfwymFWjgu99AE0 zw@tWFu&hp-1;>BvUO7gQEu}8pb^&@R_QlH9aNCZsQnNqD3K>GKy;rJ{&1ugnB9DUOn@R z)un&G=DZWa?c}>U9HoD-4H@RXI76%3i!LX&jV~3uhoQ3JX#M-5PxMmw<$|qp!Lk>X z){M36XY4C4vMH9XW0b1Hn&~Xiux2hH*fVJl|ElRkX%KVy(l<2)!~XAuwe!RNW3=3O zYJDnr;JC1QdN}Y@ZQWXY)%nVBAghf@R5%A_*&O&Vo;Xu%9So`ur*L58HV7qPDlykJ zW!TN#Zqi*ont+;tmD*;@W`rTRZB2hOqcMx+u{M`c1KZ{E_i4T;&Y4=X--lI%Roa{? z!g6+<(P8=c25f1)n8*{ts);y{gYC(w3UC4zmSJSPj(n@azAeTyWZ@;pY8%QdR&8+o z8mhuAXhKb0ICY%(ShYP}uh64PFjJi-hndg$*G*W0PlCa{HkaXiM z9b!lM1bp`yE7O*v+Dr@RtNuFqW$8;439DOi&NI=2H81BzYHIl!+%M5ZShL-vn1XZ2 zi{$uH_)nda!47uV?wwNs40nL;omvqC9N_bvy%}6)V*VPpMytY|{K}o8f9u^YlWav6 zO1{GsyCyU*+o4;jXmH7- z);%S0-7H|rx`(gGy62!~-6OIaqn-fXs0W~nQIF_iqaJ3=E=E1V3XOWow!o+d;&Y68 zj9-B*Ic;Qi;}hK|W?%_OUlmS567ydi=4>fGi^wkSVi|N|HFHu|g)sP82#d~LZi&OSQD{27GD{LUlv^%R>;ECm0_;`%0AcS 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

  • $cw)OS`RQ7Hh}jUVP0Cdjf5dbl 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 literal 0 HcmV?d00001 diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/lib/libunitree_legged_sdk_arm64.so b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/lib/libunitree_legged_sdk_arm64.so new file mode 100644 index 0000000000000000000000000000000000000000..e734e82efcec879700b9d348a8a2ef0f3134fe76 GIT binary patch literal 426736 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

    5!JA6pG>j!`3{XpDzZNH1)!_5HsM_-Xz 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 VlmGG^O~3G$#&mesFxWU1{~zh}{D1%e literal 0 HcmV?d00001 diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/pybind11 b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/pybind11 new file mode 120000 index 0000000..b122d77 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/pybind11 @@ -0,0 +1 @@ +../../../../utils/pybind11 \ No newline at end of file diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/python_interface.cpp b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/python_interface.cpp new file mode 100644 index 0000000..0234f07 --- /dev/null +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/python_interface.cpp @@ -0,0 +1,379 @@ +/************************************************************************ +Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +Use of this source code is governed by the MPL-2.0 license, see LICENSE. +************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "unitree_legged_msgs/MotorCmd.h" +#include "unitree_legged_msgs/MotorState.h" +#include "unitree_legged_msgs/LowCmd.h" +#include "unitree_legged_msgs/LowState.h" +#include "unitree_legged_msgs/IMU.h" + +using namespace std; + +namespace msg +{ + typedef struct + { + std::array quaternion; // quaternion, normalized, (w,x,y,z) + std::array gyroscope; // angular velocity (unit: rad/s) + std::array accelerometer; // m/(s2) + std::array rpy; // euler angle(unit: rad) + int8_t temperature; + } IMU_data; + + typedef struct + { + uint8_t mode; // motor working mode + float q; // current angle (unit: radian) + float dq; // current velocity (unit: radian/second) + float ddq; // current acc (unit: radian/second*second) + float tauEst; // current estimated output torque (unit: N.m) + float q_raw; // current angle (unit: radian) + float dq_raw; // current velocity (unit: radian/second) + float ddq_raw; + int8_t temperature; // current temperature (temperature conduction is slow that leads to lag) + std::array reserve; + } motion_data; + +} + +using namespace msg; + +typedef struct +{ +public: + uint8_t levelFlag; // flag to distinguish high level or low level + uint16_t commVersion; + uint16_t robotID; + uint32_t SN; + uint8_t bandWidth; + IMU_data imu; + std::array motorState; + std::array footForce; + std::array footForceEst; + uint32_t tick; // reference real-time from motion controller (unit: us) + std::array wirelessRemote; // wireless commands + uint32_t reserve; + uint32_t crc; +} MyState; + +class RobotInterface +{ +public: + RobotInterface() + { + int argc = 1; + char *argv[1] = {"robot"}; + ros::init(argc, argv, "qr_gazebo"); + _nm = std::make_unique(); + InitSend(); + InitRecv(); + } + MyState ReceiveObservation(); + void SendCommand(std::array motorcmd); + void Initialize(); + void InitSend(); + void InitRecv(); + float ReTime(); + void imuCallback(const sensor_msgs::Imu &msg); + void FRhipCallback(const unitree_legged_msgs::MotorState &msg); + void FRthighCallback(const unitree_legged_msgs::MotorState &msg); + void FRcalfCallback(const unitree_legged_msgs::MotorState &msg); + void FLhipCallback(const unitree_legged_msgs::MotorState &msg); + void FLthighCallback(const unitree_legged_msgs::MotorState &msg); + void FLcalfCallback(const unitree_legged_msgs::MotorState &msg); + void RRhipCallback(const unitree_legged_msgs::MotorState &msg); + void RRthighCallback(const unitree_legged_msgs::MotorState &msg); + void RRcalfCallback(const unitree_legged_msgs::MotorState &msg); + void RLhipCallback(const unitree_legged_msgs::MotorState &msg); + void RLthighCallback(const unitree_legged_msgs::MotorState &msg); + void RLcalfCallback(const unitree_legged_msgs::MotorState &msg); + + std::unique_ptr _nm; + ros::Subscriber _servo_sub[12], _imu_sub, _tick_sub; + ros::Publisher _servo_pub[12]; + std::string _robot_name{"go1"}; + MyState state = {0}; + unitree_legged_msgs::MotorCmd unitreeMsg[12]; +}; + +void RobotInterface::InitSend() +{ + _servo_pub[0] = _nm->advertise("/" + _robot_name + "_gazebo/FR_hip_controller/command", 1); + _servo_pub[1] = _nm->advertise("/" + _robot_name + "_gazebo/FR_thigh_controller/command", 1); + _servo_pub[2] = _nm->advertise("/" + _robot_name + "_gazebo/FR_calf_controller/command", 1); + _servo_pub[3] = _nm->advertise("/" + _robot_name + "_gazebo/FL_hip_controller/command", 1); + _servo_pub[4] = _nm->advertise("/" + _robot_name + "_gazebo/FL_thigh_controller/command", 1); + _servo_pub[5] = _nm->advertise("/" + _robot_name + "_gazebo/FL_calf_controller/command", 1); + _servo_pub[6] = _nm->advertise("/" + _robot_name + "_gazebo/RR_hip_controller/command", 1); + _servo_pub[7] = _nm->advertise("/" + _robot_name + "_gazebo/RR_thigh_controller/command", 1); + _servo_pub[8] = _nm->advertise("/" + _robot_name + "_gazebo/RR_calf_controller/command", 1); + _servo_pub[9] = _nm->advertise("/" + _robot_name + "_gazebo/RL_hip_controller/command", 1); + _servo_pub[10] = _nm->advertise("/" + _robot_name + "_gazebo/RL_thigh_controller/command", 1); + _servo_pub[11] = _nm->advertise("/" + _robot_name + "_gazebo/RL_calf_controller/command", 1); +} + +void RobotInterface::InitRecv() +{ + + _imu_sub = _nm->subscribe("/trunk_imu", 1, &RobotInterface::imuCallback, this); + + _servo_sub[0] = _nm->subscribe("/" + _robot_name + "_gazebo/FR_hip_controller/state", 1, &RobotInterface::FRhipCallback, this); + _servo_sub[1] = _nm->subscribe("/" + _robot_name + "_gazebo/FR_thigh_controller/state", 1, &RobotInterface::FRthighCallback, this); + _servo_sub[2] = _nm->subscribe("/" + _robot_name + "_gazebo/FR_calf_controller/state", 1, &RobotInterface::FRcalfCallback, this); + + _servo_sub[3] = _nm->subscribe("/" + _robot_name + "_gazebo/FL_hip_controller/state", 1, &RobotInterface::FLhipCallback, this); + _servo_sub[4] = _nm->subscribe("/" + _robot_name + "_gazebo/FL_thigh_controller/state", 1, &RobotInterface::FLthighCallback, this); + _servo_sub[5] = _nm->subscribe("/" + _robot_name + "_gazebo/FL_calf_controller/state", 1, &RobotInterface::FLcalfCallback, this); + + _servo_sub[6] = _nm->subscribe("/" + _robot_name + "_gazebo/RR_hip_controller/state", 1, &RobotInterface::RRhipCallback, this); + _servo_sub[7] = _nm->subscribe("/" + _robot_name + "_gazebo/RR_thigh_controller/state", 1, &RobotInterface::RRthighCallback, this); + _servo_sub[8] = _nm->subscribe("/" + _robot_name + "_gazebo/RR_calf_controller/state", 1, &RobotInterface::RRcalfCallback, this); + + _servo_sub[9] = _nm->subscribe("/" + _robot_name + "_gazebo/RL_hip_controller/state", 1, &RobotInterface::RLhipCallback, this); + _servo_sub[10] = _nm->subscribe("/" + _robot_name + "_gazebo/RL_thigh_controller/state", 1, &RobotInterface::RLthighCallback, this); + _servo_sub[11] = _nm->subscribe("/" + _robot_name + "_gazebo/RL_calf_controller/state", 1, &RobotInterface::RLcalfCallback, this); +} + +MyState RobotInterface::ReceiveObservation() +{ + ros::spinOnce(); + return state; +} + +void RobotInterface::SendCommand(std::array motorcmd) +{ + for (int motor_id = 0; motor_id < 12; motor_id++) + { + + // unitreeMsg[motor_id].mode = 10; + // unitreeMsg[motor_id].q = motorcmd[motor_id * 5]; + // unitreeMsg[motor_id].Kp = motorcmd[motor_id * 5 + 1]; + // unitreeMsg[motor_id].dq = motorcmd[motor_id * 5 + 2]; + // unitreeMsg[motor_id].Kd = motorcmd[motor_id * 5 + 3]; + // unitreeMsg[motor_id].tau = 0; + // _servo_pub[motor_id].publish(unitreeMsg[motor_id]); + + unitreeMsg[motor_id].mode = 10; + unitreeMsg[motor_id].q = motorcmd[motor_id * 5]; + unitreeMsg[motor_id].Kp = motorcmd[motor_id * 5 + 1]; + unitreeMsg[motor_id].dq = motorcmd[motor_id * 5 + 2]; + unitreeMsg[motor_id].Kd = motorcmd[motor_id * 5 + 3]; + unitreeMsg[motor_id].tau = motorcmd[motor_id * 5 + 4]; + _servo_pub[motor_id].publish(unitreeMsg[motor_id]); + } +} + +void RobotInterface::imuCallback(const sensor_msgs::Imu &Imu_msg) +{ + + state.imu.quaternion[0] = Imu_msg.orientation.w; + state.imu.quaternion[1] = Imu_msg.orientation.x; + state.imu.quaternion[2] = Imu_msg.orientation.y; + state.imu.quaternion[3] = Imu_msg.orientation.z; + + state.imu.gyroscope[0] = Imu_msg.angular_velocity.x; + state.imu.gyroscope[1] = Imu_msg.angular_velocity.y; + state.imu.gyroscope[2] = Imu_msg.angular_velocity.z; + + state.imu.accelerometer[0] = Imu_msg.linear_acceleration.x; + state.imu.accelerometer[1] = Imu_msg.linear_acceleration.y; + state.imu.accelerometer[2] = Imu_msg.linear_acceleration.z; +} + +void RobotInterface::FRhipCallback(const unitree_legged_msgs::MotorState &msg) +{ + + motion_data data; + data.mode = msg.mode; + data.q = msg.q; + data.dq = msg.dq; + data.tauEst = msg.tauEst; + state.motorState[0] = data; +} + +void RobotInterface::FRthighCallback(const unitree_legged_msgs::MotorState &msg) +{ + motion_data data; + data.mode = msg.mode; + data.q = msg.q; + data.dq = msg.dq; + data.tauEst = msg.tauEst; + state.motorState[1] = data; +} + +void RobotInterface::FRcalfCallback(const unitree_legged_msgs::MotorState &msg) +{ + motion_data data; + data.mode = msg.mode; + data.q = msg.q; + data.dq = msg.dq; + data.tauEst = msg.tauEst; + state.motorState[2] = data; +} + +void RobotInterface::FLhipCallback(const unitree_legged_msgs::MotorState &msg) +{ + motion_data data; + data.mode = msg.mode; + data.q = msg.q; + data.dq = msg.dq; + data.tauEst = msg.tauEst; + state.motorState[3] = data; +} + +void RobotInterface::FLthighCallback(const unitree_legged_msgs::MotorState &msg) +{ + motion_data data; + data.mode = msg.mode; + data.q = msg.q; + data.dq = msg.dq; + data.tauEst = msg.tauEst; + state.motorState[4] = data; +} + +void RobotInterface::FLcalfCallback(const unitree_legged_msgs::MotorState &msg) +{ + motion_data data; + data.mode = msg.mode; + data.q = msg.q; + data.dq = msg.dq; + data.tauEst = msg.tauEst; + state.motorState[5] = data; +} +void RobotInterface::RRhipCallback(const unitree_legged_msgs::MotorState &msg) +{ + motion_data data; + data.mode = msg.mode; + data.q = msg.q; + data.dq = msg.dq; + data.tauEst = msg.tauEst; + state.motorState[6] = data; +} + +void RobotInterface::RRthighCallback(const unitree_legged_msgs::MotorState &msg) +{ + motion_data data; + data.mode = msg.mode; + data.q = msg.q; + data.dq = msg.dq; + data.tauEst = msg.tauEst; + state.motorState[7] = data; +} + +void RobotInterface::RRcalfCallback(const unitree_legged_msgs::MotorState &msg) +{ + motion_data data; + data.mode = msg.mode; + data.q = msg.q; + data.dq = msg.dq; + data.tauEst = msg.tauEst; + state.motorState[8] = data; +} + +void RobotInterface::RLhipCallback(const unitree_legged_msgs::MotorState &msg) +{ + motion_data data; + data.mode = msg.mode; + data.q = msg.q; + data.dq = msg.dq; + data.tauEst = msg.tauEst; + state.motorState[9] = data; +} + +void RobotInterface::RLthighCallback(const unitree_legged_msgs::MotorState &msg) +{ + motion_data data; + data.mode = msg.mode; + data.q = msg.q; + data.dq = msg.dq; + data.tauEst = msg.tauEst; + state.motorState[10] = data; +} + +void RobotInterface::RLcalfCallback(const unitree_legged_msgs::MotorState &msg) +{ + motion_data data; + data.mode = msg.mode; + data.q = msg.q; + data.dq = msg.dq; + data.tauEst = msg.tauEst; + state.motorState[11] = data; +} + +namespace py = pybind11; + +// TODO: Expose all of comm.h and the RobotInterface Class. + +PYBIND11_MODULE(robot_interface, m) +{ + m.doc() = R"pbdoc( + A1 Robot Interface Python Bindings + ----------------------- + .. currentmodule:: a1_robot_interface + .. autosummary:: + :toctree: _generate + )pbdoc"; + + py::class_(m, "imu_data") + + .def_readwrite("quaternion", &IMU_data::quaternion) + .def_readwrite("gyroscope", &IMU_data::gyroscope) + .def_readwrite("accelerometer", &IMU_data::accelerometer) + .def_readwrite("rpy", &IMU_data::rpy) + .def_readwrite("temperature", &IMU_data::temperature); + + py::class_(m, "motorState") + .def(py::init<>()) + .def_readwrite("mode", &motion_data::mode) + .def_readwrite("q", &motion_data::q) + .def_readwrite("dq", &motion_data::dq) + .def_readwrite("ddq", &motion_data::ddq) + .def_readwrite("tauEst", &motion_data::tauEst) + .def_readwrite("q_raw", &motion_data::q_raw) + .def_readwrite("dq_raw", &motion_data::dq_raw) + .def_readwrite("ddq_raw", &motion_data::ddq_raw) + .def_readwrite("temperature", &motion_data::temperature) + .def_readwrite("reserve", &motion_data::reserve); + + py::class_(m, "MyState") + .def(py::init<>()) + .def_readwrite("levelFlag", &MyState::levelFlag) + .def_readwrite("commVersion", &MyState::commVersion) + .def_readwrite("robotID", &MyState::robotID) + .def_readwrite("SN", &MyState::SN) + .def_readwrite("bandWidth", &MyState::bandWidth) + .def_readwrite("imu", &MyState::imu) + .def_readwrite("motorState", &MyState::motorState) + .def_readwrite("footForce", &MyState::footForce) + .def_readwrite("footForceEst", &MyState::footForceEst) + .def_readwrite("tick", &MyState::tick) + .def_readwrite("wirelessRemote", &MyState::wirelessRemote) + .def_readwrite("reserve", &MyState::reserve) + .def_readwrite("crc", &MyState::crc); + + py::class_(m, "RobotInterface") + .def(py::init<>()) + .def("receive_observation", &RobotInterface::ReceiveObservation) + .def("send_command", &RobotInterface::SendCommand) + .def("InitSend", &RobotInterface::InitSend) + .def("InitRecv", &RobotInterface::InitRecv); + +#ifdef VERSION_INFO + m.attr("__version__") = VERSION_INFO; +#else + m.attr("__version__") = "dev"; +#endif + + m.attr("TEST") = py::int_(int(42)); +} diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/utils/helpers.py b/rl-control/rl-robotics/legged_gym/legged_gym/utils/helpers.py index b2dbe21..cad4dca 100644 --- a/rl-control/rl-robotics/legged_gym/legged_gym/utils/helpers.py +++ b/rl-control/rl-robotics/legged_gym/legged_gym/utils/helpers.py @@ -94,7 +94,7 @@ def get_load_path(root, load_run='-1', checkpoint=-1): try: model = models[-1] except: - raise ValueError("No model found in {}".format(load_run)) + raise ValueError("No model found in current load_run!") else: model = str(checkpoint) @@ -211,5 +211,10 @@ def register(task_name, task_registry): from legged_gym.envs.lite3.lite3_config import Lite3RoughCfg, Lite3RoughCfgPPO task_registry.register("lite3", LeggedRobot, Lite3RoughCfg(), Lite3RoughCfgPPO()) + elif task_name == 'wl_real': + # 先注册 + from legged_gym.envs.gazebo.a1_config import A1RoughCfg, A1RoughCfgPPO + from legged_gym.envs.gazebo.a1_legged_robot import A1LeggedRobot + task_registry.register("wl_real", A1LeggedRobot, A1RoughCfg(), A1RoughCfgPPO()) else: raise Exception("no such task_name") -- Gitee From 72a1dd77538ef1fe900076cd523d0ec961659aa9 Mon Sep 17 00:00:00 2001 From: zhang Date: Fri, 11 Aug 2023 18:02:49 +0800 Subject: [PATCH 2/3] change go1 to a1 --- .../envs/gazebo/a1_real/unitree_legged_sdk/python_interface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/python_interface.cpp b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/python_interface.cpp index 0234f07..6ad82bf 100644 --- a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/python_interface.cpp +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/a1_real/unitree_legged_sdk/python_interface.cpp @@ -102,7 +102,7 @@ public: std::unique_ptr _nm; ros::Subscriber _servo_sub[12], _imu_sub, _tick_sub; ros::Publisher _servo_pub[12]; - std::string _robot_name{"go1"}; + std::string _robot_name{"a1"}; MyState state = {0}; unitree_legged_msgs::MotorCmd unitreeMsg[12]; }; -- Gitee From 59d70e03f4fec6f3fc3889a4b00b53be746a799d Mon Sep 17 00:00:00 2001 From: zhang Date: Fri, 11 Aug 2023 18:11:48 +0800 Subject: [PATCH 3/3] change --- .../legged_gym/envs/gazebo/README.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/README.md b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/README.md index 55ba083..77209b7 100644 --- a/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/README.md +++ b/rl-control/rl-robotics/legged_gym/legged_gym/envs/gazebo/README.md @@ -8,7 +8,30 @@ cmake -DPYTHON_EXECUTABLE=/usr/bin/python3 .. make cp *.so ../../ ``` +### Start A1 Gazebo + +## Step 1: Set up the ROS environment +To set up the ROS development environment, execute the following command. +change the file to model-control and start. +``` +source ${your_workspace}/devel/setup.bash +``` +**Note that this command must be executed for each new terminal to set up the environment.** + +## Step 2: Start the Gazebo simulator and load a robot +Run the Gazebo simulator +``` +roslaunch qr_gazebo gazebo_startup.launch wname:=earth +``` +The `wname` (optional) parameter specifies the world to be loaded in Gazebo. The default value is `earth`. + +In a new terminal, spawn a robot model and manage controllers in the simulation environment. +Below is for loading a Unitree A1 robot. +``` +roslaunch qr_gazebo model_spawn.launch rname:=a1 use_xacro:=true use_camera:=false +``` ### How to use the gazebo lib +need back to the RL file ``` python3 legged_gym/legged_gym/scripts/play.py --task wl_real --rl_device cuda:0 --sim_device cuda:0 --load_run pre-trained/ --checkpoint A1.pt ``` \ No newline at end of file -- Gitee